{"version":3,"sources":["../node_modules/commander/lib/error.js","../node_modules/commander/lib/argument.js","../node_modules/commander/lib/help.js","../node_modules/commander/lib/option.js","../node_modules/commander/lib/suggestSimilar.js","../node_modules/commander/lib/command.js","../node_modules/commander/index.js","../node_modules/picocolors/picocolors.js","../node_modules/@remixhq/core/dist/chunk-GC2MOT3U.js","../node_modules/@remixhq/core/dist/chunk-7XJGOKEO.js","../node_modules/@remixhq/core/dist/errors.js","../src/errors/cliError.ts","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/typeAliases.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../node_modules/zod/v3/external.js","../node_modules/zod/index.js","../node_modules/isexe/windows.js","../node_modules/isexe/mode.js","../node_modules/isexe/index.js","../node_modules/which/which.js","../node_modules/path-key/index.js","../node_modules/cross-spawn/lib/util/resolveCommand.js","../node_modules/cross-spawn/lib/util/escape.js","../node_modules/shebang-regex/index.js","../node_modules/shebang-command/index.js","../node_modules/cross-spawn/lib/util/readShebang.js","../node_modules/cross-spawn/lib/parse.js","../node_modules/cross-spawn/lib/enoent.js","../node_modules/cross-spawn/index.js","../node_modules/@remixhq/core/dist/chunk-GVFTISVO.js","../node_modules/@remixhq/core/dist/auth.js","../node_modules/universalify/index.js","../node_modules/graceful-fs/polyfills.js","../node_modules/graceful-fs/legacy-streams.js","../node_modules/graceful-fs/clone.js","../node_modules/graceful-fs/graceful-fs.js","../node_modules/fs-extra/lib/fs/index.js","../node_modules/fs-extra/lib/mkdirs/utils.js","../node_modules/fs-extra/lib/mkdirs/make-dir.js","../node_modules/fs-extra/lib/mkdirs/index.js","../node_modules/fs-extra/lib/path-exists/index.js","../node_modules/fs-extra/lib/util/utimes.js","../node_modules/fs-extra/lib/util/stat.js","../node_modules/fs-extra/lib/util/async.js","../node_modules/fs-extra/lib/copy/copy.js","../node_modules/fs-extra/lib/copy/copy-sync.js","../node_modules/fs-extra/lib/copy/index.js","../node_modules/fs-extra/lib/remove/index.js","../node_modules/fs-extra/lib/empty/index.js","../node_modules/fs-extra/lib/ensure/file.js","../node_modules/fs-extra/lib/ensure/link.js","../node_modules/fs-extra/lib/ensure/symlink-paths.js","../node_modules/fs-extra/lib/ensure/symlink-type.js","../node_modules/fs-extra/lib/ensure/symlink.js","../node_modules/fs-extra/lib/ensure/index.js","../node_modules/jsonfile/utils.js","../node_modules/jsonfile/index.js","../node_modules/fs-extra/lib/json/jsonfile.js","../node_modules/fs-extra/lib/output-file/index.js","../node_modules/fs-extra/lib/json/output-json.js","../node_modules/fs-extra/lib/json/output-json-sync.js","../node_modules/fs-extra/lib/json/index.js","../node_modules/fs-extra/lib/move/move.js","../node_modules/fs-extra/lib/move/move-sync.js","../node_modules/fs-extra/lib/move/index.js","../node_modules/fs-extra/lib/index.js","../src/utils/fs.ts","../src/services/sessionStore.ts","../node_modules/tslib/tslib.es6.mjs","../node_modules/@amplitude/analytics-core/src/types/event/event.ts","../node_modules/@amplitude/analytics-core/src/types/constants.ts","../node_modules/@amplitude/analytics-core/src/utils/valid-properties.ts","../node_modules/@amplitude/analytics-core/src/identify.ts","../node_modules/@amplitude/analytics-core/src/types/messages.ts","../node_modules/@amplitude/analytics-core/src/types/status.ts","../node_modules/@amplitude/analytics-core/src/utils/result-builder.ts","../node_modules/@amplitude/analytics-core/src/global-scope.ts","../node_modules/@amplitude/analytics-core/src/utils/uuid.ts","../node_modules/@amplitude/analytics-core/src/timeline.ts","../node_modules/@amplitude/analytics-core/src/utils/event-builder.ts","../node_modules/@amplitude/analytics-core/src/utils/return-wrapper.ts","../node_modules/@amplitude/analytics-core/src/core-client.ts","../node_modules/@amplitude/analytics-core/src/revenue.ts","../node_modules/@amplitude/analytics-core/src/utils/chunk.ts","../node_modules/@amplitude/analytics-core/src/types/loglevel.ts","../node_modules/@amplitude/analytics-core/src/logger.ts","../node_modules/@amplitude/analytics-core/src/config.ts","../node_modules/@amplitude/analytics-core/src/utils/status-code.ts","../node_modules/@amplitude/analytics-core/src/utils/debug.ts","../node_modules/@amplitude/analytics-core/src/plugins/destination.ts","../node_modules/@amplitude/analytics-core/src/transports/base.ts","../node_modules/@amplitude/analytics-core/src/types/server-zone.ts","../node_modules/@amplitude/analytics-core/src/types/offline.ts","../node_modules/@amplitude/analytics-core/src/index.ts","../node_modules/@amplitude/analytics-node/src/version.ts","../node_modules/@amplitude/analytics-node/src/plugins/context.ts","../node_modules/@amplitude/analytics-node/src/transports/http.ts","../node_modules/@amplitude/analytics-node/src/config.ts","../node_modules/@amplitude/analytics-node/src/node-client.ts","../node_modules/@amplitude/analytics-node/src/types.ts","../node_modules/@amplitude/analytics-node/src/index.ts","../node_modules/kleur/index.js","../node_modules/prompts/dist/util/action.js","../node_modules/prompts/dist/util/strip.js","../node_modules/sisteransi/src/index.js","../node_modules/prompts/dist/util/clear.js","../node_modules/prompts/dist/util/figures.js","../node_modules/prompts/dist/util/style.js","../node_modules/prompts/dist/util/lines.js","../node_modules/prompts/dist/util/wrap.js","../node_modules/prompts/dist/util/entriesToDisplay.js","../node_modules/prompts/dist/util/index.js","../node_modules/prompts/dist/elements/prompt.js","../node_modules/prompts/dist/elements/text.js","../node_modules/prompts/dist/elements/select.js","../node_modules/prompts/dist/elements/toggle.js","../node_modules/prompts/dist/dateparts/datepart.js","../node_modules/prompts/dist/dateparts/meridiem.js","../node_modules/prompts/dist/dateparts/day.js","../node_modules/prompts/dist/dateparts/hours.js","../node_modules/prompts/dist/dateparts/milliseconds.js","../node_modules/prompts/dist/dateparts/minutes.js","../node_modules/prompts/dist/dateparts/month.js","../node_modules/prompts/dist/dateparts/seconds.js","../node_modules/prompts/dist/dateparts/year.js","../node_modules/prompts/dist/dateparts/index.js","../node_modules/prompts/dist/elements/date.js","../node_modules/prompts/dist/elements/number.js","../node_modules/prompts/dist/elements/multiselect.js","../node_modules/prompts/dist/elements/autocomplete.js","../node_modules/prompts/dist/elements/autocompleteMultiselect.js","../node_modules/prompts/dist/elements/confirm.js","../node_modules/prompts/dist/elements/index.js","../node_modules/prompts/dist/prompts.js","../node_modules/prompts/dist/index.js","../node_modules/prompts/lib/util/action.js","../node_modules/prompts/lib/util/strip.js","../node_modules/prompts/lib/util/clear.js","../node_modules/prompts/lib/util/figures.js","../node_modules/prompts/lib/util/style.js","../node_modules/prompts/lib/util/lines.js","../node_modules/prompts/lib/util/wrap.js","../node_modules/prompts/lib/util/entriesToDisplay.js","../node_modules/prompts/lib/util/index.js","../node_modules/prompts/lib/elements/prompt.js","../node_modules/prompts/lib/elements/text.js","../node_modules/prompts/lib/elements/select.js","../node_modules/prompts/lib/elements/toggle.js","../node_modules/prompts/lib/dateparts/datepart.js","../node_modules/prompts/lib/dateparts/meridiem.js","../node_modules/prompts/lib/dateparts/day.js","../node_modules/prompts/lib/dateparts/hours.js","../node_modules/prompts/lib/dateparts/milliseconds.js","../node_modules/prompts/lib/dateparts/minutes.js","../node_modules/prompts/lib/dateparts/month.js","../node_modules/prompts/lib/dateparts/seconds.js","../node_modules/prompts/lib/dateparts/year.js","../node_modules/prompts/lib/dateparts/index.js","../node_modules/prompts/lib/elements/date.js","../node_modules/prompts/lib/elements/number.js","../node_modules/prompts/lib/elements/multiselect.js","../node_modules/prompts/lib/elements/autocomplete.js","../node_modules/prompts/lib/elements/autocompleteMultiselect.js","../node_modules/prompts/lib/elements/confirm.js","../node_modules/prompts/lib/elements/index.js","../node_modules/prompts/lib/prompts.js","../node_modules/prompts/lib/index.js","../node_modules/prompts/index.js","../node_modules/readdir-glob/node_modules/minimatch/lib/path.js","../node_modules/balanced-match/index.js","../node_modules/brace-expansion/index.js","../node_modules/readdir-glob/node_modules/minimatch/minimatch.js","../node_modules/readdir-glob/index.js","../node_modules/async/dist/async.mjs","../node_modules/is-stream/index.js","../node_modules/process-nextick-args/index.js","../node_modules/isarray/index.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/stream.js","../node_modules/lazystream/node_modules/safe-buffer/index.js","../node_modules/core-util-is/lib/util.js","../node_modules/inherits/inherits_browser.js","../node_modules/inherits/inherits.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/BufferList.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/util-deprecate/node.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/lazystream/node_modules/string_decoder/lib/string_decoder.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/lazystream/node_modules/readable-stream/readable.js","../node_modules/lazystream/node_modules/readable-stream/passthrough.js","../node_modules/lazystream/lib/lazystream.js","../node_modules/normalize-path/index.js","../node_modules/lodash/identity.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/constant.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/eq.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/defaults.js","../node_modules/readable-stream/lib/ours/primordials.js","../node_modules/readable-stream/lib/ours/util/inspect.js","../node_modules/readable-stream/lib/ours/errors.js","../node_modules/event-target-shim/src/event.mjs","../node_modules/event-target-shim/src/event-target.mjs","../node_modules/abort-controller/src/abort-signal.ts","../node_modules/abort-controller/src/abort-controller.ts","../node_modules/readable-stream/lib/ours/util.js","../node_modules/readable-stream/lib/internal/validators.js","../node_modules/process/index.js","../node_modules/readable-stream/lib/internal/streams/utils.js","../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/readable-stream/lib/internal/streams/legacy.js","../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js","../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/readable-stream/lib/internal/streams/from.js","../node_modules/readable-stream/lib/internal/streams/readable.js","../node_modules/readable-stream/lib/internal/streams/writable.js","../node_modules/readable-stream/lib/internal/streams/duplexify.js","../node_modules/readable-stream/lib/internal/streams/duplex.js","../node_modules/readable-stream/lib/internal/streams/transform.js","../node_modules/readable-stream/lib/internal/streams/passthrough.js","../node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/readable-stream/lib/internal/streams/compose.js","../node_modules/readable-stream/lib/internal/streams/operators.js","../node_modules/readable-stream/lib/stream/promises.js","../node_modules/readable-stream/lib/stream.js","../node_modules/readable-stream/lib/ours/index.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/flatten.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_baseDifference.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/difference.js","../node_modules/lodash/_Set.js","../node_modules/lodash/noop.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/union.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/isPlainObject.js","../node_modules/minimatch/src/assert-valid-pattern.ts","../node_modules/minimatch/src/brace-expressions.ts","../node_modules/minimatch/src/unescape.ts","../node_modules/minimatch/src/ast.ts","../node_modules/minimatch/src/escape.ts","../node_modules/minimatch/src/index.ts","../node_modules/lru-cache/src/index.ts","../node_modules/minipass/src/index.ts","../node_modules/path-scurry/src/index.ts","../node_modules/glob/src/pattern.ts","../node_modules/glob/src/ignore.ts","../node_modules/glob/src/processor.ts","../node_modules/glob/src/walker.ts","../node_modules/glob/src/glob.ts","../node_modules/glob/src/has-magic.ts","../node_modules/glob/src/index.ts","../node_modules/archiver-utils/file.js","../node_modules/archiver-utils/index.js","../node_modules/archiver/lib/error.js","../node_modules/archiver/lib/core.js","../node_modules/compress-commons/lib/archivers/archive-entry.js","../node_modules/compress-commons/lib/archivers/zip/util.js","../node_modules/compress-commons/lib/archivers/zip/general-purpose-bit.js","../node_modules/compress-commons/lib/archivers/zip/unix-stat.js","../node_modules/compress-commons/lib/archivers/zip/constants.js","../node_modules/compress-commons/lib/archivers/zip/zip-archive-entry.js","../node_modules/compress-commons/lib/util/index.js","../node_modules/compress-commons/lib/archivers/archive-output-stream.js","../node_modules/crc-32/crc32.js","../node_modules/crc32-stream/lib/crc32-stream.js","../node_modules/crc32-stream/lib/deflate-crc32-stream.js","../node_modules/crc32-stream/lib/index.js","../node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js","../node_modules/compress-commons/lib/compress-commons.js","../node_modules/zip-stream/index.js","../node_modules/archiver/lib/plugins/zip.js","../node_modules/events-universal/default.js","../node_modules/fast-fifo/fixed-size.js","../node_modules/fast-fifo/index.js","../node_modules/b4a/index.js","../node_modules/text-decoder/lib/pass-through-decoder.js","../node_modules/text-decoder/lib/utf8-decoder.js","../node_modules/text-decoder/index.js","../node_modules/streamx/index.js","../node_modules/tar-stream/headers.js","../node_modules/tar-stream/extract.js","../node_modules/tar-stream/constants.js","../node_modules/tar-stream/pack.js","../node_modules/tar-stream/index.js","../node_modules/archiver/lib/plugins/tar.js","../node_modules/buffer-crc32/dist/index.cjs","../node_modules/archiver/lib/plugins/json.js","../node_modules/archiver/index.js","../node_modules/fast-glob/out/utils/array.js","../node_modules/fast-glob/out/utils/errno.js","../node_modules/fast-glob/out/utils/fs.js","../node_modules/fast-glob/out/utils/path.js","../node_modules/is-extglob/index.js","../node_modules/is-glob/index.js","../node_modules/glob-parent/index.js","../node_modules/braces/lib/utils.js","../node_modules/braces/lib/stringify.js","../node_modules/is-number/index.js","../node_modules/to-regex-range/index.js","../node_modules/fill-range/index.js","../node_modules/braces/lib/compile.js","../node_modules/braces/lib/expand.js","../node_modules/braces/lib/constants.js","../node_modules/braces/lib/parse.js","../node_modules/braces/index.js","../node_modules/picomatch/lib/constants.js","../node_modules/picomatch/lib/utils.js","../node_modules/picomatch/lib/scan.js","../node_modules/picomatch/lib/parse.js","../node_modules/picomatch/lib/picomatch.js","../node_modules/picomatch/index.js","../node_modules/micromatch/index.js","../node_modules/fast-glob/out/utils/pattern.js","../node_modules/merge2/index.js","../node_modules/fast-glob/out/utils/stream.js","../node_modules/fast-glob/out/utils/string.js","../node_modules/fast-glob/out/utils/index.js","../node_modules/fast-glob/out/managers/tasks.js","../node_modules/@nodelib/fs.stat/out/providers/async.js","../node_modules/@nodelib/fs.stat/out/providers/sync.js","../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../node_modules/@nodelib/fs.stat/out/settings.js","../node_modules/@nodelib/fs.stat/out/index.js","../node_modules/queue-microtask/index.js","../node_modules/run-parallel/index.js","../node_modules/@nodelib/fs.scandir/out/constants.js","../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../node_modules/@nodelib/fs.scandir/out/utils/index.js","../node_modules/@nodelib/fs.scandir/out/providers/common.js","../node_modules/@nodelib/fs.scandir/out/providers/async.js","../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../node_modules/@nodelib/fs.scandir/out/settings.js","../node_modules/@nodelib/fs.scandir/out/index.js","../node_modules/reusify/reusify.js","../node_modules/fastq/queue.js","../node_modules/@nodelib/fs.walk/out/readers/common.js","../node_modules/@nodelib/fs.walk/out/readers/reader.js","../node_modules/@nodelib/fs.walk/out/readers/async.js","../node_modules/@nodelib/fs.walk/out/providers/async.js","../node_modules/@nodelib/fs.walk/out/providers/stream.js","../node_modules/@nodelib/fs.walk/out/readers/sync.js","../node_modules/@nodelib/fs.walk/out/providers/sync.js","../node_modules/@nodelib/fs.walk/out/settings.js","../node_modules/@nodelib/fs.walk/out/index.js","../node_modules/fast-glob/out/readers/reader.js","../node_modules/fast-glob/out/readers/stream.js","../node_modules/fast-glob/out/readers/async.js","../node_modules/fast-glob/out/providers/matchers/matcher.js","../node_modules/fast-glob/out/providers/matchers/partial.js","../node_modules/fast-glob/out/providers/filters/deep.js","../node_modules/fast-glob/out/providers/filters/entry.js","../node_modules/fast-glob/out/providers/filters/error.js","../node_modules/fast-glob/out/providers/transformers/entry.js","../node_modules/fast-glob/out/providers/provider.js","../node_modules/fast-glob/out/providers/async.js","../node_modules/fast-glob/out/providers/stream.js","../node_modules/fast-glob/out/readers/sync.js","../node_modules/fast-glob/out/providers/sync.js","../node_modules/fast-glob/out/settings.js","../node_modules/fast-glob/out/index.js","../node_modules/better-sqlite3/lib/util.js","../node_modules/better-sqlite3/lib/sqlite-error.js","../node_modules/file-uri-to-path/index.js","../node_modules/bindings/bindings.js","../node_modules/better-sqlite3/lib/methods/wrappers.js","../node_modules/better-sqlite3/lib/methods/transaction.js","../node_modules/better-sqlite3/lib/methods/pragma.js","../node_modules/better-sqlite3/lib/methods/backup.js","../node_modules/better-sqlite3/lib/methods/serialize.js","../node_modules/better-sqlite3/lib/methods/function.js","../node_modules/better-sqlite3/lib/methods/aggregate.js","../node_modules/better-sqlite3/lib/methods/table.js","../node_modules/better-sqlite3/lib/methods/inspect.js","../node_modules/better-sqlite3/lib/database.js","../node_modules/better-sqlite3/lib/index.js","../src/cli.ts","../node_modules/commander/esm.mjs","../src/commands/login.ts","../node_modules/@remixhq/core/dist/chunk-62JBEMJH.js","../node_modules/@remixhq/core/dist/config.js","../src/services/oauthCallbackServer.ts","../node_modules/is-plain-obj/index.js","../node_modules/execa/lib/arguments/file-url.js","../node_modules/execa/lib/methods/parameters.js","../node_modules/execa/lib/methods/template.js","../node_modules/execa/lib/utils/uint-array.js","../node_modules/execa/lib/methods/main-sync.js","../node_modules/execa/lib/arguments/specific.js","../node_modules/execa/lib/utils/standard-stream.js","../node_modules/execa/lib/verbose/values.js","../node_modules/execa/lib/verbose/log.js","../node_modules/execa/lib/arguments/escape.js","../node_modules/is-unicode-supported/index.js","../node_modules/figures/index.js","../node_modules/yoctocolors/base.js","../node_modules/execa/lib/verbose/default.js","../node_modules/execa/lib/verbose/custom.js","../node_modules/execa/lib/verbose/start.js","../node_modules/execa/lib/verbose/info.js","../node_modules/execa/lib/return/duration.js","../node_modules/execa/lib/arguments/command.js","../node_modules/execa/lib/arguments/options.js","../node_modules/npm-run-path/index.js","../node_modules/npm-run-path/node_modules/path-key/index.js","../node_modules/unicorn-magic/node.js","../node_modules/execa/lib/terminate/kill.js","../node_modules/execa/lib/return/final-error.js","../node_modules/execa/lib/terminate/signal.js","../node_modules/human-signals/build/src/main.js","../node_modules/human-signals/build/src/realtime.js","../node_modules/human-signals/build/src/signals.js","../node_modules/human-signals/build/src/core.js","../node_modules/execa/lib/utils/abort-signal.js","../node_modules/execa/lib/terminate/cancel.js","../node_modules/execa/lib/ipc/graceful.js","../node_modules/execa/lib/ipc/send.js","../node_modules/execa/lib/ipc/validation.js","../node_modules/execa/lib/utils/deferred.js","../node_modules/execa/lib/arguments/fd-options.js","../node_modules/execa/lib/ipc/strict.js","../node_modules/execa/lib/utils/max-listeners.js","../node_modules/execa/lib/ipc/forward.js","../node_modules/execa/lib/ipc/incoming.js","../node_modules/execa/lib/ipc/reference.js","../node_modules/execa/lib/ipc/outgoing.js","../node_modules/execa/lib/terminate/graceful.js","../node_modules/execa/lib/terminate/timeout.js","../node_modules/execa/lib/methods/node.js","../node_modules/execa/lib/ipc/ipc-input.js","../node_modules/execa/lib/arguments/encoding-option.js","../node_modules/execa/lib/arguments/cwd.js","../node_modules/execa/lib/arguments/shell.js","../node_modules/execa/lib/return/message.js","../node_modules/strip-final-newline/index.js","../node_modules/get-stream/source/index.js","../node_modules/get-stream/node_modules/is-stream/index.js","../node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js","../node_modules/get-stream/source/stream.js","../node_modules/get-stream/source/contents.js","../node_modules/get-stream/source/utils.js","../node_modules/get-stream/source/array.js","../node_modules/get-stream/source/array-buffer.js","../node_modules/get-stream/source/string.js","../node_modules/execa/lib/io/max-buffer.js","../node_modules/execa/lib/return/result.js","../node_modules/parse-ms/index.js","../node_modules/pretty-ms/index.js","../node_modules/execa/lib/verbose/error.js","../node_modules/execa/lib/verbose/complete.js","../node_modules/execa/lib/return/reject.js","../node_modules/execa/lib/stdio/handle-sync.js","../node_modules/execa/node_modules/is-stream/index.js","../node_modules/execa/lib/stdio/type.js","../node_modules/execa/lib/transform/object-mode.js","../node_modules/execa/lib/transform/normalize.js","../node_modules/execa/lib/stdio/direction.js","../node_modules/execa/lib/ipc/array.js","../node_modules/execa/lib/stdio/stdio-option.js","../node_modules/execa/lib/stdio/native.js","../node_modules/execa/lib/stdio/input-option.js","../node_modules/execa/lib/stdio/duplicate.js","../node_modules/execa/lib/stdio/handle.js","../node_modules/execa/lib/io/strip-newline.js","../node_modules/execa/lib/transform/generator.js","../node_modules/execa/lib/transform/split.js","../node_modules/execa/lib/transform/validate.js","../node_modules/execa/lib/transform/encoding-transform.js","../node_modules/execa/lib/transform/run-async.js","../node_modules/execa/lib/transform/run-sync.js","../node_modules/execa/lib/io/input-sync.js","../node_modules/execa/lib/io/output-sync.js","../node_modules/execa/lib/verbose/output.js","../node_modules/execa/lib/resolve/all-sync.js","../node_modules/execa/lib/resolve/exit-async.js","../node_modules/execa/lib/resolve/exit-sync.js","../node_modules/execa/lib/methods/main-async.js","../node_modules/execa/lib/ipc/methods.js","../node_modules/execa/lib/ipc/get-one.js","../node_modules/execa/lib/ipc/get-each.js","../node_modules/execa/lib/return/early-error.js","../node_modules/execa/lib/stdio/handle-async.js","../node_modules/@sindresorhus/merge-streams/index.js","../node_modules/execa/lib/io/pipeline.js","../node_modules/execa/lib/io/output-async.js","../node_modules/execa/lib/terminate/cleanup.js","../node_modules/signal-exit/src/signals.ts","../node_modules/signal-exit/src/index.ts","../node_modules/execa/lib/pipe/pipe-arguments.js","../node_modules/execa/lib/pipe/throw.js","../node_modules/execa/lib/pipe/sequence.js","../node_modules/execa/lib/pipe/streaming.js","../node_modules/execa/lib/pipe/abort.js","../node_modules/execa/lib/pipe/setup.js","../node_modules/execa/lib/io/contents.js","../node_modules/execa/lib/io/iterate.js","../node_modules/execa/lib/resolve/wait-stream.js","../node_modules/execa/lib/resolve/stdio.js","../node_modules/execa/lib/resolve/all-async.js","../node_modules/execa/lib/resolve/wait-subprocess.js","../node_modules/execa/lib/verbose/ipc.js","../node_modules/execa/lib/ipc/buffer-messages.js","../node_modules/execa/lib/convert/concurrent.js","../node_modules/execa/lib/convert/readable.js","../node_modules/execa/lib/convert/shared.js","../node_modules/execa/lib/convert/writable.js","../node_modules/execa/lib/convert/duplex.js","../node_modules/execa/lib/convert/iterable.js","../node_modules/execa/lib/convert/add.js","../node_modules/execa/lib/methods/promise.js","../node_modules/execa/lib/methods/bind.js","../node_modules/execa/lib/methods/create.js","../node_modules/execa/lib/methods/command.js","../node_modules/execa/lib/methods/script.js","../node_modules/execa/index.js","../src/utils/browser.ts","../src/clients/auth.ts","../src/services/telemetry.ts","../node_modules/@remixhq/core/dist/chunk-COO3TIHW.js","../node_modules/@remixhq/core/dist/index.js","../src/clients/api.ts","../src/utils/tty.ts","../src/services/authContinuation.ts","../src/commands/logout.ts","../src/services/identity.ts","../node_modules/@remixhq/core/dist/chunk-FA6PTZQI.js","../node_modules/@remixhq/core/dist/chunk-GNW6FA4J.js","../node_modules/@remixhq/core/dist/binding.js","../node_modules/@remixhq/core/dist/repo.js","../src/services/serviceHelpers.ts","../src/services/ensureAuth.ts","../src/commands/whoami.ts","../src/services/mobileShellInit.ts","../src/commands/shellInit.ts","../src/utils/packageJson.ts","../src/utils/projectDetect.ts","../src/utils/templates.ts","../src/utils/packageManager.ts","../src/utils/copyProject.ts","../src/utils/stripProject.ts","../src/utils/appJsonPatch.ts","../src/utils/reanimated.ts","../src/services/bundles.ts","../src/utils/zip.ts","../src/utils/appDefaults.ts","../src/services/apiKeyStore.ts","../src/services/collab.ts","../node_modules/@remixhq/core/dist/collab.js","../src/services/asyncJobsClient.ts","../src/commands/mobile.ts","../src/services/setup.ts","../src/utils/multiSelectWithContinue.ts","../src/services/setupClaude.ts","../src/services/claudeBinary.ts","../src/services/nodeRuntime.ts","../src/services/setupMetadata.ts","../src/services/setupMetadataClient.ts","../src/services/setupMetadataResolver.ts","../src/services/setupPrereqs.ts","../src/services/setupCursor.ts","../src/services/setupCursorPlugin.ts","../src/services/setupWorkingDir.ts","../src/commands/setup.ts","../src/commands/collab.ts","../src/services/env.ts","../src/services/runtime.ts","../src/services/sandboxCommands.ts","../src/services/triggers.ts","../src/services/historyImport/autoSpawn.ts","../src/services/memory.ts","../src/services/chats.ts","../src/services/directory.ts","../src/commands/directory.ts","../src/services/access.ts","../src/commands/access.ts","../src/services/agent.ts","../src/commands/agent.ts","../src/services/ops.ts","../src/commands/ops.ts","../src/commands/claude.ts","../src/commands/cursor.ts","../src/commands/codex.ts","../src/services/setupCodexPlugin.ts","../src/commands/history.ts","../src/services/historyImport/historyImportRunner.ts","../src/services/historyImport/dedupKey.ts","../src/services/historyImport/claudeWalker.ts","../node_modules/@remixhq/core/dist/history.js","../src/services/historyImport/cursorWalker.ts","../src/services/historyImport/cursorSqliteReader.ts","../src/services/historyImport/historyImportLock.ts","../src/services/historyImport/repoFingerprintCache.ts","../src/services/preview.ts","../src/commands/preview.ts","../src/services/shareLink.ts","../src/commands/shareLink.ts","../src/commands/github.ts"],"sourcesContent":["/**\n * CommanderError class\n */\nclass CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.endsWith('...')) {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Only allow argument value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Make argument required.\n   *\n   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n    const helpCommand = cmd._getHelpCommand();\n    if (helpCommand && !helpCommand._hidden) {\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: because overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Compare options for sort.\n   *\n   * @param {Option} a\n   * @param {Option} b\n   * @returns {number}\n   */\n  compareOptions(a, b) {\n    const getSortKey = (option) => {\n      // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n      return option.short\n        ? option.short.replace(/^-/, '')\n        : option.long.replace(/^--/, '');\n    };\n    return getSortKey(a).localeCompare(getSortKey(b));\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Built-in help option.\n    const helpOption = cmd._getHelpOption();\n    if (helpOption && !helpOption.hidden) {\n      // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n      const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n      const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n      if (!removeShort && !removeLong) {\n        visibleOptions.push(helpOption); // no changes needed\n      } else if (helpOption.long && !removeLong) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\n      }\n    }\n    if (this.sortOptions) {\n      visibleOptions.sort(this.compareOptions);\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the visible global options. (Not including help.)\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleGlobalOptions(cmd) {\n    if (!this.showGlobalOptions) return [];\n\n    const globalOptions = [];\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\n      globalOptions.push(...visibleOptions);\n    }\n    if (this.sortOptions) {\n      globalOptions.sort(this.compareOptions);\n    }\n    return globalOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd.registeredArguments.forEach((argument) => {\n        argument.description =\n          argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd.registeredArguments.find((argument) => argument.description)) {\n      return cmd.registeredArguments;\n    }\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd.registeredArguments\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '')\n    );\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest global option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestGlobalOptionTermLength(cmd, helper) {\n    return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let ancestorCmdNames = '';\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n    }\n    return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the subcommand summary to show in the list of subcommands.\n   * (Fallback to description for backwards compatibility.)\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.summary() || cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n\n    if (option.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (option.defaultValue !== undefined) {\n      // default for boolean and negated more for programmer than end user,\n      // but show true/false for boolean option as may be for hand-rolled env or config processing.\n      const showDefault =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\n      }\n    }\n    // preset for boolean and negated are more for programmer than end user\n    if (option.presetArg !== undefined && option.optional) {\n      extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n\n    return option.description;\n  }\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripColor(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestGlobalOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper),\n    );\n  }\n\n  /**\n   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n  // eslint-disable-next-line no-control-regex\n  const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n  return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.presetArg = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n    this.conflictsWith = [];\n    this.implied = undefined;\n    this.helpGroupHeading = undefined; // soft initialised when option added to command\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n   * The custom processing (parseArg) is called.\n   *\n   * @example\n   * new Option('--color').default('GREYSCALE').preset('RGB');\n   * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n   *\n   * @param {*} arg\n   * @return {Option}\n   */\n\n  preset(arg) {\n    this.presetArg = arg;\n    return this;\n  }\n\n  /**\n   * Add option name(s) that conflict with this option.\n   * An error will be displayed if conflicting options are found during parsing.\n   *\n   * @example\n   * new Option('--rgb').conflicts('cmyk');\n   * new Option('--js').conflicts(['ts', 'jsx']);\n   *\n   * @param {(string | string[])} names\n   * @return {Option}\n   */\n\n  conflicts(names) {\n    this.conflictsWith = this.conflictsWith.concat(names);\n    return this;\n  }\n\n  /**\n   * Specify implied option values for when this option is set and the implied options are not.\n   *\n   * The custom processing (parseArg) is not called on the implied values.\n   *\n   * @example\n   * program\n   *   .addOption(new Option('--log', 'write logging information to file'))\n   *   .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n   *\n   * @param {object} impliedOptionValues\n   * @return {Option}\n   */\n  implies(impliedOptionValues) {\n    let newImplied = impliedOptionValues;\n    if (typeof impliedOptionValues === 'string') {\n      // string is not documented, but easy mistake and we can do what user probably intended.\n      newImplied = { [impliedOptionValues]: true };\n    }\n    this.implied = Object.assign(this.implied || {}, newImplied);\n    return this;\n  }\n\n  /**\n   * Set environment variable to check for option value.\n   *\n   * An environment variable is only used if when processed the current option value is\n   * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  }\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  }\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @package\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  }\n\n  /**\n   * Return whether a boolean option.\n   *\n   * Options are one of boolean, negated, required argument, or optional argument.\n   *\n   * @return {boolean}\n   * @package\n   */\n\n  isBoolean() {\n    return !this.required && !this.optional && !this.negate;\n  }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n  /**\n   * @param {Option[]} options\n   */\n  constructor(options) {\n    this.positiveOptions = new Map();\n    this.negativeOptions = new Map();\n    this.dualOptions = new Set();\n    options.forEach((option) => {\n      if (option.negate) {\n        this.negativeOptions.set(option.attributeName(), option);\n      } else {\n        this.positiveOptions.set(option.attributeName(), option);\n      }\n    });\n    this.negativeOptions.forEach((value, key) => {\n      if (this.positiveOptions.has(key)) {\n        this.dualOptions.add(key);\n      }\n    });\n  }\n\n  /**\n   * Did the value come from the option, and not from possible matching dual option?\n   *\n   * @param {*} value\n   * @param {Option} option\n   * @returns {boolean}\n   */\n  valueFromOption(value, option) {\n    const optionKey = option.attributeName();\n    if (!this.dualOptions.has(optionKey)) return true;\n\n    // Use the value to deduce if (probably) came from the option.\n    const preset = this.negativeOptions.get(optionKey).presetArg;\n    const negativeValue = preset !== undefined ? preset : false;\n    return option.negate === (negativeValue === value);\n  }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance)\n    return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost = 1;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost, // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map((candidate) => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map((candidate) => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help, stripColor } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = false;\n    /** @type {Argument[]} */\n    this.registeredArguments = [];\n    this._args = this.registeredArguments; // deprecated old name\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default, env, cli etc\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._executableDir = null; // custom search directory for subcommands\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._summary = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {(boolean | string)} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = true;\n    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripColor(str),\n    };\n\n    this._hidden = false;\n    /** @type {(Option | null | undefined)} */\n    this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n    this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n    /** @type {Command} */\n    this._helpCommand = undefined; // lazy initialised, inherited\n    this._helpConfiguration = {};\n    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} `this` command for chaining\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._helpOption = sourceCommand._helpOption;\n    this._helpCommand = sourceCommand._helpCommand;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue =\n      sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * @returns {Command[]}\n   * @private\n   */\n\n  _getCommandAndAncestors() {\n    const result = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    for (let command = this; command; command = command.parent) {\n      result.push(command);\n    }\n    return result;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  }\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  }\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  }\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {(boolean|string)} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) {\n      throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n    }\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd._checkForBrokenPassThrough();\n\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  }\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names\n      .trim()\n      .split(/ +/)\n      .forEach((detail) => {\n        this.argument(detail);\n      });\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this.registeredArguments.slice(-1)[0];\n    if (previousArgument?.variadic) {\n      throw new Error(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\n    }\n    this.registeredArguments.push(argument);\n    return this;\n  }\n\n  /**\n   * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n   *\n   * @example\n   *    program.helpCommand('help [cmd]');\n   *    program.helpCommand('help [cmd]', 'show help');\n   *    program.helpCommand(false); // suppress default help command\n   *    program.helpCommand(true); // add help command even if no subcommands\n   *\n   * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n   * @param {string} [description] - custom description\n   * @return {Command} `this` command for chaining\n   */\n\n  helpCommand(enableOrNameAndArgs, description) {\n    if (typeof enableOrNameAndArgs === 'boolean') {\n      this._addImplicitHelpCommand = enableOrNameAndArgs;\n      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n    const helpDescription = description ?? 'display help for command';\n\n    const helpCommand = this.createCommand(helpName);\n    helpCommand.helpOption(false);\n    if (helpArgs) helpCommand.arguments(helpArgs);\n    if (helpDescription) helpCommand.description(helpDescription);\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n    return this;\n  }\n\n  /**\n   * Add prepared custom help command.\n   *\n   * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n   * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n   * @return {Command} `this` command for chaining\n   */\n  addHelpCommand(helpCommand, deprecatedDescription) {\n    // If not passed an object, call through to helpCommand for backwards compatibility,\n    // as addHelpCommand was originally used like helpCommand is now.\n    if (typeof helpCommand !== 'object') {\n      this.helpCommand(helpCommand, deprecatedDescription);\n      return this;\n    }\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    this._initCommandGroup(helpCommand);\n    return this;\n  }\n\n  /**\n   * Lazy create help command.\n   *\n   * @return {(Command|null)}\n   * @package\n   */\n  _getHelpCommand() {\n    const hasImplicitHelpCommand =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !this._findCommand('help'));\n\n    if (hasImplicitHelpCommand) {\n      if (this._helpCommand === undefined) {\n        this.helpCommand(undefined, undefined); // use default name and description\n      }\n      return this._helpCommand;\n    }\n    return null;\n  }\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  }\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  }\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this.registeredArguments.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  }\n\n  /**\n   * Wrap parseArgs to catch 'commander.invalidArgument'.\n   *\n   * @param {(Option | Argument)} target\n   * @param {string} value\n   * @param {*} previous\n   * @param {string} invalidArgumentMessage\n   * @private\n   */\n\n  _callParseArg(target, value, previous, invalidArgumentMessage) {\n    try {\n      return target.parseArg(value, previous);\n    } catch (err) {\n      if (err.code === 'commander.invalidArgument') {\n        const message = `${invalidArgumentMessage} ${err.message}`;\n        this.error(message, { exitCode: err.exitCode, code: err.code });\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Check for option flag conflicts.\n   * Register option if no conflicts found, or throw on conflict.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : option.short;\n      throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n-  already used by option '${matchingOption.flags}'`);\n    }\n\n    this._initOptionGroup(option);\n    this.options.push(option);\n  }\n\n  /**\n   * Check for command name and alias conflicts with existing commands.\n   * Register command if no conflicts found, or throw on conflict.\n   *\n   * @param {Command} command\n   * @private\n   */\n\n  _registerCommand(command) {\n    const knownBy = (cmd) => {\n      return [cmd.name()].concat(cmd.aliases());\n    };\n\n    const alreadyUsed = knownBy(command).find((name) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    this._initCommandGroup(command);\n    this.commands.push(command);\n  }\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    this._registerOption(option);\n\n    const oname = option.name();\n    const name = option.attributeName();\n\n    // store default value\n    if (option.negate) {\n      // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n      const positiveLongFlag = option.long.replace(/^--no-/, '--');\n      if (!this._findOption(positiveLongFlag)) {\n        this.setOptionValueWithSource(\n          name,\n          option.defaultValue === undefined ? true : option.defaultValue,\n          'default',\n        );\n      }\n    } else if (option.defaultValue !== undefined) {\n      this.setOptionValueWithSource(name, option.defaultValue, 'default');\n    }\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // val is null for optional option used without an optional-argument.\n      // val is undefined for boolean and negated option.\n      if (val == null && option.presetArg !== undefined) {\n        val = option.presetArg;\n      }\n\n      // custom processing\n      const oldValue = this.getOptionValue(name);\n      if (val !== null && option.parseArg) {\n        val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n      } else if (val !== null && option.variadic) {\n        val = option._collectValue(val, oldValue);\n      }\n\n      // Fill-in appropriate missing values. Long winded but easy to follow.\n      if (val == null) {\n        if (option.negate) {\n          val = false;\n        } else if (option.isBoolean() || option.optional) {\n          val = true;\n        } else {\n          val = ''; // not normal, parseArg might have failed or be a mock function for testing\n        }\n      }\n      this.setOptionValueWithSource(name, val, valueSource);\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\n    }\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n   * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n   *\n   * See the README for more details, and see also addOption() and requiredOption().\n   *\n   * @example\n   * program\n   *     .option('-p, --pepper', 'add pepper')\n   *     .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n   *     .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n   *     .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, parseArg, defaultValue) {\n    return this._optionEx({}, flags, description, parseArg, defaultValue);\n  }\n\n  /**\n   * Add a required option which must have a value after parsing. This usually means\n   * the option must be specified on the command line. (Otherwise the same as .option().)\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  requiredOption(flags, description, parseArg, defaultValue) {\n    return this._optionEx(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\n  }\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  }\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  }\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  }\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {boolean} [positional]\n   * @return {Command} `this` command for chaining\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  }\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {boolean} [passThrough] for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    this._checkForBrokenPassThrough();\n    return this;\n  }\n\n  /**\n   * @private\n   */\n\n  _checkForBrokenPassThrough() {\n    if (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\n    }\n  }\n\n  /**\n   * Whether to store option values as properties on command object,\n   * or store separately (specify false). In both cases the option values can be accessed using .opts().\n   *\n   * @param {boolean} [storeAsProperties=true]\n   * @return {Command} `this` command for chaining\n   */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    if (Object.keys(this._optionValues).length) {\n      throw new Error(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\n    }\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    return this;\n  }\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  }\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    return this.setOptionValueWithSource(key, value, undefined);\n  }\n\n  /**\n   * Store option value and where the value came from.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @param {string} source - expected values are default/config/env/cli/implied\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValueWithSource(key, value, source) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n   * Get source of option value.\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  }\n\n  /**\n   * Get source of option value. See also .optsWithGlobals().\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSourceWithGlobals(key) {\n    // global overwrites local, like optsWithGlobals\n    let source;\n    this._getCommandAndAncestors().forEach((cmd) => {\n      if (cmd.getOptionValueSource(key) !== undefined) {\n        source = cmd.getOptionValueSource(key);\n      }\n    });\n    return source;\n  }\n\n  /**\n   * Get user arguments from implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n   *\n   * @private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: because defaultApp is an unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      this.nameFromFilename(this._scriptPath);\n    this._name = this._name || 'program';\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    if (this._savedState === null) {\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\n    const executableDirMessage = executableDir\n      ? `searched for local subcommand relative to directory '${executableDir}'`\n      : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n    const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n    throw new Error(executableMissing);\n  }\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    function findFile(baseDir, baseName) {\n      // Look for specified file\n      const localBin = path.resolve(baseDir, baseName);\n      if (fs.existsSync(localBin)) return localBin;\n\n      // Stop looking if candidate already has an expected extension.\n      if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n      // Try all the extensions.\n      const foundExt = sourceExt.find((ext) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\n      if (foundExt) return `${localBin}${foundExt}`;\n\n      return undefined;\n    }\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // executableFile and executableDir might be full path, or just a name\n    let executableFile =\n      subcommand._executableFile || `${this._name}-${subcommand._name}`;\n    let executableDir = this._executableDir || '';\n    if (this._scriptPath) {\n      let resolvedScriptPath; // resolve possible symlink for installed npm binary\n      try {\n        resolvedScriptPath = fs.realpathSync(this._scriptPath);\n      } catch {\n        resolvedScriptPath = this._scriptPath;\n      }\n      executableDir = path.resolve(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\n    }\n\n    // Look for a local file in preference to a command in PATH.\n    if (executableDir) {\n      let localFile = findFile(executableDir, executableFile);\n\n      // Legacy search using prefix of script name instead of command name\n      if (!localFile && !subcommand._executableFile && this._scriptPath) {\n        const legacyName = path.basename(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\n        }\n      }\n      executableFile = localFile || executableFile;\n    }\n\n    launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(executableFile);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n      }\n    } else {\n      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\n      args.unshift(executableFile);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    if (!proc.killed) {\n      // testing mainly to avoid leak warnings during unit tests with mocked spawn\n      const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n      signals.forEach((signal) => {\n        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\n            proc.kill(signal);\n          }\n        });\n      });\n    }\n\n    // By default terminate process when spawned process terminates.\n    const exitCallback = this._exitCallback;\n    proc.on('close', (code) => {\n      code = code ?? 1; // code is null if spawned process terminated due to a signal\n      if (!exitCallback) {\n        process.exit(code);\n      } else {\n        exitCallback(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\n      if (err.code === 'ENOENT') {\n        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\n        // @ts-ignore: because err.code is an unknown property\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${executableFile}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  }\n\n  /**\n   * @private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    subCommand._prepareForParse();\n    let promiseChain;\n    promiseChain = this._chainOrCallSubCommandHook(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\n    promiseChain = this._chainOrCall(promiseChain, () => {\n      if (subCommand._executableHandler) {\n        this._executeSubCommand(subCommand, operands.concat(unknown));\n      } else {\n        return subCommand._parseCommand(operands, unknown);\n      }\n    });\n    return promiseChain;\n  }\n\n  /**\n   * Invoke help directly if possible, or dispatch if necessary.\n   * e.g. help foo\n   *\n   * @private\n   */\n\n  _dispatchHelpCommand(subcommandName) {\n    if (!subcommandName) {\n      this.help();\n    }\n    const subCommand = this._findCommand(subcommandName);\n    if (subCommand && !subCommand._executableHandler) {\n      subCommand.help();\n    }\n\n    // Fallback to parsing the help flag to invoke the help.\n    return this._dispatchSubcommand(\n      subcommandName,\n      [],\n      [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n    );\n  }\n\n  /**\n   * Check this.args against expected this.registeredArguments.\n   *\n   * @private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this.registeredArguments.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\n      return;\n    }\n    if (this.args.length > this.registeredArguments.length) {\n      this._excessArguments(this.args);\n    }\n  }\n\n  /**\n   * Process this.args using this.registeredArguments and save as this.processedArgs!\n   *\n   * @private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n        parsedValue = this._callParseArg(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this.registeredArguments.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Function} fn\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise?.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    this._getCommandAndAncestors()\n      .reverse()\n      .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach((hookedCommand) => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Command} subCommand\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallSubCommandHook(promise, subCommand, event) {\n    let result = promise;\n    if (this._lifeCycleHooks[event] !== undefined) {\n      this._lifeCycleHooks[event].forEach((hook) => {\n        result = this._chainOrCall(result, () => {\n          return hook(this, subCommand);\n        });\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    this._parseOptionsImplied();\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\n      return this._dispatchHelpCommand(operands[1]);\n    }\n    if (this._defaultCommandName) {\n      this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    this._outputHelpIfRequested(parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let promiseChain;\n      promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n      promiseChain = this._chainOrCall(promiseChain, () =>\n        this._actionHandler(this.processedArgs),\n      );\n      if (this.parent) {\n        promiseChain = this._chainOrCall(promiseChain, () => {\n          this.parent.emit(commandEvent, operands, unknown); // legacy\n        });\n      }\n      promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n      return promiseChain;\n    }\n    if (this.parent?.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) {\n        // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  }\n\n  /**\n   * Find matching command.\n   *\n   * @private\n   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\n   */\n\n  _findOption(arg) {\n    return this.options.find((option) => option.is(arg));\n  }\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd.options.forEach((anOption) => {\n        if (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together in this.\n   *\n   * @private\n   */\n  _checkForConflictingLocalOptions() {\n    const definedNonDefaultOptions = this.options.filter((option) => {\n      const optionKey = option.attributeName();\n      if (this.getOptionValue(optionKey) === undefined) {\n        return false;\n      }\n      return this.getOptionValueSource(optionKey) !== 'default';\n    });\n\n    const optionsWithConflicting = definedNonDefaultOptions.filter(\n      (option) => option.conflictsWith.length > 0,\n    );\n\n    optionsWithConflicting.forEach((option) => {\n      const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n        option.conflictsWith.includes(defined.attributeName()),\n      );\n      if (conflictingAndDefined) {\n        this._conflictingOption(option, conflictingAndDefined);\n      }\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n  _checkForConflictingOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd._checkForConflictingLocalOptions();\n    });\n  }\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Side effects: modifies command by storing options. Does not reset state if called again.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {string[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args[i++];\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else {\n            // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${arg.slice(2)}`;\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  }\n\n  /**\n   * Return an object containing local option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] =\n          key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  }\n\n  /**\n   * Return an object containing merged local and global option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  optsWithGlobals() {\n    // globals overwrite locals\n    return this._getCommandAndAncestors().reduce(\n      (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n      {},\n    );\n  }\n\n  /**\n   * Display error message and exit (or call exitOverride).\n   *\n   * @param {string} message\n   * @param {object} [errorOptions]\n   * @param {string} [errorOptions.code] - an id string representing the error\n   * @param {number} [errorOptions.exitCode] - used with process.exit\n   */\n  error(message, errorOptions) {\n    // output handling\n    this._outputConfiguration.outputError(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n\n    // exit handling\n    const config = errorOptions || {};\n    const exitCode = config.exitCode || 1;\n    const code = config.code || 'commander.error';\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else {\n            // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Apply any implied option values, if option is undefined or default value.\n   *\n   * @private\n   */\n  _parseOptionsImplied() {\n    const dualHelper = new DualOptions(this.options);\n    const hasCustomOptionValue = (optionKey) => {\n      return (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\n          });\n      });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this.error(message, { code: 'commander.missingArgument' });\n  }\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this.error(message, { code: 'commander.optionMissingArgument' });\n  }\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n  }\n\n  /**\n   * `Option` conflicts with another option.\n   *\n   * @param {Option} option\n   * @param {Option} conflictingOption\n   * @private\n   */\n  _conflictingOption(option, conflictingOption) {\n    // The calling code does not know whether a negated option is the source of the\n    // value, so do some work to take an educated guess.\n    const findBestOptionFromValue = (option) => {\n      const optionKey = option.attributeName();\n      const optionValue = this.getOptionValue(optionKey);\n      const negativeOption = this.options.find(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            optionValue === negativeOption.presetArg))\n      ) {\n        return negativeOption;\n      }\n      return positiveOption || option;\n    };\n\n    const getErrorMessage = (option) => {\n      const bestOption = findBestOptionFromValue(option);\n      const optionKey = bestOption.attributeName();\n      const source = this.getOptionValueSource(optionKey);\n      if (source === 'env') {\n        return `environment variable '${bestOption.envVar}'`;\n      }\n      return `option '${bestOption.flags}'`;\n    };\n\n    const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n    this.error(message, { code: 'commander.conflictingOption' });\n  }\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .visibleOptions(command)\n          .filter((option) => option.long)\n          .map((option) => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownOption' });\n  }\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this.registeredArguments.length;\n    const s = expected === 1 ? '' : 's';\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n    this.error(message, { code: 'commander.excessArguments' });\n  }\n\n  /**\n   * Unknown command.\n   *\n   * @private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp()\n        .visibleCommands(this)\n        .forEach((command) => {\n          candidateNames.push(command.name());\n          // just visible alias\n          if (command.alias()) candidateNames.push(command.alias());\n        });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownCommand' });\n  }\n\n  /**\n   * Get or set the program version.\n   *\n   * This method auto-registers the \"-V, --version\" option which will print the version number.\n   *\n   * You can optionally supply the flags and description to override the defaults.\n   *\n   * @param {string} [str]\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this._registerOption(versionOption);\n\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  }\n\n  /**\n   * Set the description.\n   *\n   * @param {string} [str]\n   * @param {object} [argsDescription]\n   * @return {(string|Command)}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined)\n      return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  }\n\n  /**\n   * Set the summary. Used when listed as subcommand of parent.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n  summary(str) {\n    if (str === undefined) return this._summary;\n    this._summary = str;\n    return this;\n  }\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {(string|Command)}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name)\n      throw new Error(\"Command alias can't be the same as its name\");\n    const matchingCommand = this.parent?._findCommand(alias);\n    if (matchingCommand) {\n      // c.f. _registerCommand\n      const existingCmd = [matchingCommand.name()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    command._aliases.push(alias);\n    return this;\n  }\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {(string[]|Command)}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  }\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this.registeredArguments.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\n        .join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  }\n\n  /**\n   * Get or set the name of the command.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  }\n\n  /**\n   * Set/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\n  }\n\n  /**\n   * Set the name of the command from script filename, such as process.argv[1],\n   * or require.main.filename, or __filename.\n   *\n   * (Used internally and public although not documented in README.)\n   *\n   * @example\n   * program.nameFromFilename(require.main.filename);\n   *\n   * @param {string} filename\n   * @return {Command}\n   */\n\n  nameFromFilename(filename) {\n    this._name = path.basename(filename, path.extname(filename));\n\n    return this;\n  }\n\n  /**\n   * Get or set the directory for searching for executable subcommands of this command.\n   *\n   * @example\n   * program.executableDir(__dirname);\n   * // or\n   * program.executableDir('subcommands');\n   *\n   * @param {string} [path]\n   * @return {(string|null|Command)}\n   */\n\n  executableDir(path) {\n    if (path === undefined) return this._executableDir;\n    this._executableDir = path;\n    return this;\n  }\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\n    );\n  }\n\n  /**\n   * You can pass in flags and a description to customise the built-in help option.\n   * Pass in false to disable the built-in help option.\n   *\n   * @example\n   * program.helpOption('-?, --help' 'show help'); // customise\n   * program.helpOption(false); // disable\n   *\n   * @param {(string | boolean)} flags\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    // Support enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\n\n    return this;\n  }\n\n  /**\n   * Lazy create help option.\n   * Returns null if has been disabled with .helpOption(false).\n   *\n   * @returns {(Option | null)} the help option\n   * @package\n   */\n  _getHelpOption() {\n    // Lazy create help option on demand.\n    if (this._helpOption === undefined) {\n      this.helpOption(undefined, undefined);\n    }\n    return this._helpOption;\n  }\n\n  /**\n   * Supply your own option to use for the built-in help option.\n   * This is an alternative to using helpOption() to customise the flags and description etc.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addHelpOption(option) {\n    this._helpOption = option;\n    this._initOptionGroup(option);\n    return this;\n  }\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n    if (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  }\n\n  /**\n   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\n   */\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {(string | Function)} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Output help information if help flags specified\n   *\n   * @param {Array} args - array of options to search for help flags\n   * @private\n   */\n\n  _outputHelpIfRequested(args) {\n    const helpOption = this._getHelpOption();\n    const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n    if (helpRequested) {\n      this.outputHelp();\n      // (Do not have all displayed text available so only passing placeholder.)\n      this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n    }\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","// src/errors/errorCodes.ts\nvar REMIX_ERROR_CODES = {\n  REPO_LOCK_HELD: \"REPO_LOCK_HELD\",\n  REPO_LOCK_TIMEOUT: \"REPO_LOCK_TIMEOUT\",\n  REPO_LOCK_STALE_RECOVERED: \"REPO_LOCK_STALE_RECOVERED\",\n  REPO_STATE_CHANGED_DURING_OPERATION: \"REPO_STATE_CHANGED_DURING_OPERATION\",\n  PREFERRED_BRANCH_MISMATCH: \"PREFERRED_BRANCH_MISMATCH\"\n};\n\nexport {\n  REMIX_ERROR_CODES\n};\n","// src/errors/cliError.ts\nvar RemixError = class extends Error {\n  code;\n  exitCode;\n  hint;\n  // HTTP status code when this error originates from an API response.\n  // null for non-HTTP errors (validation, local IO, programming bugs).\n  // Callers use this to distinguish transient (5xx) from permanent (4xx)\n  // API failures without resorting to error-message string matching.\n  statusCode;\n  constructor(message, opts) {\n    super(message);\n    this.name = \"RemixError\";\n    this.code = opts?.code ?? null;\n    this.exitCode = opts?.exitCode ?? 1;\n    this.hint = opts?.hint ?? null;\n    this.statusCode = opts?.statusCode ?? null;\n  }\n};\n\nexport {\n  RemixError\n};\n","import \"./chunk-4OCNZHHR.js\";\nimport {\n  REMIX_ERROR_CODES\n} from \"./chunk-GC2MOT3U.js\";\nimport {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\nexport {\n  RemixError as CliError,\n  REMIX_ERROR_CODES,\n  RemixError\n};\n","export { CliError, RemixError } from \"@remixhq/core/errors\";\n\n","export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export {};\n","export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","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    // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input\n    // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information\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(/(?=(\\\\+?)?)\\1\"/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$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);\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","import {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/auth/session.ts\nimport { z } from \"zod\";\nvar storedSessionSchema = z.object({\n  access_token: z.string().min(1),\n  refresh_token: z.string().min(1),\n  expires_at: z.number().int().positive(),\n  token_type: z.string().min(1).optional(),\n  user: z.object({\n    id: z.string().min(1),\n    email: z.string().email().optional().nullable()\n  }).optional()\n});\n\n// src/auth/localSessionStore.ts\nimport fs2 from \"fs/promises\";\nimport os2 from \"os\";\nimport path2 from \"path\";\n\n// src/auth/refreshLock.ts\nimport fs from \"fs/promises\";\nimport os from \"os\";\nimport path from \"path\";\nvar DEFAULT_STALE_MS = 3e4;\nvar DEFAULT_MAX_WAIT_MS = 15e3;\nvar DEFAULT_POLL_MS = 50;\nfunction createRefreshLock(opts) {\n  const staleMs = opts.staleMs ?? DEFAULT_STALE_MS;\n  const maxWaitMs = opts.maxWaitMs ?? DEFAULT_MAX_WAIT_MS;\n  const pollMs = opts.pollMs ?? DEFAULT_POLL_MS;\n  let inProcess = null;\n  return async function withRefreshLock(fn) {\n    if (inProcess) {\n      await inProcess.catch(() => {\n      });\n    }\n    const job = (async () => {\n      const start = Date.now();\n      while (true) {\n        try {\n          await fs.mkdir(path.dirname(opts.lockPath), { recursive: true });\n          const fh = await fs.open(opts.lockPath, \"wx\");\n          try {\n            await fh.writeFile(`${process.pid}\n${Date.now()}\n${os.hostname()}\n`);\n          } finally {\n            await fh.close().catch(() => {\n            });\n          }\n          try {\n            return await fn();\n          } finally {\n            await fs.unlink(opts.lockPath).catch(() => {\n            });\n          }\n        } catch (err) {\n          const code = err?.code;\n          if (code !== \"EEXIST\") throw err;\n          const stat = await fs.stat(opts.lockPath).catch(() => null);\n          if (stat && Date.now() - stat.mtimeMs > staleMs) {\n            await fs.unlink(opts.lockPath).catch(() => {\n            });\n            continue;\n          }\n          if (Date.now() - start > maxWaitMs) {\n            return await fn();\n          }\n          await sleep(pollMs);\n        }\n      }\n    })();\n    inProcess = job;\n    try {\n      return await job;\n    } finally {\n      if (inProcess === job) inProcess = null;\n    }\n  };\n}\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// src/auth/localSessionStore.ts\nvar loadKeytarModule = () => new Function(\"return import('keytar')\")();\nfunction xdgConfigHome() {\n  const value = process.env.XDG_CONFIG_HOME;\n  if (typeof value === \"string\" && value.trim()) return value;\n  return path2.join(os2.homedir(), \".config\");\n}\nasync function maybeLoadKeytar() {\n  try {\n    const mod = await loadKeytarModule();\n    const candidates = [mod, mod?.default].filter(Boolean);\n    for (const candidate of candidates) {\n      const value = candidate;\n      if (typeof value.getPassword === \"function\" && typeof value.setPassword === \"function\") {\n        return value;\n      }\n    }\n  } catch {\n    return null;\n  }\n  return null;\n}\nasync function ensurePathPermissions(filePath) {\n  const dir = path2.dirname(filePath);\n  await fs2.mkdir(dir, { recursive: true });\n  try {\n    await fs2.chmod(dir, 448);\n  } catch {\n  }\n  try {\n    await fs2.chmod(filePath, 384);\n  } catch {\n  }\n}\nasync function writeJsonAtomic(filePath, value) {\n  await fs2.mkdir(path2.dirname(filePath), { recursive: true });\n  const tmpPath = `${filePath}.tmp-${Date.now()}-${Math.random().toString(16).slice(2)}`;\n  await fs2.writeFile(tmpPath, JSON.stringify(value, null, 2) + \"\\n\", \"utf8\");\n  await fs2.rename(tmpPath, filePath);\n}\nasync function writeSessionFileFallback(filePath, session) {\n  await writeJsonAtomic(filePath, session);\n  await ensurePathPermissions(filePath);\n}\nfunction createLocalSessionStore(params) {\n  const service = params?.service?.trim() || \"remix-cli\";\n  const account = params?.account?.trim() || \"default\";\n  const filePath = params?.filePath?.trim() || path2.join(xdgConfigHome(), \"remix\", \"session.json\");\n  async function readKeytar() {\n    const keytar = await maybeLoadKeytar();\n    if (!keytar) return null;\n    const raw = await keytar.getPassword(service, account).catch(() => null);\n    if (!raw) return null;\n    try {\n      const parsed = storedSessionSchema.safeParse(JSON.parse(raw));\n      return parsed.success ? parsed.data : null;\n    } catch {\n      return null;\n    }\n  }\n  async function readFile() {\n    const raw = await fs2.readFile(filePath, \"utf8\").catch(() => null);\n    if (!raw) return null;\n    try {\n      const parsed = storedSessionSchema.safeParse(JSON.parse(raw));\n      if (!parsed.success) return null;\n      await ensurePathPermissions(filePath);\n      return parsed.data;\n    } catch {\n      return null;\n    }\n  }\n  function pickFreshest(a, b) {\n    if (!a) return b;\n    if (!b) return a;\n    return a.expires_at >= b.expires_at ? a : b;\n  }\n  return {\n    async getSession() {\n      const [k, f] = await Promise.all([readKeytar(), readFile()]);\n      return pickFreshest(k, f);\n    },\n    async setSession(session) {\n      const parsed = storedSessionSchema.safeParse(session);\n      if (!parsed.success) {\n        throw new Error(\"Session data is invalid and was not stored.\");\n      }\n      await writeSessionFileFallback(filePath, parsed.data);\n      const keytar = await maybeLoadKeytar();\n      if (keytar) {\n        try {\n          await keytar.setPassword(service, account, JSON.stringify(parsed.data));\n        } catch {\n        }\n      }\n    }\n  };\n}\nfunction defaultSessionFilePath() {\n  return path2.join(xdgConfigHome(), \"remix\", \"session.json\");\n}\nfunction createDefaultRefreshLock(filePath) {\n  const target = filePath?.trim() || defaultSessionFilePath();\n  return createRefreshLock({ lockPath: `${target}.lock` });\n}\n\n// src/auth/refreshErrors.ts\nvar NETWORK_CODE_PATTERN = /^(ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENETUNREACH|ENOTFOUND|EPIPE|EHOSTUNREACH|EADDRNOTAVAIL|UND_ERR_)/;\nvar NETWORK_MESSAGE_PATTERN = /fetch failed|failed to fetch|network request failed|socket hang up|network error|aborted/i;\nfunction isNetworkError(err) {\n  if (!err || typeof err !== \"object\") return false;\n  const e = err;\n  const code = typeof e.code === \"string\" ? e.code : void 0;\n  const errno = typeof e.errno === \"string\" ? e.errno : void 0;\n  const msg = typeof e.message === \"string\" ? e.message : \"\";\n  if (code && NETWORK_CODE_PATTERN.test(code)) return true;\n  if (errno && NETWORK_CODE_PATTERN.test(errno)) return true;\n  if (e.name === \"TypeError\" && NETWORK_MESSAGE_PATTERN.test(msg)) return true;\n  if (e.name === \"AbortError\") return true;\n  if (NETWORK_MESSAGE_PATTERN.test(msg)) return true;\n  if (e.cause) return isNetworkError(e.cause);\n  return false;\n}\nvar INVALID_GRANT_MESSAGE_PATTERN = /invalid[_ ]grant|invalid refresh token|refresh[_ ]token[_ ]not[_ ]found|refresh token (has )?(been )?(expired|revoked)|token has expired or (been )?revoked|already used|user from sub claim in jwt does not exist/i;\nfunction isInvalidGrantError(err) {\n  if (!err || typeof err !== \"object\") return false;\n  const e = err;\n  const code = typeof e.code === \"string\" ? e.code : \"\";\n  const msg = typeof e.message === \"string\" ? e.message : \"\";\n  if (code === \"invalid_grant\" || code === \"refresh_token_not_found\") return true;\n  if (INVALID_GRANT_MESSAGE_PATTERN.test(msg)) return true;\n  if (e.cause) return isInvalidGrantError(e.cause);\n  return false;\n}\n\n// src/auth/tokenProvider.ts\nfunction firstNonEmptyEnvToken() {\n  for (const value of [process.env.REMIX_ACCESS_TOKEN, process.env.COMERGE_ACCESS_TOKEN]) {\n    if (typeof value === \"string\" && value.trim().length > 0) return value.trim();\n  }\n  return null;\n}\nfunction shouldRefreshSoon(session, skewSeconds = 60) {\n  const nowSec = Math.floor(Date.now() / 1e3);\n  return session.expires_at <= nowSec + skewSeconds;\n}\nfunction createStoredSessionTokenProvider(params) {\n  const withLock = params.withRefreshLock ?? (async (fn) => fn());\n  return async (opts) => {\n    const forceRefresh = Boolean(opts?.forceRefresh);\n    const envToken = firstNonEmptyEnvToken();\n    if (envToken) {\n      return { token: envToken, session: null, fromEnv: true };\n    }\n    let session = await params.sessionStore.getSession();\n    if (!session) {\n      throw new RemixError(\"Not signed in.\", {\n        exitCode: 2,\n        hint: \"Run `remix login`, or set REMIX_ACCESS_TOKEN for CI.\"\n      });\n    }\n    if (forceRefresh || shouldRefreshSoon(session)) {\n      const sessionAtEntry = session;\n      try {\n        session = await withLock(async () => {\n          const latest = await params.sessionStore.getSession();\n          const base = latest ?? sessionAtEntry;\n          if (!base) {\n            throw new RemixError(\"Not signed in.\", {\n              exitCode: 2,\n              hint: \"Run `remix login`, or set REMIX_ACCESS_TOKEN for CI.\"\n            });\n          }\n          const siblingRefreshed = latest != null && latest.access_token !== sessionAtEntry.access_token;\n          if (siblingRefreshed && !forceRefresh && !shouldRefreshSoon(base, 5)) {\n            return base;\n          }\n          const refreshed = await params.refreshStoredSession({\n            config: params.config,\n            session: base\n          });\n          await params.sessionStore.setSession(refreshed);\n          return refreshed;\n        });\n      } catch (err) {\n        if (isInvalidGrantError(err)) {\n          throw new RemixError(\"Session expired. Please sign in again.\", {\n            exitCode: 2,\n            hint: \"Run `remix login` to re-authenticate.\"\n          });\n        }\n        if (isNetworkError(err)) {\n        } else {\n        }\n      }\n    }\n    return { token: session.access_token, session, fromEnv: false };\n  };\n}\n\n// src/auth/supabase.ts\nimport crypto from \"crypto\";\nvar RemixAuthContinuationError = class extends RemixError {\n  challenge;\n  constructor(message, challenge, statusCode) {\n    super(message, { code: challenge.code, exitCode: 1, statusCode });\n    this.name = \"RemixAuthContinuationError\";\n    this.challenge = challenge;\n  }\n};\nfunction isRecord(value) {\n  return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\nfunction isWorkosAuthChallenge(value) {\n  return isRecord(value) && typeof value.code === \"string\";\n}\nasync function postBackend(config, path3, body, options) {\n  const response = await fetch(new URL(path3, config.apiUrl), {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\", \"X-Requested-By\": \"remix-cli\" },\n    ...options?.credentials ? { credentials: options.credentials } : {},\n    body: JSON.stringify(body)\n  });\n  const payload = await response.json();\n  if (response.status === 403 && !payload.success && isWorkosAuthChallenge(payload.responseObject)) {\n    throw new RemixAuthContinuationError(\n      payload.message || payload.responseObject.message || \"Authentication continuation required.\",\n      {\n        ...payload.responseObject,\n        message: payload.responseObject.message || payload.message || \"Authentication continuation required.\"\n      },\n      response.status\n    );\n  }\n  if (!response.ok || !payload.success || payload.responseObject == null) {\n    throw new RemixError(payload.message || `Remix backend request failed with status ${response.status}.`, {\n      exitCode: 1\n    });\n  }\n  return payload.responseObject;\n}\nfunction toStoredSession(payload) {\n  if (!payload.accessToken || !payload.refreshToken) {\n    throw new RemixError(\"Remix backend did not return a token pair.\", { exitCode: 1 });\n  }\n  const expiresIn = Number.isFinite(payload.expiresIn) && payload.expiresIn ? payload.expiresIn : 15 * 60;\n  return {\n    access_token: payload.accessToken,\n    refresh_token: payload.refreshToken,\n    expires_at: Math.floor(Date.now() / 1e3) + expiresIn,\n    token_type: payload.tokenType ?? \"Bearer\",\n    user: payload.user?.id ? { id: payload.user.id, email: payload.user.email ?? null } : void 0\n  };\n}\nfunction createPkcePair() {\n  const codeVerifier = crypto.randomBytes(32).toString(\"base64url\");\n  const codeChallenge = crypto.createHash(\"sha256\").update(codeVerifier).digest(\"base64url\");\n  return { codeVerifier, codeChallenge };\n}\nfunction normalizeBrowserReturnTo(redirectTo) {\n  try {\n    const url = new URL(redirectTo);\n    if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n      return `${url.pathname}${url.search}${url.hash}`;\n    }\n  } catch {\n  }\n  return redirectTo;\n}\nfunction createRemixAuthHelpers(config) {\n  async function startLogin(params) {\n    const path3 = params.state ? \"/v1/auth/cli/login-url\" : \"/v1/auth/login-url\";\n    const pkce = params.state ? createPkcePair() : null;\n    const body = params.state ? { returnTo: params.redirectTo, state: params.state, codeChallenge: pkce?.codeChallenge, provider: params.provider ?? \"authkit\" } : { returnTo: normalizeBrowserReturnTo(params.redirectTo), provider: params.provider ?? \"authkit\" };\n    const result = await postBackend(config, path3, body, params.state ? void 0 : { credentials: \"include\" });\n    if (!result.url) throw new RemixError(\"Remix backend did not return an auth URL.\", { exitCode: 1 });\n    return pkce ? { url: result.url, codeVerifier: pkce.codeVerifier } : { url: result.url };\n  }\n  return {\n    startLogin,\n    async startAuthKitLogin(params) {\n      return startLogin({ ...params, provider: \"authkit\" });\n    },\n    async startGoogleLogin(params) {\n      return startLogin({ ...params, provider: \"google\" });\n    },\n    async startGithubLogin(params) {\n      return startLogin({ ...params, provider: \"github\" });\n    },\n    async exchangeCode(params) {\n      const result = await postBackend(config, \"/v1/auth/cli/exchange\", {\n        code: params.code,\n        ...params.codeVerifier ? { codeVerifier: params.codeVerifier } : {}\n      });\n      return toStoredSession(result);\n    },\n    async continueAuthentication(input) {\n      const result = await postBackend(config, \"/v1/auth/cli/continue\", input);\n      return toStoredSession(result);\n    },\n    async refreshWithStoredSession(params) {\n      const result = await postBackend(config, \"/v1/auth/token/refresh\", {\n        refreshToken: params.session.refresh_token\n      });\n      return toStoredSession(result);\n    }\n  };\n}\n\nexport {\n  storedSessionSchema,\n  createRefreshLock,\n  createLocalSessionStore,\n  defaultSessionFilePath,\n  createDefaultRefreshLock,\n  isNetworkError,\n  isInvalidGrantError,\n  shouldRefreshSoon,\n  createStoredSessionTokenProvider,\n  RemixAuthContinuationError,\n  createRemixAuthHelpers\n};\n","import {\n  RemixAuthContinuationError,\n  createDefaultRefreshLock,\n  createLocalSessionStore,\n  createRefreshLock,\n  createRemixAuthHelpers,\n  createStoredSessionTokenProvider,\n  defaultSessionFilePath,\n  isInvalidGrantError,\n  isNetworkError,\n  shouldRefreshSoon,\n  storedSessionSchema\n} from \"./chunk-GVFTISVO.js\";\nimport \"./chunk-7XJGOKEO.js\";\nexport {\n  RemixAuthContinuationError,\n  createDefaultRefreshLock,\n  createLocalSessionStore,\n  createRefreshLock,\n  createRemixAuthHelpers,\n  createStoredSessionTokenProvider,\n  defaultSessionFilePath,\n  isInvalidGrantError,\n  isNetworkError,\n  shouldRefreshSoon,\n  storedSessionSchema\n};\n","'use strict'\n\nexports.fromCallback = function (fn) {\n  return Object.defineProperty(function (...args) {\n    if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n    else {\n      return new Promise((resolve, reject) => {\n        args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n        fn.apply(this, args)\n      })\n    }\n  }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n  return Object.defineProperty(function (...args) {\n    const cb = args[args.length - 1]\n    if (typeof cb !== 'function') return fn.apply(this, args)\n    else {\n      args.pop()\n      fn.apply(this, args).then(r => cb(null, r), cb)\n    }\n  }, 'name', { value: fn.name })\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n  if (!cwd)\n    cwd = origCwd.call(process)\n  return cwd\n}\ntry {\n  process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n  var chdir = process.chdir\n  process.chdir = function (d) {\n    cwd = null\n    chdir.call(process, d)\n  }\n  if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n  // (re-)implement some things that are known busted or missing.\n\n  // lchmod, broken prior to 0.6.2\n  // back-port the fix here.\n  if (constants.hasOwnProperty('O_SYMLINK') &&\n      process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n    patchLchmod(fs)\n  }\n\n  // lutimes implementation, or no-op\n  if (!fs.lutimes) {\n    patchLutimes(fs)\n  }\n\n  // https://github.com/isaacs/node-graceful-fs/issues/4\n  // Chown should not fail on einval or eperm if non-root.\n  // It should not fail on enosys ever, as this just indicates\n  // that a fs doesn't support the intended operation.\n\n  fs.chown = chownFix(fs.chown)\n  fs.fchown = chownFix(fs.fchown)\n  fs.lchown = chownFix(fs.lchown)\n\n  fs.chmod = chmodFix(fs.chmod)\n  fs.fchmod = chmodFix(fs.fchmod)\n  fs.lchmod = chmodFix(fs.lchmod)\n\n  fs.chownSync = chownFixSync(fs.chownSync)\n  fs.fchownSync = chownFixSync(fs.fchownSync)\n  fs.lchownSync = chownFixSync(fs.lchownSync)\n\n  fs.chmodSync = chmodFixSync(fs.chmodSync)\n  fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n  fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n  fs.stat = statFix(fs.stat)\n  fs.fstat = statFix(fs.fstat)\n  fs.lstat = statFix(fs.lstat)\n\n  fs.statSync = statFixSync(fs.statSync)\n  fs.fstatSync = statFixSync(fs.fstatSync)\n  fs.lstatSync = statFixSync(fs.lstatSync)\n\n  // if lchmod/lchown do not exist, then make them no-ops\n  if (fs.chmod && !fs.lchmod) {\n    fs.lchmod = function (path, mode, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchmodSync = function () {}\n  }\n  if (fs.chown && !fs.lchown) {\n    fs.lchown = function (path, uid, gid, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchownSync = function () {}\n  }\n\n  // on Windows, A/V software can lock the directory, causing this\n  // to fail with an EACCES or EPERM if the directory contains newly\n  // created files.  Try again on failure, for up to 60 seconds.\n\n  // Set the timeout this long because some Windows Anti-Virus, such as Parity\n  // bit9, may lock files for up to a minute, causing npm package install\n  // failures. Also, take care to yield the scheduler. Windows scheduling gives\n  // CPU to a busy looping process, which can cause the program causing the lock\n  // contention to be starved of CPU by node, so the contention doesn't resolve.\n  if (platform === \"win32\") {\n    fs.rename = typeof fs.rename !== 'function' ? fs.rename\n    : (function (fs$rename) {\n      function rename (from, to, cb) {\n        var start = Date.now()\n        var backoff = 0;\n        fs$rename(from, to, function CB (er) {\n          if (er\n              && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n              && Date.now() - start < 60000) {\n            setTimeout(function() {\n              fs.stat(to, function (stater, st) {\n                if (stater && stater.code === \"ENOENT\")\n                  fs$rename(from, to, CB);\n                else\n                  cb(er)\n              })\n            }, backoff)\n            if (backoff < 100)\n              backoff += 10;\n            return;\n          }\n          if (cb) cb(er)\n        })\n      }\n      if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n      return rename\n    })(fs.rename)\n  }\n\n  // if read() returns EAGAIN, then just try it again.\n  fs.read = typeof fs.read !== 'function' ? fs.read\n  : (function (fs$read) {\n    function read (fd, buffer, offset, length, position, callback_) {\n      var callback\n      if (callback_ && typeof callback_ === 'function') {\n        var eagCounter = 0\n        callback = function (er, _, __) {\n          if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n            eagCounter ++\n            return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n          }\n          callback_.apply(this, arguments)\n        }\n      }\n      return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n    }\n\n    // This ensures `util.promisify` works as it does for native `fs.read`.\n    if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n    return read\n  })(fs.read)\n\n  fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n  : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n    var eagCounter = 0\n    while (true) {\n      try {\n        return fs$readSync.call(fs, fd, buffer, offset, length, position)\n      } catch (er) {\n        if (er.code === 'EAGAIN' && eagCounter < 10) {\n          eagCounter ++\n          continue\n        }\n        throw er\n      }\n    }\n  }})(fs.readSync)\n\n  function patchLchmod (fs) {\n    fs.lchmod = function (path, mode, callback) {\n      fs.open( path\n             , constants.O_WRONLY | constants.O_SYMLINK\n             , mode\n             , function (err, fd) {\n        if (err) {\n          if (callback) callback(err)\n          return\n        }\n        // prefer to return the chmod error, if one occurs,\n        // but still try to close, and report closing errors if they occur.\n        fs.fchmod(fd, mode, function (err) {\n          fs.close(fd, function(err2) {\n            if (callback) callback(err || err2)\n          })\n        })\n      })\n    }\n\n    fs.lchmodSync = function (path, mode) {\n      var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n      // prefer to return the chmod error, if one occurs,\n      // but still try to close, and report closing errors if they occur.\n      var threw = true\n      var ret\n      try {\n        ret = fs.fchmodSync(fd, mode)\n        threw = false\n      } finally {\n        if (threw) {\n          try {\n            fs.closeSync(fd)\n          } catch (er) {}\n        } else {\n          fs.closeSync(fd)\n        }\n      }\n      return ret\n    }\n  }\n\n  function patchLutimes (fs) {\n    if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n      fs.lutimes = function (path, at, mt, cb) {\n        fs.open(path, constants.O_SYMLINK, function (er, fd) {\n          if (er) {\n            if (cb) cb(er)\n            return\n          }\n          fs.futimes(fd, at, mt, function (er) {\n            fs.close(fd, function (er2) {\n              if (cb) cb(er || er2)\n            })\n          })\n        })\n      }\n\n      fs.lutimesSync = function (path, at, mt) {\n        var fd = fs.openSync(path, constants.O_SYMLINK)\n        var ret\n        var threw = true\n        try {\n          ret = fs.futimesSync(fd, at, mt)\n          threw = false\n        } finally {\n          if (threw) {\n            try {\n              fs.closeSync(fd)\n            } catch (er) {}\n          } else {\n            fs.closeSync(fd)\n          }\n        }\n        return ret\n      }\n\n    } else if (fs.futimes) {\n      fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n      fs.lutimesSync = function () {}\n    }\n  }\n\n  function chmodFix (orig) {\n    if (!orig) return orig\n    return function (target, mode, cb) {\n      return orig.call(fs, target, mode, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chmodFixSync (orig) {\n    if (!orig) return orig\n    return function (target, mode) {\n      try {\n        return orig.call(fs, target, mode)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n\n  function chownFix (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid, cb) {\n      return orig.call(fs, target, uid, gid, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chownFixSync (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid) {\n      try {\n        return orig.call(fs, target, uid, gid)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n  function statFix (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target, options, cb) {\n      if (typeof options === 'function') {\n        cb = options\n        options = null\n      }\n      function callback (er, stats) {\n        if (stats) {\n          if (stats.uid < 0) stats.uid += 0x100000000\n          if (stats.gid < 0) stats.gid += 0x100000000\n        }\n        if (cb) cb.apply(this, arguments)\n      }\n      return options ? orig.call(fs, target, options, callback)\n        : orig.call(fs, target, callback)\n    }\n  }\n\n  function statFixSync (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target, options) {\n      var stats = options ? orig.call(fs, target, options)\n        : orig.call(fs, target)\n      if (stats) {\n        if (stats.uid < 0) stats.uid += 0x100000000\n        if (stats.gid < 0) stats.gid += 0x100000000\n      }\n      return stats;\n    }\n  }\n\n  // ENOSYS means that the fs doesn't support the op. Just ignore\n  // that, because it doesn't matter.\n  //\n  // if there's no getuid, or if getuid() is something other\n  // than 0, and the error is EINVAL or EPERM, then just ignore\n  // it.\n  //\n  // This specific case is a silent failure in cp, install, tar,\n  // and most other unix tools that manage permissions.\n  //\n  // When running as root, or if other types of errors are\n  // encountered, then it's strict.\n  function chownErOk (er) {\n    if (!er)\n      return true\n\n    if (er.code === \"ENOSYS\")\n      return true\n\n    var nonroot = !process.getuid || process.getuid() !== 0\n    if (nonroot) {\n      if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n        return true\n    }\n\n    return false\n  }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n  return {\n    ReadStream: ReadStream,\n    WriteStream: WriteStream\n  }\n\n  function ReadStream (path, options) {\n    if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n    Stream.call(this);\n\n    var self = this;\n\n    this.path = path;\n    this.fd = null;\n    this.readable = true;\n    this.paused = false;\n\n    this.flags = 'r';\n    this.mode = 438; /*=0666*/\n    this.bufferSize = 64 * 1024;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.encoding) this.setEncoding(this.encoding);\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.end === undefined) {\n        this.end = Infinity;\n      } else if ('number' !== typeof this.end) {\n        throw TypeError('end must be a Number');\n      }\n\n      if (this.start > this.end) {\n        throw new Error('start must be <= end');\n      }\n\n      this.pos = this.start;\n    }\n\n    if (this.fd !== null) {\n      process.nextTick(function() {\n        self._read();\n      });\n      return;\n    }\n\n    fs.open(this.path, this.flags, this.mode, function (err, fd) {\n      if (err) {\n        self.emit('error', err);\n        self.readable = false;\n        return;\n      }\n\n      self.fd = fd;\n      self.emit('open', fd);\n      self._read();\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n    Stream.call(this);\n\n    this.path = path;\n    this.fd = null;\n    this.writable = true;\n\n    this.flags = 'w';\n    this.encoding = 'binary';\n    this.mode = 438; /*=0666*/\n    this.bytesWritten = 0;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.start < 0) {\n        throw new Error('start must be >= zero');\n      }\n\n      this.pos = this.start;\n    }\n\n    this.busy = false;\n    this._queue = [];\n\n    if (this.fd === null) {\n      this._open = fs.open;\n      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n      this.flush();\n    }\n  }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n  return obj.__proto__\n}\n\nfunction clone (obj) {\n  if (obj === null || typeof obj !== 'object')\n    return obj\n\n  if (obj instanceof Object)\n    var copy = { __proto__: getPrototypeOf(obj) }\n  else\n    var copy = Object.create(null)\n\n  Object.getOwnPropertyNames(obj).forEach(function (key) {\n    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n  })\n\n  return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n  gracefulQueue = Symbol.for('graceful-fs.queue')\n  // This is used in testing by future versions\n  previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n  gracefulQueue = '___graceful-fs.queue'\n  previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n  Object.defineProperty(context, gracefulQueue, {\n    get: function() {\n      return queue\n    }\n  })\n}\n\nvar debug = noop\nif (util.debuglog)\n  debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n  debug = function() {\n    var m = util.format.apply(util, arguments)\n    m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n    console.error(m)\n  }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n  // This queue can be shared by multiple loaded instances\n  var queue = global[gracefulQueue] || []\n  publishQueue(fs, queue)\n\n  // Patch fs.close/closeSync to shared queue version, because we need\n  // to retry() whenever a close happens *anywhere* in the program.\n  // This is essential when multiple graceful-fs instances are\n  // in play at the same time.\n  fs.close = (function (fs$close) {\n    function close (fd, cb) {\n      return fs$close.call(fs, fd, function (err) {\n        // This function uses the graceful-fs shared queue\n        if (!err) {\n          resetQueue()\n        }\n\n        if (typeof cb === 'function')\n          cb.apply(this, arguments)\n      })\n    }\n\n    Object.defineProperty(close, previousSymbol, {\n      value: fs$close\n    })\n    return close\n  })(fs.close)\n\n  fs.closeSync = (function (fs$closeSync) {\n    function closeSync (fd) {\n      // This function uses the graceful-fs shared queue\n      fs$closeSync.apply(fs, arguments)\n      resetQueue()\n    }\n\n    Object.defineProperty(closeSync, previousSymbol, {\n      value: fs$closeSync\n    })\n    return closeSync\n  })(fs.closeSync)\n\n  if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n    process.on('exit', function() {\n      debug(fs[gracefulQueue])\n      require('assert').equal(fs[gracefulQueue].length, 0)\n    })\n  }\n}\n\nif (!global[gracefulQueue]) {\n  publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n    module.exports = patch(fs)\n    fs.__patched = true;\n}\n\nfunction patch (fs) {\n  // Everything that references the open() function needs to be in here\n  polyfills(fs)\n  fs.gracefulify = patch\n\n  fs.createReadStream = createReadStream\n  fs.createWriteStream = createWriteStream\n  var fs$readFile = fs.readFile\n  fs.readFile = readFile\n  function readFile (path, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$readFile(path, options, cb)\n\n    function go$readFile (path, options, cb, startTime) {\n      return fs$readFile(path, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$writeFile = fs.writeFile\n  fs.writeFile = writeFile\n  function writeFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$writeFile(path, data, options, cb)\n\n    function go$writeFile (path, data, options, cb, startTime) {\n      return fs$writeFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$appendFile = fs.appendFile\n  if (fs$appendFile)\n    fs.appendFile = appendFile\n  function appendFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$appendFile(path, data, options, cb)\n\n    function go$appendFile (path, data, options, cb, startTime) {\n      return fs$appendFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$copyFile = fs.copyFile\n  if (fs$copyFile)\n    fs.copyFile = copyFile\n  function copyFile (src, dest, flags, cb) {\n    if (typeof flags === 'function') {\n      cb = flags\n      flags = 0\n    }\n    return go$copyFile(src, dest, flags, cb)\n\n    function go$copyFile (src, dest, flags, cb, startTime) {\n      return fs$copyFile(src, dest, flags, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$readdir = fs.readdir\n  fs.readdir = readdir\n  var noReaddirOptionVersions = /^v[0-5]\\./\n  function readdir (path, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    var go$readdir = noReaddirOptionVersions.test(process.version)\n      ? function go$readdir (path, options, cb, startTime) {\n        return fs$readdir(path, fs$readdirCallback(\n          path, options, cb, startTime\n        ))\n      }\n      : function go$readdir (path, options, cb, startTime) {\n        return fs$readdir(path, options, fs$readdirCallback(\n          path, options, cb, startTime\n        ))\n      }\n\n    return go$readdir(path, options, cb)\n\n    function fs$readdirCallback (path, options, cb, startTime) {\n      return function (err, files) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([\n            go$readdir,\n            [path, options, cb],\n            err,\n            startTime || Date.now(),\n            Date.now()\n          ])\n        else {\n          if (files && files.sort)\n            files.sort()\n\n          if (typeof cb === 'function')\n            cb.call(this, err, files)\n        }\n      }\n    }\n  }\n\n  if (process.version.substr(0, 4) === 'v0.8') {\n    var legStreams = legacy(fs)\n    ReadStream = legStreams.ReadStream\n    WriteStream = legStreams.WriteStream\n  }\n\n  var fs$ReadStream = fs.ReadStream\n  if (fs$ReadStream) {\n    ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n    ReadStream.prototype.open = ReadStream$open\n  }\n\n  var fs$WriteStream = fs.WriteStream\n  if (fs$WriteStream) {\n    WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n    WriteStream.prototype.open = WriteStream$open\n  }\n\n  Object.defineProperty(fs, 'ReadStream', {\n    get: function () {\n      return ReadStream\n    },\n    set: function (val) {\n      ReadStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n  Object.defineProperty(fs, 'WriteStream', {\n    get: function () {\n      return WriteStream\n    },\n    set: function (val) {\n      WriteStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n\n  // legacy names\n  var FileReadStream = ReadStream\n  Object.defineProperty(fs, 'FileReadStream', {\n    get: function () {\n      return FileReadStream\n    },\n    set: function (val) {\n      FileReadStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n  var FileWriteStream = WriteStream\n  Object.defineProperty(fs, 'FileWriteStream', {\n    get: function () {\n      return FileWriteStream\n    },\n    set: function (val) {\n      FileWriteStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n\n  function ReadStream (path, options) {\n    if (this instanceof ReadStream)\n      return fs$ReadStream.apply(this, arguments), this\n    else\n      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n  }\n\n  function ReadStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        if (that.autoClose)\n          that.destroy()\n\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n        that.read()\n      }\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (this instanceof WriteStream)\n      return fs$WriteStream.apply(this, arguments), this\n    else\n      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n  }\n\n  function WriteStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        that.destroy()\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n      }\n    })\n  }\n\n  function createReadStream (path, options) {\n    return new fs.ReadStream(path, options)\n  }\n\n  function createWriteStream (path, options) {\n    return new fs.WriteStream(path, options)\n  }\n\n  var fs$open = fs.open\n  fs.open = open\n  function open (path, flags, mode, cb) {\n    if (typeof mode === 'function')\n      cb = mode, mode = null\n\n    return go$open(path, flags, mode, cb)\n\n    function go$open (path, flags, mode, cb, startTime) {\n      return fs$open(path, flags, mode, function (err, fd) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  return fs\n}\n\nfunction enqueue (elem) {\n  debug('ENQUEUE', elem[0].name, elem[1])\n  fs[gracefulQueue].push(elem)\n  retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n  var now = Date.now()\n  for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n    // entries that are only a length of 2 are from an older version, don't\n    // bother modifying those since they'll be retried anyway.\n    if (fs[gracefulQueue][i].length > 2) {\n      fs[gracefulQueue][i][3] = now // startTime\n      fs[gracefulQueue][i][4] = now // lastTime\n    }\n  }\n  // call retry to make sure we're actively processing the queue\n  retry()\n}\n\nfunction retry () {\n  // clear the timer and remove it to help prevent unintended concurrency\n  clearTimeout(retryTimer)\n  retryTimer = undefined\n\n  if (fs[gracefulQueue].length === 0)\n    return\n\n  var elem = fs[gracefulQueue].shift()\n  var fn = elem[0]\n  var args = elem[1]\n  // these items may be unset if they were added by an older graceful-fs\n  var err = elem[2]\n  var startTime = elem[3]\n  var lastTime = elem[4]\n\n  // if we don't have a startTime we have no way of knowing if we've waited\n  // long enough, so go ahead and retry this item now\n  if (startTime === undefined) {\n    debug('RETRY', fn.name, args)\n    fn.apply(null, args)\n  } else if (Date.now() - startTime >= 60000) {\n    // it's been more than 60 seconds total, bail now\n    debug('TIMEOUT', fn.name, args)\n    var cb = args.pop()\n    if (typeof cb === 'function')\n      cb.call(null, err)\n  } else {\n    // the amount of time between the last attempt and right now\n    var sinceAttempt = Date.now() - lastTime\n    // the amount of time between when we first tried, and when we last tried\n    // rounded up to at least 1\n    var sinceStart = Math.max(lastTime - startTime, 1)\n    // backoff. wait longer than the total time we've been retrying, but only\n    // up to a maximum of 100ms\n    var desiredDelay = Math.min(sinceStart * 1.2, 100)\n    // it's been long enough since the last retry, do it again\n    if (sinceAttempt >= desiredDelay) {\n      debug('RETRY', fn.name, args)\n      fn.apply(null, args.concat([startTime]))\n    } else {\n      // if we can't do this job yet, push it to the end of the queue\n      // and let the next iteration check again\n      fs[gracefulQueue].push(elem)\n    }\n  }\n\n  // schedule our next run if one isn't already scheduled\n  if (retryTimer === undefined) {\n    retryTimer = setTimeout(retry, 0)\n  }\n}\n","'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n  'access',\n  'appendFile',\n  'chmod',\n  'chown',\n  'close',\n  'copyFile',\n  'cp',\n  'fchmod',\n  'fchown',\n  'fdatasync',\n  'fstat',\n  'fsync',\n  'ftruncate',\n  'futimes',\n  'glob',\n  'lchmod',\n  'lchown',\n  'lutimes',\n  'link',\n  'lstat',\n  'mkdir',\n  'mkdtemp',\n  'open',\n  'opendir',\n  'readdir',\n  'readFile',\n  'readlink',\n  'realpath',\n  'rename',\n  'rm',\n  'rmdir',\n  'stat',\n  'statfs',\n  'symlink',\n  'truncate',\n  'unlink',\n  'utimes',\n  'writeFile'\n].filter(key => {\n  // Some commands are not available on some systems. Ex:\n  // fs.cp was added in Node.js v16.7.0\n  // fs.statfs was added in Node v19.6.0, v18.15.0\n  // fs.glob was added in Node.js v22.0.0\n  // fs.lchown is not available on at least some Linux\n  return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n  exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n  if (typeof callback === 'function') {\n    return fs.exists(filename, callback)\n  }\n  return new Promise(resolve => {\n    return fs.exists(filename, resolve)\n  })\n}\n\n// fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n  if (typeof callback === 'function') {\n    return fs.read(fd, buffer, offset, length, position, callback)\n  }\n  return new Promise((resolve, reject) => {\n    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n      if (err) return reject(err)\n      resolve({ bytesRead, buffer })\n    })\n  })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n  if (typeof args[args.length - 1] === 'function') {\n    return fs.write(fd, buffer, ...args)\n  }\n\n  return new Promise((resolve, reject) => {\n    fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n      if (err) return reject(err)\n      resolve({ bytesWritten, buffer })\n    })\n  })\n}\n\n// Function signature is\n// s.readv(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.readv = function (fd, buffers, ...args) {\n  if (typeof args[args.length - 1] === 'function') {\n    return fs.readv(fd, buffers, ...args)\n  }\n\n  return new Promise((resolve, reject) => {\n    fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {\n      if (err) return reject(err)\n      resolve({ bytesRead, buffers })\n    })\n  })\n}\n\n// Function signature is\n// s.writev(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.writev = function (fd, buffers, ...args) {\n  if (typeof args[args.length - 1] === 'function') {\n    return fs.writev(fd, buffers, ...args)\n  }\n\n  return new Promise((resolve, reject) => {\n    fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n      if (err) return reject(err)\n      resolve({ bytesWritten, buffers })\n    })\n  })\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n  exports.realpath.native = u(fs.realpath.native)\n} else {\n  process.emitWarning(\n    'fs.realpath.native is not a function. Is fs being monkey-patched?',\n    'Warning', 'fs-extra-WARN0003'\n  )\n}\n","// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission 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:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE 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'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n  if (process.platform === 'win32') {\n    const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n    if (pathHasInvalidWinCharacters) {\n      const error = new Error(`Path contains invalid characters: ${pth}`)\n      error.code = 'EINVAL'\n      throw error\n    }\n  }\n}\n","'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n  const defaults = { mode: 0o777 }\n  if (typeof options === 'number') return options\n  return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n  checkPath(dir)\n\n  return fs.mkdir(dir, {\n    mode: getMode(options),\n    recursive: true\n  })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n  checkPath(dir)\n\n  return fs.mkdirSync(dir, {\n    mode: getMode(options),\n    recursive: true\n  })\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n  mkdirs: makeDir,\n  mkdirsSync: makeDirSync,\n  // alias\n  mkdirp: makeDir,\n  mkdirpSync: makeDirSync,\n  ensureDir: makeDir,\n  ensureDirSync: makeDirSync\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n  return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n  pathExists: u(pathExists),\n  pathExistsSync: fs.existsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function utimesMillis (path, atime, mtime) {\n  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n  const fd = await fs.open(path, 'r+')\n\n  let closeErr = null\n\n  try {\n    await fs.futimes(fd, atime, mtime)\n  } finally {\n    try {\n      await fs.close(fd)\n    } catch (e) {\n      closeErr = e\n    }\n  }\n\n  if (closeErr) {\n    throw closeErr\n  }\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n  const fd = fs.openSync(path, 'r+')\n  fs.futimesSync(fd, atime, mtime)\n  return fs.closeSync(fd)\n}\n\nmodule.exports = {\n  utimesMillis: u(utimesMillis),\n  utimesMillisSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst u = require('universalify').fromPromise\n\nfunction getStats (src, dest, opts) {\n  const statFunc = opts.dereference\n    ? (file) => fs.stat(file, { bigint: true })\n    : (file) => fs.lstat(file, { bigint: true })\n  return Promise.all([\n    statFunc(src),\n    statFunc(dest).catch(err => {\n      if (err.code === 'ENOENT') return null\n      throw err\n    })\n  ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n  let destStat\n  const statFunc = opts.dereference\n    ? (file) => fs.statSync(file, { bigint: true })\n    : (file) => fs.lstatSync(file, { bigint: true })\n  const srcStat = statFunc(src)\n  try {\n    destStat = statFunc(dest)\n  } catch (err) {\n    if (err.code === 'ENOENT') return { srcStat, destStat: null }\n    throw err\n  }\n  return { srcStat, destStat }\n}\n\nasync function checkPaths (src, dest, funcName, opts) {\n  const { srcStat, destStat } = await getStats(src, dest, opts)\n  if (destStat) {\n    if (areIdentical(srcStat, destStat)) {\n      const srcBaseName = path.basename(src)\n      const destBaseName = path.basename(dest)\n      if (funcName === 'move' &&\n        srcBaseName !== destBaseName &&\n        srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n        return { srcStat, destStat, isChangingCase: true }\n      }\n      throw new Error('Source and destination must not be the same.')\n    }\n    if (srcStat.isDirectory() && !destStat.isDirectory()) {\n      throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n    }\n    if (!srcStat.isDirectory() && destStat.isDirectory()) {\n      throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n    }\n  }\n\n  if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n    throw new Error(errMsg(src, dest, funcName))\n  }\n\n  return { srcStat, destStat }\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n  const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n  if (destStat) {\n    if (areIdentical(srcStat, destStat)) {\n      const srcBaseName = path.basename(src)\n      const destBaseName = path.basename(dest)\n      if (funcName === 'move' &&\n        srcBaseName !== destBaseName &&\n        srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n        return { srcStat, destStat, isChangingCase: true }\n      }\n      throw new Error('Source and destination must not be the same.')\n    }\n    if (srcStat.isDirectory() && !destStat.isDirectory()) {\n      throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n    }\n    if (!srcStat.isDirectory() && destStat.isDirectory()) {\n      throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n    }\n  }\n\n  if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n    throw new Error(errMsg(src, dest, funcName))\n  }\n  return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nasync function checkParentPaths (src, srcStat, dest, funcName) {\n  const srcParent = path.resolve(path.dirname(src))\n  const destParent = path.resolve(path.dirname(dest))\n  if (destParent === srcParent || destParent === path.parse(destParent).root) return\n\n  let destStat\n  try {\n    destStat = await fs.stat(destParent, { bigint: true })\n  } catch (err) {\n    if (err.code === 'ENOENT') return\n    throw err\n  }\n\n  if (areIdentical(srcStat, destStat)) {\n    throw new Error(errMsg(src, dest, funcName))\n  }\n\n  return checkParentPaths(src, srcStat, destParent, funcName)\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n  const srcParent = path.resolve(path.dirname(src))\n  const destParent = path.resolve(path.dirname(dest))\n  if (destParent === srcParent || destParent === path.parse(destParent).root) return\n  let destStat\n  try {\n    destStat = fs.statSync(destParent, { bigint: true })\n  } catch (err) {\n    if (err.code === 'ENOENT') return\n    throw err\n  }\n  if (areIdentical(srcStat, destStat)) {\n    throw new Error(errMsg(src, dest, funcName))\n  }\n  return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n  // stat.dev can be 0n on windows when node version >= 22.x.x\n  return destStat.ino !== undefined && destStat.dev !== undefined && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n  const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n  const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n  return srcArr.every((cur, i) => destArr[i] === cur)\n}\n\nfunction errMsg (src, dest, funcName) {\n  return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n  // checkPaths\n  checkPaths: u(checkPaths),\n  checkPathsSync,\n  // checkParent\n  checkParentPaths: u(checkParentPaths),\n  checkParentPathsSync,\n  // Misc\n  isSrcSubdir,\n  areIdentical\n}\n","'use strict'\n\n// https://github.com/jprichardson/node-fs-extra/issues/1056\n// Performing parallel operations on each item of an async iterator is\n// surprisingly hard; you need to have handlers in place to avoid getting an\n// UnhandledPromiseRejectionWarning.\n// NOTE: This function does not presently handle return values, only errors\nasync function asyncIteratorConcurrentProcess (iterator, fn) {\n  const promises = []\n  for await (const item of iterator) {\n    promises.push(\n      fn(item).then(\n        () => null,\n        (err) => err ?? new Error('unknown error')\n      )\n    )\n  }\n  await Promise.all(\n    promises.map((promise) =>\n      promise.then((possibleErr) => {\n        if (possibleErr !== null) throw possibleErr\n      })\n    )\n  )\n}\n\nmodule.exports = {\n  asyncIteratorConcurrentProcess\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { mkdirs } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { utimesMillis } = require('../util/utimes')\nconst stat = require('../util/stat')\nconst { asyncIteratorConcurrentProcess } = require('../util/async')\n\nasync function copy (src, dest, opts = {}) {\n  if (typeof opts === 'function') {\n    opts = { filter: opts }\n  }\n\n  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n  // Warn about using preserveTimestamps on 32-bit node\n  if (opts.preserveTimestamps && process.arch === 'ia32') {\n    process.emitWarning(\n      'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n      '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n      'Warning', 'fs-extra-WARN0001'\n    )\n  }\n\n  const { srcStat, destStat } = await stat.checkPaths(src, dest, 'copy', opts)\n\n  await stat.checkParentPaths(src, srcStat, dest, 'copy')\n\n  const include = await runFilter(src, dest, opts)\n\n  if (!include) return\n\n  // check if the parent of dest exists, and create it if it doesn't exist\n  const destParent = path.dirname(dest)\n  const dirExists = await pathExists(destParent)\n  if (!dirExists) {\n    await mkdirs(destParent)\n  }\n\n  await getStatsAndPerformCopy(destStat, src, dest, opts)\n}\n\nasync function runFilter (src, dest, opts) {\n  if (!opts.filter) return true\n  return opts.filter(src, dest)\n}\n\nasync function getStatsAndPerformCopy (destStat, src, dest, opts) {\n  const statFn = opts.dereference ? fs.stat : fs.lstat\n  const srcStat = await statFn(src)\n\n  if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n\n  if (\n    srcStat.isFile() ||\n    srcStat.isCharacterDevice() ||\n    srcStat.isBlockDevice()\n  ) return onFile(srcStat, destStat, src, dest, opts)\n\n  if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n  if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n  if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n  throw new Error(`Unknown file: ${src}`)\n}\n\nasync function onFile (srcStat, destStat, src, dest, opts) {\n  if (!destStat) return copyFile(srcStat, src, dest, opts)\n\n  if (opts.overwrite) {\n    await fs.unlink(dest)\n    return copyFile(srcStat, src, dest, opts)\n  }\n  if (opts.errorOnExist) {\n    throw new Error(`'${dest}' already exists`)\n  }\n}\n\nasync function copyFile (srcStat, src, dest, opts) {\n  await fs.copyFile(src, dest)\n  if (opts.preserveTimestamps) {\n    // Make sure the file is writable before setting the timestamp\n    // otherwise open fails with EPERM when invoked with 'r+'\n    // (through utimes call)\n    if (fileIsNotWritable(srcStat.mode)) {\n      await makeFileWritable(dest, srcStat.mode)\n    }\n\n    // Set timestamps and mode correspondingly\n\n    // Note that The initial srcStat.atime cannot be trusted\n    // because it is modified by the read(2) system call\n    // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n    const updatedSrcStat = await fs.stat(src)\n    await utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n  }\n\n  return fs.chmod(dest, srcStat.mode)\n}\n\nfunction fileIsNotWritable (srcMode) {\n  return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n  return fs.chmod(dest, srcMode | 0o200)\n}\n\nasync function onDir (srcStat, destStat, src, dest, opts) {\n  // the dest directory might not exist, create it\n  if (!destStat) {\n    await fs.mkdir(dest)\n  }\n\n  // iterate through the files in the current directory to copy everything\n  await asyncIteratorConcurrentProcess(await fs.opendir(src), async (item) => {\n    const srcItem = path.join(src, item.name)\n    const destItem = path.join(dest, item.name)\n\n    const include = await runFilter(srcItem, destItem, opts)\n    // only copy the item if it matches the filter function\n    if (include) {\n      const { destStat } = await stat.checkPaths(srcItem, destItem, 'copy', opts)\n      // If the item is a copyable file, `getStatsAndPerformCopy` will copy it\n      // If the item is a directory, `getStatsAndPerformCopy` will call `onDir` recursively\n      await getStatsAndPerformCopy(destStat, srcItem, destItem, opts)\n    }\n  })\n\n  if (!destStat) {\n    await fs.chmod(dest, srcStat.mode)\n  }\n}\n\nasync function onLink (destStat, src, dest, opts) {\n  let resolvedSrc = await fs.readlink(src)\n  if (opts.dereference) {\n    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n  }\n  if (!destStat) {\n    return fs.symlink(resolvedSrc, dest)\n  }\n\n  let resolvedDest = null\n  try {\n    resolvedDest = await fs.readlink(dest)\n  } catch (e) {\n    // dest exists and is a regular file or directory,\n    // Windows may throw UNKNOWN error. If dest already exists,\n    // fs throws error anyway, so no need to guard against it here.\n    if (e.code === 'EINVAL' || e.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest)\n    throw e\n  }\n  if (opts.dereference) {\n    resolvedDest = path.resolve(process.cwd(), resolvedDest)\n  }\n  // If both symlinks resolve to the same target, they are still distinct symlinks\n  // that can be copied/overwritten. Only check subdirectory constraints when\n  // the resolved paths are different.\n  if (resolvedSrc !== resolvedDest) {\n    if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n      throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n    }\n\n    // do not copy if src is a subdir of dest since unlinking\n    // dest in this case would result in removing src contents\n    // and therefore a broken symlink would be created.\n    if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n      throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n    }\n  }\n\n  // copy the link\n  await fs.unlink(dest)\n  return fs.symlink(resolvedSrc, dest)\n}\n\nmodule.exports = copy\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n  if (typeof opts === 'function') {\n    opts = { filter: opts }\n  }\n\n  opts = opts || {}\n  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n  // Warn about using preserveTimestamps on 32-bit node\n  if (opts.preserveTimestamps && process.arch === 'ia32') {\n    process.emitWarning(\n      'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n      '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n      'Warning', 'fs-extra-WARN0002'\n    )\n  }\n\n  const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n  stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n  if (opts.filter && !opts.filter(src, dest)) return\n  const destParent = path.dirname(dest)\n  if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n  return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n  const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n  const srcStat = statSync(src)\n\n  if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n  else if (srcStat.isFile() ||\n           srcStat.isCharacterDevice() ||\n           srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n  else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n  else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n  else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n  throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n  if (!destStat) return copyFile(srcStat, src, dest, opts)\n  return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n  if (opts.overwrite) {\n    fs.unlinkSync(dest)\n    return copyFile(srcStat, src, dest, opts)\n  } else if (opts.errorOnExist) {\n    throw new Error(`'${dest}' already exists`)\n  }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n  fs.copyFileSync(src, dest)\n  if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n  return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n  // Make sure the file is writable before setting the timestamp\n  // otherwise open fails with EPERM when invoked with 'r+'\n  // (through utimes call)\n  if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n  return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n  return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n  return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n  return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n  // The initial srcStat.atime cannot be trusted\n  // because it is modified by the read(2) system call\n  // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n  const updatedSrcStat = fs.statSync(src)\n  return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n  if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n  return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n  fs.mkdirSync(dest)\n  copyDir(src, dest, opts)\n  return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n  const dir = fs.opendirSync(src)\n\n  try {\n    let dirent\n\n    while ((dirent = dir.readSync()) !== null) {\n      copyDirItem(dirent.name, src, dest, opts)\n    }\n  } finally {\n    dir.closeSync()\n  }\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n  const srcItem = path.join(src, item)\n  const destItem = path.join(dest, item)\n  if (opts.filter && !opts.filter(srcItem, destItem)) return\n  const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n  return getStats(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n  let resolvedSrc = fs.readlinkSync(src)\n  if (opts.dereference) {\n    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n  }\n\n  if (!destStat) {\n    return fs.symlinkSync(resolvedSrc, dest)\n  } else {\n    let resolvedDest\n    try {\n      resolvedDest = fs.readlinkSync(dest)\n    } catch (err) {\n      // dest exists and is a regular file or directory,\n      // Windows may throw UNKNOWN error. If dest already exists,\n      // fs throws error anyway, so no need to guard against it here.\n      if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n      throw err\n    }\n    if (opts.dereference) {\n      resolvedDest = path.resolve(process.cwd(), resolvedDest)\n    }\n    // If both symlinks resolve to the same target, they are still distinct symlinks\n    // that can be copied/overwritten. Only check subdirectory constraints when\n    // the resolved paths are different.\n    if (resolvedSrc !== resolvedDest) {\n      if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n        throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n      }\n\n      // prevent copy if src is a subdir of dest since unlinking\n      // dest in this case would result in removing src contents\n      // and therefore a broken symlink would be created.\n      if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n        throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n      }\n    }\n    return copyLink(resolvedSrc, dest)\n  }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n  fs.unlinkSync(dest)\n  return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n  copy: u(require('./copy')),\n  copySync: require('./copy-sync')\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\n\nfunction remove (path, callback) {\n  fs.rm(path, { recursive: true, force: true }, callback)\n}\n\nfunction removeSync (path) {\n  fs.rmSync(path, { recursive: true, force: true })\n}\n\nmodule.exports = {\n  remove: u(remove),\n  removeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n  let items\n  try {\n    items = await fs.readdir(dir)\n  } catch {\n    return mkdir.mkdirs(dir)\n  }\n\n  return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n  let items\n  try {\n    items = fs.readdirSync(dir)\n  } catch {\n    return mkdir.mkdirsSync(dir)\n  }\n\n  items.forEach(item => {\n    item = path.join(dir, item)\n    remove.removeSync(item)\n  })\n}\n\nmodule.exports = {\n  emptyDirSync,\n  emptydirSync: emptyDirSync,\n  emptyDir,\n  emptydir: emptyDir\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\n\nasync function createFile (file) {\n  let stats\n  try {\n    stats = await fs.stat(file)\n  } catch { }\n  if (stats && stats.isFile()) return\n\n  const dir = path.dirname(file)\n\n  let dirStats = null\n  try {\n    dirStats = await fs.stat(dir)\n  } catch (err) {\n    // if the directory doesn't exist, make it\n    if (err.code === 'ENOENT') {\n      await mkdir.mkdirs(dir)\n      await fs.writeFile(file, '')\n      return\n    } else {\n      throw err\n    }\n  }\n\n  if (dirStats.isDirectory()) {\n    await fs.writeFile(file, '')\n  } else {\n    // parent is not a directory\n    // This is just to cause an internal ENOTDIR error to be thrown\n    await fs.readdir(dir)\n  }\n}\n\nfunction createFileSync (file) {\n  let stats\n  try {\n    stats = fs.statSync(file)\n  } catch { }\n  if (stats && stats.isFile()) return\n\n  const dir = path.dirname(file)\n  try {\n    if (!fs.statSync(dir).isDirectory()) {\n      // parent is not a directory\n      // This is just to cause an internal ENOTDIR error to be thrown\n      fs.readdirSync(dir)\n    }\n  } catch (err) {\n    // If the stat call above failed because the directory doesn't exist, create it\n    if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n    else throw err\n  }\n\n  fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n  createFile: u(createFile),\n  createFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { areIdentical } = require('../util/stat')\n\nasync function createLink (srcpath, dstpath) {\n  let dstStat\n  try {\n    dstStat = await fs.lstat(dstpath)\n  } catch {\n    // ignore error\n  }\n\n  let srcStat\n  try {\n    srcStat = await fs.lstat(srcpath)\n  } catch (err) {\n    err.message = err.message.replace('lstat', 'ensureLink')\n    throw err\n  }\n\n  if (dstStat && areIdentical(srcStat, dstStat)) return\n\n  const dir = path.dirname(dstpath)\n\n  const dirExists = await pathExists(dir)\n\n  if (!dirExists) {\n    await mkdir.mkdirs(dir)\n  }\n\n  await fs.link(srcpath, dstpath)\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n  let dstStat\n  try {\n    dstStat = fs.lstatSync(dstpath)\n  } catch {}\n\n  try {\n    const srcStat = fs.lstatSync(srcpath)\n    if (dstStat && areIdentical(srcStat, dstStat)) return\n  } catch (err) {\n    err.message = err.message.replace('lstat', 'ensureLink')\n    throw err\n  }\n\n  const dir = path.dirname(dstpath)\n  const dirExists = fs.existsSync(dir)\n  if (dirExists) return fs.linkSync(srcpath, dstpath)\n  mkdir.mkdirsSync(dir)\n\n  return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n  createLink: u(createLink),\n  createLinkSync\n}\n","'use strict'\n\nconst path = require('path')\nconst fs = require('../fs')\nconst { pathExists } = require('../path-exists')\n\nconst u = require('universalify').fromPromise\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nasync function symlinkPaths (srcpath, dstpath) {\n  if (path.isAbsolute(srcpath)) {\n    try {\n      await fs.lstat(srcpath)\n    } catch (err) {\n      err.message = err.message.replace('lstat', 'ensureSymlink')\n      throw err\n    }\n\n    return {\n      toCwd: srcpath,\n      toDst: srcpath\n    }\n  }\n\n  const dstdir = path.dirname(dstpath)\n  const relativeToDst = path.join(dstdir, srcpath)\n\n  const exists = await pathExists(relativeToDst)\n  if (exists) {\n    return {\n      toCwd: relativeToDst,\n      toDst: srcpath\n    }\n  }\n\n  try {\n    await fs.lstat(srcpath)\n  } catch (err) {\n    err.message = err.message.replace('lstat', 'ensureSymlink')\n    throw err\n  }\n\n  return {\n    toCwd: srcpath,\n    toDst: path.relative(dstdir, srcpath)\n  }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n  if (path.isAbsolute(srcpath)) {\n    const exists = fs.existsSync(srcpath)\n    if (!exists) throw new Error('absolute srcpath does not exist')\n    return {\n      toCwd: srcpath,\n      toDst: srcpath\n    }\n  }\n\n  const dstdir = path.dirname(dstpath)\n  const relativeToDst = path.join(dstdir, srcpath)\n  const exists = fs.existsSync(relativeToDst)\n  if (exists) {\n    return {\n      toCwd: relativeToDst,\n      toDst: srcpath\n    }\n  }\n\n  const srcExists = fs.existsSync(srcpath)\n  if (!srcExists) throw new Error('relative srcpath does not exist')\n  return {\n    toCwd: srcpath,\n    toDst: path.relative(dstdir, srcpath)\n  }\n}\n\nmodule.exports = {\n  symlinkPaths: u(symlinkPaths),\n  symlinkPathsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function symlinkType (srcpath, type) {\n  if (type) return type\n\n  let stats\n  try {\n    stats = await fs.lstat(srcpath)\n  } catch {\n    return 'file'\n  }\n\n  return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n  if (type) return type\n\n  let stats\n  try {\n    stats = fs.lstatSync(srcpath)\n  } catch {\n    return 'file'\n  }\n  return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n  symlinkType: u(symlinkType),\n  symlinkTypeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\n\nconst { mkdirs, mkdirsSync } = require('../mkdirs')\n\nconst { symlinkPaths, symlinkPathsSync } = require('./symlink-paths')\nconst { symlinkType, symlinkTypeSync } = require('./symlink-type')\n\nconst { pathExists } = require('../path-exists')\n\nconst { areIdentical } = require('../util/stat')\n\nasync function createSymlink (srcpath, dstpath, type) {\n  let stats\n  try {\n    stats = await fs.lstat(dstpath)\n  } catch { }\n\n  if (stats && stats.isSymbolicLink()) {\n    // When srcpath is relative, resolve it relative to dstpath's directory\n    // (standard symlink behavior) or fall back to cwd if that doesn't exist\n    let srcStat\n    if (path.isAbsolute(srcpath)) {\n      srcStat = await fs.stat(srcpath)\n    } else {\n      const dstdir = path.dirname(dstpath)\n      const relativeToDst = path.join(dstdir, srcpath)\n      try {\n        srcStat = await fs.stat(relativeToDst)\n      } catch {\n        srcStat = await fs.stat(srcpath)\n      }\n    }\n\n    const dstStat = await fs.stat(dstpath)\n    if (areIdentical(srcStat, dstStat)) return\n  }\n\n  const relative = await symlinkPaths(srcpath, dstpath)\n  srcpath = relative.toDst\n  const toType = await symlinkType(relative.toCwd, type)\n  const dir = path.dirname(dstpath)\n\n  if (!(await pathExists(dir))) {\n    await mkdirs(dir)\n  }\n\n  return fs.symlink(srcpath, dstpath, toType)\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n  let stats\n  try {\n    stats = fs.lstatSync(dstpath)\n  } catch { }\n  if (stats && stats.isSymbolicLink()) {\n    // When srcpath is relative, resolve it relative to dstpath's directory\n    // (standard symlink behavior) or fall back to cwd if that doesn't exist\n    let srcStat\n    if (path.isAbsolute(srcpath)) {\n      srcStat = fs.statSync(srcpath)\n    } else {\n      const dstdir = path.dirname(dstpath)\n      const relativeToDst = path.join(dstdir, srcpath)\n      try {\n        srcStat = fs.statSync(relativeToDst)\n      } catch {\n        srcStat = fs.statSync(srcpath)\n      }\n    }\n\n    const dstStat = fs.statSync(dstpath)\n    if (areIdentical(srcStat, dstStat)) return\n  }\n\n  const relative = symlinkPathsSync(srcpath, dstpath)\n  srcpath = relative.toDst\n  type = symlinkTypeSync(relative.toCwd, type)\n  const dir = path.dirname(dstpath)\n  const exists = fs.existsSync(dir)\n  if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n  mkdirsSync(dir)\n  return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n  createSymlink: u(createSymlink),\n  createSymlinkSync\n}\n","'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n  // file\n  createFile,\n  createFileSync,\n  ensureFile: createFile,\n  ensureFileSync: createFileSync,\n  // link\n  createLink,\n  createLinkSync,\n  ensureLink: createLink,\n  ensureLinkSync: createLinkSync,\n  // symlink\n  createSymlink,\n  createSymlinkSync,\n  ensureSymlink: createSymlink,\n  ensureSymlinkSync: createSymlinkSync\n}\n","function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n  const EOF = finalEOL ? EOL : ''\n  const str = JSON.stringify(obj, replacer, spaces)\n\n  if (str === undefined) {\n    throw new TypeError(`Converting ${typeof obj} value to JSON is not supported`)\n  }\n\n  return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n  if (Buffer.isBuffer(content)) content = content.toString('utf8')\n  return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n","let _fs\ntry {\n  _fs = require('graceful-fs')\n} catch (_) {\n  _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n  if (typeof options === 'string') {\n    options = { encoding: options }\n  }\n\n  const fs = options.fs || _fs\n\n  const shouldThrow = 'throws' in options ? options.throws : true\n\n  let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n  data = stripBom(data)\n\n  let obj\n  try {\n    obj = JSON.parse(data, options ? options.reviver : null)\n  } catch (err) {\n    if (shouldThrow) {\n      err.message = `${file}: ${err.message}`\n      throw err\n    } else {\n      return null\n    }\n  }\n\n  return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n  if (typeof options === 'string') {\n    options = { encoding: options }\n  }\n\n  const fs = options.fs || _fs\n\n  const shouldThrow = 'throws' in options ? options.throws : true\n\n  try {\n    let content = fs.readFileSync(file, options)\n    content = stripBom(content)\n    return JSON.parse(content, options.reviver)\n  } catch (err) {\n    if (shouldThrow) {\n      err.message = `${file}: ${err.message}`\n      throw err\n    } else {\n      return null\n    }\n  }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n  const fs = options.fs || _fs\n\n  const str = stringify(obj, options)\n\n  await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n  const fs = options.fs || _fs\n\n  const str = stringify(obj, options)\n  // not sure if fs.writeFileSync returns anything, but just in case\n  return fs.writeFileSync(file, str, options)\n}\n\n// NOTE: do not change this export format; required for ESM compat\n// see https://github.com/jprichardson/node-jsonfile/pull/162 for details\nmodule.exports = {\n  readFile,\n  readFileSync,\n  writeFile,\n  writeFileSync\n}\n","'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n  // jsonfile exports\n  readJson: jsonFile.readFile,\n  readJsonSync: jsonFile.readFileSync,\n  writeJson: jsonFile.writeFile,\n  writeJsonSync: jsonFile.writeFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nasync function outputFile (file, data, encoding = 'utf-8') {\n  const dir = path.dirname(file)\n\n  if (!(await pathExists(dir))) {\n    await mkdir.mkdirs(dir)\n  }\n\n  return fs.writeFile(file, data, encoding)\n}\n\nfunction outputFileSync (file, ...args) {\n  const dir = path.dirname(file)\n  if (!fs.existsSync(dir)) {\n    mkdir.mkdirsSync(dir)\n  }\n\n  fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n  outputFile: u(outputFile),\n  outputFileSync\n}\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n  const str = stringify(data, options)\n\n  await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n  const str = stringify(data, options)\n\n  outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { copy } = require('../copy')\nconst { remove } = require('../remove')\nconst { mkdirp } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst stat = require('../util/stat')\n\nasync function move (src, dest, opts = {}) {\n  const overwrite = opts.overwrite || opts.clobber || false\n\n  const { srcStat, isChangingCase = false } = await stat.checkPaths(src, dest, 'move', opts)\n\n  await stat.checkParentPaths(src, srcStat, dest, 'move')\n\n  // If the parent of dest is not root, make sure it exists before proceeding\n  const destParent = path.dirname(dest)\n  const parsedParentPath = path.parse(destParent)\n  if (parsedParentPath.root !== destParent) {\n    await mkdirp(destParent)\n  }\n\n  return doRename(src, dest, overwrite, isChangingCase)\n}\n\nasync function doRename (src, dest, overwrite, isChangingCase) {\n  if (!isChangingCase) {\n    if (overwrite) {\n      await remove(dest)\n    } else if (await pathExists(dest)) {\n      throw new Error('dest already exists.')\n    }\n  }\n\n  try {\n    // Try w/ rename first, and try copy + remove if EXDEV\n    await fs.rename(src, dest)\n  } catch (err) {\n    if (err.code !== 'EXDEV') {\n      throw err\n    }\n    await moveAcrossDevice(src, dest, overwrite)\n  }\n}\n\nasync function moveAcrossDevice (src, dest, overwrite) {\n  const opts = {\n    overwrite,\n    errorOnExist: true,\n    preserveTimestamps: true\n  }\n\n  await copy(src, dest, opts)\n  return remove(src)\n}\n\nmodule.exports = move\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n  opts = opts || {}\n  const overwrite = opts.overwrite || opts.clobber || false\n\n  const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n  stat.checkParentPathsSync(src, srcStat, dest, 'move')\n  if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n  return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n  const parent = path.dirname(dest)\n  const parsedPath = path.parse(parent)\n  return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n  if (isChangingCase) return rename(src, dest, overwrite)\n  if (overwrite) {\n    removeSync(dest)\n    return rename(src, dest, overwrite)\n  }\n  if (fs.existsSync(dest)) throw new Error('dest already exists.')\n  return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n  try {\n    fs.renameSync(src, dest)\n  } catch (err) {\n    if (err.code !== 'EXDEV') throw err\n    return moveAcrossDevice(src, dest, overwrite)\n  }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n  const opts = {\n    overwrite,\n    errorOnExist: true,\n    preserveTimestamps: true\n  }\n  copySync(src, dest, opts)\n  return removeSync(src)\n}\n\nmodule.exports = moveSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n  move: u(require('./move')),\n  moveSync: require('./move-sync')\n}\n","'use strict'\n\nmodule.exports = {\n  // Export promiseified graceful-fs:\n  ...require('./fs'),\n  // Export extra methods:\n  ...require('./copy'),\n  ...require('./empty'),\n  ...require('./ensure'),\n  ...require('./json'),\n  ...require('./mkdirs'),\n  ...require('./move'),\n  ...require('./output-file'),\n  ...require('./path-exists'),\n  ...require('./remove')\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport fse from \"fs-extra\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport async function findAvailableDirPath(preferredDir: string): Promise<string> {\n  const preferredExists = await fse.pathExists(preferredDir);\n  if (!preferredExists) return preferredDir;\n\n  const parent = path.dirname(preferredDir);\n  const base = path.basename(preferredDir);\n\n  // Best practice: suffix with an incrementing counter.\n  for (let i = 2; i <= 1000; i++) {\n    const candidate = path.join(parent, `${base}-${i}`);\n    if (!(await fse.pathExists(candidate))) return candidate;\n  }\n\n  throw new CliError(\"No available output directory name.\", {\n    exitCode: 2,\n    hint: `Tried ${base}-2 through ${base}-1000 under ${parent}.`,\n  });\n}\n\nexport async function ensureEmptyDir(dir: string): Promise<void> {\n  const exists = await fse.pathExists(dir);\n  if (exists) {\n    throw new CliError(\"Output directory already exists.\", {\n      hint: `Choose a new --out directory or delete: ${dir}`,\n      exitCode: 2,\n    });\n  }\n  await fse.mkdirp(dir);\n}\n\nexport async function writeJsonAtomic(filePath: string, value: unknown): Promise<void> {\n  const dir = path.dirname(filePath);\n  await fse.mkdirp(dir);\n  const tmp = `${filePath}.tmp-${Date.now()}`;\n  await fs.writeFile(tmp, JSON.stringify(value, null, 2) + \"\\n\", \"utf8\");\n  await fs.rename(tmp, filePath);\n}\n\nexport async function writeTextAtomic(filePath: string, contents: string): Promise<void> {\n  const dir = path.dirname(filePath);\n  await fse.mkdirp(dir);\n  const tmp = `${filePath}.tmp-${Date.now()}`;\n  await fs.writeFile(tmp, contents, \"utf8\");\n  await fs.rename(tmp, filePath);\n}\n\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { storedSessionSchema, type StoredSession } from \"@remixhq/core/auth\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { writeJsonAtomic } from \"../utils/fs.js\";\n\nconst KEYTAR_SERVICE = \"remix-cli\";\nconst KEYTAR_ACCOUNT = \"default\";\n\n// The desktop spawns this CLI as a child process under a different\n// signing identity than the user's terminal. We still avoid the system\n// keychain in the desktop context (sharing it across the two identities\n// triggers a macOS access-prompt dialog, which is more confusing than\n// helpful), BUT we no longer split the on-disk session file. Earlier\n// versions wrote `desktop-session.json` for desktop callers and\n// `session.json` for terminal callers, which meant `remix login` from\n// Terminal didn't sign the user in inside the desktop app, and vice\n// versa. The unified file below makes both contexts share the same\n// session — one login, both surfaces.\nfunction isDesktop(): boolean {\n  return process.env.REMIX_DESKTOP === \"1\";\n}\n\nfunction xdgConfigHome(): string {\n  const v = process.env.XDG_CONFIG_HOME;\n  if (typeof v === \"string\" && v.trim().length > 0) return v;\n  return path.join(os.homedir(), \".config\");\n}\n\nfunction sessionFilePath(): string {\n  return path.join(xdgConfigHome(), \"remix\", \"session.json\");\n}\n\n// Pre-unification path. Read at session-load time so users who were\n// signed into the desktop via the legacy `desktop-session.json` don't\n// get logged out by this migration. After we've successfully written a\n// unified `session.json` the legacy file is best-effort deleted; on\n// the next read we won't see it and behavior is fully unified.\nfunction legacyDesktopSessionFilePath(): string {\n  return path.join(xdgConfigHome(), \"remix\", \"desktop-session.json\");\n}\n\nasync function maybeLoadKeytar(): Promise<{\n  getPassword(service: string, account: string): Promise<string | null>;\n  setPassword(service: string, account: string, password: string): Promise<void>;\n  deletePassword(service: string, account: string): Promise<boolean>;\n} | null> {\n  if (isDesktop()) return null;\n  try {\n    const mod: any = await import(\"keytar\");\n    const candidates = [mod?.default, mod].filter(Boolean);\n    for (const c of candidates) {\n      if (\n        c &&\n        typeof c.getPassword === \"function\" &&\n        typeof c.setPassword === \"function\" &&\n        typeof c.deletePassword === \"function\"\n      ) {\n        return c;\n      }\n    }\n    return null;\n  } catch {\n    return null;\n  }\n}\n\nasync function ensurePathPermissions(filePath: string): Promise<void> {\n  const dir = path.dirname(filePath);\n  await fs.mkdir(dir, { recursive: true });\n  try {\n    await fs.chmod(dir, 0o700);\n  } catch {}\n  try {\n    await fs.chmod(filePath, 0o600);\n  } catch {}\n}\n\nasync function writeSessionFileFallback(session: StoredSession): Promise<void> {\n  const fp = sessionFilePath();\n  await writeJsonAtomic(fp, session);\n  await ensurePathPermissions(fp);\n}\n\n// Read both keytar AND the file fallback, then return whichever holds\n// the FRESHER (later-expiring) session. Earlier versions of this code\n// returned keytar early — even when it held an expired snapshot — and\n// never consulted the file. That created a \"Not signed in\" loop on\n// machines where the MCP plugin's process can READ the keychain but\n// silently fails to WRITE it (a real macOS scenario when the plugin\n// host runs without keychain-modification entitlements). In that\n// situation the file holds the fresh refresh and keytar holds a stale\n// snapshot from days ago. We now consult both sources and pick the\n// one that is not yet expired (or, if both are expired, the one with\n// the later expires_at — the auto-refresh path can still recover it).\nasync function readKeytarSession(): Promise<StoredSession | null> {\n  const keytar = await maybeLoadKeytar();\n  if (!keytar) return null;\n  const raw = await keytar.getPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT).catch(() => null);\n  if (!raw) return null;\n  try {\n    const parsed = storedSessionSchema.safeParse(JSON.parse(raw));\n    return parsed.success ? parsed.data : null;\n  } catch {\n    return null;\n  }\n}\n\nasync function readFileSessionFrom(filePath: string): Promise<StoredSession | null> {\n  const raw = await fs.readFile(filePath, \"utf8\").catch(() => null);\n  if (!raw) return null;\n  try {\n    const parsed = storedSessionSchema.safeParse(JSON.parse(raw));\n    if (!parsed.success) return null;\n    await ensurePathPermissions(filePath);\n    return parsed.data;\n  } catch {\n    return null;\n  }\n}\n\nasync function readFileSession(): Promise<StoredSession | null> {\n  // Both files may exist mid-migration: a previous CLI version wrote\n  // `desktop-session.json` from the desktop side and `session.json`\n  // from terminal, and either could hold the freshest refresh. Read\n  // both and let `pickFreshestSession` choose by `expires_at`. Picking\n  // the wrong one here would feed an already-rotated refresh token to\n  // the auto-refresh path and report the user as signed out, even\n  // though a valid session exists on disk.\n  const [unified, legacy] = await Promise.all([\n    readFileSessionFrom(sessionFilePath()),\n    readFileSessionFrom(legacyDesktopSessionFilePath()),\n  ]);\n  return pickFreshestSession(unified, legacy);\n}\n\nfunction pickFreshestSession(\n  a: StoredSession | null,\n  b: StoredSession | null,\n): StoredSession | null {\n  if (!a) return b;\n  if (!b) return a;\n  // Prefer the larger expires_at — that's the most recent refresh and\n  // (if still valid) the one with the longest remaining life.\n  return a.expires_at >= b.expires_at ? a : b;\n}\n\nexport async function getSession(): Promise<StoredSession | null> {\n  const [fromKeytar, fromFile] = await Promise.all([readKeytarSession(), readFileSession()]);\n  return pickFreshestSession(fromKeytar, fromFile);\n}\n\nexport async function setSession(session: StoredSession): Promise<void> {\n  const parsed = storedSessionSchema.safeParse(session);\n  if (!parsed.success) {\n    throw new CliError(\"Session data is invalid and was not stored.\", { exitCode: 1 });\n  }\n\n  // Always write the file FIRST and treat keytar as best-effort. The\n  // file is the source of truth; keytar is a secondary cache that\n  // may silently fail (e.g. macOS keychain denies writes from a\n  // sandboxed plugin host but allows reads). Previously a thrown\n  // setPassword would short-circuit and leave the file unwritten —\n  // meaning a refresh that the user CAN see in their session would\n  // get lost on the next process boot. File-first guarantees the\n  // refreshed session always lands somewhere readable.\n  await writeSessionFileFallback(parsed.data);\n\n  // One-shot migration: if a legacy `desktop-session.json` is still\n  // sitting around from before sessions were unified, remove it now\n  // that the unified `session.json` holds the authoritative data.\n  // Best-effort — failure here is harmless because readFileSession()\n  // prefers the unified file anyway.\n  await fs.rm(legacyDesktopSessionFilePath(), { force: true }).catch(() => {});\n\n  const keytar = await maybeLoadKeytar();\n  if (keytar) {\n    try {\n      await keytar.setPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT, JSON.stringify(parsed.data));\n    } catch {\n      // Keytar write failed (often a permissions / entitlement issue\n      // on macOS). The file write above is the durable record; the\n      // matching fix in getSession will prefer the freshest source so\n      // the next read still finds the refreshed session.\n    }\n  }\n}\n\nexport async function clearSession(): Promise<void> {\n  const keytar = await maybeLoadKeytar();\n  if (keytar) {\n    await keytar.deletePassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT);\n  }\n  // Clear both the unified file and any lingering legacy file so a\n  // logout truly leaves nothing on disk regardless of which version of\n  // the CLI last wrote the session.\n  await fs.rm(sessionFilePath(), { force: true }).catch(() => {});\n  await fs.rm(legacyDesktopSessionFilePath(), { force: true }).catch(() => {});\n}\n\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import { BaseEvent } from './base-event';\nimport { RevenueEventProperties } from '../../revenue';\n\nexport enum IdentifyOperation {\n  // Base Operations to set values\n  SET = '$set',\n  SET_ONCE = '$setOnce',\n\n  // Operations around modifying existing values\n  ADD = '$add',\n  APPEND = '$append',\n  PREPEND = '$prepend',\n  REMOVE = '$remove',\n\n  // Operations around appending values *if* they aren't present\n  PREINSERT = '$preInsert',\n  POSTINSERT = '$postInsert',\n\n  // Operations around removing properties/values\n  UNSET = '$unset',\n  CLEAR_ALL = '$clearAll',\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType }\n  | Array<{ [key: string]: ValidPropertyType }>;\n\ninterface BaseOperationConfig {\n  [key: string]: ValidPropertyType;\n}\n\nexport interface IdentifyUserProperties {\n  // Add operations can only take numbers\n  [IdentifyOperation.ADD]?: { [key: string]: number };\n\n  // This reads the keys of the passed object, but the values are not used\n  [IdentifyOperation.UNSET]?: BaseOperationConfig;\n  // This option does not read the key as it unsets all user properties\n  [IdentifyOperation.CLEAR_ALL]?: any;\n\n  // These operations can take numbers, strings, or arrays of both.\n  [IdentifyOperation.SET]?: BaseOperationConfig;\n  [IdentifyOperation.SET_ONCE]?: BaseOperationConfig;\n  [IdentifyOperation.APPEND]?: BaseOperationConfig;\n  [IdentifyOperation.PREPEND]?: BaseOperationConfig;\n  [IdentifyOperation.POSTINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.PREINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.REMOVE]?: BaseOperationConfig;\n}\n\n/**\n * Represents the structure of user properties that can be sent with an Identify or GroupIdentify event.\n *\n * This type supports both:\n *\n * 1. Reserved Amplitude identify operations via `IdentifyUserProperties`:\n *    These operations enable structured updates to user properties.\n *\n *    Example:\n *    ```ts\n *    {\n *      $set: { plan: 'premium', login_count: 1 },\n *      $add: { login_count: 1 },\n *      $unset: { plan: '-' },\n *      $clearAll: '-'\n *    }\n *    ```\n *\n * 2. Custom user-defined properties (excluding reserved operation keys):\n *    Useful for assigning static properties without using Identify operations.\n *\n *    Example:\n *    ```ts\n *    {\n *      custom_flag: true,\n *      experiment_group: 'B',\n *      favorite_color: 'blue'\n *    }\n *    ```\n *\n * This union ensures compatibility with Amplitude's identify semantics\n * while allowing flexibility to define arbitrary non-reserved properties.\n */\nexport type UserProperties =\n  | IdentifyUserProperties\n  | {\n      [key in Exclude<string, IdentifyOperation>]: any;\n    };\n\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport enum SpecialEventType {\n  IDENTIFY = '$identify',\n  GROUP_IDENTIFY = '$groupidentify',\n  REVENUE = 'revenue_amount',\n}\n\nexport interface TrackEvent extends BaseEvent {\n  event_type: Exclude<string, SpecialEventType>;\n}\n\nexport interface IdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.IDENTIFY;\n  user_properties: UserProperties;\n}\n\nexport interface GroupIdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.GROUP_IDENTIFY;\n  group_properties: UserProperties;\n}\n\nexport interface RevenueEvent extends BaseEvent {\n  event_type: SpecialEventType.REVENUE;\n  event_properties:\n    | RevenueEventProperties\n    | {\n        [key: string]: any;\n      };\n}\n\nexport type Event = TrackEvent | IdentifyEvent | GroupIdentifyEvent | RevenueEvent;\n","import { Campaign } from './campaign';\n\nexport const UNSET_VALUE = '-';\nexport const AMPLITUDE_PREFIX = 'AMP';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_unsent`;\nexport const DEFAULT_INSTANCE_NAME = '$default_instance';\nexport const AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport const EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport const AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport const EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n\n// Campaign constants\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_CONTENT = 'utm_content';\nexport const UTM_ID = 'utm_id';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_SOURCE = 'utm_source';\nexport const UTM_TERM = 'utm_term';\n\nexport const DCLID = 'dclid';\nexport const FBCLID = 'fbclid';\nexport const GBRAID = 'gbraid';\nexport const GCLID = 'gclid';\nexport const KO_CLICK_ID = 'ko_click_id';\nexport const LI_FAT_ID = 'li_fat_id';\nexport const MSCLKID = 'msclkid';\nexport const RDT_CID = 'rdt_cid';\nexport const TTCLID = 'ttclid';\nexport const TWCLID = 'twclid';\nexport const WBRAID = 'wbraid';\n\nexport const EMPTY_VALUE = 'EMPTY';\n\nexport const BASE_CAMPAIGN: Campaign = {\n  utm_campaign: undefined,\n  utm_content: undefined,\n  utm_id: undefined,\n  utm_medium: undefined,\n  utm_source: undefined,\n  utm_term: undefined,\n  referrer: undefined,\n  referring_domain: undefined,\n  dclid: undefined,\n  gbraid: undefined,\n  gclid: undefined,\n  fbclid: undefined,\n  ko_click_id: undefined,\n  li_fat_id: undefined,\n  msclkid: undefined,\n  rdt_cid: undefined,\n  ttclid: undefined,\n  twclid: undefined,\n  wbraid: undefined,\n};\n\nexport const MKTG = 'MKTG';\n\n// list of Network headers that are safe to capture\nexport const SAFE_HEADERS = [\n  'access-control-allow-origin',\n  'access-control-allow-credentials',\n  'access-control-expose-headers',\n  'access-control-max-age',\n  'access-control-allow-methods',\n  'access-control-allow-headers',\n  'accept-patch',\n  'accept-ranges',\n  'age',\n  'allow',\n  'alt-svc',\n  'cache-control',\n  'connection',\n  'content-disposition',\n  'content-encoding',\n  'content-language',\n  'content-length',\n  'content-location',\n  'content-md5',\n  'content-range',\n  'content-type',\n  'date',\n  'delta-base',\n  'etag',\n  'expires',\n  'im',\n  'last-modified',\n  'link',\n  'location',\n  'permanent',\n  'p3p',\n  'pragma',\n  'proxy-authenticate',\n  'public-key-pins',\n  'retry-after',\n  'server',\n  'status',\n  'strict-transport-security',\n  'trailer',\n  'transfer-encoding',\n  'tk',\n  'upgrade',\n  'vary',\n  'via',\n  'warning',\n  'www-authenticate',\n  'x-b3-traceid',\n  'x-frame-options',\n];\n\n// list of Network headers to never capture\nexport const FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n","const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n  if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n    return false;\n  }\n  for (const key in properties) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const value = properties[key];\n    if (!isValidProperties(key, value)) return false;\n  }\n  return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n  if (typeof property !== 'string') return false;\n  if (Array.isArray(value)) {\n    let isValid = true;\n    for (const valueElement of value) {\n      if (Array.isArray(valueElement)) {\n        return false;\n      } else if (typeof valueElement === 'object') {\n        isValid = isValid && isValidObject(valueElement as object);\n      } else if (!['number', 'string'].includes(typeof valueElement)) {\n        return false;\n      }\n      if (!isValid) {\n        return false;\n      }\n    }\n  } else if (value === null || value === undefined) {\n    return false;\n  } else if (typeof value === 'object') {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return isValidObject(value);\n  } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n    return false;\n  }\n  return true;\n};\n","import { UNSET_VALUE } from './types/constants';\nimport { isValidProperties } from './utils/valid-properties';\n\nexport interface IIdentify {\n  getUserProperties(): IdentifyUserProperties;\n  set(property: string, value: ValidPropertyType): IIdentify;\n  setOnce(property: string, value: ValidPropertyType): IIdentify;\n  append(property: string, value: ValidPropertyType): IIdentify;\n  prepend(property: string, value: ValidPropertyType): IIdentify;\n  postInsert(property: string, value: ValidPropertyType): IIdentify;\n  preInsert(property: string, value: ValidPropertyType): IIdentify;\n  remove(property: string, value: ValidPropertyType): IIdentify;\n  add(property: string, value: number): IIdentify;\n  unset(property: string): IIdentify;\n  clearAll(): IIdentify;\n}\n\nexport class Identify implements IIdentify {\n  protected readonly _propertySet: Set<string> = new Set<string>();\n  protected _properties: IdentifyUserProperties = {};\n\n  public getUserProperties(): IdentifyUserProperties {\n    return { ...this._properties };\n  }\n\n  public set(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET, property, value);\n    return this;\n  }\n\n  public setOnce(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n    return this;\n  }\n\n  public append(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.APPEND, property, value);\n    return this;\n  }\n\n  public prepend(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREPEND, property, value);\n    return this;\n  }\n\n  public postInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n    return this;\n  }\n\n  public preInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREINSERT, property, value);\n    return this;\n  }\n\n  public remove(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.REMOVE, property, value);\n    return this;\n  }\n\n  public add(property: string, value: number): Identify {\n    this._safeSet(IdentifyOperation.ADD, property, value);\n    return this;\n  }\n\n  public unset(property: string): Identify {\n    this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n    return this;\n  }\n\n  public clearAll(): Identify {\n    // When clear all happens, all properties are unset. Reset the entire object.\n    this._properties = {};\n    this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n\n    return this;\n  }\n\n  // Returns whether or not this set actually worked.\n  private _safeSet(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._validate(operation, property, value)) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      let userPropertyMap: any = this._properties[operation];\n      if (userPropertyMap === undefined) {\n        userPropertyMap = {};\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        this._properties[operation] = userPropertyMap;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      userPropertyMap[property] = value;\n      this._propertySet.add(property);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _validate(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n      // clear all already set. Skipping operation;\n      return false;\n    }\n\n    if (this._propertySet.has(property)) {\n      // Property already used. Skipping operation\n      return false;\n    }\n\n    if (operation === IdentifyOperation.ADD) {\n      return typeof value === 'number';\n    }\n\n    if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n      return isValidProperties(property, value);\n    }\n    return true;\n  }\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType }\n  | Array<{ [key: string]: ValidPropertyType }>;\n\ninterface BaseOperationConfig {\n  [key: string]: ValidPropertyType;\n}\n\nexport interface IdentifyUserProperties {\n  // Add operations can only take numbers\n  [IdentifyOperation.ADD]?: { [key: string]: number };\n\n  // This reads the keys of the passed object, but the values are not used\n  [IdentifyOperation.UNSET]?: BaseOperationConfig;\n  // This option does not read the key as it unsets all user properties\n  [IdentifyOperation.CLEAR_ALL]?: any;\n\n  // These operations can take numbers, strings, or arrays of both.\n  [IdentifyOperation.SET]?: BaseOperationConfig;\n  [IdentifyOperation.SET_ONCE]?: BaseOperationConfig;\n  [IdentifyOperation.APPEND]?: BaseOperationConfig;\n  [IdentifyOperation.PREPEND]?: BaseOperationConfig;\n  [IdentifyOperation.POSTINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.PREINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.REMOVE]?: BaseOperationConfig;\n}\n\nexport enum IdentifyOperation {\n  // Base Operations to set values\n  SET = '$set',\n  SET_ONCE = '$setOnce',\n\n  // Operations around modifying existing values\n  ADD = '$add',\n  APPEND = '$append',\n  PREPEND = '$prepend',\n  REMOVE = '$remove',\n\n  // Operations around appending values *if* they aren't present\n  PREINSERT = '$preInsert',\n  POSTINSERT = '$postInsert',\n\n  // Operations around removing properties/values\n  UNSET = '$unset',\n  CLEAR_ALL = '$clearAll',\n}\n\n/**\n * Note that the order of operations should align with https://github.com/amplitude/nova/blob/7701b5986b565d4b2fb53b99a9f2175df055dea8/src/main/java/com/amplitude/ingestion/core/UserPropertyUtils.java#L210\n */\nexport const OrderedIdentifyOperations = [\n  IdentifyOperation.CLEAR_ALL,\n  IdentifyOperation.UNSET,\n  IdentifyOperation.SET,\n  IdentifyOperation.SET_ONCE,\n  IdentifyOperation.ADD,\n  IdentifyOperation.APPEND,\n  IdentifyOperation.PREPEND,\n  IdentifyOperation.PREINSERT,\n  IdentifyOperation.POSTINSERT,\n  IdentifyOperation.REMOVE,\n];\n","export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport const INVALID_API_KEY = 'Invalid API key';\nexport const CLIENT_NOT_INITIALIZED = 'Client not initialized';\n","/** The status of an event. */\nexport enum Status {\n  /** The status could not be determined. */\n  Unknown = 'unknown',\n  /** The event was skipped due to configuration or callbacks. */\n  Skipped = 'skipped',\n  /** The event was sent successfully. */\n  Success = 'success',\n  /** A user or device in the payload is currently rate limited and should try again later. */\n  RateLimit = 'rate_limit',\n  /** The sent payload was too large to be processed. */\n  PayloadTooLarge = 'payload_too_large',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n  /** a server or client side error occuring when a request takes too long and is cancelled */\n  Timeout = 'Timeout',\n  /** NodeJS runtime environment error.. E.g. disconnected from network */\n  SystemError = 'SystemError',\n}\n","import { Event } from '../types/event/event';\nimport { Result } from '../types/result';\nimport { Status } from '../types/status';\n\nexport const buildResult = (event: Event, code = 0, message: string = Status.Unknown): Result => {\n  return { event, code, message };\n};\n","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\n\nexport const getGlobalScope = (): typeof globalThis | undefined => {\n  // This should only be used for integrations with Amplitude that are not running in a browser environment\n  //   We need to specify the name of the global variable as a string to prevent it from being minified\n  const ampIntegrationContextName = 'ampIntegrationContext' as keyof typeof globalThis;\n  if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n    return globalThis[ampIntegrationContextName] as typeof globalThis;\n  }\n  if (typeof globalThis !== 'undefined') {\n    return globalThis;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  return undefined;\n};\n","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\n\nimport { getGlobalScope } from '../global-scope';\n\nconst legacyUUID = function (a?: any): string {\n  return a // if the placeholder was passed, return\n    ? // a random number from 0 to 15\n      (\n        a ^ // unless b is 8,\n        ((Math.random() * // in which case\n          16) >> // a random number from\n          (a / 4))\n      ) // 8 to 11\n        .toString(16) // in hexadecimal\n    : // or otherwise a concatenated string:\n      (\n        String(1e7) + // 10000000 +\n        String(-1e3) + // -1000 +\n        String(-4e3) + // -4000 +\n        String(-8e3) + // -80000000 +\n        String(-1e11)\n      ) // -100000000000,\n        .replace(\n          // replacing\n          /[018]/g, // zeroes, ones, and eights with\n          UUID, // random hex digits\n        );\n};\n\nconst hex: string[] = [...Array(256).keys()].map((index) => index.toString(16).padStart(2, '0'));\n\nexport const UUID = (a?: any): string => {\n  const globalScope = getGlobalScope();\n\n  /* istanbul ignore next */\n  if (!globalScope?.crypto?.getRandomValues) {\n    // Fallback to legacy UUID generation if crypto is not available\n    return legacyUUID(a);\n  }\n\n  const r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n\n  r[6] = (r[6] & 0x0f) | 0x40;\n  r[8] = (r[8] & 0x3f) | 0x80;\n\n  return [...r.entries()].map(([index, int]) => ([4, 6, 8, 10].includes(index) ? `-${hex[int]}` : hex[int])).join('');\n};\n","import { AnalyticsIdentity, BeforePlugin, DestinationPlugin, EnrichmentPlugin, Plugin } from './types/plugin';\nimport { CoreClient } from './types/client/core-client';\nimport { IConfig } from './types/config/core-config';\nimport { ILogger } from './logger';\nimport { EventCallback } from './types/event-callback';\nimport { Event } from './types/event/event';\nimport { Result } from './types/result';\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\n\ntype PluginStatus = 'locked' | 'installed';\n\nexport class Timeline {\n  queue: [Event, EventCallback][] = [];\n  // Flag to guarantee one schedule apply is running\n  applying = false;\n  plugins: Plugin[] = [];\n  // Locks plugin names synchronously before `await plugin.setup?.()` so a concurrent\n  // register() with the same name bails. plugins[] only contains fully-installed plugins,\n  // so this map is the only source of truth for in-flight installs. Cleared per-name by\n  // deregister() and en masse by reset().\n  pluginStatus: Map<string, PluginStatus> = new Map();\n  // loggerProvider is set by the client at _init()\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  loggerProvider: ILogger;\n  _optOutListeners: ((optOut: boolean) => Promise<void>)[] = [];\n\n  constructor(private client: CoreClient) {}\n\n  async register(plugin: Plugin, config: IConfig) {\n    if (plugin.name === undefined) {\n      plugin.name = UUID();\n      this.loggerProvider.warn(`Plugin name is undefined.\n      Generating a random UUID for plugin name: ${plugin.name}.\n      Set a name for the plugin to prevent it from being added multiple times.`);\n    }\n    const name = plugin.name;\n\n    if (this.pluginStatus.has(name)) {\n      this.loggerProvider.warn(`Plugin with name ${name} already exists, skipping registration`);\n      return;\n    }\n\n    plugin.type = plugin.type ?? 'enrichment';\n    // Lock the name synchronously to close the TOCTOU window across `await setup`.\n    // If setup throws, the entry stays as 'locked' and blocks future re-registration —\n    // a same-named plugin would just fail again, so retry isn't useful.\n    this.pluginStatus.set(name, 'locked');\n    await plugin.setup?.(config, this.client);\n    // reset() may have cleared the status map while setup was awaiting.\n    if (this.pluginStatus.get(name) !== 'locked') {\n      return;\n    }\n    this.plugins.push(plugin);\n    this.pluginStatus.set(name, 'installed');\n  }\n\n  async deregister(pluginName: string, config: IConfig) {\n    // Clear the status first so a name stuck in 'locked' (mid-install, or setup() threw)\n    // can be unlocked via deregister(). Map.delete is a no-op if the key is missing.\n    this.pluginStatus.delete(pluginName);\n    const index = this.plugins.findIndex((plugin) => plugin.name === pluginName);\n    if (index === -1) {\n      config.loggerProvider.warn(`Plugin with name ${pluginName} does not exist, skipping deregistration`);\n      return;\n    }\n    const plugin = this.plugins[index];\n    this.plugins.splice(index, 1);\n    await plugin.teardown?.();\n  }\n\n  reset(client: CoreClient) {\n    this._clearOptOutListeners();\n    this.applying = false;\n    const plugins = this.plugins;\n    plugins.map((plugin) => plugin.teardown?.());\n    this.plugins = [];\n    this.pluginStatus.clear();\n    this.client = client;\n  }\n\n  push(event: Event) {\n    return new Promise<Result>((resolve) => {\n      this.queue.push([event, resolve]);\n      this.scheduleApply(0);\n    });\n  }\n\n  scheduleApply(timeout: number) {\n    if (this.applying) return;\n    this.applying = true;\n    setTimeout(() => {\n      void this.apply(this.queue.shift()).then(() => {\n        this.applying = false;\n        if (this.queue.length > 0) {\n          this.scheduleApply(0);\n        }\n      });\n    }, timeout);\n  }\n\n  async apply(item: [Event, EventCallback] | undefined) {\n    if (!item) {\n      return;\n    }\n\n    let [event] = item;\n    const [, resolve] = item;\n\n    // Log initial event\n    this.loggerProvider.log('Timeline.apply: Initial event', event);\n\n    const before = this.plugins.filter<BeforePlugin>(\n      (plugin: Plugin): plugin is BeforePlugin => plugin.type === 'before',\n    );\n\n    for (const plugin of before) {\n      /* istanbul ignore if */\n      if (!plugin.execute) {\n        // do nothing\n        continue;\n      }\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        this.loggerProvider.log(\n          `Timeline.apply: Event filtered out by before plugin '${String(plugin.name)}', event: ${JSON.stringify(\n            event,\n          )}`,\n        );\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n        this.loggerProvider.log(\n          `Timeline.apply: Event after before plugin '${String(plugin.name)}', event: ${JSON.stringify(event)}`,\n        );\n      }\n    }\n\n    const enrichment = this.plugins.filter<EnrichmentPlugin>(\n      (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === 'enrichment' || plugin.type === undefined,\n    );\n\n    for (const plugin of enrichment) {\n      /* istanbul ignore if */\n      if (!plugin.execute) {\n        // do nothing\n        continue;\n      }\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        this.loggerProvider.log(\n          `Timeline.apply: Event filtered out by enrichment plugin '${String(plugin.name)}', event: ${JSON.stringify(\n            event,\n          )}`,\n        );\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n        this.loggerProvider.log(\n          `Timeline.apply: Event after enrichment plugin '${String(plugin.name)}', event: ${JSON.stringify(event)}`,\n        );\n      }\n    }\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === 'destination',\n    );\n\n    // Log final event before sending to destinations\n    this.loggerProvider.log(`Timeline.apply: Final event before destinations, event: ${JSON.stringify(event)}`);\n\n    const executeDestinations = destination.map((plugin) => {\n      const eventClone = { ...event };\n      return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n    });\n\n    void Promise.all(executeDestinations).then(([result]) => {\n      const resolveResult =\n        result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n      resolve(resolveResult);\n    });\n\n    return;\n  }\n\n  async flush() {\n    const queue = this.queue;\n    this.queue = [];\n\n    await Promise.all(queue.map((item) => this.apply(item)));\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === 'destination',\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      return plugin.flush && plugin.flush();\n    });\n\n    await Promise.all(executeDestinations);\n  }\n\n  addOptOutListener(cb: (optOut: boolean) => Promise<void>) {\n    this._optOutListeners.push(cb);\n  }\n\n  _clearOptOutListeners() {\n    this._optOutListeners = [];\n  }\n\n  onIdentityChanged(identity: AnalyticsIdentity) {\n    this.plugins.forEach((plugin) => {\n      // Intentionally to not await plugin.onIdentityChanged() for non-blocking.\n      // Ignore optional channing next line for test coverage.\n      // If the plugin doesn't implement it, it won't be called.\n      /* istanbul ignore next */\n      void plugin.onIdentityChanged?.(identity);\n    });\n  }\n\n  onSessionIdChanged(sessionId: number) {\n    this.plugins.forEach((plugin) => {\n      // Intentionally to not await plugin.onSessionIdChanged() for non-blocking.\n      // Ignore optional channing next line for test coverage.\n      // If the plugin doesn't implement it, it won't be called.\n      /* istanbul ignore next */\n      void plugin.onSessionIdChanged?.(sessionId);\n    });\n  }\n\n  onOptOutChanged(optOut: boolean) {\n    this.plugins.forEach((plugin) => {\n      // Intentionally to not await plugin.onOptOutChanged() for non-blocking.\n      // Ignore optional channing next line for test coverage.\n      // If the plugin doesn't implement it, it won't be called.\n      /* istanbul ignore next */\n      void plugin.onOptOutChanged?.(optOut);\n    });\n    void this._callOptOutListeners(optOut);\n  }\n\n  async _callOptOutListeners(optOut: boolean) {\n    for (const listener of this._optOutListeners) {\n      try {\n        await listener(optOut);\n      } catch (e) {\n        /* istanbul ignore next */\n        this.loggerProvider.error('Error calling optOut listener', e);\n      }\n    }\n  }\n\n  onReset() {\n    this.plugins.forEach((plugin) => {\n      // Intentionally to not await plugin.onReset() for non-blocking.\n      // Ignore optional channing next line for test coverage.\n      // If the plugin doesn't implement it, it won't be called.\n      /* istanbul ignore next */\n      void plugin.onReset?.();\n    });\n  }\n}\n","import { Identify, IIdentify } from '../identify';\nimport { IRevenue } from '../revenue';\nimport { BaseEvent, EventOptions } from '../types/event/base-event';\nimport { TrackEvent, IdentifyEvent, GroupIdentifyEvent, SpecialEventType, RevenueEvent } from '../types/event/event';\n\nexport const createTrackEvent = (\n  eventInput: BaseEvent | string,\n  eventProperties?: Record<string, any>,\n  eventOptions?: EventOptions,\n): TrackEvent => {\n  const baseEvent: BaseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n  return {\n    ...baseEvent,\n    ...eventOptions,\n    ...(eventProperties && { event_properties: eventProperties }),\n  };\n};\n\nexport const createIdentifyEvent = (identify: IIdentify, eventOptions?: EventOptions): IdentifyEvent => {\n  const identifyEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n  };\n\n  return identifyEvent;\n};\n\nexport const createGroupIdentifyEvent = (\n  groupType: string,\n  groupName: string | string[],\n  identify: IIdentify,\n  eventOptions?: EventOptions,\n): GroupIdentifyEvent => {\n  const groupIdentify: GroupIdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.GROUP_IDENTIFY,\n    group_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n\n  return groupIdentify;\n};\n\nexport const createGroupEvent = (groupType: string, groupName: string | string[], eventOptions?: EventOptions) => {\n  const identify = new Identify();\n  identify.set(groupType, groupName);\n\n  const groupEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n  return groupEvent;\n};\n\nexport const createRevenueEvent = (revenue: IRevenue, eventOptions?: EventOptions): RevenueEvent => {\n  return {\n    ...eventOptions,\n    event_type: SpecialEventType.REVENUE,\n    event_properties: revenue.getEventProperties(),\n  };\n};\n","export interface AmplitudeReturn<T> {\n  promise: Promise<T>;\n}\n\nexport const returnWrapper: {\n  (): AmplitudeReturn<void>;\n  <T>(awaitable: Promise<T>): AmplitudeReturn<T>;\n} = <T>(awaitable?: Promise<T>) => ({\n  promise: awaitable || Promise.resolve(),\n});\n","import { Plugin } from './types/plugin';\nimport { IConfig } from './types/config/core-config';\nimport { BaseEvent, EventOptions } from './types/event/base-event';\nimport { Result } from './types/result';\nimport {\n  Event,\n  IdentifyOperation,\n  IdentifyUserProperties,\n  SpecialEventType,\n  UserProperties,\n} from './types/event/event';\nimport { IIdentify, OrderedIdentifyOperations } from './identify';\nimport { IRevenue } from './revenue';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './types/messages';\nimport { Timeline } from './timeline';\nimport {\n  createGroupEvent,\n  createGroupIdentifyEvent,\n  createIdentifyEvent,\n  createRevenueEvent,\n  createTrackEvent,\n} from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\nimport { CoreClient, PluginHost } from './types/client/core-client';\nexport class AmplitudeCore implements CoreClient, PluginHost {\n  protected initializing = false;\n  protected name: string;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: IConfig;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  timeline: Timeline;\n  isReady = false;\n  protected q: Array<CallableFunction | typeof returnWrapper> = [];\n  protected dispatchQ: Array<CallableFunction> = [];\n\n  /**\n   * Current user properties (operation-applied, flat key-value).\n   * Only used by client-side SDKs; server SDKs may leave this undefined.\n   */\n  userProperties: { [key: string]: any } | undefined;\n\n  constructor(name = '$default') {\n    this.timeline = new Timeline(this);\n    this.name = name;\n  }\n\n  protected async _init(config: IConfig) {\n    this.config = config;\n    this.timeline.reset(this);\n    this.timeline.loggerProvider = this.config.loggerProvider;\n    await this.runQueuedFunctions('q');\n    this.isReady = true;\n  }\n\n  async runQueuedFunctions(queueName: 'q' | 'dispatchQ') {\n    const queuedFunctions = this[queueName];\n    this[queueName] = [];\n    for (const queuedFunction of queuedFunctions) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      const val: ReturnType<typeof returnWrapper> | Promise<any> = queuedFunction();\n      if (val && 'promise' in val) {\n        await val.promise;\n      } else {\n        await val;\n      }\n    }\n    // Rerun queued functions if the queue has accrued more while awaiting promises\n    if (this[queueName].length) {\n      await this.runQueuedFunctions(queueName);\n    }\n  }\n\n  track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n    const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n    // Update client user properties immediately and synchronously\n    this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  logEvent = this.track.bind(this);\n\n  identify(identify: IIdentify, eventOptions?: EventOptions) {\n    const event = createIdentifyEvent(identify, eventOptions);\n    // Update client user properties immediately and synchronously\n    this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n    const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  setGroup(groupType: string, groupName: string | string[], eventOptions?: EventOptions) {\n    const event = createGroupEvent(groupType, groupName, eventOptions);\n    // Update client user properties immediately and synchronously\n    this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n    const event = createRevenueEvent(revenue, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  add(plugin: Plugin) {\n    if (!this.isReady) {\n      this.q.push(this._addPlugin.bind(this, plugin));\n      return returnWrapper();\n    }\n    return this._addPlugin(plugin);\n  }\n\n  _addPlugin(plugin: Plugin) {\n    return returnWrapper(this.timeline.register(plugin, this.config));\n  }\n\n  remove(pluginName: string) {\n    if (!this.isReady) {\n      this.q.push(this._removePlugin.bind(this, pluginName));\n      return returnWrapper();\n    }\n    return this._removePlugin(pluginName);\n  }\n\n  _removePlugin(pluginName: string) {\n    return returnWrapper(this.timeline.deregister(pluginName, this.config));\n  }\n\n  dispatchWithCallback(event: Event, callback: (result: Result) => void): void {\n    if (!this.isReady) {\n      return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n    }\n    void this.process(event).then(callback);\n  }\n\n  async dispatch(event: Event): Promise<Result> {\n    if (!this.isReady) {\n      return new Promise<Result>((resolve) => {\n        this.dispatchQ.push(this.dispatchWithCallback.bind(this, event, resolve));\n      });\n    }\n\n    return this.process(event);\n  }\n\n  /**\n   *\n   * This method applies identify operations to user properties and\n   * returns a single object representing the final user property state.\n   *\n   * This is a best-effort api that only supports $set, $clearAll, and $unset.\n   * Other operations are not supported and are ignored.\n   *\n   * Operations are applied on top of current client state (this.userProperties).\n   *\n   * @param userProperties The new user properties object from identify() or setIdentity().\n   * @returns A key-value object user properties without operations.\n   *\n   * @example\n   * Input:\n   * {\n   *   $set: { plan: 'premium' },\n   *   custom_flag: true\n   * }\n   *\n   * Output:\n   * {\n   *   plan: 'premium',\n   *   custom_flag: true\n   * }\n   */\n  getOperationAppliedUserProperties(userProperties: UserProperties | undefined): { [key: string]: any } {\n    const base = this.userProperties ?? {};\n    const updatedProperties: { [key: string]: any } = { ...base };\n\n    if (userProperties === undefined) {\n      return updatedProperties;\n    }\n\n    // Keep non-operation keys for later merge\n    const nonOpProperties: {\n      [key in Exclude<string, IdentifyOperation>]: any;\n    } = {};\n    Object.keys(userProperties).forEach((key) => {\n      if (!Object.values(IdentifyOperation).includes(key as IdentifyOperation)) {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        nonOpProperties[key] = userProperties[key];\n      }\n    });\n\n    OrderedIdentifyOperations.forEach((operation) => {\n      // Skip when key is an operation.\n      if (!Object.keys(userProperties).includes(operation)) return;\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      const opProperties: IdentifyUserProperties = userProperties[operation];\n\n      switch (operation) {\n        case IdentifyOperation.CLEAR_ALL:\n          // Due to operation order, the following line will never execute.\n          /* istanbul ignore next */\n          Object.keys(updatedProperties).forEach((prop) => {\n            delete updatedProperties[prop];\n          });\n          break;\n        case IdentifyOperation.UNSET:\n          Object.keys(opProperties).forEach((prop) => {\n            delete updatedProperties[prop];\n          });\n          break;\n        case IdentifyOperation.SET:\n          Object.assign(updatedProperties, opProperties);\n          break;\n      }\n    });\n\n    // Merge non-operation properties.\n    // Custom properties should not be affected by operations.\n    // https://github.com/amplitude/nova/blob/343f678ded83c032e83b189796b3c2be161b48f5/src/main/java/com/amplitude/userproperty/model/ModifyUserPropertiesIdent.java#L79-L83\n    Object.assign(updatedProperties, nonOpProperties);\n\n    return updatedProperties;\n  }\n\n  async process(event: Event): Promise<Result> {\n    try {\n      // skip event processing if opt out\n      if (this.config.optOut) {\n        return buildResult(event, 0, OPT_OUT_MESSAGE);\n      }\n\n      if (event.event_type === SpecialEventType.IDENTIFY) {\n        // Do not update this.userProperties here.\n        // It is only set synchronously in identify() or setIdentity()\n        this.timeline.onIdentityChanged({ userProperties: this.userProperties });\n      }\n\n      const result = await this.timeline.push(event);\n\n      result.code === 200\n        ? this.config.loggerProvider.log(result.message)\n        : result.code === 100\n        ? this.config.loggerProvider.warn(result.message)\n        : this.config.loggerProvider.error(result.message);\n\n      return result;\n    } catch (e) {\n      const message = String(e);\n      this.config.loggerProvider.error(message);\n      const result = buildResult(event, 0, message);\n\n      return result;\n    }\n  }\n\n  setOptOut(optOut: boolean) {\n    if (!this.isReady) {\n      this.q.push(this._setOptOut.bind(this, Boolean(optOut)));\n      return;\n    }\n    this._setOptOut(optOut);\n  }\n\n  _setOptOut(optOut: boolean) {\n    if (this.config.optOut !== optOut) {\n      this.config.optOut = Boolean(optOut);\n      this.timeline.onOptOutChanged(optOut);\n    }\n  }\n\n  flush() {\n    return returnWrapper(this.timeline.flush());\n  }\n\n  plugin(name: string): Plugin | undefined {\n    const plugin = this.timeline.plugins.find((plugin) => plugin.name === name);\n    if (plugin === undefined) {\n      this.config.loggerProvider.debug(`Cannot find plugin with name ${name}`);\n      return undefined;\n    }\n\n    return plugin;\n  }\n\n  plugins<T extends Plugin>(pluginClass: { new (...args: any[]): T }): T[] {\n    return this.timeline.plugins.filter((plugin) => plugin instanceof pluginClass) as T[];\n  }\n}\n","import { isValidObject } from './utils/valid-properties';\n\nexport interface IRevenue {\n  getEventProperties(): RevenueEventProperties;\n  setProductId(productId: string): IRevenue;\n  setQuantity(quantity: number): IRevenue;\n  setPrice(price: number): IRevenue;\n  setRevenueType(revenueType: string): IRevenue;\n  setCurrency(currency: string): IRevenue;\n  setEventProperties(properties: { [key: string]: any }): IRevenue;\n  setRevenue(revenue: number): IRevenue;\n  setReceipt(receipt: string): IRevenue;\n  setReceiptSig(receiptSig: string): IRevenue;\n}\n\nexport class Revenue implements IRevenue {\n  private productId: string;\n  private quantity: number;\n  private price: number;\n  private revenueType?: string;\n  private currency?: string;\n  private properties?: { [key: string]: any };\n  private revenue?: number;\n  private receipt?: string;\n  private receiptSig?: string;\n\n  constructor() {\n    this.productId = '';\n    this.quantity = 1;\n    this.price = 0.0;\n  }\n\n  setProductId(productId: string) {\n    this.productId = productId;\n    return this;\n  }\n\n  setQuantity(quantity: number) {\n    if (quantity > 0) {\n      this.quantity = quantity;\n    }\n    return this;\n  }\n\n  setPrice(price: number) {\n    this.price = price;\n    return this;\n  }\n\n  setRevenueType(revenueType: string) {\n    this.revenueType = revenueType;\n    return this;\n  }\n\n  setCurrency(currency: string) {\n    this.currency = currency;\n    return this;\n  }\n\n  setRevenue(revenue: number) {\n    this.revenue = revenue;\n    return this;\n  }\n\n  setReceipt(receipt: string) {\n    this.receipt = receipt;\n    return this;\n  }\n\n  setReceiptSig(receiptSig: string) {\n    this.receiptSig = receiptSig;\n    return this;\n  }\n\n  setEventProperties(properties: { [key: string]: ValidPropertyType }) {\n    try {\n      // JSON.stringify drops undefined/function/symbol values before validation,\n      // so a single undefined property no longer causes the whole object to be rejected.\n      const filtered = JSON.parse(JSON.stringify(properties)) as { [key: string]: ValidPropertyType };\n      if (isValidObject(filtered)) {\n        this.properties = filtered;\n      }\n    } catch {\n      // no-op: invalid properties are ignored\n    }\n    return this;\n  }\n\n  getEventProperties(): RevenueEventProperties {\n    const eventProperties: RevenueEventProperties = this.properties ? { ...this.properties } : {};\n    eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n    eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n    eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n    eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n    eventProperties[RevenueProperty.REVENUE_CURRENCY] = this.currency;\n    eventProperties[RevenueProperty.REVENUE] = this.revenue;\n    eventProperties[RevenueProperty.RECEIPT] = this.receipt;\n    eventProperties[RevenueProperty.RECEIPT_SIG] = this.receiptSig;\n    return eventProperties;\n  }\n}\n\nexport interface RevenueEventProperties {\n  [RevenueProperty.REVENUE_PRODUCT_ID]?: string;\n  [RevenueProperty.REVENUE_QUANTITY]?: number;\n  [RevenueProperty.REVENUE_PRICE]?: number;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE_CURRENCY]?: string;\n  [RevenueProperty.REVENUE]?: number;\n  [RevenueProperty.RECEIPT]?: string;\n  [RevenueProperty.RECEIPT_SIG]?: string;\n}\n\nexport enum RevenueProperty {\n  REVENUE_PRODUCT_ID = '$productId',\n  REVENUE_QUANTITY = '$quantity',\n  REVENUE_PRICE = '$price',\n  REVENUE_TYPE = '$revenueType',\n  REVENUE_CURRENCY = '$currency',\n  REVENUE = '$revenue',\n  RECEIPT = '$receipt',\n  RECEIPT_SIG = '$receiptSig',\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType }\n  | Array<{ [key: string]: ValidPropertyType }>;\n","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\n\nexport const chunk = <T>(arr: T[], size: number) => {\n  const chunkSize = Math.max(size, 1);\n  return arr.reduce<T[][]>((chunks, element, index) => {\n    const chunkIndex = Math.floor(index / chunkSize);\n    if (!chunks[chunkIndex]) {\n      chunks[chunkIndex] = [];\n    }\n    chunks[chunkIndex].push(element);\n    return chunks;\n  }, []);\n};\n","export enum LogLevel {\n  None = 0,\n  Error = 1,\n  Warn = 2,\n  Verbose = 3,\n  Debug = 4,\n}\n","import { LogLevel } from './types/loglevel';\n\nconst PREFIX = 'Amplitude Logger ';\n\nexport interface ILogger {\n  disable(): void;\n  enable(logLevel: LogLevel): void;\n  log(...args: any[]): void;\n  warn(...args: any[]): void;\n  error(...args: any[]): void;\n  debug(...args: any[]): void;\n}\n\nexport interface LogConfig {\n  logger: ILogger;\n  logLevel: LogLevel;\n}\n\ntype TimeKey = 'start' | 'end';\n\nexport interface DebugContext {\n  type: string;\n  name: string;\n  args: string[] | string;\n  stacktrace?: string[] | string;\n  time?: { [key in TimeKey]?: string };\n  states?: { [key: string]: any };\n}\n\nexport class Logger implements ILogger {\n  logLevel: LogLevel;\n\n  constructor() {\n    this.logLevel = LogLevel.None;\n  }\n\n  disable(): void {\n    this.logLevel = LogLevel.None;\n  }\n\n  enable(logLevel: LogLevel = LogLevel.Warn): void {\n    this.logLevel = logLevel;\n  }\n\n  log(...args: any[]): void {\n    if (this.logLevel < LogLevel.Verbose) {\n      return;\n    }\n    console.log(`${PREFIX}[Log]: ${args.join(' ')}`);\n  }\n\n  warn(...args: any[]): void {\n    if (this.logLevel < LogLevel.Warn) {\n      return;\n    }\n    console.warn(`${PREFIX}[Warn]: ${args.join(' ')}`);\n  }\n\n  error(...args: any[]): void {\n    if (this.logLevel < LogLevel.Error) {\n      return;\n    }\n    console.error(`${PREFIX}[Error]: ${args.join(' ')}`);\n  }\n\n  debug(...args: any[]): void {\n    if (this.logLevel < LogLevel.Debug) {\n      return;\n    }\n    // console.debug output is hidden by default in chrome\n    console.log(`${PREFIX}[Debug]: ${args.join(' ')}`);\n  }\n}\n","import { OfflineDisabled } from './types/offline';\nimport { ServerZoneType } from './types/server-zone';\nimport { Transport } from './types/transport';\nimport { Event } from './types/event/event';\nimport { Plan } from './types/event/plan';\nimport { IngestionMetadata } from './types/event/ingestion-metadata';\nimport { Storage } from './types/storage';\nimport {\n  AMPLITUDE_SERVER_URL,\n  AMPLITUDE_BATCH_SERVER_URL,\n  EU_AMPLITUDE_SERVER_URL,\n  EU_AMPLITUDE_BATCH_SERVER_URL,\n  DEFAULT_INSTANCE_NAME,\n} from './types/constants';\n\nimport { Logger, ILogger } from './logger';\nimport { LogLevel } from './types/loglevel';\nimport { ConfigOptions, IRequestMetadata, IHistogramOptions, HistogramKey, IConfig } from './types/config/core-config';\n\nexport const getDefaultConfig = () => ({\n  flushMaxRetries: 12,\n  flushQueueSize: 200,\n  flushIntervalMillis: 10000,\n  instanceName: DEFAULT_INSTANCE_NAME,\n  logLevel: LogLevel.Warn,\n  loggerProvider: new Logger(),\n  offline: false,\n  optOut: false,\n  serverUrl: AMPLITUDE_SERVER_URL,\n  serverZone: 'US' as ServerZoneType,\n  useBatch: false,\n});\nexport class Config implements IConfig {\n  apiKey: string;\n  flushIntervalMillis: number;\n  flushMaxRetries: number;\n  flushQueueSize: number;\n  instanceName?: string;\n  loggerProvider: ILogger;\n  logLevel: LogLevel;\n  minIdLength?: number;\n  offline?: boolean | typeof OfflineDisabled;\n  plan?: Plan;\n  ingestionMetadata?: IngestionMetadata;\n  serverUrl: string | undefined;\n  serverZone?: ServerZoneType;\n  transportProvider: Transport;\n  storageProvider?: Storage<Event[]>;\n  useBatch: boolean;\n  requestMetadata?: RequestMetadata;\n\n  protected _optOut = false;\n  get optOut() {\n    return this._optOut;\n  }\n  set optOut(optOut: boolean) {\n    this._optOut = optOut;\n  }\n\n  constructor(options: ConfigOptions) {\n    const defaultConfig = getDefaultConfig();\n    this.apiKey = options.apiKey;\n    this.flushIntervalMillis = options.flushIntervalMillis ?? defaultConfig.flushIntervalMillis;\n    this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n    this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n    this.instanceName = options.instanceName || defaultConfig.instanceName;\n    this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n    this.logLevel = options.logLevel ?? defaultConfig.logLevel;\n    this.minIdLength = options.minIdLength;\n    this.plan = options.plan;\n    this.ingestionMetadata = options.ingestionMetadata;\n    this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n    this.optOut = options.optOut ?? defaultConfig.optOut;\n    this.serverUrl = options.serverUrl;\n    this.serverZone = options.serverZone || defaultConfig.serverZone;\n    this.storageProvider = options.storageProvider;\n    this.transportProvider = options.transportProvider;\n    this.useBatch = options.useBatch ?? defaultConfig.useBatch;\n    this.loggerProvider.enable(this.logLevel);\n\n    const serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n    this.serverZone = serverConfig.serverZone;\n    this.serverUrl = serverConfig.serverUrl;\n  }\n}\n\nexport const getServerUrl = (serverZone: ServerZoneType, useBatch: boolean) => {\n  if (serverZone === 'EU') {\n    return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n  }\n  return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\n\nexport const createServerConfig = (\n  serverUrl = '',\n  serverZone: ServerZoneType = getDefaultConfig().serverZone,\n  useBatch: boolean = getDefaultConfig().useBatch,\n) => {\n  if (serverUrl) {\n    return { serverUrl, serverZone: undefined };\n  }\n  const _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n  return {\n    serverZone: _serverZone,\n    serverUrl: getServerUrl(_serverZone, useBatch),\n  };\n};\n\nexport class RequestMetadata implements IRequestMetadata {\n  sdk: {\n    metrics: {\n      histogram: HistogramOptions;\n    };\n  };\n\n  constructor() {\n    this.sdk = {\n      metrics: {\n        histogram: {},\n      },\n    };\n  }\n\n  recordHistogram<T extends HistogramKey>(key: T, value: HistogramOptions[T]) {\n    this.sdk.metrics.histogram[key] = value;\n  }\n}\n\nclass HistogramOptions implements IHistogramOptions {\n  remote_config_fetch_time_IDB?: number;\n  remote_config_fetch_time_API_success?: number;\n  remote_config_fetch_time_API_fail?: number;\n}\n","/**\n * Checks if an HTTP status code indicates success (2xx range)\n * @param code - The HTTP status code to check\n * @returns true if the status code is in the 2xx range, false otherwise\n */\nexport function isSuccessStatusCode(code: number): boolean {\n  return code >= 200 && code < 300;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { AmplitudeCore } from '../core-client';\nimport { LogConfig, DebugContext } from '../logger';\nimport { LogLevel } from '../types/loglevel';\n\nexport const getStacktrace = (ignoreDepth = 0): string[] => {\n  const trace = new Error().stack || '';\n  return trace\n    .split('\\n')\n    .slice(2 + ignoreDepth)\n    .map((text) => text.trim());\n};\n\n// This hook makes sure we always get the latest logger and logLevel.\nexport const getClientLogConfig = (client: AmplitudeCore) => (): LogConfig => {\n  const { loggerProvider: logger, logLevel } = { ...client.config };\n  return {\n    logger,\n    logLevel,\n  };\n};\n\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport const getValueByStringPath = (obj: any, path: string): any => {\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n  path = path.replace(/^\\./, ''); // strip a leading dot\n  for (const attr of path.split('.')) {\n    if (attr in obj) {\n      obj = obj[attr];\n    } else {\n      return;\n    }\n  }\n  return obj;\n};\n\nexport const getClientStates = (client: AmplitudeCore, paths: Array<string>) => (): { [key: string]: any } => {\n  const res: { [key: string]: any } = {};\n  for (const path of paths) {\n    res[path] = getValueByStringPath(client, path);\n  }\n  return res;\n};\n\nexport const debugWrapper =\n  <T extends Array<any>, R>(\n    fn: (...args: T) => R,\n    fnName: string,\n    getLogConfig: () => LogConfig,\n    getStates?: () => { [key: string]: any },\n    fnContext: any = null,\n  ) =>\n  (...args: T): R => {\n    const { logger, logLevel } = getLogConfig();\n    // return early if possible to reduce overhead\n    if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n      return fn.apply(fnContext, args);\n    }\n    const debugContext: DebugContext = {\n      type: 'invoke public method',\n      name: fnName,\n      args,\n      stacktrace: getStacktrace(1),\n      time: {\n        start: new Date().toISOString(),\n      },\n      states: {},\n    };\n    if (getStates && debugContext.states) {\n      debugContext.states.before = getStates();\n    }\n    const result = fn.apply(fnContext, args);\n    if (result && (result as any).promise) {\n      // if result is a promise, add the callback\n      (result as any).promise.then(() => {\n        if (getStates && debugContext.states) {\n          debugContext.states.after = getStates();\n        }\n        if (debugContext.time) {\n          debugContext.time.end = new Date().toISOString();\n        }\n        logger.debug(JSON.stringify(debugContext, null, 2));\n      });\n    } else {\n      if (getStates && debugContext.states) {\n        debugContext.states.after = getStates();\n      }\n      if (debugContext.time) {\n        debugContext.time.end = new Date().toISOString();\n      }\n      logger.debug(JSON.stringify(debugContext, null, 2));\n    }\n    return result;\n  };\n","import { DestinationPlugin } from '../types/plugin';\nimport { Event } from '../types/event/event';\nimport { Result } from '../types/result';\nimport { Status } from '../types/status';\nimport {\n  Response,\n  InvalidResponse,\n  PayloadTooLargeResponse,\n  RateLimitResponse,\n  SuccessResponse,\n} from '../types/response';\nimport {\n  INVALID_API_KEY,\n  MAX_RETRIES_EXCEEDED_MESSAGE,\n  MISSING_API_KEY_MESSAGE,\n  SUCCESS_MESSAGE,\n  UNEXPECTED_ERROR_MESSAGE,\n} from '../types/messages';\nimport {\n  AMPLITUDE_BATCH_SERVER_URL,\n  AMPLITUDE_SERVER_URL,\n  EU_AMPLITUDE_BATCH_SERVER_URL,\n  EU_AMPLITUDE_SERVER_URL,\n  STORAGE_PREFIX,\n} from '../types/constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig, RequestMetadata } from '../config';\nimport { UUID } from '../utils/uuid';\nimport { IConfig } from '../types/config/core-config';\nimport { EventCallback } from '../types/event-callback';\nimport { IDiagnosticsClient } from '../diagnostics/diagnostics-client';\nimport { isSuccessStatusCode } from '../utils/status-code';\nimport { getStacktrace } from '../utils/debug';\n\nexport interface Context {\n  event: Event;\n  attempts: number;\n  callback: EventCallback;\n  timeout: number;\n}\n\nconst DEFAULT_AMPLITUDE_SERVER_URLS = new Set([\n  AMPLITUDE_SERVER_URL,\n  EU_AMPLITUDE_SERVER_URL,\n  AMPLITUDE_BATCH_SERVER_URL,\n  EU_AMPLITUDE_BATCH_SERVER_URL,\n]);\n\nconst shouldCompressUploadBodyForRequest = (serverUrl: string, enableRequestBodyCompression = false) => {\n  if (DEFAULT_AMPLITUDE_SERVER_URLS.has(serverUrl)) {\n    return true;\n  }\n\n  return enableRequestBodyCompression;\n};\n\nfunction getErrorMessage(error: unknown) {\n  if (error instanceof Error) return error.message;\n  return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n  let responseBodyString = '';\n  try {\n    if ('body' in res) {\n      responseBodyString = JSON.stringify(res.body, null, 2);\n    }\n  } catch {\n    // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n  }\n  return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n  name = 'amplitude';\n  type = 'destination' as const;\n\n  retryTimeout = 1000;\n  throttleTimeout = 30000;\n  storageKey = '';\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: IConfig;\n  // Indicator of whether events that are scheduled (but not flushed yet).\n  // When flush:\n  //   1. assign `scheduleId` to `flushId`\n  //   2. set `scheduleId` to null\n  scheduleId: ReturnType<typeof setTimeout> | null = null;\n  // Timeout in milliseconds of current schedule\n  scheduledTimeout = 0;\n  // Indicator of whether current flush resolves.\n  // When flush resolves, set `flushId` to null\n  flushId: ReturnType<typeof setTimeout> | null = null;\n  queue: Context[] = [];\n  diagnosticsClient: IDiagnosticsClient | undefined;\n\n  constructor(context?: { diagnosticsClient: IDiagnosticsClient }) {\n    this.diagnosticsClient = context?.diagnosticsClient;\n  }\n\n  async setup(config: IConfig): Promise<undefined> {\n    this.config = config;\n\n    this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n    const unsent = await this.config.storageProvider?.get(this.storageKey);\n    if (unsent && unsent.length > 0) {\n      void Promise.all(unsent.map((event: Event) => this.execute(event))).catch();\n    }\n\n    return Promise.resolve(undefined);\n  }\n\n  execute(event: Event): Promise<Result> {\n    // Assign insert_id for dropping invalid event later\n    if (!event.insert_id) {\n      event.insert_id = UUID();\n    }\n\n    return new Promise((resolve) => {\n      const context = {\n        event,\n        attempts: 0,\n        callback: (result: Result) => resolve(result),\n        timeout: 0,\n      };\n      this.queue.push(context);\n      this.schedule(this.config.flushIntervalMillis);\n      this.saveEvents();\n    });\n  }\n\n  removeEventsExceedFlushMaxRetries(list: Context[]) {\n    return list.filter((context) => {\n      context.attempts += 1;\n      if (context.attempts < this.config.flushMaxRetries) {\n        return true;\n      }\n      void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n      return false;\n    });\n  }\n\n  scheduleEvents(list: Context[]) {\n    list.forEach((context) => {\n      this.schedule(context.timeout === 0 ? this.config.flushIntervalMillis : context.timeout);\n    });\n  }\n\n  // Schedule a flush in timeout when\n  // 1. No schedule\n  // 2. Timeout greater than existing timeout.\n  // This makes sure that when throttled, no flush when throttle timeout expires.\n  schedule(timeout: number) {\n    if (this.config.offline) {\n      return;\n    }\n\n    if (this.scheduleId === null || (this.scheduleId && timeout > this.scheduledTimeout)) {\n      if (this.scheduleId) {\n        clearTimeout(this.scheduleId);\n      }\n      this.scheduledTimeout = timeout;\n      this.scheduleId = setTimeout(() => {\n        this.queue = this.queue.map((context) => {\n          context.timeout = 0;\n          return context;\n        });\n        void this.flush(true);\n      }, timeout);\n      return;\n    }\n  }\n\n  // Mark current schedule is flushed.\n  resetSchedule() {\n    this.scheduleId = null;\n    this.scheduledTimeout = 0;\n  }\n\n  // Flush all events regardless of their timeout\n  async flush(useRetry = false) {\n    // Skip flush if offline\n    if (this.config.offline) {\n      this.resetSchedule();\n      this.config.loggerProvider.debug('Skipping flush while offline.');\n      return;\n    }\n\n    if (this.flushId) {\n      this.resetSchedule();\n      this.config.loggerProvider.debug('Skipping flush because previous flush has not resolved.');\n      return;\n    }\n\n    this.flushId = this.scheduleId;\n    this.resetSchedule();\n\n    const list: Context[] = [];\n    const later: Context[] = [];\n    this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n\n    const batches = chunk(list, this.config.flushQueueSize);\n\n    // Promise.all() doesn't guarantee resolve order.\n    // Sequentially resolve to make sure backend receives events in order\n    await batches.reduce(async (promise, batch) => {\n      await promise;\n      return await this.send(batch, useRetry);\n    }, Promise.resolve());\n\n    // Mark current flush is done\n    this.flushId = null;\n\n    this.scheduleEvents(this.queue);\n  }\n\n  async send(list: Context[], useRetry = true) {\n    if (!this.config.apiKey) {\n      return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n    }\n\n    const payload = {\n      api_key: this.config.apiKey,\n      events: list.map((context) => {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { extra, ...eventWithoutExtra } = context.event;\n        return eventWithoutExtra;\n      }),\n      options: {\n        min_id_length: this.config.minIdLength,\n      },\n      client_upload_time: new Date().toISOString(),\n      request_metadata: this.config.requestMetadata,\n    };\n    this.config.requestMetadata = new RequestMetadata();\n\n    try {\n      const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n      const shouldCompressUploadBody = shouldCompressUploadBodyForRequest(\n        serverUrl,\n        this.config.enableRequestBodyCompression,\n      );\n      const res = await this.config.transportProvider.send(serverUrl, payload, shouldCompressUploadBody);\n      if (res === null) {\n        this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n        return;\n      }\n      if (!useRetry) {\n        if ('body' in res) {\n          this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n        } else {\n          this.fulfillRequest(list, res.statusCode, res.status);\n        }\n        return;\n      }\n      this.handleResponse(res, list);\n    } catch (e) {\n      const errorMessage = getErrorMessage(e);\n      this.config.loggerProvider.error(errorMessage);\n\n      this.diagnosticsClient?.recordEvent('analytics.events.unsuccessful.from.catch.error', {\n        events: list.map((context) => context.event.event_type),\n        message: errorMessage,\n        stack_trace: getStacktrace(),\n      });\n\n      this.handleResponse({ status: Status.Failed, statusCode: 0 }, list);\n    }\n  }\n\n  handleResponse(res: Response, list: Context[]) {\n    if (!isSuccessStatusCode(res.statusCode)) {\n      this.diagnosticsClient?.recordEvent('analytics.events.unsuccessful', {\n        events: list.map((context) => context.event.event_type),\n        code: res.statusCode,\n        status: res.status,\n        body: getResponseBodyString(res),\n        stack_trace: getStacktrace(),\n      });\n    }\n\n    const { status } = res;\n\n    switch (status) {\n      case Status.Success: {\n        this.handleSuccessResponse(res, list);\n        break;\n      }\n      case Status.Invalid: {\n        this.handleInvalidResponse(res, list);\n        break;\n      }\n      case Status.PayloadTooLarge: {\n        this.handlePayloadTooLargeResponse(res, list);\n        break;\n      }\n      case Status.RateLimit: {\n        this.handleRateLimitResponse(res, list);\n        break;\n      }\n      default: {\n        // log intermediate event status before retry\n        this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n        this.handleOtherResponse(list);\n        break;\n      }\n    }\n  }\n\n  handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n    this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n  }\n\n  handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n    if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    const dropIndex = [\n      ...Object.values(res.body.eventsWithInvalidFields),\n      ...Object.values(res.body.eventsWithMissingFields),\n      ...Object.values(res.body.eventsWithInvalidIdLengths),\n      ...res.body.silencedEvents,\n    ].flat();\n    const dropIndexSet = new Set(dropIndex);\n\n    const retry = list.filter((context, index) => {\n      if (dropIndexSet.has(index)) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    const tryable = this.removeEventsExceedFlushMaxRetries(retry);\n    this.scheduleEvents(tryable);\n  }\n\n  handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n    if (list.length === 1) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    // log intermediate event status before retry\n    this.config.loggerProvider.warn(getResponseBodyString(res));\n\n    this.config.flushQueueSize /= 2;\n\n    const tryable = this.removeEventsExceedFlushMaxRetries(list);\n    this.scheduleEvents(tryable);\n  }\n\n  handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n    const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n    const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n    const throttledIndex = res.body.throttledEvents;\n    const dropUserIdsSet = new Set(dropUserIds);\n    const dropDeviceIdsSet = new Set(dropDeviceIds);\n    const throttledIndexSet = new Set(throttledIndex);\n\n    const retry = list.filter((context, index) => {\n      if (\n        (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n        (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n      ) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      if (throttledIndexSet.has(index)) {\n        context.timeout = this.throttleTimeout;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    const tryable = this.removeEventsExceedFlushMaxRetries(retry);\n    this.scheduleEvents(tryable);\n  }\n\n  handleOtherResponse(list: Context[]) {\n    const later = list.map((context) => {\n      context.timeout = context.attempts * this.retryTimeout;\n      return context;\n    });\n\n    const tryable = this.removeEventsExceedFlushMaxRetries(later);\n    this.scheduleEvents(tryable);\n  }\n\n  fulfillRequest(list: Context[], code: number, message: string) {\n    // Record diagnostics for dropped events (non-success status codes)\n    if (!isSuccessStatusCode(code)) {\n      this.diagnosticsClient?.increment('analytics.events.dropped', list.length);\n      this.diagnosticsClient?.recordEvent('analytics.events.dropped', {\n        events: list.map((context) => context.event.event_type),\n        code: code,\n        message: message,\n        stack_trace: getStacktrace(),\n      });\n    } else {\n      this.diagnosticsClient?.increment('analytics.events.sent', list.length);\n    }\n    this.removeEvents(list);\n    list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n  }\n\n  /**\n   * This is called on\n   * 1) new events are added to queue; or\n   * 2) response comes back for a request\n   *\n   * Update the event storage based on the queue\n   */\n  saveEvents() {\n    if (!this.config.storageProvider) {\n      return;\n    }\n\n    const updatedEvents = this.queue.map((context) => context.event);\n    void this.config.storageProvider.set(this.storageKey, updatedEvents);\n  }\n\n  /**\n   * This is called on response comes back for a request\n   */\n  removeEvents(eventsToRemove: Context[]) {\n    this.queue = this.queue.filter(\n      (queuedContext) => !eventsToRemove.some((context) => context.event.insert_id === queuedContext.event.insert_id),\n    );\n\n    this.saveEvents();\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { Transport } from '../types/transport';\nimport { Status } from '../types/status';\nimport { Payload } from '../types/payload';\nimport { Response } from '../types/response';\nimport { isSuccessStatusCode } from '../utils/status-code';\n\nexport class BaseTransport implements Transport {\n  send(_serverUrl: string, _payload: Payload, _enableRequestBodyCompression?: boolean): Promise<Response | null> {\n    return Promise.resolve(null);\n  }\n\n  buildResponse(responseJSON: Record<string, any>): Response | null {\n    if (typeof responseJSON !== 'object') {\n      return null;\n    }\n\n    const statusCode = responseJSON.code || 0;\n    const status = this.buildStatus(statusCode);\n\n    switch (status) {\n      case Status.Success:\n        return {\n          status,\n          statusCode,\n          body: {\n            eventsIngested: responseJSON.events_ingested ?? 0,\n            payloadSizeBytes: responseJSON.payload_size_bytes ?? 0,\n            serverUploadTime: responseJSON.server_upload_time ?? 0,\n          },\n        };\n\n      case Status.Invalid:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            missingField: responseJSON.missing_field ?? '',\n            eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n            eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n            eventsWithInvalidIdLengths: responseJSON.events_with_invalid_id_lengths ?? {},\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            silencedDevices: responseJSON.silenced_devices ?? [],\n            silencedEvents: responseJSON.silenced_events ?? [],\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.PayloadTooLarge:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n          },\n        };\n      case Status.RateLimit:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledUsers: responseJSON.throttled_users ?? {},\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.Timeout:\n      default:\n        return {\n          status,\n          statusCode,\n        };\n    }\n  }\n\n  buildStatus(code: number): Status {\n    if (isSuccessStatusCode(code)) {\n      return Status.Success;\n    }\n\n    if (code === 429) {\n      return Status.RateLimit;\n    }\n\n    if (code === 413) {\n      return Status.PayloadTooLarge;\n    }\n\n    if (code === 408) {\n      return Status.Timeout;\n    }\n\n    if (code >= 400 && code < 500) {\n      return Status.Invalid;\n    }\n\n    if (code >= 500) {\n      return Status.Failed;\n    }\n\n    return Status.Unknown;\n  }\n}\n","/**\n * @deprecated use ServerZoneType instead\n */\nexport enum ServerZone {\n  US = 'US',\n  EU = 'EU',\n  /**\n   * Add for session-replay-browser migration from analytics-type v1.x.\n   */\n  STAGING = 'STAGING',\n}\n\nexport type ServerZoneType = 'US' | 'EU';\n","export const OfflineDisabled = null;\n","export { AmplitudeCore } from './core-client';\nexport { CoreClient, PluginHost } from './types/client/core-client';\nexport { AnalyticsClient } from './types/client/analytics-client';\nexport { AmplitudeContext } from './types/amplitude-context';\nexport { Identify, IIdentify, ValidPropertyType } from './identify';\nexport { Revenue, IRevenue, RevenueProperty } from './revenue';\nexport { Destination } from './plugins/destination';\nexport { IdentityEventSender } from './plugins/identity';\nexport { Config, RequestMetadata } from './config';\nexport { IConfig } from './types/config/core-config';\nexport { Logger, ILogger, LogConfig } from './logger';\nexport { getGlobalScope } from './global-scope';\nexport { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';\nexport { isNewSession } from './session';\nexport { getCookieName, getOldCookieName } from './cookie-name';\nexport { getLanguage } from './language';\nexport { getQueryParams } from './query-params';\n\nexport { returnWrapper, AmplitudeReturn } from './utils/return-wrapper';\nexport { debugWrapper, getClientLogConfig, getClientStates } from './utils/debug';\nexport { UUID } from './utils/uuid';\nexport { createIdentifyEvent } from './utils/event-builder';\nexport { isUrlMatchAllowlist, getDecodeURI } from './utils/url-utils';\nexport { generateHashCode, isTimestampInSample } from './utils/sampling';\nexport { omitUndefined } from './utils/omit-undefined';\n\nexport { MemoryStorage } from './storage/memory';\nexport { CookieStorage, isDomainEqual, decodeCookieValue } from './storage/cookie';\nexport { getStorageKey } from './storage/helpers';\n\nexport { BrowserStorage } from './storage/browser-storage';\n\nexport { DiagnosticsClient, IDiagnosticsClient } from './diagnostics/diagnostics-client';\nexport { registerSdkLoaderMetadata } from './diagnostics/uncaught-sdk-errors';\n\nexport { BaseTransport } from './transports/base';\nexport { FetchTransport } from './transports/fetch';\nexport {\n  compressToGzipArrayBuffer,\n  isCompressionStreamAvailable,\n  MIN_GZIP_UPLOAD_BODY_SIZE_BYTES,\n} from './transports/gzip';\n\nexport { RemoteConfigClient, IRemoteConfigClient, RemoteConfig, Source } from './remote-config/remote-config';\n\nexport { LogLevel } from './types/loglevel';\nexport { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './types/constants';\nexport { Storage, IdentityStorageType, CookieStorageConfig } from './types/storage';\nexport { consoleObserver } from './observers/console';\nexport {\n  Event,\n  IdentifyOperation,\n  SpecialEventType,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  IdentifyUserProperties,\n} from './types/event/event';\nexport { EventOptions, BaseEvent } from './types/event/base-event';\nexport { IngestionMetadata } from './types/event/ingestion-metadata';\nexport { ServerZoneType, ServerZone } from './types/server-zone';\nexport { OfflineDisabled } from './types/offline';\nexport { Plan } from './types/event/plan';\nexport { TransportType, Transport, TransportOptions, TransportTypeOrOptions } from './types/transport';\nexport { Payload } from './types/payload';\nexport { Response } from './types/response';\nexport { UserSession } from './types/user-session';\nexport {\n  Plugin,\n  BeforePlugin,\n  DestinationPlugin,\n  EnrichmentPlugin,\n  PluginType,\n  AnalyticsIdentity,\n} from './types/plugin';\nexport { Result } from './types/result';\nexport {\n  ElementInteractionsOptions,\n  Messenger,\n  ActionType,\n  DEFAULT_CSS_SELECTOR_ALLOWLIST,\n  DEFAULT_DATA_ATTRIBUTE_PREFIX,\n  DEFAULT_ACTION_CLICK_ALLOWLIST,\n  DEFAULT_EXPOSURE_DURATION,\n  LabeledEvent,\n  Trigger,\n  DataSource,\n} from './types/element-interactions';\n\nexport {\n  FrustrationInteractionsOptions,\n  DEFAULT_DEAD_CLICK_ALLOWLIST,\n  DEFAULT_RAGE_CLICK_ALLOWLIST,\n  DEFAULT_ERROR_CLICK_ALLOWLIST,\n  DEFAULT_RAGE_CLICK_THRESHOLD,\n  DEFAULT_RAGE_CLICK_WINDOW_MS,\n  DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD,\n  DEFAULT_DEAD_CLICK_WINDOW_MS,\n} from './types/frustration-interactions';\nexport { PageTrackingOptions, PageTrackingTrackOn, PageTrackingHistoryChanges } from './types/page-view-tracking';\nexport { FormInteractionsOptions } from './types/form-interactions';\nexport { Status } from './types/status';\n\nexport { NetworkEventCallback, networkObserver } from './observers/network';\nexport { NetworkRequestEvent, IRequestWrapper, JsonObject, JsonValue, JsonArray } from './network-request-event';\nexport { NetworkTrackingOptions, NetworkCaptureRule } from './types/network-tracking';\nexport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './types/constants';\n\nexport { PageUrlEnrichmentOptions } from './types/page-url-enrichment';\nexport { CustomEnrichmentOptions } from './types/custom-enrichment';\nexport { PerformanceTrackingOptions, MainThreadBlockOptions } from './types/performance-tracking';\n\n// Campaign\nexport { Campaign, UTMParameters, ReferrerParameters, ClickIdParameters, ICampaignParser } from './types/campaign';\nexport { EMPTY_VALUE, BASE_CAMPAIGN, MKTG } from './types/constants';\nexport { CampaignParser } from './campaign/campaign-parser';\nexport {\n  getPageTitle,\n  TEXT_MASK_ATTRIBUTE,\n  MASKED_TEXT_VALUE,\n  replaceSensitiveString,\n  CC_REGEX,\n  SSN_REGEX,\n  EMAIL_REGEX,\n} from './plugins/helpers';\n\n// Browser\nexport {\n  BrowserConfig,\n  BrowserOptions,\n  DefaultTrackingOptions,\n  TrackingOptions,\n  TrackingMethod,\n  AutocaptureOptions,\n  CookieOptions,\n  AttributionOptions,\n  RemoteConfigOptions,\n} from './types/config/browser-config';\nexport { BrowserClient } from './types/client/browser-client';\n\n// Node\nexport { NodeClient } from './types/client/node-client';\nexport { NodeConfig, NodeOptions } from './types/config/node-config';\n\n// React Native\nexport {\n  ReactNativeConfig,\n  ReactNativeTrackingOptions,\n  ReactNativeOptions,\n  ReactNativeAttributionOptions,\n} from './types/config/react-native-config';\nexport { ReactNativeClient } from './types/client/react-native-client';\n\nexport { Observable, asyncMap, merge, multicast, Unsubscribable } from './utils/observable';\n\nexport { InstanceProxy } from './types/proxy';\nexport { safeJsonStringify } from './utils/safe-stringify';\n\n// Messenger (cross-window communication)\nexport type { BaseWindowMessenger, ActionHandler } from './messenger/base-window-messenger';\nexport { getOrCreateWindowMessenger } from './messenger/base-window-messenger';\nexport { enableBackgroundCapture } from './messenger/background-capture';\nexport {\n  AMPLITUDE_ORIGIN,\n  AMPLITUDE_ORIGIN_EU,\n  AMPLITUDE_ORIGIN_STAGING,\n  AMPLITUDE_ORIGINS_MAP,\n  AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL,\n} from './messenger/constants';\n\nexport { ExcludeInternalReferrersOptions, EXCLUDE_INTERNAL_REFERRERS_CONDITIONS } from './types/config/browser-config';\n\nexport { VideoObserver, State as VideoState, type VideoObserverParams } from './observers/video';\nexport { EmbeddedVideoPlayer, type Vendor as VideoVendor } from './video-analytics/types';\nexport { isChromeExtension } from './utils/environment';\n","export const VERSION = '1.5.58';\n","import { UUID, BeforePlugin, NodeConfig, Event } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\n\nexport class Context implements BeforePlugin {\n  name = 'context';\n  type = 'before' as const;\n\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: NodeConfig;\n  eventId = 0;\n  library = `amplitude-node-ts/${VERSION}`;\n\n  setup(config: NodeConfig): Promise<undefined> {\n    this.config = config;\n    return Promise.resolve(undefined);\n  }\n\n  execute(context: Event): Promise<Event> {\n    return new Promise((resolve) => {\n      const time = new Date().getTime();\n\n      const contextEvent: Event = {\n        time,\n        insert_id: UUID(),\n        plan: this.config.plan,\n        ...(this.config.ingestionMetadata && {\n          ingestion_metadata: {\n            source_name: this.config.ingestionMetadata.sourceName,\n            source_version: this.config.ingestionMetadata.sourceVersion,\n          },\n        }),\n        ...context,\n        event_id: this.eventId++,\n        library: this.library,\n      };\n      return resolve(contextEvent);\n    });\n  }\n}\n","import { BaseTransport, Payload, Response, Transport } from '@amplitude/analytics-core';\nimport * as http from 'http';\nimport * as https from 'https';\n\nexport class Http extends BaseTransport implements Transport {\n  send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    let protocol: typeof http | typeof https;\n    if (serverUrl.startsWith('http://')) {\n      protocol = http;\n    } else if (serverUrl.startsWith('https://')) {\n      protocol = https;\n    } else {\n      throw new Error('Invalid server url');\n    }\n\n    const url = new URL(serverUrl);\n    const requestPayload = JSON.stringify(payload);\n    const options = {\n      headers: {\n        'Content-Type': 'application/json',\n        'Content-Length': Buffer.byteLength(requestPayload),\n      },\n      hostname: url.hostname,\n      method: 'POST',\n      path: url.pathname,\n      port: url.port,\n      protocol: url.protocol,\n    };\n    return new Promise((resolve) => {\n      const req = protocol.request(options, (res) => {\n        res.setEncoding('utf8');\n        let responsePayload = '';\n        res.on('data', (chunk: string) => {\n          responsePayload += chunk;\n        });\n\n        res.on('end', () => {\n          if (res.complete && responsePayload.length > 0) {\n            try {\n              // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n              const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n              const result = this.buildResponse(parsedResponsePayload);\n              resolve(result);\n            } catch {\n              resolve(this.buildResponse({ code: res.statusCode }));\n            }\n          }\n        });\n      });\n      req.on('error', () => resolve(null));\n      req.end(requestPayload);\n    });\n  }\n}\n","import { Config, NodeOptions, NodeConfig as INodeConfig } from '@amplitude/analytics-core';\nimport { Http } from './transports/http';\n\nexport class NodeConfig extends Config implements INodeConfig {\n  constructor(apiKey: string, options?: NodeOptions) {\n    super({\n      transportProvider: new Http(),\n      ...options,\n      apiKey,\n    });\n  }\n}\n\nexport const useNodeConfig = (apiKey: string, overrides?: NodeOptions): INodeConfig => {\n  return new NodeConfig(apiKey, overrides);\n};\n","import {\n  AmplitudeCore,\n  Destination,\n  returnWrapper,\n  debugWrapper,\n  getClientLogConfig,\n  getClientStates,\n  NodeClient,\n  NodeConfig,\n  NodeOptions,\n} from '@amplitude/analytics-core';\nimport { Context } from './plugins/context';\nimport { useNodeConfig } from './config';\n\nexport class AmplitudeNode extends AmplitudeCore {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: NodeConfig;\n\n  init(apiKey = '', options?: NodeOptions) {\n    return returnWrapper(this._init({ ...options, apiKey }));\n  }\n  protected async _init(options: NodeOptions & { apiKey: string }) {\n    // Step 0: Block concurrent initialization\n    if (this.initializing) {\n      return;\n    }\n    this.initializing = true;\n\n    const nodeOptions = useNodeConfig(options.apiKey, {\n      ...options,\n    });\n\n    await super._init(nodeOptions);\n\n    await this.add(new Destination()).promise;\n    await this.add(new Context()).promise;\n\n    this.initializing = false;\n\n    await this.runQueuedFunctions('dispatchQ');\n  }\n}\n\nexport const createInstance = (): NodeClient => {\n  const client = new AmplitudeNode();\n  return {\n    init: debugWrapper(\n      client.init.bind(client),\n      'init',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    add: debugWrapper(\n      client.add.bind(client),\n      'add',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    remove: debugWrapper(\n      client.remove.bind(client),\n      'remove',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    track: debugWrapper(\n      client.track.bind(client),\n      'track',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    logEvent: debugWrapper(\n      client.logEvent.bind(client),\n      'logEvent',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    identify: debugWrapper(\n      client.identify.bind(client),\n      'identify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    groupIdentify: debugWrapper(\n      client.groupIdentify.bind(client),\n      'groupIdentify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setGroup: debugWrapper(\n      client.setGroup.bind(client),\n      'setGroup',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    revenue: debugWrapper(\n      client.revenue.bind(client),\n      'revenue',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    flush: debugWrapper(\n      client.flush.bind(client),\n      'flush',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setOptOut: debugWrapper(\n      client.setOptOut.bind(client),\n      'setOptOut',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n  };\n};\n\nexport default createInstance();\n","/* eslint-disable @typescript-eslint/unbound-method */\nexport {\n  AmplitudeReturn,\n  BaseEvent,\n  EventOptions,\n  IConfig,\n  Event,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  IdentifyOperation,\n  SpecialEventType,\n  IIdentify,\n  IRevenue,\n  RevenueProperty,\n  ILogger,\n  LogLevel,\n  Plugin,\n  BeforePlugin,\n  EnrichmentPlugin,\n  DestinationPlugin,\n  Result,\n  ServerZoneType,\n  ServerZone,\n  IdentityStorageType,\n  Storage,\n  TransportType,\n  OfflineDisabled,\n} from '@amplitude/analytics-core';\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport client from './node-client';\nexport { createInstance } from './node-client';\nexport const { add, groupIdentify, identify, init, logEvent, remove, revenue, setGroup, setOptOut, track, flush } =\n  client;\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\n// Export types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\nexport * as Types from './types';\n","'use strict';\n\nconst { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (str.includes(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\tthis.has.includes(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n","'use strict';\n\nmodule.exports = (key, isSelect) => {\n  if (key.meta && key.name !== 'escape') return;\n\n  if (key.ctrl) {\n    if (key.name === 'a') return 'first';\n    if (key.name === 'c') return 'abort';\n    if (key.name === 'd') return 'abort';\n    if (key.name === 'e') return 'last';\n    if (key.name === 'g') return 'reset';\n  }\n\n  if (isSelect) {\n    if (key.name === 'j') return 'down';\n    if (key.name === 'k') return 'up';\n  }\n\n  if (key.name === 'return') return 'submit';\n  if (key.name === 'enter') return 'submit'; // ctrl + J\n\n  if (key.name === 'backspace') return 'delete';\n  if (key.name === 'delete') return 'deleteForward';\n  if (key.name === 'abort') return 'abort';\n  if (key.name === 'escape') return 'exit';\n  if (key.name === 'tab') return 'next';\n  if (key.name === 'pagedown') return 'nextPage';\n  if (key.name === 'pageup') return 'prevPage'; // TODO create home() in prompt types (e.g. TextPrompt)\n\n  if (key.name === 'home') return 'home'; // TODO create end() in prompt types (e.g. TextPrompt)\n\n  if (key.name === 'end') return 'end';\n  if (key.name === 'up') return 'up';\n  if (key.name === 'down') return 'down';\n  if (key.name === 'right') return 'right';\n  if (key.name === 'left') return 'left';\n  return false;\n};","'use strict';\n\nmodule.exports = str => {\n  const pattern = ['[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)', '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'].join('|');\n  const RGX = new RegExp(pattern, 'g');\n  return typeof str === 'string' ? str.replace(RGX, '') : str;\n};","'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n  to(x, y) {\n    if (!y) return `${CSI}${x + 1}G`;\n    return `${CSI}${y + 1};${x + 1}H`;\n  },\n  move(x, y) {\n    let ret = '';\n\n    if (x < 0) ret += `${CSI}${-x}D`;\n    else if (x > 0) ret += `${CSI}${x}C`;\n\n    if (y < 0) ret += `${CSI}${-y}A`;\n    else if (y > 0) ret += `${CSI}${y}B`;\n\n    return ret;\n  },\n  up: (count = 1) => `${CSI}${count}A`,\n  down: (count = 1) => `${CSI}${count}B`,\n  forward: (count = 1) => `${CSI}${count}C`,\n  backward: (count = 1) => `${CSI}${count}D`,\n  nextLine: (count = 1) => `${CSI}E`.repeat(count),\n  prevLine: (count = 1) => `${CSI}F`.repeat(count),\n  left: `${CSI}G`,\n  hide: `${CSI}?25l`,\n  show: `${CSI}?25h`,\n  save: `${ESC}7`,\n  restore: `${ESC}8`\n}\n\nconst scroll = {\n  up: (count = 1) => `${CSI}S`.repeat(count),\n  down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n  screen: `${CSI}2J`,\n  up: (count = 1) => `${CSI}1J`.repeat(count),\n  down: (count = 1) => `${CSI}J`.repeat(count),\n  line: `${CSI}2K`,\n  lineEnd: `${CSI}K`,\n  lineStart: `${CSI}1K`,\n  lines(count) {\n    let clear = '';\n    for (let i = 0; i < count; i++)\n      clear += this.line + (i < count - 1 ? cursor.up() : '');\n    if (count)\n      clear += cursor.left;\n    return clear;\n  }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nconst strip = require('./strip');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst width = str => [...strip(str)].length;\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\n\n\nmodule.exports = function (prompt, perLine) {\n  if (!perLine) return erase.line + cursor.to(0);\n  let rows = 0;\n  const lines = prompt.split(/\\r?\\n/);\n\n  var _iterator = _createForOfIteratorHelper(lines),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      let line = _step.value;\n      rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return erase.lines(rows);\n};","'use strict';\n\nconst main = {\n  arrowUp: '↑',\n  arrowDown: '↓',\n  arrowLeft: '←',\n  arrowRight: '→',\n  radioOn: '◉',\n  radioOff: '◯',\n  tick: '✔',\n  cross: '✖',\n  ellipsis: '…',\n  pointerSmall: '›',\n  line: '─',\n  pointer: '❯'\n};\nconst win = {\n  arrowUp: main.arrowUp,\n  arrowDown: main.arrowDown,\n  arrowLeft: main.arrowLeft,\n  arrowRight: main.arrowRight,\n  radioOn: '(*)',\n  radioOff: '( )',\n  tick: '√',\n  cross: '×',\n  ellipsis: '...',\n  pointerSmall: '»',\n  line: '─',\n  pointer: '>'\n};\nconst figures = process.platform === 'win32' ? win : main;\nmodule.exports = figures;","'use strict';\n\nconst c = require('kleur');\n\nconst figures = require('./figures'); // rendering user input.\n\n\nconst styles = Object.freeze({\n  password: {\n    scale: 1,\n    render: input => '*'.repeat(input.length)\n  },\n  emoji: {\n    scale: 2,\n    render: input => '😃'.repeat(input.length)\n  },\n  invisible: {\n    scale: 0,\n    render: input => ''\n  },\n  default: {\n    scale: 1,\n    render: input => `${input}`\n  }\n});\n\nconst render = type => styles[type] || styles.default; // icon to signalize a prompt.\n\n\nconst symbols = Object.freeze({\n  aborted: c.red(figures.cross),\n  done: c.green(figures.tick),\n  exited: c.yellow(figures.cross),\n  default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.\n\n\nconst delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);\n\nmodule.exports = {\n  styles,\n  render,\n  symbols,\n  symbol,\n  delimiter,\n  item\n};","'use strict';\n\nconst strip = require('./strip');\n/**\n * @param {string} msg\n * @param {number} perLine\n */\n\n\nmodule.exports = function (msg, perLine) {\n  let lines = String(strip(msg) || '').split(/\\r?\\n/);\n  if (!perLine) return lines.length;\n  return lines.map(l => Math.ceil(l.length / perLine)).reduce((a, b) => a + b);\n};","'use strict';\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\n\nmodule.exports = (msg, opts = {}) => {\n  const tab = Number.isSafeInteger(parseInt(opts.margin)) ? new Array(parseInt(opts.margin)).fill(' ').join('') : opts.margin || '';\n  const width = opts.width;\n  return (msg || '').split(/\\r?\\n/g).map(line => line.split(/\\s+/g).reduce((arr, w) => {\n    if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width) arr[arr.length - 1] += ` ${w}`;else arr.push(`${tab}${w}`);\n    return arr;\n  }, [tab]).join('\\n')).join('\\n');\n};","'use strict';\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\n\nmodule.exports = (cursor, total, maxVisible) => {\n  maxVisible = maxVisible || total;\n  let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n  if (startIndex < 0) startIndex = 0;\n  let endIndex = Math.min(startIndex + maxVisible, total);\n  return {\n    startIndex,\n    endIndex\n  };\n};","'use strict';\n\nmodule.exports = {\n  action: require('./action'),\n  clear: require('./clear'),\n  style: require('./style'),\n  strip: require('./strip'),\n  figures: require('./figures'),\n  lines: require('./lines'),\n  wrap: require('./wrap'),\n  entriesToDisplay: require('./entriesToDisplay')\n};","'use strict';\n\nconst readline = require('readline');\n\nconst _require = require('../util'),\n      action = _require.action;\n\nconst EventEmitter = require('events');\n\nconst _require2 = require('sisteransi'),\n      beep = _require2.beep,\n      cursor = _require2.cursor;\n\nconst color = require('kleur');\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass Prompt extends EventEmitter {\n  constructor(opts = {}) {\n    super();\n    this.firstRender = true;\n    this.in = opts.stdin || process.stdin;\n    this.out = opts.stdout || process.stdout;\n\n    this.onRender = (opts.onRender || (() => void 0)).bind(this);\n\n    const rl = readline.createInterface({\n      input: this.in,\n      escapeCodeTimeout: 50\n    });\n    readline.emitKeypressEvents(this.in, rl);\n    if (this.in.isTTY) this.in.setRawMode(true);\n    const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;\n\n    const keypress = (str, key) => {\n      let a = action(key, isSelect);\n\n      if (a === false) {\n        this._ && this._(str, key);\n      } else if (typeof this[a] === 'function') {\n        this[a](key);\n      } else {\n        this.bell();\n      }\n    };\n\n    this.close = () => {\n      this.out.write(cursor.show);\n      this.in.removeListener('keypress', keypress);\n      if (this.in.isTTY) this.in.setRawMode(false);\n      rl.close();\n      this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n      this.closed = true;\n    };\n\n    this.in.on('keypress', keypress);\n  }\n\n  fire() {\n    this.emit('state', {\n      value: this.value,\n      aborted: !!this.aborted,\n      exited: !!this.exited\n    });\n  }\n\n  bell() {\n    this.out.write(beep);\n  }\n\n  render() {\n    this.onRender(color);\n    if (this.firstRender) this.firstRender = false;\n  }\n\n}\n\nmodule.exports = Prompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      clear = _require2.clear,\n      lines = _require2.lines,\n      figures = _require2.figures;\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass TextPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.msg = opts.message;\n    this.initial = opts.initial || ``;\n\n    this.validator = opts.validate || (() => true);\n\n    this.value = ``;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.clear = clear(``, this.out.columns);\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && this.initial) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(this.initial));\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(v);\n    }\n\n    this._value = v;\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  reset() {\n    this.value = ``;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.value = this.value || this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.red = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === `string`) {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      _this2.value = _this2.value || _this2.initial;\n      _this2.cursorOffset = 0;\n      _this2.cursor = _this2.rendered.length;\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.red = true;\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      _this2.done = true;\n      _this2.aborted = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write('\\n');\n\n      _this2.close();\n    })();\n  }\n\n  next() {\n    if (!this.placeholder) return this.bell();\n    this.value = this.initial;\n    this.cursor = this.rendered.length;\n    this.fire();\n    this.render();\n  }\n\n  moveCursor(n) {\n    if (this.placeholder) return;\n    this.cursor = this.cursor + n;\n    this.cursorOffset += n;\n  }\n\n  _(c, key) {\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${c}${s2}`;\n    this.red = false;\n    this.cursor = this.placeholder ? 0 : s1.length + 1;\n    this.render();\n  }\n\n  delete() {\n    if (this.isCursorAtStart()) return this.bell();\n    let s1 = this.value.slice(0, this.cursor - 1);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n\n    if (this.isCursorAtStart()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n      this.moveCursor(-1);\n    }\n\n    this.render();\n  }\n\n  deleteForward() {\n    if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor + 1);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n\n    if (this.isCursorAtEnd()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n    }\n\n    this.render();\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length;\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0 || this.placeholder) return this.bell();\n    this.moveCursor(-1);\n    this.render();\n  }\n\n  right() {\n    if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    this.moveCursor(1);\n    this.render();\n  }\n\n  isCursorAtStart() {\n    return this.cursor === 0 || this.placeholder && this.cursor === 1;\n  }\n\n  isCursorAtEnd() {\n    return this.cursor === this.rendered.length || this.placeholder && this.cursor === this.rendered.length + 1;\n  }\n\n  render() {\n    if (this.closed) return;\n\n    if (!this.firstRender) {\n      if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n\n    super.render();\n    this.outputError = '';\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.red ? color.red(this.rendered) : this.rendered].join(` `);\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n  }\n\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear,\n      figures = _require.figures,\n      wrap = _require.wrap,\n      entriesToDisplay = _require.entriesToDisplay;\n\nconst _require2 = require('sisteransi'),\n      cursor = _require2.cursor;\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\n\n\nclass SelectPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n    this.warn = opts.warn || '- This option is disabled';\n    this.cursor = opts.initial || 0;\n    this.choices = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string') ch = {\n        title: ch,\n        value: idx\n      };\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        description: ch && ch.description,\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = (this.choices[this.cursor] || {}).value;\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  moveCursor(n) {\n    this.cursor = n;\n    this.value = this.choices[n].value;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(0);\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    if (!this.selection.disabled) {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    } else this.bell();\n  }\n\n  first() {\n    this.moveCursor(0);\n    this.render();\n  }\n\n  last() {\n    this.moveCursor(this.choices.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.moveCursor(this.choices.length - 1);\n    } else {\n      this.moveCursor(this.cursor - 1);\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.choices.length - 1) {\n      this.moveCursor(0);\n    } else {\n      this.moveCursor(this.cursor + 1);\n    }\n\n    this.render();\n  }\n\n  next() {\n    this.moveCursor((this.cursor + 1) % this.choices.length);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') return this.submit();\n  }\n\n  get selection() {\n    return this.choices[this.cursor];\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let _entriesToDisplay = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex; // Print prompt\n\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.done ? this.selection.title : this.selection.disabled ? color.yellow(this.warn) : color.gray(this.hint)].join(' '); // Print choices\n\n    if (!this.done) {\n      this.outputText += '\\n';\n\n      for (let i = startIndex; i < endIndex; i++) {\n        let title,\n            prefix,\n            desc = '',\n            v = this.choices[i]; // Determine whether to display \"more choices\" indicators\n\n        if (i === startIndex && startIndex > 0) {\n          prefix = figures.arrowUp;\n        } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n          prefix = figures.arrowDown;\n        } else {\n          prefix = ' ';\n        }\n\n        if (v.disabled) {\n          title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n          prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : '  ') + prefix;\n        } else {\n          title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n          prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n\n          if (v.description && this.cursor === i) {\n            desc = ` - ${v.description}`;\n\n            if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n              desc = '\\n' + wrap(v.description, {\n                margin: 3,\n                width: this.out.columns\n              });\n            }\n          }\n        }\n\n        this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n      }\n    }\n\n    this.out.write(this.outputText);\n  }\n\n}\n\nmodule.exports = SelectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n      cursor = _require2.cursor,\n      erase = _require2.erase;\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass TogglePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = !!opts.initial;\n    this.active = opts.active || 'on';\n    this.inactive = opts.inactive || 'off';\n    this.initialValue = this.value;\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  deactivate() {\n    if (this.value === false) return this.bell();\n    this.value = false;\n    this.render();\n  }\n\n  activate() {\n    if (this.value === true) return this.bell();\n    this.value = true;\n    this.render();\n  }\n\n  delete() {\n    this.deactivate();\n  }\n\n  left() {\n    this.deactivate();\n  }\n\n  right() {\n    this.activate();\n  }\n\n  down() {\n    this.deactivate();\n  }\n\n  up() {\n    this.activate();\n  }\n\n  next() {\n    this.value = !this.value;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.value = !this.value;\n    } else if (c === '1') {\n      this.value = true;\n    } else if (c === '0') {\n      this.value = false;\n    } else return this.bell();\n\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' ');\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = TogglePrompt;","'use strict';\n\nclass DatePart {\n  constructor({\n    token,\n    date,\n    parts,\n    locales\n  }) {\n    this.token = token;\n    this.date = date || new Date();\n    this.parts = parts || [this];\n    this.locales = locales || {};\n  }\n\n  up() {}\n\n  down() {}\n\n  next() {\n    const currentIdx = this.parts.indexOf(this);\n    return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  setTo(val) {}\n\n  prev() {\n    let parts = [].concat(this.parts).reverse();\n    const currentIdx = parts.indexOf(this);\n    return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  toString() {\n    return String(this.date);\n  }\n\n}\n\nmodule.exports = DatePart;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours((this.date.getHours() + 12) % 24);\n  }\n\n  down() {\n    this.up();\n  }\n\n  toString() {\n    let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n    return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n  }\n\n}\n\nmodule.exports = Meridiem;","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n  n = n % 10;\n  return n === 1 ? 'st' : n === 2 ? 'nd' : n === 3 ? 'rd' : 'th';\n};\n\nclass Day extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setDate(this.date.getDate() + 1);\n  }\n\n  down() {\n    this.date.setDate(this.date.getDate() - 1);\n  }\n\n  setTo(val) {\n    this.date.setDate(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let date = this.date.getDate();\n    let day = this.date.getDay();\n    return this.token === 'DD' ? String(date).padStart(2, '0') : this.token === 'Do' ? date + pos(date) : this.token === 'd' ? day + 1 : this.token === 'ddd' ? this.locales.weekdaysShort[day] : this.token === 'dddd' ? this.locales.weekdays[day] : date;\n  }\n\n}\n\nmodule.exports = Day;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours(this.date.getHours() + 1);\n  }\n\n  down() {\n    this.date.setHours(this.date.getHours() - 1);\n  }\n\n  setTo(val) {\n    this.date.setHours(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let hours = this.date.getHours();\n    if (/h/.test(this.token)) hours = hours % 12 || 12;\n    return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n  }\n\n}\n\nmodule.exports = Hours;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n  }\n\n  down() {\n    this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMilliseconds(parseInt(val.substr(-this.token.length)));\n  }\n\n  toString() {\n    return String(this.date.getMilliseconds()).padStart(4, '0').substr(0, this.token.length);\n  }\n\n}\n\nmodule.exports = Milliseconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMinutes(this.date.getMinutes() + 1);\n  }\n\n  down() {\n    this.date.setMinutes(this.date.getMinutes() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMinutes(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let m = this.date.getMinutes();\n    return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n  }\n\n}\n\nmodule.exports = Minutes;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMonth(this.date.getMonth() + 1);\n  }\n\n  down() {\n    this.date.setMonth(this.date.getMonth() - 1);\n  }\n\n  setTo(val) {\n    val = parseInt(val.substr(-2)) - 1;\n    this.date.setMonth(val < 0 ? 0 : val);\n  }\n\n  toString() {\n    let month = this.date.getMonth();\n    let tl = this.token.length;\n    return tl === 2 ? String(month + 1).padStart(2, '0') : tl === 3 ? this.locales.monthsShort[month] : tl === 4 ? this.locales.months[month] : String(month + 1);\n  }\n\n}\n\nmodule.exports = Month;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setSeconds(this.date.getSeconds() + 1);\n  }\n\n  down() {\n    this.date.setSeconds(this.date.getSeconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setSeconds(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let s = this.date.getSeconds();\n    return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n  }\n\n}\n\nmodule.exports = Seconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setFullYear(this.date.getFullYear() + 1);\n  }\n\n  down() {\n    this.date.setFullYear(this.date.getFullYear() - 1);\n  }\n\n  setTo(val) {\n    this.date.setFullYear(val.substr(-4));\n  }\n\n  toString() {\n    let year = String(this.date.getFullYear()).padStart(4, '0');\n    return this.token.length === 2 ? year.substr(-2) : year;\n  }\n\n}\n\nmodule.exports = Year;","'use strict';\n\nmodule.exports = {\n  DatePart: require('./datepart'),\n  Meridiem: require('./meridiem'),\n  Day: require('./day'),\n  Hours: require('./hours'),\n  Milliseconds: require('./milliseconds'),\n  Minutes: require('./minutes'),\n  Month: require('./month'),\n  Seconds: require('./seconds'),\n  Year: require('./year')\n};","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear,\n      figures = _require.figures;\n\nconst _require2 = require('sisteransi'),\n      erase = _require2.erase,\n      cursor = _require2.cursor;\n\nconst _require3 = require('../dateparts'),\n      DatePart = _require3.DatePart,\n      Meridiem = _require3.Meridiem,\n      Day = _require3.Day,\n      Hours = _require3.Hours,\n      Milliseconds = _require3.Milliseconds,\n      Minutes = _require3.Minutes,\n      Month = _require3.Month,\n      Seconds = _require3.Seconds,\n      Year = _require3.Year;\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n  1: ({\n    token\n  }) => token.replace(/\\\\(.)/g, '$1'),\n  2: opts => new Day(opts),\n  // Day // TODO\n  3: opts => new Month(opts),\n  // Month\n  4: opts => new Year(opts),\n  // Year\n  5: opts => new Meridiem(opts),\n  // AM/PM // TODO (special)\n  6: opts => new Hours(opts),\n  // Hours\n  7: opts => new Minutes(opts),\n  // Minutes\n  8: opts => new Seconds(opts),\n  // Seconds\n  9: opts => new Milliseconds(opts) // Fractional seconds\n\n};\nconst dfltLocales = {\n  months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n  monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n  weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n  weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n};\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\nclass DatePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = 0;\n    this.typed = '';\n    this.locales = Object.assign(dfltLocales, opts.locales);\n    this._date = opts.initial || new Date();\n    this.errorMsg = opts.error || 'Please Enter A Valid Value';\n\n    this.validator = opts.validate || (() => true);\n\n    this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  get value() {\n    return this.date;\n  }\n\n  get date() {\n    return this._date;\n  }\n\n  set date(date) {\n    if (date) this._date.setTime(date.getTime());\n  }\n\n  set mask(mask) {\n    let result;\n    this.parts = [];\n\n    while (result = regex.exec(mask)) {\n      let match = result.shift();\n      let idx = result.findIndex(gr => gr != null);\n      this.parts.push(idx in regexGroups ? regexGroups[idx]({\n        token: result[idx] || match,\n        date: this.date,\n        parts: this.parts,\n        locales: this.locales\n      }) : result[idx] || match);\n    }\n\n    let parts = this.parts.reduce((arr, i) => {\n      if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string') arr[arr.length - 1] += i;else arr.push(i);\n      return arr;\n    }, []);\n    this.parts.splice(0);\n    this.parts.push(...parts);\n    this.reset();\n  }\n\n  moveCursor(n) {\n    this.typed = '';\n    this.cursor = n;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === 'string') {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.color = 'red';\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      _this2.done = true;\n      _this2.aborted = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write('\\n');\n\n      _this2.close();\n    })();\n  }\n\n  up() {\n    this.typed = '';\n    this.parts[this.cursor].up();\n    this.render();\n  }\n\n  down() {\n    this.typed = '';\n    this.parts[this.cursor].down();\n    this.render();\n  }\n\n  left() {\n    let prev = this.parts[this.cursor].prev();\n    if (prev == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(prev));\n    this.render();\n  }\n\n  right() {\n    let next = this.parts[this.cursor].next();\n    if (next == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(next));\n    this.render();\n  }\n\n  next() {\n    let next = this.parts[this.cursor].next();\n    this.moveCursor(next ? this.parts.indexOf(next) : this.parts.findIndex(part => part instanceof DatePart));\n    this.render();\n  }\n\n  _(c) {\n    if (/\\d/.test(c)) {\n      this.typed += c;\n      this.parts[this.cursor].setTo(this.typed);\n      this.render();\n    }\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render(); // Print prompt\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), []).join('')].join(' '); // Print error\n\n    if (this.error) {\n      this.outputText += this.errorMsg.split('\\n').reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = DatePrompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor,\n      erase = _require.erase;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      figures = _require2.figures,\n      clear = _require2.clear,\n      lines = _require2.lines;\n\nconst isNumber = /[0-9]/;\n\nconst isDef = any => any !== undefined;\n\nconst round = (number, precision) => {\n  let factor = Math.pow(10, precision);\n  return Math.round(number * factor) / factor;\n};\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass NumberPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.msg = opts.message;\n    this.initial = isDef(opts.initial) ? opts.initial : '';\n    this.float = !!opts.float;\n    this.round = opts.round || 2;\n    this.inc = opts.increment || 1;\n    this.min = isDef(opts.min) ? opts.min : -Infinity;\n    this.max = isDef(opts.max) ? opts.max : Infinity;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n\n    this.validator = opts.validate || (() => true);\n\n    this.color = `cyan`;\n    this.value = ``;\n    this.typed = ``;\n    this.lastHit = 0;\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && v !== 0) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(`${this.initial}`));\n      this._value = ``;\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(`${round(v, this.round)}`);\n      this._value = round(v, this.round);\n    }\n\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  parse(x) {\n    return this.float ? parseFloat(x) : parseInt(x);\n  }\n\n  valid(c) {\n    return c === `-` || c === `.` && this.float || isNumber.test(c);\n  }\n\n  reset() {\n    this.typed = ``;\n    this.value = ``;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === `string`) {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.color = `red`;\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      let x = _this2.value;\n      _this2.value = x !== `` ? x : _this2.initial;\n      _this2.done = true;\n      _this2.aborted = false;\n      _this2.error = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write(`\\n`);\n\n      _this2.close();\n    })();\n  }\n\n  up() {\n    this.typed = ``;\n\n    if (this.value === '') {\n      this.value = this.min - this.inc;\n    }\n\n    if (this.value >= this.max) return this.bell();\n    this.value += this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  down() {\n    this.typed = ``;\n\n    if (this.value === '') {\n      this.value = this.min + this.inc;\n    }\n\n    if (this.value <= this.min) return this.bell();\n    this.value -= this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  delete() {\n    let val = this.value.toString();\n    if (val.length === 0) return this.bell();\n    this.value = this.parse(val = val.slice(0, -1)) || ``;\n\n    if (this.value !== '' && this.value < this.min) {\n      this.value = this.min;\n    }\n\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  next() {\n    this.value = this.initial;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (!this.valid(c)) return this.bell();\n    const now = Date.now();\n    if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n\n    this.typed += c;\n    this.lastHit = now;\n    this.color = `cyan`;\n    if (c === `.`) return this.fire();\n    this.value = Math.min(this.parse(this.typed), this.max);\n    if (this.value > this.max) this.value = this.max;\n    if (this.value < this.min) this.value = this.min;\n    this.fire();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n\n    if (!this.firstRender) {\n      if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n\n    super.render();\n    this.outputError = ''; // Print prompt\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n  }\n\n}\n\nmodule.exports = NumberPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor;\n\nconst Prompt = require('./prompt');\n\nconst _require2 = require('../util'),\n      clear = _require2.clear,\n      figures = _require2.figures,\n      style = _require2.style,\n      wrap = _require2.wrap,\n      entriesToDisplay = _require2.entriesToDisplay;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass MultiselectPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = opts.cursor || 0;\n    this.scrollIndex = opts.cursor || 0;\n    this.hint = opts.hint || '';\n    this.warn = opts.warn || '- This option is disabled -';\n    this.minSelected = opts.min;\n    this.showMinError = false;\n    this.maxChoices = opts.max;\n    this.instructions = opts.instructions;\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string') ch = {\n        title: ch,\n        value: idx\n      };\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        description: ch && ch.description,\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.clear = clear('', this.out.columns);\n\n    if (!opts.overrideRender) {\n      this.render();\n    }\n  }\n\n  reset() {\n    this.value.map(v => !v.selected);\n    this.cursor = 0;\n    this.fire();\n    this.render();\n  }\n\n  selected() {\n    return this.value.filter(v => v.selected);\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    const selected = this.value.filter(e => e.selected);\n\n    if (this.minSelected && selected.length < this.minSelected) {\n      this.showMinError = true;\n      this.render();\n    } else {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length - 1;\n    this.render();\n  }\n\n  next() {\n    this.cursor = (this.cursor + 1) % this.value.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.value.length - 1;\n    } else {\n      this.cursor--;\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.value.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n\n    this.render();\n  }\n\n  left() {\n    this.value[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.value[this.cursor].selected = true;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.value[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  toggleAll() {\n    if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n      return this.bell();\n    }\n\n    const newSelected = !this.value[this.cursor].selected;\n    this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else if (c === 'a') {\n      this.toggleAll();\n    } else {\n      return this.bell();\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n\n      return '\\nInstructions:\\n' + `    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n` + `    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n` + (this.maxChoices === undefined ? `    a: Toggle all\\n` : '') + `    enter/return: Complete answer`;\n    }\n\n    return '';\n  }\n\n  renderOption(cursor, v, i, arrowIndicator) {\n    const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n    let title, desc;\n\n    if (v.disabled) {\n      title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    } else {\n      title = cursor === i ? color.cyan().underline(v.title) : v.title;\n\n      if (cursor === i && v.description) {\n        desc = ` - ${v.description}`;\n\n        if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n          desc = '\\n' + wrap(v.description, {\n            margin: prefix.length,\n            width: this.out.columns\n          });\n        }\n      }\n    }\n\n    return prefix + title + color.gray(desc || '');\n  } // shared with autocompleteMultiselect\n\n\n  paginateOptions(options) {\n    if (options.length === 0) {\n      return color.red('No matches for this query.');\n    }\n\n    let _entriesToDisplay = entriesToDisplay(this.cursor, options.length, this.optionsPerPage),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex;\n\n    let prefix,\n        styledOptions = [];\n\n    for (let i = startIndex; i < endIndex; i++) {\n      if (i === startIndex && startIndex > 0) {\n        prefix = figures.arrowUp;\n      } else if (i === endIndex - 1 && endIndex < options.length) {\n        prefix = figures.arrowDown;\n      } else {\n        prefix = ' ';\n      }\n\n      styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n    }\n\n    return '\\n' + styledOptions.join('\\n');\n  } // shared with autocomleteMultiselect\n\n\n  renderOptions(options) {\n    if (!this.done) {\n      return this.paginateOptions(options);\n    }\n\n    return '';\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions()];\n\n    if (this.value[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render(); // print prompt\n\n    let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n\n    prompt += this.renderOptions(this.value);\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n\n}\n\nmodule.exports = MultiselectPrompt;","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      clear = _require2.clear,\n      figures = _require2.figures,\n      wrap = _require2.wrap,\n      entriesToDisplay = _require2.entriesToDisplay;\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\n\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\n\nconst getIndex = (arr, valOrTitle) => {\n  const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n  return index > -1 ? index : undefined;\n};\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\n\n\nclass AutocompletePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.suggest = opts.suggest;\n    this.choices = opts.choices;\n    this.initial = typeof opts.initial === 'number' ? opts.initial : getIndex(opts.choices, opts.initial);\n    this.select = this.initial || opts.cursor || 0;\n    this.i18n = {\n      noMatches: opts.noMatches || 'no matches found'\n    };\n    this.fallback = opts.fallback || this.initial;\n    this.clearFirst = opts.clearFirst || false;\n    this.suggestions = [];\n    this.input = '';\n    this.limit = opts.limit || 10;\n    this.cursor = 0;\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.render = this.render.bind(this);\n    this.complete = this.complete.bind(this);\n    this.clear = clear('', this.out.columns);\n    this.complete(this.render);\n    this.render();\n  }\n\n  set fallback(fb) {\n    this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n  }\n\n  get fallback() {\n    let choice;\n    if (typeof this._fb === 'number') choice = this.choices[this._fb];else if (typeof this._fb === 'string') choice = {\n      title: this._fb\n    };\n    return choice || this._fb || {\n      title: this.i18n.noMatches\n    };\n  }\n\n  moveSelect(i) {\n    this.select = i;\n    if (this.suggestions.length > 0) this.value = getVal(this.suggestions, i);else this.value = this.fallback.value;\n    this.fire();\n  }\n\n  complete(cb) {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      const p = _this.completing = _this.suggest(_this.input, _this.choices);\n\n      const suggestions = yield p;\n      if (_this.completing !== p) return;\n      _this.suggestions = suggestions.map((s, i, arr) => ({\n        title: getTitle(arr, i),\n        value: getVal(arr, i),\n        description: s.description\n      }));\n      _this.completing = false;\n      const l = Math.max(suggestions.length - 1, 0);\n\n      _this.moveSelect(Math.min(l, _this.select));\n\n      cb && cb();\n    })();\n  }\n\n  reset() {\n    this.input = '';\n    this.complete(() => {\n      this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n      this.render();\n    });\n    this.render();\n  }\n\n  exit() {\n    if (this.clearFirst && this.input.length > 0) {\n      this.reset();\n    } else {\n      this.done = this.exited = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${c}${s2}`;\n    this.cursor = s1.length + 1;\n    this.complete(this.render);\n    this.render();\n  }\n\n  delete() {\n    if (this.cursor === 0) return this.bell();\n    let s1 = this.input.slice(0, this.cursor - 1);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.cursor = this.cursor - 1;\n    this.render();\n  }\n\n  deleteForward() {\n    if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor + 1);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.render();\n  }\n\n  first() {\n    this.moveSelect(0);\n    this.render();\n  }\n\n  last() {\n    this.moveSelect(this.suggestions.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.select === 0) {\n      this.moveSelect(this.suggestions.length - 1);\n    } else {\n      this.moveSelect(this.select - 1);\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else {\n      this.moveSelect(this.select + 1);\n    }\n\n    this.render();\n  }\n\n  next() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else this.moveSelect(this.select + 1);\n\n    this.render();\n  }\n\n  nextPage() {\n    this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n    this.render();\n  }\n\n  prevPage() {\n    this.moveSelect(Math.max(this.select - this.limit, 0));\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0) return this.bell();\n    this.cursor = this.cursor - 1;\n    this.render();\n  }\n\n  right() {\n    if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n    this.cursor = this.cursor + 1;\n    this.render();\n  }\n\n  renderOption(v, hovered, isStart, isEnd) {\n    let desc;\n    let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n    let title = hovered ? color.cyan().underline(v.title) : v.title;\n    prefix = (hovered ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n\n    if (v.description) {\n      desc = ` - ${v.description}`;\n\n      if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n        desc = '\\n' + wrap(v.description, {\n          margin: 3,\n          width: this.out.columns\n        });\n      }\n    }\n\n    return prefix + ' ' + title + color.gray(desc || '');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let _entriesToDisplay = entriesToDisplay(this.select, this.choices.length, this.limit),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex;\n\n    this.outputText = [style.symbol(this.done, this.aborted, this.exited), color.bold(this.msg), style.delimiter(this.completing), this.done && this.suggestions[this.select] ? this.suggestions[this.select].title : this.rendered = this.transform.render(this.input)].join(' ');\n\n    if (!this.done) {\n      const suggestions = this.suggestions.slice(startIndex, endIndex).map((item, i) => this.renderOption(item, this.select === i + startIndex, i === 0 && startIndex > 0, i + startIndex === endIndex - 1 && endIndex < this.choices.length)).join('\\n');\n      this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = AutocompletePrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor;\n\nconst MultiselectPrompt = require('./multiselect');\n\nconst _require2 = require('../util'),\n      clear = _require2.clear,\n      style = _require2.style,\n      figures = _require2.figures;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n  constructor(opts = {}) {\n    opts.overrideRender = true;\n    super(opts);\n    this.inputValue = '';\n    this.clear = clear('', this.out.columns);\n    this.filteredOptions = this.value;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.filteredOptions.length - 1;\n    this.render();\n  }\n\n  next() {\n    this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.filteredOptions.length - 1;\n    } else {\n      this.cursor--;\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.filteredOptions.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n\n    this.render();\n  }\n\n  left() {\n    this.filteredOptions[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.filteredOptions[this.cursor].selected = true;\n    this.render();\n  }\n\n  delete() {\n    if (this.inputValue.length) {\n      this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n      this.updateFilteredOptions();\n    }\n  }\n\n  updateFilteredOptions() {\n    const currentHighlight = this.filteredOptions[this.cursor];\n    this.filteredOptions = this.value.filter(v => {\n      if (this.inputValue) {\n        if (typeof v.title === 'string') {\n          if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n            return true;\n          }\n        }\n\n        if (typeof v.value === 'string') {\n          if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n            return true;\n          }\n        }\n\n        return false;\n      }\n\n      return true;\n    });\n    const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight);\n    this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.filteredOptions[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  handleInputChange(c) {\n    this.inputValue = this.inputValue + c;\n    this.updateFilteredOptions();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else {\n      this.handleInputChange(c);\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n\n      return `\nInstructions:\n    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n    [a,b,c]/delete: Filter choices\n    enter/return: Complete answer\n`;\n    }\n\n    return '';\n  }\n\n  renderCurrentInput() {\n    return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n  }\n\n  renderOption(cursor, v, i) {\n    let title;\n    if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n    return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + '  ' + title;\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n    if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render(); // print prompt\n\n    let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n\n    prompt += this.renderOptions(this.filteredOptions);\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n      erase = _require2.erase,\n      cursor = _require2.cursor;\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\n\n\nclass ConfirmPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = opts.initial;\n    this.initialValue = !!opts.initial;\n    this.yesMsg = opts.yes || 'yes';\n    this.yesOption = opts.yesOption || '(Y/n)';\n    this.noMsg = opts.no || 'no';\n    this.noOption = opts.noOption || '(y/N)';\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.value = this.value || false;\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    if (c.toLowerCase() === 'y') {\n      this.value = true;\n      return this.submit();\n    }\n\n    if (c.toLowerCase() === 'n') {\n      this.value = false;\n      return this.submit();\n    }\n\n    return this.bell();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' ');\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = ConfirmPrompt;","'use strict';\n\nmodule.exports = {\n  TextPrompt: require('./text'),\n  SelectPrompt: require('./select'),\n  TogglePrompt: require('./toggle'),\n  DatePrompt: require('./date'),\n  NumberPrompt: require('./number'),\n  MultiselectPrompt: require('./multiselect'),\n  AutocompletePrompt: require('./autocomplete'),\n  AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n  ConfirmPrompt: require('./confirm')\n};","'use strict';\n\nconst $ = exports;\n\nconst el = require('./elements');\n\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts = {}) {\n  return new Promise((res, rej) => {\n    const p = new el[type](args);\n    const onAbort = opts.onAbort || noop;\n    const onSubmit = opts.onSubmit || noop;\n    const onExit = opts.onExit || noop;\n    p.on('state', args.onState || noop);\n    p.on('submit', x => res(onSubmit(x)));\n    p.on('exit', x => res(onExit(x)));\n    p.on('abort', x => rej(onAbort(x)));\n  });\n}\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.text = args => toPrompt('TextPrompt', args);\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.password = args => {\n  args.style = 'password';\n  return $.text(args);\n};\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.invisible = args => {\n  args.style = 'invisible';\n  return $.text(args);\n};\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.number = args => toPrompt('NumberPrompt', args);\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.date = args => toPrompt('DatePrompt', args);\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n\n\n$.list = args => {\n  const sep = args.separator || ',';\n  return toPrompt('TextPrompt', args, {\n    onSubmit: str => str.split(sep).map(s => s.trim())\n  });\n};\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.toggle = args => toPrompt('TogglePrompt', args);\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.select = args => toPrompt('SelectPrompt', args);\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.multiselect = args => {\n  args.choices = [].concat(args.choices || []);\n\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n  return toPrompt('MultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\n$.autocompleteMultiselect = args => {\n  args.choices = [].concat(args.choices || []);\n\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n  return toPrompt('AutocompleteMultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase()));\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.autocomplete = args => {\n  args.suggest = args.suggest || byTitle;\n  args.choices = [].concat(args.choices || []);\n  return toPrompt('AutocompletePrompt', args);\n};","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\n\nconst noop = () => {};\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\n\n\nfunction prompt() {\n  return _prompt.apply(this, arguments);\n}\n\nfunction _prompt() {\n  _prompt = _asyncToGenerator(function* (questions = [], {\n    onSubmit = noop,\n    onCancel = noop\n  } = {}) {\n    const answers = {};\n    const override = prompt._override || {};\n    questions = [].concat(questions);\n    let answer, question, quit, name, type, lastPrompt;\n\n    const getFormattedAnswer = /*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(function* (question, answer, skipValidation = false) {\n        if (!skipValidation && question.validate && question.validate(answer) !== true) {\n          return;\n        }\n\n        return question.format ? yield question.format(answer, answers) : answer;\n      });\n\n      return function getFormattedAnswer(_x, _x2) {\n        return _ref.apply(this, arguments);\n      };\n    }();\n\n    var _iterator = _createForOfIteratorHelper(questions),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        question = _step.value;\n        var _question = question;\n        name = _question.name;\n        type = _question.type;\n\n        // evaluate type first and skip if type is a falsy value\n        if (typeof type === 'function') {\n          type = yield type(answer, _objectSpread({}, answers), question);\n          question['type'] = type;\n        }\n\n        if (!type) continue; // if property is a function, invoke it unless it's a special function\n\n        for (let key in question) {\n          if (passOn.includes(key)) continue;\n          let value = question[key];\n          question[key] = typeof value === 'function' ? yield value(answer, _objectSpread({}, answers), lastPrompt) : value;\n        }\n\n        lastPrompt = question;\n\n        if (typeof question.message !== 'string') {\n          throw new Error('prompt message is required');\n        } // update vars in case they changed\n\n\n        var _question2 = question;\n        name = _question2.name;\n        type = _question2.type;\n\n        if (prompts[type] === void 0) {\n          throw new Error(`prompt type (${type}) is not defined`);\n        }\n\n        if (override[question.name] !== undefined) {\n          answer = yield getFormattedAnswer(question, override[question.name]);\n\n          if (answer !== undefined) {\n            answers[name] = answer;\n            continue;\n          }\n        }\n\n        try {\n          // Get the injected answer if there is one or prompt the user\n          answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : yield prompts[type](question);\n          answers[name] = answer = yield getFormattedAnswer(question, answer, true);\n          quit = yield onSubmit(question, answer, answers);\n        } catch (err) {\n          quit = !(yield onCancel(question, answers));\n        }\n\n        if (quit) return answers;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    return answers;\n  });\n  return _prompt.apply(this, arguments);\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n  const answer = injected.shift();\n\n  if (answer instanceof Error) {\n    throw answer;\n  }\n\n  return answer === undefined ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n  prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n  prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, {\n  prompt,\n  prompts,\n  inject,\n  override\n});","'use strict';\n\nmodule.exports = (key, isSelect) => {\n  if (key.meta && key.name !== 'escape') return;\n  \n  if (key.ctrl) {\n    if (key.name === 'a') return 'first';\n    if (key.name === 'c') return 'abort';\n    if (key.name === 'd') return 'abort';\n    if (key.name === 'e') return 'last';\n    if (key.name === 'g') return 'reset';\n  }\n  \n  if (isSelect) {\n    if (key.name === 'j') return 'down';\n    if (key.name === 'k') return 'up';\n  }\n\n  if (key.name === 'return') return 'submit';\n  if (key.name === 'enter') return 'submit'; // ctrl + J\n  if (key.name === 'backspace') return 'delete';\n  if (key.name === 'delete') return 'deleteForward';\n  if (key.name === 'abort') return 'abort';\n  if (key.name === 'escape') return 'exit';\n  if (key.name === 'tab') return 'next';\n  if (key.name === 'pagedown') return 'nextPage';\n  if (key.name === 'pageup') return 'prevPage';\n  // TODO create home() in prompt types (e.g. TextPrompt)\n  if (key.name === 'home') return 'home';\n  // TODO create end() in prompt types (e.g. TextPrompt)\n  if (key.name === 'end') return 'end';\n\n  if (key.name === 'up') return 'up';\n  if (key.name === 'down') return 'down';\n  if (key.name === 'right') return 'right';\n  if (key.name === 'left') return 'left';\n\n  return false;\n};\n","'use strict';\n\nmodule.exports = str => {\n  const pattern = [\n    '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n    '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n  ].join('|');\n\n  const RGX = new RegExp(pattern, 'g');\n  return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n","'use strict';\n\nconst strip = require('./strip');\nconst { erase, cursor } = require('sisteransi');\n\nconst width = str => [...strip(str)].length;\n\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\nmodule.exports = function(prompt, perLine) {\n  if (!perLine) return erase.line + cursor.to(0);\n\n  let rows = 0;\n  const lines = prompt.split(/\\r?\\n/);\n  for (let line of lines) {\n    rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n  }\n\n  return erase.lines(rows);\n};\n","'use strict';\t\n\n const main = {\n  arrowUp: '↑',\n  arrowDown: '↓',\n  arrowLeft: '←',\n  arrowRight: '→',\n  radioOn: '◉',\n  radioOff: '◯',\n  tick: '✔',\t\n  cross: '✖',\t\n  ellipsis: '…',\t\n  pointerSmall: '›',\t\n  line: '─',\t\n  pointer: '❯'\t\n};\t\nconst win = {\n  arrowUp: main.arrowUp,\n  arrowDown: main.arrowDown,\n  arrowLeft: main.arrowLeft,\n  arrowRight: main.arrowRight,\n  radioOn: '(*)',\n  radioOff: '( )',\t\n  tick: '√',\t\n  cross: '×',\t\n  ellipsis: '...',\t\n  pointerSmall: '»',\t\n  line: '─',\t\n  pointer: '>'\t\n};\t\nconst figures = process.platform === 'win32' ? win : main;\t\n\n module.exports = figures;\n","'use strict';\n\nconst c = require('kleur');\nconst figures = require('./figures');\n\n// rendering user input.\nconst styles = Object.freeze({\n  password: { scale: 1, render: input => '*'.repeat(input.length) },\n  emoji: { scale: 2, render: input => '😃'.repeat(input.length) },\n  invisible: { scale: 0, render: input => '' },\n  default: { scale: 1, render: input => `${input}` }\n});\nconst render = type => styles[type] || styles.default;\n\n// icon to signalize a prompt.\nconst symbols = Object.freeze({\n  aborted: c.red(figures.cross),\n  done: c.green(figures.tick),\n  exited: c.yellow(figures.cross),\n  default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) =>\n  aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default;\n\n// between the question and the user's input.\nconst delimiter = completing =>\n  c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) =>\n  c.gray(expandable ? (expanded ? figures.pointerSmall : '+') : figures.line);\n\nmodule.exports = {\n  styles,\n  render,\n  symbols,\n  symbol,\n  delimiter,\n  item\n};\n","'use strict';\n\nconst strip = require('./strip');\n\n/**\n * @param {string} msg\n * @param {number} perLine\n */\nmodule.exports = function (msg, perLine) {\n  let lines = String(strip(msg) || '').split(/\\r?\\n/);\n\n  if (!perLine) return lines.length;\n  return lines.map(l => Math.ceil(l.length / perLine))\n      .reduce((a, b) => a + b);\n};\n","'use strict';\n\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\nmodule.exports = (msg, opts = {}) => {\n  const tab = Number.isSafeInteger(parseInt(opts.margin))\n    ? new Array(parseInt(opts.margin)).fill(' ').join('')\n    : (opts.margin || '');\n\n  const width = opts.width;\n\n  return (msg || '').split(/\\r?\\n/g)\n    .map(line => line\n      .split(/\\s+/g)\n      .reduce((arr, w) => {\n        if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width)\n          arr[arr.length - 1] += ` ${w}`;\n        else arr.push(`${tab}${w}`);\n        return arr;\n      }, [ tab ])\n      .join('\\n'))\n    .join('\\n');\n};\n","'use strict';\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\nmodule.exports = (cursor, total, maxVisible)  => {\n  maxVisible = maxVisible || total;\n\n  let startIndex = Math.min(total- maxVisible, cursor - Math.floor(maxVisible / 2));\n  if (startIndex < 0) startIndex = 0;\n\n  let endIndex = Math.min(startIndex + maxVisible, total);\n\n  return { startIndex, endIndex };\n};\n","'use strict';\n\nmodule.exports = {\n  action: require('./action'),\n  clear: require('./clear'),\n  style: require('./style'),\n  strip: require('./strip'),\n  figures: require('./figures'),\n  lines: require('./lines'),\n  wrap: require('./wrap'),\n  entriesToDisplay: require('./entriesToDisplay')\n};\n","'use strict';\n\nconst readline = require('readline');\nconst { action } = require('../util');\nconst EventEmitter = require('events');\nconst { beep, cursor } = require('sisteransi');\nconst color = require('kleur');\n\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass Prompt extends EventEmitter {\n  constructor(opts={}) {\n    super();\n\n    this.firstRender = true;\n    this.in = opts.stdin || process.stdin;\n    this.out = opts.stdout || process.stdout;\n    this.onRender = (opts.onRender || (() => void 0)).bind(this);\n    const rl = readline.createInterface({ input:this.in, escapeCodeTimeout:50 });\n    readline.emitKeypressEvents(this.in, rl);\n\n    if (this.in.isTTY) this.in.setRawMode(true);\n    const isSelect = [ 'SelectPrompt', 'MultiselectPrompt' ].indexOf(this.constructor.name) > -1;\n    const keypress = (str, key) => {\n      let a = action(key, isSelect);\n      if (a === false) {\n        this._ && this._(str, key);\n      } else if (typeof this[a] === 'function') {\n        this[a](key);\n      } else {\n        this.bell();\n      }\n    };\n\n    this.close = () => {\n      this.out.write(cursor.show);\n      this.in.removeListener('keypress', keypress);\n      if (this.in.isTTY) this.in.setRawMode(false);\n      rl.close();\n      this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n      this.closed = true;\n    };\n\n    this.in.on('keypress', keypress);\n  }\n\n  fire() {\n    this.emit('state', {\n      value: this.value,\n      aborted: !!this.aborted,\n      exited: !!this.exited\n    });\n  }\n\n  bell() {\n    this.out.write(beep);\n  }\n\n  render() {\n    this.onRender(color);\n    if (this.firstRender) this.firstRender = false;\n  }\n}\n\nmodule.exports = Prompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, lines, figures } = require('../util');\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass TextPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.msg = opts.message;\n    this.initial = opts.initial || ``;\n    this.validator = opts.validate || (() => true);\n    this.value = ``;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.clear = clear(``, this.out.columns);\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && this.initial) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(this.initial));\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(v);\n    }\n    this._value = v;\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  reset() {\n    this.value = ``;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.value = this.value || this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.red = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === `string`) {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    this.value = this.value || this.initial;\n    this.cursorOffset = 0;\n    this.cursor = this.rendered.length;\n    await this.validate();\n    if (this.error) {\n      this.red = true;\n      this.fire();\n      this.render();\n      return;\n    }\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  next() {\n    if (!this.placeholder) return this.bell();\n    this.value = this.initial;\n    this.cursor = this.rendered.length;\n    this.fire();\n    this.render();\n  }\n\n  moveCursor(n) {\n    if (this.placeholder) return;\n    this.cursor = this.cursor+n;\n    this.cursorOffset += n;\n  }\n\n  _(c, key) {\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${c}${s2}`;\n    this.red = false;\n    this.cursor = this.placeholder ? 0 : s1.length+1;\n    this.render();\n  }\n\n  delete() {\n    if (this.isCursorAtStart()) return this.bell();\n    let s1 = this.value.slice(0, this.cursor-1);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n    if (this.isCursorAtStart()) {\n      this.cursorOffset = 0\n    } else {\n      this.cursorOffset++;\n      this.moveCursor(-1);\n    }\n    this.render();\n  }\n\n  deleteForward() {\n    if(this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor+1);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n    if (this.isCursorAtEnd()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n    }\n    this.render();\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length;\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0 || this.placeholder) return this.bell();\n    this.moveCursor(-1);\n    this.render();\n  }\n\n  right() {\n    if (this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    this.moveCursor(1);\n    this.render();\n  }\n\n  isCursorAtStart() {\n    return this.cursor === 0 || (this.placeholder && this.cursor === 1);\n  }\n\n  isCursorAtEnd() {\n    return this.cursor === this.rendered.length || (this.placeholder && this.cursor === this.rendered.length + 1)\n  }\n\n  render() {\n    if (this.closed) return;\n    if (!this.firstRender) {\n      if (this.outputError)\n        this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n    super.render();\n    this.outputError = '';\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.red ? color.red(this.rendered) : this.rendered\n    ].join(` `);\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`)\n          .reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n  }\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\nconst { cursor } = require('sisteransi');\n\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\nclass SelectPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n    this.warn = opts.warn || '- This option is disabled';\n    this.cursor = opts.initial || 0;\n    this.choices = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string')\n        ch = {title: ch, value: idx};\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        description: ch && ch.description,\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = (this.choices[this.cursor] || {}).value;\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  moveCursor(n) {\n    this.cursor = n;\n    this.value = this.choices[n].value;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(0);\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    if (!this.selection.disabled) {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    } else\n      this.bell();\n  }\n\n  first() {\n    this.moveCursor(0);\n    this.render();\n  }\n\n  last() {\n    this.moveCursor(this.choices.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.moveCursor(this.choices.length - 1);\n    } else {\n      this.moveCursor(this.cursor - 1);\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.choices.length - 1) {\n      this.moveCursor(0);\n    } else {\n      this.moveCursor(this.cursor + 1);\n    }\n    this.render();\n  }\n\n  next() {\n    this.moveCursor((this.cursor + 1) % this.choices.length);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') return this.submit();\n  }\n\n  get selection() {\n    return this.choices[this.cursor];\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let { startIndex, endIndex } = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage);\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.done ? this.selection.title : this.selection.disabled\n          ? color.yellow(this.warn) : color.gray(this.hint)\n    ].join(' ');\n\n    // Print choices\n    if (!this.done) {\n      this.outputText += '\\n';\n      for (let i = startIndex; i < endIndex; i++) {\n        let title, prefix, desc = '', v = this.choices[i];\n\n        // Determine whether to display \"more choices\" indicators\n        if (i === startIndex && startIndex > 0) {\n          prefix = figures.arrowUp;\n        } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n          prefix = figures.arrowDown;\n        } else {\n          prefix = ' ';\n        }\n\n        if (v.disabled) {\n          title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n          prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : '  ') + prefix;\n        } else {\n          title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n          prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n          if (v.description && this.cursor === i) {\n            desc = ` - ${v.description}`;\n            if (prefix.length + title.length + desc.length >= this.out.columns\n                || v.description.split(/\\r?\\n/).length > 1) {\n              desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns });\n            }\n          }\n        }\n\n        this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n      }\n    }\n\n    this.out.write(this.outputText);\n  }\n}\n\nmodule.exports = SelectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { cursor, erase } = require('sisteransi');\n\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass TogglePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = !!opts.initial;\n    this.active = opts.active || 'on';\n    this.inactive = opts.inactive || 'off';\n    this.initialValue = this.value;\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  deactivate() {\n    if (this.value === false) return this.bell();\n    this.value = false;\n    this.render();\n  }\n\n  activate() {\n    if (this.value === true) return this.bell();\n    this.value = true;\n    this.render();\n  }\n\n  delete() {\n    this.deactivate();\n  }\n  left() {\n    this.deactivate();\n  }\n  right() {\n    this.activate();\n  }\n  down() {\n    this.deactivate();\n  }\n  up() {\n    this.activate();\n  }\n\n  next() {\n    this.value = !this.value;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.value = !this.value;\n    } else if (c === '1') {\n      this.value = true;\n    } else if (c === '0') {\n      this.value = false;\n    } else return this.bell();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.value ? this.inactive : color.cyan().underline(this.inactive),\n      color.gray('/'),\n      this.value ? color.cyan().underline(this.active) : this.active\n    ].join(' ');\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = TogglePrompt;\n","'use strict';\n\nclass DatePart {\n  constructor({token, date, parts, locales}) {\n    this.token = token;\n    this.date = date || new Date();\n    this.parts = parts || [this];\n    this.locales = locales || {};\n  }\n\n  up() {}\n\n  down() {}\n\n  next() {\n    const currentIdx = this.parts.indexOf(this);\n    return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  setTo(val) {}\n\n  prev() {\n    let parts = [].concat(this.parts).reverse();\n    const currentIdx = parts.indexOf(this);\n    return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  toString() {\n    return String(this.date);\n  }\n}\n\nmodule.exports = DatePart;\n\n\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours((this.date.getHours() + 12) % 24);\n  }\n\n  down() {\n    this.up();\n  }\n\n  toString() {\n    let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n    return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n  }\n}\n\nmodule.exports = Meridiem;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n  n = n % 10;\n  return n === 1 ? 'st'\n       : n === 2 ? 'nd'\n       : n === 3 ? 'rd'\n       : 'th';\n}\n\nclass Day extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setDate(this.date.getDate() + 1);\n  }\n\n  down() {\n    this.date.setDate(this.date.getDate() - 1);\n  }\n\n  setTo(val) {\n    this.date.setDate(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let date = this.date.getDate();\n    let day = this.date.getDay();\n    return this.token === 'DD' ? String(date).padStart(2, '0')\n         : this.token === 'Do' ? date + pos(date)\n         : this.token === 'd' ? day + 1\n         : this.token === 'ddd' ? this.locales.weekdaysShort[day]\n         : this.token === 'dddd' ? this.locales.weekdays[day]\n         : date;\n  }\n}\n\nmodule.exports = Day;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours(this.date.getHours() + 1);\n  }\n\n  down() {\n    this.date.setHours(this.date.getHours() - 1);\n  }\n\n  setTo(val) {\n    this.date.setHours(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let hours = this.date.getHours();\n    if (/h/.test(this.token))\n      hours = (hours % 12) || 12;\n    return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n  }\n}\n\nmodule.exports = Hours;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n  }\n\n  down() {\n    this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMilliseconds(parseInt(val.substr(-(this.token.length))));\n  }\n\n  toString() {\n    return String(this.date.getMilliseconds()).padStart(4, '0')\n                                              .substr(0, this.token.length);\n  }\n}\n\nmodule.exports = Milliseconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMinutes(this.date.getMinutes() + 1);\n  }\n\n  down() {\n    this.date.setMinutes(this.date.getMinutes() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMinutes(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let m = this.date.getMinutes();\n    return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n  }\n}\n\nmodule.exports = Minutes;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMonth(this.date.getMonth() + 1);\n  }\n\n  down() {\n    this.date.setMonth(this.date.getMonth() - 1);\n  }\n\n  setTo(val) {\n    val = parseInt(val.substr(-2)) - 1;\n    this.date.setMonth(val < 0 ? 0 : val);\n  }\n\n  toString() {\n    let month = this.date.getMonth();\n    let tl = this.token.length;\n    return tl === 2 ? String(month + 1).padStart(2, '0')\n           : tl === 3 ? this.locales.monthsShort[month]\n             : tl === 4 ? this.locales.months[month]\n               : String(month + 1);\n  }\n}\n\nmodule.exports = Month;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setSeconds(this.date.getSeconds() + 1);\n  }\n\n  down() {\n    this.date.setSeconds(this.date.getSeconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setSeconds(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let s = this.date.getSeconds();\n    return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n  }\n}\n\nmodule.exports = Seconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setFullYear(this.date.getFullYear() + 1);\n  }\n\n  down() {\n    this.date.setFullYear(this.date.getFullYear() - 1);\n  }\n\n  setTo(val) {\n    this.date.setFullYear(val.substr(-4));\n  }\n\n  toString() {\n    let year = String(this.date.getFullYear()).padStart(4, '0');\n    return this.token.length === 2 ? year.substr(-2) : year;\n  }\n}\n\nmodule.exports = Year;\n","'use strict';\n\nmodule.exports = {\n  DatePart: require('./datepart'),\n  Meridiem: require('./meridiem'),\n  Day: require('./day'),\n  Hours: require('./hours'),\n  Milliseconds: require('./milliseconds'),\n  Minutes: require('./minutes'),\n  Month: require('./month'),\n  Seconds: require('./seconds'),\n  Year: require('./year'),\n}\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures } = require('../util');\nconst { erase, cursor } = require('sisteransi');\nconst { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n  1: ({token}) => token.replace(/\\\\(.)/g, '$1'),\n  2: (opts) => new Day(opts), // Day // TODO\n  3: (opts) => new Month(opts), // Month\n  4: (opts) => new Year(opts), // Year\n  5: (opts) => new Meridiem(opts), // AM/PM // TODO (special)\n  6: (opts) => new Hours(opts), // Hours\n  7: (opts) => new Minutes(opts), // Minutes\n  8: (opts) => new Seconds(opts), // Seconds\n  9: (opts) => new Milliseconds(opts), // Fractional seconds\n}\n\nconst dfltLocales = {\n  months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n  monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n  weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n  weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n}\n\n\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass DatePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = 0;\n    this.typed = '';\n    this.locales = Object.assign(dfltLocales, opts.locales);\n    this._date = opts.initial || new Date();\n    this.errorMsg = opts.error || 'Please Enter A Valid Value';\n    this.validator = opts.validate || (() => true);\n    this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  get value() {\n    return this.date\n  }\n\n  get date() {\n    return this._date;\n  }\n\n  set date(date) {\n    if (date) this._date.setTime(date.getTime());\n  }\n\n  set mask(mask) {\n    let result;\n    this.parts = [];\n    while(result = regex.exec(mask)) {\n      let match = result.shift();\n      let idx = result.findIndex(gr => gr != null);\n      this.parts.push(idx in regexGroups\n        ? regexGroups[idx]({ token: result[idx] || match, date: this.date, parts: this.parts, locales: this.locales })\n        : result[idx] || match);\n    }\n\n    let parts = this.parts.reduce((arr, i) => {\n      if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string')\n        arr[arr.length - 1] += i;\n      else arr.push(i);\n      return arr;\n    }, []);\n\n    this.parts.splice(0);\n    this.parts.push(...parts);\n    this.reset();\n  }\n\n  moveCursor(n) {\n    this.typed = '';\n    this.cursor = n;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === 'string') {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    await this.validate();\n    if (this.error) {\n      this.color = 'red';\n      this.fire();\n      this.render();\n      return;\n    }\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  up() {\n    this.typed = '';\n    this.parts[this.cursor].up();\n    this.render();\n  }\n\n  down() {\n    this.typed = '';\n    this.parts[this.cursor].down();\n    this.render();\n  }\n\n  left() {\n    let prev = this.parts[this.cursor].prev();\n    if (prev == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(prev));\n    this.render();\n  }\n\n  right() {\n    let next = this.parts[this.cursor].next();\n    if (next == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(next));\n    this.render();\n  }\n\n  next() {\n    let next = this.parts[this.cursor].next();\n    this.moveCursor(next\n      ? this.parts.indexOf(next)\n      : this.parts.findIndex((part) => part instanceof DatePart));\n    this.render();\n  }\n\n  _(c) {\n    if (/\\d/.test(c)) {\n      this.typed += c;\n      this.parts[this.cursor].setTo(this.typed);\n      this.render();\n    }\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), [])\n          .join('')\n    ].join(' ');\n\n    // Print error\n    if (this.error) {\n      this.outputText += this.errorMsg.split('\\n').reduce(\n          (a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = DatePrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { cursor, erase } = require('sisteransi');\nconst { style, figures, clear, lines } = require('../util');\n\nconst isNumber = /[0-9]/;\nconst isDef = any => any !== undefined;\nconst round = (number, precision) => {\n  let factor = Math.pow(10, precision);\n  return Math.round(number * factor) / factor;\n}\n\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass NumberPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.msg = opts.message;\n    this.initial = isDef(opts.initial) ? opts.initial : '';\n    this.float = !!opts.float;\n    this.round = opts.round || 2;\n    this.inc = opts.increment || 1;\n    this.min = isDef(opts.min) ? opts.min : -Infinity;\n    this.max = isDef(opts.max) ? opts.max : Infinity;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.validator = opts.validate || (() => true);\n    this.color = `cyan`;\n    this.value = ``;\n    this.typed = ``;\n    this.lastHit = 0;\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && v !== 0) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(`${this.initial}`));\n      this._value = ``;\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(`${round(v, this.round)}`);\n      this._value = round(v, this.round);\n    }\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  parse(x) {\n    return this.float ? parseFloat(x) : parseInt(x);\n  }\n\n  valid(c) {\n    return c === `-` || c === `.` && this.float || isNumber.test(c)\n  }\n\n  reset() {\n    this.typed = ``;\n    this.value = ``;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === `string`) {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    await this.validate();\n    if (this.error) {\n      this.color = `red`;\n      this.fire();\n      this.render();\n      return;\n    }\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = true;\n    this.aborted = false;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  up() {\n    this.typed = ``;\n    if(this.value === '') {\n      this.value = this.min - this.inc;\n    }\n    if (this.value >= this.max) return this.bell();\n    this.value += this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  down() {\n    this.typed = ``;\n    if(this.value === '') {\n      this.value = this.min + this.inc;\n    }\n    if (this.value <= this.min) return this.bell();\n    this.value -= this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  delete() {\n    let val = this.value.toString();\n    if (val.length === 0) return this.bell();\n    this.value = this.parse((val = val.slice(0, -1))) || ``;\n    if (this.value !== '' && this.value < this.min) {\n      this.value = this.min;\n    }\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  next() {\n    this.value = this.initial;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (!this.valid(c)) return this.bell();\n\n    const now = Date.now();\n    if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n    this.typed += c;\n    this.lastHit = now;\n    this.color = `cyan`;\n\n    if (c === `.`) return this.fire();\n\n    this.value = Math.min(this.parse(this.typed), this.max);\n    if (this.value > this.max) this.value = this.max;\n    if (this.value < this.min) this.value = this.min;\n    this.fire();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (!this.firstRender) {\n      if (this.outputError)\n        this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n    super.render();\n    this.outputError = '';\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      !this.done || (!this.done && !this.placeholder)\n          ? color[this.color]().underline(this.rendered) : this.rendered\n    ].join(` `);\n\n    // Print error\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`)\n          .reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n  }\n}\n\nmodule.exports = NumberPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst Prompt = require('./prompt');\nconst { clear, figures, style, wrap, entriesToDisplay } = require('../util');\n\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass MultiselectPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = opts.cursor || 0;\n    this.scrollIndex = opts.cursor || 0;\n    this.hint = opts.hint || '';\n    this.warn = opts.warn || '- This option is disabled -';\n    this.minSelected = opts.min;\n    this.showMinError = false;\n    this.maxChoices = opts.max;\n    this.instructions = opts.instructions;\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string')\n        ch = {title: ch, value: idx};\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        description: ch && ch.description,\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.clear = clear('', this.out.columns);\n    if (!opts.overrideRender) {\n      this.render();\n    }\n  }\n\n  reset() {\n    this.value.map(v => !v.selected);\n    this.cursor = 0;\n    this.fire();\n    this.render();\n  }\n\n  selected() {\n    return this.value.filter(v => v.selected);\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    const selected = this.value\n      .filter(e => e.selected);\n    if (this.minSelected && selected.length < this.minSelected) {\n      this.showMinError = true;\n      this.render();\n    } else {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length - 1;\n    this.render();\n  }\n  next() {\n    this.cursor = (this.cursor + 1) % this.value.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.value.length - 1;\n    } else {\n      this.cursor--;\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.value.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n    this.render();\n  }\n\n  left() {\n    this.value[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.value[this.cursor].selected = true;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.value[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  toggleAll() {\n    if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n      return this.bell();\n    }\n\n    const newSelected = !this.value[this.cursor].selected;\n    this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else if (c === 'a') {\n      this.toggleAll();\n    } else {\n      return this.bell();\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n      return '\\nInstructions:\\n'\n        + `    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n`\n        + `    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n`\n        + (this.maxChoices === undefined ? `    a: Toggle all\\n` : '')\n        + `    enter/return: Complete answer`;\n    }\n    return '';\n  }\n\n  renderOption(cursor, v, i, arrowIndicator) {\n    const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n    let title, desc;\n\n    if (v.disabled) {\n      title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    } else {\n      title = cursor === i ? color.cyan().underline(v.title) : v.title;\n      if (cursor === i && v.description) {\n        desc = ` - ${v.description}`;\n        if (prefix.length + title.length + desc.length >= this.out.columns\n          || v.description.split(/\\r?\\n/).length > 1) {\n          desc = '\\n' + wrap(v.description, { margin: prefix.length, width: this.out.columns });\n        }\n      }\n    }\n\n    return prefix + title + color.gray(desc || '');\n  }\n\n  // shared with autocompleteMultiselect\n  paginateOptions(options) {\n    if (options.length === 0) {\n      return color.red('No matches for this query.');\n    }\n\n    let { startIndex, endIndex } = entriesToDisplay(this.cursor, options.length, this.optionsPerPage);\n    let prefix, styledOptions = [];\n\n    for (let i = startIndex; i < endIndex; i++) {\n      if (i === startIndex && startIndex > 0) {\n        prefix = figures.arrowUp;\n      } else if (i === endIndex - 1 && endIndex < options.length) {\n        prefix = figures.arrowDown;\n      } else {\n        prefix = ' ';\n      }\n      styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n    }\n\n    return '\\n' + styledOptions.join('\\n');\n  }\n\n  // shared with autocomleteMultiselect\n  renderOptions(options) {\n    if (!this.done) {\n      return this.paginateOptions(options);\n    }\n    return '';\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value\n        .filter(e => e.selected)\n        .map(v => v.title)\n        .join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions()];\n\n    if (this.value[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render();\n\n    // print prompt\n    let prompt = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.renderDoneOrInstructions()\n    ].join(' ');\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n    prompt += this.renderOptions(this.value);\n\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n}\n\nmodule.exports = MultiselectPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\nconst getIndex = (arr, valOrTitle) => {\n  const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n  return index > -1 ? index : undefined;\n};\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\nclass AutocompletePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.suggest = opts.suggest;\n    this.choices = opts.choices;\n    this.initial = typeof opts.initial === 'number'\n      ? opts.initial\n      : getIndex(opts.choices, opts.initial);\n    this.select = this.initial || opts.cursor || 0;\n    this.i18n = { noMatches: opts.noMatches || 'no matches found' };\n    this.fallback = opts.fallback || this.initial;\n    this.clearFirst = opts.clearFirst || false;\n    this.suggestions = [];\n    this.input = '';\n    this.limit = opts.limit || 10;\n    this.cursor = 0;\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.render = this.render.bind(this);\n    this.complete = this.complete.bind(this);\n    this.clear = clear('', this.out.columns);\n    this.complete(this.render);\n    this.render();\n  }\n\n  set fallback(fb) {\n    this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n  }\n\n  get fallback() {\n    let choice;\n    if (typeof this._fb === 'number')\n      choice = this.choices[this._fb];\n    else if (typeof this._fb === 'string')\n      choice = { title: this._fb };\n    return choice || this._fb || { title: this.i18n.noMatches };\n  }\n\n  moveSelect(i) {\n    this.select = i;\n    if (this.suggestions.length > 0)\n      this.value = getVal(this.suggestions, i);\n    else this.value = this.fallback.value;\n    this.fire();\n  }\n\n  async complete(cb) {\n    const p = (this.completing = this.suggest(this.input, this.choices));\n    const suggestions = await p;\n\n    if (this.completing !== p) return;\n    this.suggestions = suggestions\n      .map((s, i, arr) => ({ title: getTitle(arr, i), value: getVal(arr, i), description: s.description }));\n    this.completing = false;\n    const l = Math.max(suggestions.length - 1, 0);\n    this.moveSelect(Math.min(l, this.select));\n\n    cb && cb();\n  }\n\n  reset() {\n    this.input = '';\n    this.complete(() => {\n      this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n      this.render();\n    });\n    this.render();\n  }\n\n  exit() {\n    if (this.clearFirst && this.input.length > 0) {\n      this.reset();\n    } else {\n      this.done = this.exited = true; \n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${c}${s2}`;\n    this.cursor = s1.length+1;\n    this.complete(this.render);\n    this.render();\n  }\n\n  delete() {\n    if (this.cursor === 0) return this.bell();\n    let s1 = this.input.slice(0, this.cursor-1);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.cursor = this.cursor-1;\n    this.render();\n  }\n\n  deleteForward() {\n    if(this.cursor*this.scale >= this.rendered.length) return this.bell();\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor+1);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.render();\n  }\n\n  first() {\n    this.moveSelect(0);\n    this.render();\n  }\n\n  last() {\n    this.moveSelect(this.suggestions.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.select === 0) {\n      this.moveSelect(this.suggestions.length - 1);\n    } else {\n      this.moveSelect(this.select - 1);\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else {\n      this.moveSelect(this.select + 1);\n    }\n    this.render();\n  }\n\n  next() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else this.moveSelect(this.select + 1);\n    this.render();\n  }\n\n  nextPage() {\n    this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n    this.render();\n  }\n\n  prevPage() {\n    this.moveSelect(Math.max(this.select - this.limit, 0));\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0) return this.bell();\n    this.cursor = this.cursor-1;\n    this.render();\n  }\n\n  right() {\n    if (this.cursor*this.scale >= this.rendered.length) return this.bell();\n    this.cursor = this.cursor+1;\n    this.render();\n  }\n\n  renderOption(v, hovered, isStart, isEnd) {\n    let desc;\n    let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n    let title = hovered ? color.cyan().underline(v.title) : v.title;\n    prefix = (hovered ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n    if (v.description) {\n      desc = ` - ${v.description}`;\n      if (prefix.length + title.length + desc.length >= this.out.columns\n        || v.description.split(/\\r?\\n/).length > 1) {\n        desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns })\n      }\n    }\n    return prefix + ' ' + title + color.gray(desc || '');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let { startIndex, endIndex } = entriesToDisplay(this.select, this.choices.length, this.limit);\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted, this.exited),\n      color.bold(this.msg),\n      style.delimiter(this.completing),\n      this.done && this.suggestions[this.select]\n        ? this.suggestions[this.select].title\n        : this.rendered = this.transform.render(this.input)\n    ].join(' ');\n\n    if (!this.done) {\n      const suggestions = this.suggestions\n        .slice(startIndex, endIndex)\n        .map((item, i) =>  this.renderOption(item,\n          this.select === i + startIndex,\n          i === 0 && startIndex > 0,\n          i + startIndex === endIndex - 1 && endIndex < this.choices.length))\n        .join('\\n');\n      this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = AutocompletePrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst MultiselectPrompt = require('./multiselect');\nconst { clear, style, figures } = require('../util');\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n  constructor(opts={}) {\n    opts.overrideRender = true;\n    super(opts);\n    this.inputValue = '';\n    this.clear = clear('', this.out.columns);\n    this.filteredOptions = this.value;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.filteredOptions.length - 1;\n    this.render();\n  }\n  next() {\n    this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.filteredOptions.length - 1;\n    } else {\n      this.cursor--;\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.filteredOptions.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n    this.render();\n  }\n\n  left() {\n    this.filteredOptions[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.filteredOptions[this.cursor].selected = true;\n    this.render();\n  }\n\n  delete() {\n    if (this.inputValue.length) {\n      this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n      this.updateFilteredOptions();\n    }\n  }\n\n  updateFilteredOptions() {\n    const currentHighlight = this.filteredOptions[this.cursor];\n    this.filteredOptions = this.value\n      .filter(v => {\n        if (this.inputValue) {\n          if (typeof v.title === 'string') {\n            if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n              return true;\n            }\n          }\n          if (typeof v.value === 'string') {\n            if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n              return true;\n            }\n          }\n          return false;\n        }\n        return true;\n      });\n    const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight)\n    this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.filteredOptions[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  handleInputChange(c) {\n    this.inputValue = this.inputValue + c;\n    this.updateFilteredOptions();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else {\n      this.handleInputChange(c);\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n      return `\nInstructions:\n    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n    [a,b,c]/delete: Filter choices\n    enter/return: Complete answer\n`;\n    }\n    return '';\n  }\n\n  renderCurrentInput() {\n    return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n  }\n\n  renderOption(cursor, v, i) {\n    let title;\n    if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n    return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + '  ' + title\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value\n        .filter(e => e.selected)\n        .map(v => v.title)\n        .join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n    if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render();\n\n    // print prompt\n\n    let prompt = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.renderDoneOrInstructions()\n    ].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n    prompt += this.renderOptions(this.filteredOptions);\n\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { erase, cursor } = require('sisteransi');\n\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\nclass ConfirmPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = opts.initial;\n    this.initialValue = !!opts.initial;\n    this.yesMsg = opts.yes || 'yes';\n    this.yesOption = opts.yesOption || '(Y/n)';\n    this.noMsg = opts.no || 'no';\n    this.noOption = opts.noOption || '(y/N)';\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.value = this.value || false;\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    if (c.toLowerCase() === 'y') {\n      this.value = true;\n      return this.submit();\n    }\n    if (c.toLowerCase() === 'n') {\n      this.value = false;\n      return this.submit();\n    }\n    return this.bell();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.done ? (this.value ? this.yesMsg : this.noMsg)\n          : color.gray(this.initialValue ? this.yesOption : this.noOption)\n    ].join(' ');\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = ConfirmPrompt;\n","'use strict';\n\nmodule.exports = {\n  TextPrompt: require('./text'),\n  SelectPrompt: require('./select'),\n  TogglePrompt: require('./toggle'),\n  DatePrompt: require('./date'),\n  NumberPrompt: require('./number'),\n  MultiselectPrompt: require('./multiselect'),\n  AutocompletePrompt: require('./autocomplete'),\n  AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n  ConfirmPrompt: require('./confirm')\n};\n","'use strict';\nconst $ = exports;\nconst el = require('./elements');\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts={}) {\n  return new Promise((res, rej) => {\n    const p = new el[type](args);\n    const onAbort = opts.onAbort || noop;\n    const onSubmit = opts.onSubmit || noop;\n    const onExit = opts.onExit || noop;\n    p.on('state', args.onState || noop);\n    p.on('submit', x => res(onSubmit(x)));\n    p.on('exit', x => res(onExit(x)));\n    p.on('abort', x => rej(onAbort(x)));\n  });\n}\n\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.text = args => toPrompt('TextPrompt', args);\n\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.password = args => {\n  args.style = 'password';\n  return $.text(args);\n};\n\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.invisible = args => {\n  args.style = 'invisible';\n  return $.text(args);\n};\n\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.number = args => toPrompt('NumberPrompt', args);\n\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.date = args => toPrompt('DatePrompt', args);\n\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n$.list = args => {\n  const sep = args.separator || ',';\n  return toPrompt('TextPrompt', args, {\n    onSubmit: str => str.split(sep).map(s => s.trim())\n  });\n};\n\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.toggle = args => toPrompt('TogglePrompt', args);\n\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.select = args => toPrompt('SelectPrompt', args);\n\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.multiselect = args => {\n  args.choices = [].concat(args.choices || []);\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n  return toPrompt('MultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\n$.autocompleteMultiselect = args => {\n  args.choices = [].concat(args.choices || []);\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n  return toPrompt('AutocompleteMultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(\n  choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase())\n);\n\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.autocomplete = args => {\n  args.suggest = args.suggest || byTitle;\n  args.choices = [].concat(args.choices || []);\n  return toPrompt('AutocompletePrompt', args);\n};\n","'use strict';\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\nconst noop = () => {};\n\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\nasync function prompt(questions=[], { onSubmit=noop, onCancel=noop }={}) {\n  const answers = {};\n  const override = prompt._override || {};\n  questions = [].concat(questions);\n  let answer, question, quit, name, type, lastPrompt;\n\n  const getFormattedAnswer = async (question, answer, skipValidation = false) => {\n    if (!skipValidation && question.validate && question.validate(answer) !== true) {\n      return;\n    }\n    return question.format ? await question.format(answer, answers) : answer\n  };\n\n  for (question of questions) {\n    ({ name, type } = question);\n\n    // evaluate type first and skip if type is a falsy value\n    if (typeof type === 'function') {\n      type = await type(answer, { ...answers }, question)\n      question['type'] = type\n    }\n    if (!type) continue;\n\n    // if property is a function, invoke it unless it's a special function\n    for (let key in question) {\n      if (passOn.includes(key)) continue;\n      let value = question[key];\n      question[key] = typeof value === 'function' ? await value(answer, { ...answers }, lastPrompt) : value;\n    }\n\n    lastPrompt = question;\n\n    if (typeof question.message !== 'string') {\n      throw new Error('prompt message is required');\n    }\n\n    // update vars in case they changed\n    ({ name, type } = question);\n\n    if (prompts[type] === void 0) {\n      throw new Error(`prompt type (${type}) is not defined`);\n    }\n\n    if (override[question.name] !== undefined) {\n      answer = await getFormattedAnswer(question, override[question.name]);\n      if (answer !== undefined) {\n        answers[name] = answer;\n        continue;\n      }\n    }\n\n    try {\n      // Get the injected answer if there is one or prompt the user\n      answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : await prompts[type](question);\n      answers[name] = answer = await getFormattedAnswer(question, answer, true);\n      quit = await onSubmit(question, answer, answers);\n    } catch (err) {\n      quit = !(await onCancel(question, answers));\n    }\n\n    if (quit) return answers;\n  }\n\n  return answers;\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n  const answer = injected.shift();\n    if (answer instanceof Error) {\n      throw answer;\n    }\n\n    return (answer === undefined) ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n  prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n  prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, { prompt, prompts, inject, override });\n","function isNodeLT(tar) {\n  tar = (Array.isArray(tar) ? tar : tar.split('.')).map(Number);\n  let i=0, src=process.versions.node.split('.').map(Number);\n  for (; i < tar.length; i++) {\n    if (src[i] > tar[i]) return false;\n    if (tar[i] > src[i]) return true;\n  }\n  return false;\n}\n\nmodule.exports =\n  isNodeLT('8.6.0')\n    ? require('./dist/index.js')\n    : require('./lib/index.js');\n","const isWindows = typeof process === 'object' &&\n  process &&\n  process.platform === 'win32'\nmodule.exports = isWindows ? { sep: '\\\\' } : { sep: '/' }\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str, options) {\n  if (!str)\n    return [];\n\n  options = options || {};\n  var max = options.max == null ? Infinity : options.max;\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), max, true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, max, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m) return [str];\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, max, false)\n    : [''];\n\n  if (/\\$$/.test(m.pre)) {    \n    for (var k = 0; k < post.length && k < max; k++) {\n      var expansion = pre+ '{' + m.body + '}' + post[k];\n      expansions.push(expansion);\n    }\n  } else {\n    var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isSequence = isNumericSequence || isAlphaSequence;\n    var isOptions = m.body.indexOf(',') >= 0;\n    if (!isSequence && !isOptions) {\n      // {a},b}\n      if (m.post.match(/,(?!,).*\\}/)) {\n        str = m.pre + '{' + m.body + escClose + m.post;\n        return expand(str, max, true);\n      }\n      return [str];\n    }\n\n    var n;\n    if (isSequence) {\n      n = m.body.split(/\\.\\./);\n    } else {\n      n = parseCommaParts(m.body);\n      if (n.length === 1) {\n        // x{{a,b}}y ==> x{a}y x{b}y\n        n = expand(n[0], max, false).map(embrace);\n        if (n.length === 1) {\n          return post.map(function(p) {\n            return m.pre + n[0] + p;\n          });\n        }\n      }\n    }\n\n    // at this point, n is the parts, and we know it's not a comma set\n    // with a single entry.\n    var N;\n\n    if (isSequence) {\n      var x = numeric(n[0]);\n      var y = numeric(n[1]);\n      var width = Math.max(n[0].length, n[1].length)\n      var incr = n.length == 3\n        ? Math.max(Math.abs(numeric(n[2])), 1)\n        : 1;\n      var test = lte;\n      var reverse = y < x;\n      if (reverse) {\n        incr *= -1;\n        test = gte;\n      }\n      var pad = n.some(isPadded);\n\n      N = [];\n\n      for (var i = x; test(i, y); i += incr) {\n        var c;\n        if (isAlphaSequence) {\n          c = String.fromCharCode(i);\n          if (c === '\\\\')\n            c = '';\n        } else {\n          c = String(i);\n          if (pad) {\n            var need = width - c.length;\n            if (need > 0) {\n              var z = new Array(need + 1).join('0');\n              if (i < 0)\n                c = '-' + z + c.slice(1);\n              else\n                c = z + c;\n            }\n          }\n        }\n        N.push(c);\n      }\n    } else {\n      N = [];\n\n      for (var j = 0; j < n.length; j++) {\n        N.push.apply(N, expand(n[j], max, false));\n      }\n    }\n\n    for (var j = 0; j < N.length; j++) {\n      for (var k = 0; k < post.length && expansions.length < max; k++) {\n        var expansion = pre + N[j] + post[k];\n        if (!isTop || isSequence || expansion)\n          expansions.push(expansion);\n      }\n    }\n  }\n\n  return expansions;\n}\n","const minimatch = module.exports = (p, pattern, options = {}) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nmodule.exports = minimatch\n\nconst path = require('./lib/path.js')\nminimatch.sep = path.sep\n\nconst GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\nconst expand = require('brace-expansion')\n\nconst plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = s => s.split('').reduce((set, c) => {\n  set[c] = true\n  return set\n}, {})\n\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(')\n\n// normalizes slashes.\nconst slashSplit = /\\/+/\n\nminimatch.filter = (pattern, options = {}) =>\n  (p, i, list) => minimatch(p, pattern, options)\n\nconst ext = (a, b = {}) => {\n  const t = {}\n  Object.keys(a).forEach(k => t[k] = a[k])\n  Object.keys(b).forEach(k => t[k] = b[k])\n  return t\n}\n\nminimatch.defaults = def => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p, pattern, options) => orig(p, pattern, ext(def, options))\n  m.Minimatch = class Minimatch extends orig.Minimatch {\n    constructor (pattern, options) {\n      super(pattern, ext(def, options))\n    }\n  }\n  m.Minimatch.defaults = options => orig.defaults(ext(def, options)).Minimatch\n  m.filter = (pattern, options) => orig.filter(pattern, ext(def, options))\n  m.defaults = options => orig.defaults(ext(def, options))\n  m.makeRe = (pattern, options) => orig.makeRe(pattern, ext(def, options))\n  m.braceExpand = (pattern, options) => orig.braceExpand(pattern, ext(def, options))\n  m.match = (list, pattern, options) => orig.match(list, pattern, ext(def, options))\n\n  return m\n}\n\n\n\n\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = (pattern, options) => braceExpand(pattern, options)\n\nconst braceExpand = (pattern, options = {}) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nconst MAX_PATTERN_LENGTH = 1024 * 64\nconst assertValidPattern = pattern => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nconst SUBPARSE = Symbol('subparse')\n\nminimatch.makeRe = (pattern, options) =>\n  new Minimatch(pattern, options || {}).makeRe()\n\nminimatch.match = (list, pattern, options = {}) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\n// replace stuff like \\* with *\nconst globUnescape = s => s.replace(/\\\\(.)/g, '$1')\nconst charUnescape = s => s.replace(/\\\\([^-\\]])/g, '$1')\nconst regExpEscape = s => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\nconst braExpEscape = s => s.replace(/[[\\]\\\\]/g, '\\\\$&')\n\nclass Minimatch {\n  constructor (pattern, options) {\n    assertValidPattern(pattern)\n\n    if (!options) options = {}\n\n    this.options = options\n    this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined\n      ? options.maxGlobstarRecursion : 200\n    this.set = []\n    this.pattern = pattern\n    this.windowsPathsNoEscape = !!options.windowsPathsNoEscape ||\n      options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.regexp = null\n    this.negate = false\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  debug () {}\n\n  make () {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    let set = this.globSet = this.braceExpand()\n\n    if (options.debug) this.debug = (...args) => console.error(...args)\n\n    this.debug(this.pattern, set)\n\n    // step 3: now we have a set, so turn each one into a series of path-portion\n    // matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    set = this.globParts = set.map(s => s.split(slashSplit))\n\n    this.debug(this.pattern, set)\n\n    // glob --> regexps\n    set = set.map((s, si, set) => s.map(this.parse, this))\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    set = set.filter(s => s.indexOf(false) === -1)\n\n    this.debug(this.pattern, set)\n\n    this.set = set\n  }\n\n  parseNegate () {\n    if (this.options.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne (file, pattern, partial) {\n    if (pattern.indexOf(GLOBSTAR) !== -1) {\n      return this._matchGlobstar(file, pattern, partial, 0, 0)\n    }\n    return this._matchOne(file, pattern, partial, 0, 0)\n  }\n\n  _matchGlobstar (file, pattern, partial, fileIndex, patternIndex) {\n    // find first globstar from patternIndex\n    let firstgs = -1\n    for (let i = patternIndex; i < pattern.length; i++) {\n      if (pattern[i] === GLOBSTAR) { firstgs = i; break }\n    }\n\n    // find last globstar\n    let lastgs = -1\n    for (let i = pattern.length - 1; i >= 0; i--) {\n      if (pattern[i] === GLOBSTAR) { lastgs = i; break }\n    }\n\n    const head = pattern.slice(patternIndex, firstgs)\n    const body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs)\n    const tail = partial ? [] : pattern.slice(lastgs + 1)\n\n    // check the head\n    if (head.length) {\n      const fileHead = file.slice(fileIndex, fileIndex + head.length)\n      if (!this._matchOne(fileHead, head, partial, 0, 0)) {\n        return false\n      }\n      fileIndex += head.length\n    }\n\n    // check the tail\n    let fileTailMatch = 0\n    if (tail.length) {\n      if (tail.length + fileIndex > file.length) return false\n\n      const tailStart = file.length - tail.length\n      if (this._matchOne(file, tail, partial, tailStart, 0)) {\n        fileTailMatch = tail.length\n      } else {\n        // affordance for stuff like a/**/* matching a/b/\n        if (file[file.length - 1] !== '' ||\n            fileIndex + tail.length === file.length) {\n          return false\n        }\n        if (!this._matchOne(file, tail, partial, tailStart - 1, 0)) {\n          return false\n        }\n        fileTailMatch = tail.length + 1\n      }\n    }\n\n    // if body is empty (single ** between head and tail)\n    if (!body.length) {\n      let sawSome = !!fileTailMatch\n      for (let i = fileIndex; i < file.length - fileTailMatch; i++) {\n        const f = String(file[i])\n        sawSome = true\n        if (f === '.' || f === '..' ||\n            (!this.options.dot && f.charAt(0) === '.')) {\n          return false\n        }\n      }\n      return partial || sawSome\n    }\n\n    // split body into segments at each GLOBSTAR\n    const bodySegments = [[[], 0]]\n    let currentBody = bodySegments[0]\n    let nonGsParts = 0\n    const nonGsPartsSums = [0]\n    for (const b of body) {\n      if (b === GLOBSTAR) {\n        nonGsPartsSums.push(nonGsParts)\n        currentBody = [[], 0]\n        bodySegments.push(currentBody)\n      } else {\n        currentBody[0].push(b)\n        nonGsParts++\n      }\n    }\n\n    let idx = bodySegments.length - 1\n    const fileLength = file.length - fileTailMatch\n    for (const b of bodySegments) {\n      b[1] = fileLength - (nonGsPartsSums[idx--] + b[0].length)\n    }\n\n    return !!this._matchGlobStarBodySections(\n      file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n    )\n  }\n\n  // return false for \"nope, not matching\"\n  // return null for \"not matching, cannot keep trying\"\n  _matchGlobStarBodySections (\n    file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail\n  ) {\n    const bs = bodySegments[bodyIndex]\n    if (!bs) {\n      // just make sure there are no bad dots\n      for (let i = fileIndex; i < file.length; i++) {\n        sawTail = true\n        const f = file[i]\n        if (f === '.' || f === '..' ||\n            (!this.options.dot && f.charAt(0) === '.')) {\n          return false\n        }\n      }\n      return sawTail\n    }\n\n    const [body, after] = bs\n    while (fileIndex <= after) {\n      const m = this._matchOne(\n        file.slice(0, fileIndex + body.length),\n        body,\n        partial,\n        fileIndex,\n        0\n      )\n      // if limit exceeded, no match. intentional false negative,\n      // acceptable break in correctness for security.\n      if (m && globStarDepth < this.maxGlobstarRecursion) {\n        const sub = this._matchGlobStarBodySections(\n          file, bodySegments,\n          fileIndex + body.length, bodyIndex + 1,\n          partial, globStarDepth + 1, sawTail\n        )\n        if (sub !== false) {\n          return sub\n        }\n      }\n      const f = file[fileIndex]\n      if (f === '.' || f === '..' ||\n          (!this.options.dot && f.charAt(0) === '.')) {\n        return false\n      }\n      fileIndex++\n    }\n    return partial || null\n  }\n\n  _matchOne (file, pattern, partial, fileIndex, patternIndex) {\n    let fi, pi, fl, pl\n    for (\n      fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length\n      ; (fi < fl) && (pi < pl)\n      ; fi++, pi++\n    ) {\n      this.debug('matchOne loop')\n      const p = pattern[pi]\n      const f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      // should be impossible.\n      // some invalid regexp stuff in the set.\n      /* istanbul ignore if */\n      if (p === false || p === GLOBSTAR) return false\n\n      // something other than **\n      // non-magic patterns just have to match exactly\n      // patterns with magic have been turned into regexps.\n      let hit\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = f.match(p)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    // now either we fell off the end of the pattern, or we're done.\n    if (fi === fl && pi === pl) {\n      // ran out of pattern and filename at the same time.\n      // an exact hit!\n      return true\n    } else if (fi === fl) {\n      // ran out of file, but still had pattern left.\n      // this is ok if we're doing the match as part of\n      // a glob fs traversal.\n      return partial\n    } else /* istanbul ignore else */ if (pi === pl) {\n      // ran out of pattern, still have file left.\n      // this is only acceptable if we're on the very last\n      // empty segment of a file with a trailing slash.\n      // a/* should match a/b/\n      return (fi === fl - 1) && (file[fi] === '')\n    }\n\n    // should be unreachable.\n    /* istanbul ignore next */\n    throw new Error('wtf?')\n  }\n\n  braceExpand () {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse (pattern, isSub) {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') {\n      if (!options.noglobstar)\n        return GLOBSTAR\n      else\n        pattern = '*'\n    }\n    if (pattern === '') return ''\n\n    let re = ''\n    let hasMagic = false\n    let escaping = false\n    // ? => one single character\n    const patternListStack = []\n    const negativeLists = []\n    let stateChar\n    let inClass = false\n    let reClassStart = -1\n    let classStart = -1\n    let cs\n    let pl\n    let sp\n    // . and .. never match anything that doesn't start with .,\n    // even when options.dot is set.  However, if the pattern\n    // starts with ., then traversal patterns can match.\n    let dotTravAllowed = pattern.charAt(0) === '.'\n    let dotFileAllowed = options.dot || dotTravAllowed\n    const patternStart = () =>\n      dotTravAllowed\n        ? ''\n        : dotFileAllowed\n        ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n        : '(?!\\\\.)'\n    const subPatternStart = (p) =>\n      p.charAt(0) === '.'\n        ? ''\n        : options.dot\n        ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n        : '(?!\\\\.)'\n\n\n    const clearStateChar = () => {\n      if (stateChar) {\n        // we had some state-tracking character\n        // that wasn't consumed by this pass.\n        switch (stateChar) {\n          case '*':\n            re += star\n            hasMagic = true\n          break\n          case '?':\n            re += qmark\n            hasMagic = true\n          break\n          default:\n            re += '\\\\' + stateChar\n          break\n        }\n        this.debug('clearStateChar %j %j', stateChar, re)\n        stateChar = false\n      }\n    }\n\n    for (let i = 0, c; (i < pattern.length) && (c = pattern.charAt(i)); i++) {\n      this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n      // skip over any that are escaped.\n      if (escaping) {\n        /* istanbul ignore next - completely not allowed, even escaped. */\n        if (c === '/') {\n          return false\n        }\n\n        if (reSpecials[c]) {\n          re += '\\\\'\n        }\n        re += c\n        escaping = false\n        continue\n      }\n\n      switch (c) {\n        /* istanbul ignore next */\n        case '/': {\n          // Should already be path-split by now.\n          return false\n        }\n\n        case '\\\\':\n          if (inClass && pattern.charAt(i + 1) === '-') {\n            re += c\n            continue\n          }\n\n          clearStateChar()\n          escaping = true\n        continue\n\n        // the various stateChar values\n        // for the \"extglob\" stuff.\n        case '?':\n        case '*':\n        case '+':\n        case '@':\n        case '!':\n          this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n          // all of those are literals inside a class, except that\n          // the glob [!a] means [^a] in regexp\n          if (inClass) {\n            this.debug('  in class')\n            if (c === '!' && i === classStart + 1) c = '^'\n            re += c\n            continue\n          }\n\n          // coalesce consecutive non-globstar * characters\n          if (c === '*' && stateChar === '*') continue\n\n          // if we already have a stateChar, then it means\n          // that there was something like ** or +? in there.\n          // Handle the stateChar, then proceed with this one.\n          this.debug('call clearStateChar %j', stateChar)\n          clearStateChar()\n          stateChar = c\n          // if extglob is disabled, then +(asdf|foo) isn't a thing.\n          // just clear the statechar *now*, rather than even diving into\n          // the patternList stuff.\n          if (options.noext) clearStateChar()\n        continue\n\n        case '(': {\n          if (inClass) {\n            re += '('\n            continue\n          }\n\n          if (!stateChar) {\n            re += '\\\\('\n            continue\n          }\n\n          const plEntry = {\n            type: stateChar,\n            start: i - 1,\n            reStart: re.length,\n            open: plTypes[stateChar].open,\n            close: plTypes[stateChar].close,\n          }\n          this.debug(this.pattern, '\\t', plEntry)\n          patternListStack.push(plEntry)\n          // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n          re += plEntry.open\n          // next entry starts with a dot maybe?\n          if (plEntry.start === 0 && plEntry.type !== '!') {\n            dotTravAllowed = true\n            re += subPatternStart(pattern.slice(i + 1))\n          }\n          this.debug('plType %j %j', stateChar, re)\n          stateChar = false\n          continue\n        }\n\n        case ')': {\n          const plEntry = patternListStack[patternListStack.length - 1]\n          if (inClass || !plEntry) {\n            re += '\\\\)'\n            continue\n          }\n          patternListStack.pop()\n\n          // closing an extglob\n          clearStateChar()\n          hasMagic = true\n          pl = plEntry\n          // negation is (?:(?!js)[^/]*)\n          // The others are (?:<pattern>)<type>\n          re += pl.close\n          if (pl.type === '!') {\n            negativeLists.push(Object.assign(pl, { reEnd: re.length }))\n          }\n          continue\n        }\n\n        case '|': {\n          const plEntry = patternListStack[patternListStack.length - 1]\n          if (inClass || !plEntry) {\n            re += '\\\\|'\n            continue\n          }\n\n          clearStateChar()\n          re += '|'\n          // next subpattern can start with a dot?\n          if (plEntry.start === 0 && plEntry.type !== '!') {\n            dotTravAllowed = true\n            re += subPatternStart(pattern.slice(i + 1))\n          }\n          continue\n        }\n\n        // these are mostly the same in regexp and glob\n        case '[':\n          // swallow any state-tracking char before the [\n          clearStateChar()\n\n          if (inClass) {\n            re += '\\\\' + c\n            continue\n          }\n\n          inClass = true\n          classStart = i\n          reClassStart = re.length\n          re += c\n        continue\n\n        case ']':\n          //  a right bracket shall lose its special\n          //  meaning and represent itself in\n          //  a bracket expression if it occurs\n          //  first in the list.  -- POSIX.2 2.8.3.2\n          if (i === classStart + 1 || !inClass) {\n            re += '\\\\' + c\n            continue\n          }\n\n          // split where the last [ was, make sure we don't have\n          // an invalid re. if so, re-walk the contents of the\n          // would-be class to re-translate any characters that\n          // were passed through as-is\n          // TODO: It would probably be faster to determine this\n          // without a try/catch and a new RegExp, but it's tricky\n          // to do safely.  For now, this is safe and works.\n          cs = pattern.substring(classStart + 1, i)\n          try {\n            RegExp('[' + braExpEscape(charUnescape(cs)) + ']')\n            // looks good, finish up the class.\n            re += c\n          } catch (er) {\n            // out of order ranges in JS are errors, but in glob syntax,\n            // they're just a range that matches nothing.\n            re = re.substring(0, reClassStart) + '(?:$.)' // match nothing ever\n          }\n          hasMagic = true\n          inClass = false\n        continue\n\n        default:\n          // swallow any state char that wasn't consumed\n          clearStateChar()\n\n          if (reSpecials[c] && !(c === '^' && inClass)) {\n            re += '\\\\'\n          }\n\n          re += c\n          break\n\n      } // switch\n    } // for\n\n    // handle the case where we left a class open.\n    // \"[abc\" is valid, equivalent to \"\\[abc\"\n    if (inClass) {\n      // split where the last [ was, and escape it\n      // this is a huge pita.  We now have to re-walk\n      // the contents of the would-be class to re-translate\n      // any characters that were passed through as-is\n      cs = pattern.slice(classStart + 1)\n      sp = this.parse(cs, SUBPARSE)\n      re = re.substring(0, reClassStart) + '\\\\[' + sp[0]\n      hasMagic = hasMagic || sp[1]\n    }\n\n    // handle the case where we had a +( thing at the *end*\n    // of the pattern.\n    // each pattern list stack adds 3 chars, and we need to go through\n    // and escape any | chars that were passed through as-is for the regexp.\n    // Go through and escape them, taking care not to double-escape any\n    // | chars that were already escaped.\n    for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n      let tail\n      tail = re.slice(pl.reStart + pl.open.length)\n      this.debug('setting tail', re, pl)\n      // maybe some even number of \\, then maybe 1 \\, followed by a |\n      tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n        /* istanbul ignore else - should already be done */\n        if (!$2) {\n          // the | isn't already escaped, so escape it.\n          $2 = '\\\\'\n        }\n\n        // need to escape all those slashes *again*, without escaping the\n        // one that we need for escaping the | character.  As it works out,\n        // escaping an even number of slashes can be done by simply repeating\n        // it exactly after itself.  That's why this trick works.\n        //\n        // I am sorry that you have to see this.\n        return $1 + $1 + $2 + '|'\n      })\n\n      this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n      const t = pl.type === '*' ? star\n        : pl.type === '?' ? qmark\n        : '\\\\' + pl.type\n\n      hasMagic = true\n      re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n    }\n\n    // handle trailing things that only matter at the very end.\n    clearStateChar()\n    if (escaping) {\n      // trailing \\\\\n      re += '\\\\\\\\'\n    }\n\n    // only need to apply the nodot start if the re starts with\n    // something that could conceivably capture a dot\n    const addPatternStart = addPatternStartSet[re.charAt(0)]\n\n    // Hack to work around lack of negative lookbehind in JS\n    // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n    // like 'a.xyz.yz' doesn't match.  So, the first negative\n    // lookahead, has to look ALL the way ahead, to the end of\n    // the pattern.\n    for (let n = negativeLists.length - 1; n > -1; n--) {\n      const nl = negativeLists[n]\n\n      const nlBefore = re.slice(0, nl.reStart)\n      const nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n      let nlAfter = re.slice(nl.reEnd)\n      const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter\n\n      // Handle nested stuff like *(*.js|!(*.json)), where open parens\n      // mean that we should *not* include the ) in the bit that is considered\n      // \"after\" the negated section.\n      const closeParensBefore = nlBefore.split(')').length\n      const openParensBefore = nlBefore.split('(').length - closeParensBefore\n      let cleanAfter = nlAfter\n      for (let i = 0; i < openParensBefore; i++) {\n        cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n      }\n      nlAfter = cleanAfter\n\n      const dollar = nlAfter === '' && isSub !== SUBPARSE ? '(?:$|\\\\/)' : ''\n\n      re = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    }\n\n    // if the re is not \"\" at this point, then we need to make sure\n    // it doesn't match against an empty path part.\n    // Otherwise a/* will match a/, which it should not.\n    if (re !== '' && hasMagic) {\n      re = '(?=.)' + re\n    }\n\n    if (addPatternStart) {\n      re = patternStart() + re\n    }\n\n    // parsing just a piece of a larger pattern.\n    if (isSub === SUBPARSE) {\n      return [re, hasMagic]\n    }\n\n    // if it's nocase, and the lcase/uppercase don't match, it's magic\n    if (options.nocase && !hasMagic) {\n      hasMagic = pattern.toUpperCase() !== pattern.toLowerCase()\n    }\n\n    // skip the regexp for non-magical patterns\n    // unescape anything in it, though, so that it'll be\n    // an exact match against a file etc.\n    if (!hasMagic) {\n      return globUnescape(pattern)\n    }\n\n    const flags = options.nocase ? 'i' : ''\n    try {\n      return Object.assign(new RegExp('^' + re + '$', flags), {\n        _glob: pattern,\n        _src: re,\n      })\n    } catch (er) /* istanbul ignore next - should be impossible */ {\n      // If it was an invalid regular expression, then it can't match\n      // anything.  This trick looks for a character after the end of\n      // the string, which is of course impossible, except in multi-line\n      // mode, but it's not a /m regex.\n      return new RegExp('$.')\n    }\n  }\n\n  makeRe () {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar ? star\n      : options.dot ? twoStarDot\n      : twoStarNoDot\n    const flags = options.nocase ? 'i' : ''\n\n    // coalesce globstars and regexpify non-globstar patterns\n    // if it's the only item, then we just do one twoStar\n    // if it's the first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if it's the last, append (\\/twoStar|) to previous\n    // if it's in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set.map(pattern => {\n      pattern = pattern.map(p =>\n        typeof p === 'string' ? regExpEscape(p)\n        : p === GLOBSTAR ? GLOBSTAR\n        : p._src\n      ).reduce((set, p) => {\n        if (!(set[set.length - 1] === GLOBSTAR && p === GLOBSTAR)) {\n          set.push(p)\n        }\n        return set\n      }, [])\n      pattern.forEach((p, i) => {\n        if (p !== GLOBSTAR || pattern[i-1] === GLOBSTAR) {\n          return\n        }\n        if (i === 0) {\n          if (pattern.length > 1) {\n            pattern[i+1] = '(?:\\\\\\/|' + twoStar + '\\\\\\/)?' + pattern[i+1]\n          } else {\n            pattern[i] = twoStar\n          }\n        } else if (i === pattern.length - 1) {\n          pattern[i-1] += '(?:\\\\\\/|' + twoStar + ')?'\n        } else {\n          pattern[i-1] += '(?:\\\\\\/|\\\\\\/' + twoStar + '\\\\\\/)' + pattern[i+1]\n          pattern[i+1] = GLOBSTAR\n        }\n      })\n      return pattern.filter(p => p !== GLOBSTAR).join('/')\n    }).join('|')\n\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^(?:' + re + ')$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').*$'\n\n    try {\n      this.regexp = new RegExp(re, flags)\n    } catch (ex) /* istanbul ignore next - should be impossible */ {\n      this.regexp = false\n    }\n    return this.regexp\n  }\n\n  match (f, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) return false\n    if (this.empty) return f === ''\n\n    if (f === '/' && partial) return true\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (path.sep !== '/') {\n      f = f.split(path.sep).join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    f = f.split(slashSplit)\n    this.debug(this.pattern, 'split', f)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename\n    for (let i = f.length - 1; i >= 0; i--) {\n      filename = f[i]\n      if (filename) break\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = f\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) return true\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) return false\n    return this.negate\n  }\n\n  static defaults (def) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n\nminimatch.Minimatch = Minimatch\n","module.exports = readdirGlob;\n\nconst fs = require('fs');\nconst { EventEmitter } = require('events');\nconst { Minimatch } = require('minimatch');\nconst { resolve } = require('path');\n\nfunction readdir(dir, strict) {\n  return new Promise((resolve, reject) => {\n    fs.readdir(dir, {withFileTypes: true} ,(err, files) => {\n      if(err) {\n        switch (err.code) {\n          case 'ENOTDIR':      // Not a directory\n            if(strict) {\n              reject(err);\n            } else {\n              resolve([]);\n            }\n            break;\n          case 'ENOTSUP':      // Operation not supported\n          case 'ENOENT':       // No such file or directory\n          case 'ENAMETOOLONG': // Filename too long\n          case 'UNKNOWN':\n            resolve([]);\n            break;\n          case 'ELOOP':        // Too many levels of symbolic links\n          default:\n            reject(err);\n            break;\n        }\n      } else {\n        resolve(files);\n      }\n    });\n  });\n}\nfunction stat(file, followSymlinks) {\n  return new Promise((resolve, reject) => {\n    const statFunc = followSymlinks ? fs.stat : fs.lstat;\n    statFunc(file, (err, stats) => {\n      if(err) {\n        switch (err.code) {\n          case 'ENOENT':\n            if(followSymlinks) {\n              // Fallback to lstat to handle broken links as files\n              resolve(stat(file, false)); \n            } else {\n              resolve(null);\n            }\n            break;\n          default:\n            resolve(null);\n            break;\n        }\n      } else {\n        resolve(stats);\n      }\n    });\n  });\n}\n\nasync function* exploreWalkAsync(dir, path, followSymlinks, useStat, shouldSkip, strict) {\n  let files = await readdir(path + dir, strict);\n  for(const file of files) {\n    let name = file.name;\n    if(name === undefined) {\n      // undefined file.name means the `withFileTypes` options is not supported by node\n      // we have to call the stat function to know if file is directory or not.\n      name = file;\n      useStat = true;\n    }\n    const filename = dir + '/' + name;\n    const relative = filename.slice(1); // Remove the leading /\n    const absolute = path + '/' + relative;\n    let stats = null;\n    if(useStat || followSymlinks) {\n      stats = await stat(absolute, followSymlinks);\n    }\n    if(!stats && file.name !== undefined) {\n      stats = file;\n    }\n    if(stats === null) {\n      stats = { isDirectory: () => false };\n    }\n\n    if(stats.isDirectory()) {\n      if(!shouldSkip(relative)) {\n        yield {relative, absolute, stats};\n        yield* exploreWalkAsync(filename, path, followSymlinks, useStat, shouldSkip, false);\n      }\n    } else {\n      yield {relative, absolute, stats};\n    }\n  }\n}\nasync function* explore(path, followSymlinks, useStat, shouldSkip) {\n  yield* exploreWalkAsync('', path, followSymlinks, useStat, shouldSkip, true);\n}\n\n\nfunction readOptions(options) {\n  return {\n    pattern: options.pattern,\n    dot: !!options.dot,\n    noglobstar: !!options.noglobstar,\n    matchBase: !!options.matchBase,\n    nocase: !!options.nocase,\n    ignore: options.ignore,\n    skip: options.skip,\n\n    follow: !!options.follow,\n    stat: !!options.stat,\n    nodir: !!options.nodir,\n    mark: !!options.mark,\n    silent: !!options.silent,\n    absolute: !!options.absolute\n  };\n}\n\nclass ReaddirGlob extends EventEmitter {\n  constructor(cwd, options, cb) {\n    super();\n    if(typeof options === 'function') {\n      cb = options;\n      options = null;\n    }\n\n    this.options = readOptions(options || {});\n  \n    this.matchers = [];\n    if(this.options.pattern) {\n      const matchers = Array.isArray(this.options.pattern) ? this.options.pattern : [this.options.pattern];\n      this.matchers = matchers.map( m =>\n        new Minimatch(m, {\n          dot: this.options.dot,\n          noglobstar:this.options.noglobstar,\n          matchBase:this.options.matchBase,\n          nocase:this.options.nocase\n        })\n      );\n    }\n  \n    this.ignoreMatchers = [];\n    if(this.options.ignore) {\n      const ignorePatterns = Array.isArray(this.options.ignore) ? this.options.ignore : [this.options.ignore];\n      this.ignoreMatchers = ignorePatterns.map( ignore =>\n        new Minimatch(ignore, {dot: true})\n      );\n    }\n  \n    this.skipMatchers = [];\n    if(this.options.skip) {\n      const skipPatterns = Array.isArray(this.options.skip) ? this.options.skip : [this.options.skip];\n      this.skipMatchers = skipPatterns.map( skip =>\n        new Minimatch(skip, {dot: true})\n      );\n    }\n\n    this.iterator = explore(resolve(cwd || '.'), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));\n    this.paused = false;\n    this.inactive = false;\n    this.aborted = false;\n  \n    if(cb) {\n      this._matches = []; \n      this.on('match', match => this._matches.push(this.options.absolute ? match.absolute : match.relative));\n      this.on('error', err => cb(err));\n      this.on('end', () => cb(null, this._matches));\n    }\n\n    setTimeout( () => this._next(), 0);\n  }\n\n  _shouldSkipDirectory(relative) {\n    //console.log(relative, this.skipMatchers.some(m => m.match(relative)));\n    return this.skipMatchers.some(m => m.match(relative));\n  }\n\n  _fileMatches(relative, isDirectory) {\n    const file = relative + (isDirectory ? '/' : '');\n    return (this.matchers.length === 0 || this.matchers.some(m => m.match(file)))\n      && !this.ignoreMatchers.some(m => m.match(file))\n      && (!this.options.nodir || !isDirectory);\n  }\n\n  _next() {\n    if(!this.paused && !this.aborted) {\n      this.iterator.next()\n      .then((obj)=> {\n        if(!obj.done) {\n          const isDirectory = obj.value.stats.isDirectory();\n          if(this._fileMatches(obj.value.relative, isDirectory )) {\n            let relative = obj.value.relative;\n            let absolute = obj.value.absolute;\n            if(this.options.mark && isDirectory) {\n              relative += '/';\n              absolute += '/';\n            }\n            if(this.options.stat) {\n              this.emit('match', {relative, absolute, stat:obj.value.stats});\n            } else {\n              this.emit('match', {relative, absolute});\n            }\n          }\n          this._next(this.iterator);\n        } else {\n          this.emit('end');\n        }\n      })\n      .catch((err) => {\n        this.abort();\n        this.emit('error', err);\n        if(!err.code && !this.options.silent) {\n          console.error(err);\n        }\n      });\n    } else {\n      this.inactive = true;\n    }\n  }\n\n  abort() {\n    this.aborted = true;\n  }\n\n  pause() {\n    this.paused = true;\n  }\n\n  resume() {\n    this.paused = false;\n    if(this.inactive) {\n      this.inactive = false;\n      this._next();\n    }\n  }\n}\n\n\nfunction readdirGlob(pattern, options, cb) {\n  return new ReaddirGlob(pattern, options, cb);\n}\nreaddirGlob.ReaddirGlob = ReaddirGlob;","/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @returns {Function} the partially-applied function\n * @example\n *\n * // using apply\n * async.parallel([\n *     async.apply(fs.writeFile, 'testfile1', 'test1'),\n *     async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n *     function(callback) {\n *         fs.writeFile('testfile1', 'test1', callback);\n *     },\n *     function(callback) {\n *         fs.writeFile('testfile2', 'test2', callback);\n *     }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nfunction apply(fn, ...args) {\n    return (...callArgs) => fn(...args,...callArgs);\n}\n\nfunction initialParams (fn) {\n    return function (...args/*, callback*/) {\n        var callback = args.pop();\n        return fn.call(this, args, callback);\n    };\n}\n\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n    setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n    return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer$1;\n\nif (hasQueueMicrotask) {\n    _defer$1 = queueMicrotask;\n} else if (hasSetImmediate) {\n    _defer$1 = setImmediate;\n} else if (hasNextTick) {\n    _defer$1 = process.nextTick;\n} else {\n    _defer$1 = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer$1);\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(JSON.parse),\n *     function (data, next) {\n *         // data is the result of parsing the text.\n *         // If there was a parsing error, it would have been caught.\n *     }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(function (contents) {\n *         return db.model.create(contents);\n *     }),\n *     function (model, next) {\n *         // `model` is the instantiated model object.\n *         // If there was an error, this function would be skipped.\n *     }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n *     var intermediateStep = await processFile(file);\n *     return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n    if (isAsync(func)) {\n        return function (...args/*, callback*/) {\n            const callback = args.pop();\n            const promise = func.apply(this, args);\n            return handlePromise(promise, callback)\n        }\n    }\n\n    return initialParams(function (args, callback) {\n        var result;\n        try {\n            result = func.apply(this, args);\n        } catch (e) {\n            return callback(e);\n        }\n        // if result is Promise object\n        if (result && typeof result.then === 'function') {\n            return handlePromise(result, callback)\n        } else {\n            callback(null, result);\n        }\n    });\n}\n\nfunction handlePromise(promise, callback) {\n    return promise.then(value => {\n        invokeCallback(callback, null, value);\n    }, err => {\n        invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err));\n    });\n}\n\nfunction invokeCallback(callback, error, value) {\n    try {\n        callback(error, value);\n    } catch (err) {\n        setImmediate$1(e => { throw e }, err);\n    }\n}\n\nfunction isAsync(fn) {\n    return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n    return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n    return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n    if (typeof asyncFn !== 'function') throw new Error('expected a function')\n    return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\n\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify (asyncFn, arity) {\n    if (!arity) arity = asyncFn.length;\n    if (!arity) throw new Error('arity is undefined')\n    function awaitable (...args) {\n        if (typeof args[arity - 1] === 'function') {\n            return asyncFn.apply(this, args)\n        }\n\n        return new Promise((resolve, reject) => {\n            args[arity - 1] = (err, ...cbArgs) => {\n                if (err) return reject(err)\n                resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n            };\n            asyncFn.apply(this, args);\n        })\n    }\n\n    return awaitable\n}\n\nfunction applyEach$1 (eachfn) {\n    return function applyEach(fns, ...callArgs) {\n        const go = awaitify(function (callback) {\n            var that = this;\n            return eachfn(fns, (fn, cb) => {\n                wrapAsync(fn).apply(that, callArgs.concat(cb));\n            }, callback);\n        });\n        return go;\n    };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n    arr = arr || [];\n    var results = [];\n    var counter = 0;\n    var _iteratee = wrapAsync(iteratee);\n\n    return eachfn(arr, (value, _, iterCb) => {\n        var index = counter++;\n        _iteratee(value, (err, v) => {\n            results[index] = v;\n            iterCb(err);\n        });\n    }, err => {\n        callback(err, results);\n    });\n}\n\nfunction isArrayLike(value) {\n    return value &&\n        typeof value.length === 'number' &&\n        value.length >= 0 &&\n        value.length % 1 === 0;\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\n\nfunction once(fn) {\n    function wrapper (...args) {\n        if (fn === null) return;\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, args);\n    }\n    Object.assign(wrapper, fn);\n    return wrapper\n}\n\nfunction getIterator (coll) {\n    return coll[Symbol.iterator] && coll[Symbol.iterator]();\n}\n\nfunction createArrayIterator(coll) {\n    var i = -1;\n    var len = coll.length;\n    return function next() {\n        return ++i < len ? {value: coll[i], key: i} : null;\n    }\n}\n\nfunction createES2015Iterator(iterator) {\n    var i = -1;\n    return function next() {\n        var item = iterator.next();\n        if (item.done)\n            return null;\n        i++;\n        return {value: item.value, key: i};\n    }\n}\n\nfunction createObjectIterator(obj) {\n    var okeys = obj ? Object.keys(obj) : [];\n    var i = -1;\n    var len = okeys.length;\n    return function next() {\n        var key = okeys[++i];\n        if (key === '__proto__') {\n            return next();\n        }\n        return i < len ? {value: obj[key], key} : null;\n    };\n}\n\nfunction createIterator(coll) {\n    if (isArrayLike(coll)) {\n        return createArrayIterator(coll);\n    }\n\n    var iterator = getIterator(coll);\n    return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n    return function (...args) {\n        if (fn === null) throw new Error(\"Callback was already called.\");\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, args);\n    };\n}\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n    let done = false;\n    let canceled = false;\n    let awaiting = false;\n    let running = 0;\n    let idx = 0;\n\n    function replenish() {\n        //console.log('replenish')\n        if (running >= limit || awaiting || done) return\n        //console.log('replenish awaiting')\n        awaiting = true;\n        generator.next().then(({value, done: iterDone}) => {\n            //console.log('got value', value)\n            if (canceled || done) return\n            awaiting = false;\n            if (iterDone) {\n                done = true;\n                if (running <= 0) {\n                    //console.log('done nextCb')\n                    callback(null);\n                }\n                return;\n            }\n            running++;\n            iteratee(value, idx, iterateeCallback);\n            idx++;\n            replenish();\n        }).catch(handleError);\n    }\n\n    function iterateeCallback(err, result) {\n        //console.log('iterateeCallback')\n        running -= 1;\n        if (canceled) return\n        if (err) return handleError(err)\n\n        if (err === false) {\n            done = true;\n            canceled = true;\n            return\n        }\n\n        if (result === breakLoop || (done && running <= 0)) {\n            done = true;\n            //console.log('done iterCb')\n            return callback(null);\n        }\n        replenish();\n    }\n\n    function handleError(err) {\n        if (canceled) return\n        awaiting = false;\n        done = true;\n        callback(err);\n    }\n\n    replenish();\n}\n\nvar eachOfLimit$2 = (limit) => {\n    return (obj, iteratee, callback) => {\n        callback = once(callback);\n        if (limit <= 0) {\n            throw new RangeError('concurrency limit cannot be less than 1')\n        }\n        if (!obj) {\n            return callback(null);\n        }\n        if (isAsyncGenerator(obj)) {\n            return asyncEachOfLimit(obj, limit, iteratee, callback)\n        }\n        if (isAsyncIterable(obj)) {\n            return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback)\n        }\n        var nextElem = createIterator(obj);\n        var done = false;\n        var canceled = false;\n        var running = 0;\n        var looping = false;\n\n        function iterateeCallback(err, value) {\n            if (canceled) return\n            running -= 1;\n            if (err) {\n                done = true;\n                callback(err);\n            }\n            else if (err === false) {\n                done = true;\n                canceled = true;\n            }\n            else if (value === breakLoop || (done && running <= 0)) {\n                done = true;\n                return callback(null);\n            }\n            else if (!looping) {\n                replenish();\n            }\n        }\n\n        function replenish () {\n            looping = true;\n            while (running < limit && !done) {\n                var elem = nextElem();\n                if (elem === null) {\n                    done = true;\n                    if (running <= 0) {\n                        callback(null);\n                    }\n                    return;\n                }\n                running += 1;\n                iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n            }\n            looping = false;\n        }\n\n        replenish();\n    };\n};\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfLimit(coll, limit, iteratee, callback) {\n    return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOfLimit$1 = awaitify(eachOfLimit, 4);\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n    callback = once(callback);\n    var index = 0,\n        completed = 0,\n        {length} = coll,\n        canceled = false;\n    if (length === 0) {\n        callback(null);\n    }\n\n    function iteratorCallback(err, value) {\n        if (err === false) {\n            canceled = true;\n        }\n        if (canceled === true) return\n        if (err) {\n            callback(err);\n        } else if ((++completed === length) || value === breakLoop) {\n            callback(null);\n        }\n    }\n\n    for (; index < length; index++) {\n        iteratee(coll[index], index, onlyOnce(iteratorCallback));\n    }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nfunction eachOfGeneric (coll, iteratee, callback) {\n    return eachOfLimit$1(coll, Infinity, iteratee, callback);\n}\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dev.json is a file containing a valid json object config for dev environment\n * // dev.json is a file containing a valid json object config for test environment\n * // prod.json is a file containing a valid json object config for prod environment\n * // invalid.json is a file with a malformed json object\n *\n * let configs = {}; //global variable\n * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n *\n * // asynchronous function that reads a json file and parses the contents as json object\n * function parseFile(file, key, callback) {\n *     fs.readFile(file, \"utf8\", function(err, data) {\n *         if (err) return calback(err);\n *         try {\n *             configs[key] = JSON.parse(data);\n *         } catch (e) {\n *             return callback(e);\n *         }\n *         callback();\n *     });\n * }\n *\n * // Using callbacks\n * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n *     if (err) {\n *         console.error(err);\n *     } else {\n *         console.log(configs);\n *         // configs is now a map of JSON data, e.g.\n *         // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n *     }\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n *     if (err) {\n *         console.error(err);\n *         // JSON parse error exception\n *     } else {\n *         console.log(configs);\n *     }\n * });\n *\n * // Using Promises\n * async.forEachOf(validConfigFileMap, parseFile)\n * .then( () => {\n *     console.log(configs);\n *     // configs is now a map of JSON data, e.g.\n *     // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n *     console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n *     console.log(configs);\n * }).catch( err => {\n *     console.error(err);\n *     // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.forEachOf(validConfigFileMap, parseFile);\n *         console.log(configs);\n *         // configs is now a map of JSON data, e.g.\n *         // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * //Error handing\n * async () => {\n *     try {\n *         let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n *         console.log(configs);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // JSON parse error exception\n *     }\n * }\n *\n */\nfunction eachOf(coll, iteratee, callback) {\n    var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n    return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOf$1 = awaitify(eachOf, 3);\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array.  The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n *     fs.stat(file, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         callback(null, stat.size);\n *     });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n *     if (err) {\n *         console.log(err);\n *     } else {\n *         console.log(results);\n *         // results is now an array of the file size in bytes for each file, e.g.\n *         // [ 1000, 2000, 3000]\n *     }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n *     if (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     } else {\n *         console.log(results);\n *     }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n *     console.log(results);\n *     // results is now an array of the file size in bytes for each file, e.g.\n *     // [ 1000, 2000, 3000]\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n *     console.log(results);\n * }).catch( err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let results = await async.map(fileList, getFileSizeInBytes);\n *         console.log(results);\n *         // results is now an array of the file size in bytes for each file, e.g.\n *         // [ 1000, 2000, 3000]\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // Error Handling\n * async () => {\n *     try {\n *         let results = await async.map(withMissingFileList, getFileSizeInBytes);\n *         console.log(results);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     }\n * }\n *\n */\nfunction map (coll, iteratee, callback) {\n    return _asyncMap(eachOf$1, coll, iteratee, callback)\n}\nvar map$1 = awaitify(map, 3);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional. The results\n * for each of the applied async functions are passed to the final callback\n * as an array.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - Returns a function that takes no args other than\n * an optional callback, that is the result of applying the `args` to each\n * of the functions.\n * @example\n *\n * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket')\n *\n * appliedFn((err, results) => {\n *     // results[0] is the results for `enableSearch`\n *     // results[1] is the results for `updateSchema`\n * });\n *\n * // partial application example:\n * async.each(\n *     buckets,\n *     async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(),\n *     callback\n * );\n */\nvar applyEach = applyEach$1(map$1);\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfSeries(coll, iteratee, callback) {\n    return eachOfLimit$1(coll, 1, iteratee, callback)\n}\nvar eachOfSeries$1 = awaitify(eachOfSeries, 3);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapSeries (coll, iteratee, callback) {\n    return _asyncMap(eachOfSeries$1, coll, iteratee, callback)\n}\nvar mapSeries$1 = awaitify(mapSeries, 3);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - A function, that when called, is the result of\n * appling the `args` to the list of functions.  It takes no args, other than\n * a callback.\n */\nvar applyEachSeries = applyEach$1(mapSeries$1);\n\nconst PROMISE_SYMBOL = Symbol('promiseCallback');\n\nfunction promiseCallback () {\n    let resolve, reject;\n    function callback (err, ...args) {\n        if (err) return reject(err)\n        resolve(args.length > 1 ? args : args[0]);\n    }\n\n    callback[PROMISE_SYMBOL] = new Promise((res, rej) => {\n        resolve = res,\n        reject = rej;\n    });\n\n    return callback\n}\n\n/**\n * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * {@link AsyncFunction}s also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n *   functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n *   passing an `error` (which can be `null`) and the result of the function's\n *   execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n * @example\n *\n * //Using Callbacks\n * async.auto({\n *     get_data: function(callback) {\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: ['get_data', 'make_folder', function(results, callback) {\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(results, callback) {\n *         // once the file is written let's email a link to it...\n *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n *     }]\n * }, function(err, results) {\n *     if (err) {\n *         console.log('err = ', err);\n *     }\n *     console.log('results = ', results);\n *     // results = {\n *     //     get_data: ['data', 'converted to array']\n *     //     make_folder; 'folder',\n *     //     write_file: 'filename'\n *     //     email_link: { file: 'filename', email: 'user@example.com' }\n *     // }\n * });\n *\n * //Using Promises\n * async.auto({\n *     get_data: function(callback) {\n *         console.log('in get_data');\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         console.log('in make_folder');\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: ['get_data', 'make_folder', function(results, callback) {\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(results, callback) {\n *         // once the file is written let's email a link to it...\n *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n *     }]\n * }).then(results => {\n *     console.log('results = ', results);\n *     // results = {\n *     //     get_data: ['data', 'converted to array']\n *     //     make_folder; 'folder',\n *     //     write_file: 'filename'\n *     //     email_link: { file: 'filename', email: 'user@example.com' }\n *     // }\n * }).catch(err => {\n *     console.log('err = ', err);\n * });\n *\n * //Using async/await\n * async () => {\n *     try {\n *         let results = await async.auto({\n *             get_data: function(callback) {\n *                 // async code to get some data\n *                 callback(null, 'data', 'converted to array');\n *             },\n *             make_folder: function(callback) {\n *                 // async code to create a directory to store a file in\n *                 // this is run at the same time as getting the data\n *                 callback(null, 'folder');\n *             },\n *             write_file: ['get_data', 'make_folder', function(results, callback) {\n *                 // once there is some data and the directory exists,\n *                 // write the data to a file in the directory\n *                 callback(null, 'filename');\n *             }],\n *             email_link: ['write_file', function(results, callback) {\n *                 // once the file is written let's email a link to it...\n *                 callback(null, {'file':results.write_file, 'email':'user@example.com'});\n *             }]\n *         });\n *         console.log('results = ', results);\n *         // results = {\n *         //     get_data: ['data', 'converted to array']\n *         //     make_folder; 'folder',\n *         //     write_file: 'filename'\n *         //     email_link: { file: 'filename', email: 'user@example.com' }\n *         // }\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction auto(tasks, concurrency, callback) {\n    if (typeof concurrency !== 'number') {\n        // concurrency is optional, shift the args.\n        callback = concurrency;\n        concurrency = null;\n    }\n    callback = once(callback || promiseCallback());\n    var numTasks = Object.keys(tasks).length;\n    if (!numTasks) {\n        return callback(null);\n    }\n    if (!concurrency) {\n        concurrency = numTasks;\n    }\n\n    var results = {};\n    var runningTasks = 0;\n    var canceled = false;\n    var hasError = false;\n\n    var listeners = Object.create(null);\n\n    var readyTasks = [];\n\n    // for cycle detection:\n    var readyToCheck = []; // tasks that have been identified as reachable\n    // without the possibility of returning to an ancestor task\n    var uncheckedDependencies = {};\n\n    Object.keys(tasks).forEach(key => {\n        var task = tasks[key];\n        if (!Array.isArray(task)) {\n            // no dependencies\n            enqueueTask(key, [task]);\n            readyToCheck.push(key);\n            return;\n        }\n\n        var dependencies = task.slice(0, task.length - 1);\n        var remainingDependencies = dependencies.length;\n        if (remainingDependencies === 0) {\n            enqueueTask(key, task);\n            readyToCheck.push(key);\n            return;\n        }\n        uncheckedDependencies[key] = remainingDependencies;\n\n        dependencies.forEach(dependencyName => {\n            if (!tasks[dependencyName]) {\n                throw new Error('async.auto task `' + key +\n                    '` has a non-existent dependency `' +\n                    dependencyName + '` in ' +\n                    dependencies.join(', '));\n            }\n            addListener(dependencyName, () => {\n                remainingDependencies--;\n                if (remainingDependencies === 0) {\n                    enqueueTask(key, task);\n                }\n            });\n        });\n    });\n\n    checkForDeadlocks();\n    processQueue();\n\n    function enqueueTask(key, task) {\n        readyTasks.push(() => runTask(key, task));\n    }\n\n    function processQueue() {\n        if (canceled) return\n        if (readyTasks.length === 0 && runningTasks === 0) {\n            return callback(null, results);\n        }\n        while(readyTasks.length && runningTasks < concurrency) {\n            var run = readyTasks.shift();\n            run();\n        }\n\n    }\n\n    function addListener(taskName, fn) {\n        var taskListeners = listeners[taskName];\n        if (!taskListeners) {\n            taskListeners = listeners[taskName] = [];\n        }\n\n        taskListeners.push(fn);\n    }\n\n    function taskComplete(taskName) {\n        var taskListeners = listeners[taskName] || [];\n        taskListeners.forEach(fn => fn());\n        processQueue();\n    }\n\n\n    function runTask(key, task) {\n        if (hasError) return;\n\n        var taskCallback = onlyOnce((err, ...result) => {\n            runningTasks--;\n            if (err === false) {\n                canceled = true;\n                return\n            }\n            if (result.length < 2) {\n                [result] = result;\n            }\n            if (err) {\n                var safeResults = {};\n                Object.keys(results).forEach(rkey => {\n                    safeResults[rkey] = results[rkey];\n                });\n                safeResults[key] = result;\n                hasError = true;\n                listeners = Object.create(null);\n                if (canceled) return\n                callback(err, safeResults);\n            } else {\n                results[key] = result;\n                taskComplete(key);\n            }\n        });\n\n        runningTasks++;\n        var taskFn = wrapAsync(task[task.length - 1]);\n        if (task.length > 1) {\n            taskFn(results, taskCallback);\n        } else {\n            taskFn(taskCallback);\n        }\n    }\n\n    function checkForDeadlocks() {\n        // Kahn's algorithm\n        // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n        // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n        var currentTask;\n        var counter = 0;\n        while (readyToCheck.length) {\n            currentTask = readyToCheck.pop();\n            counter++;\n            getDependents(currentTask).forEach(dependent => {\n                if (--uncheckedDependencies[dependent] === 0) {\n                    readyToCheck.push(dependent);\n                }\n            });\n        }\n\n        if (counter !== numTasks) {\n            throw new Error(\n                'async.auto cannot execute tasks due to a recursive dependency'\n            );\n        }\n    }\n\n    function getDependents(taskName) {\n        var result = [];\n        Object.keys(tasks).forEach(key => {\n            const task = tasks[key];\n            if (Array.isArray(task) && task.indexOf(taskName) >= 0) {\n                result.push(key);\n            }\n        });\n        return result;\n    }\n\n    return callback[PROMISE_SYMBOL]\n}\n\nvar FN_ARGS = /^(?:async\\s)?(?:function)?\\s*(?:\\w+\\s*)?\\(([^)]+)\\)(?:\\s*{)/;\nvar ARROW_FN_ARGS = /^(?:async\\s)?\\s*(?:\\(\\s*)?((?:[^)=\\s]\\s*)*)(?:\\)\\s*)?=>/;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\n\nfunction stripComments(string) {\n    let stripped = '';\n    let index = 0;\n    let endBlockComment = string.indexOf('*/');\n    while (index < string.length) {\n        if (string[index] === '/' && string[index+1] === '/') {\n            // inline comment\n            let endIndex = string.indexOf('\\n', index);\n            index = (endIndex === -1) ? string.length : endIndex;\n        } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {\n            // block comment\n            let endIndex = string.indexOf('*/', index);\n            if (endIndex !== -1) {\n                index = endIndex + 2;\n                endBlockComment = string.indexOf('*/', index);\n            } else {\n                stripped += string[index];\n                index++;\n            }\n        } else {\n            stripped += string[index];\n            index++;\n        }\n    }\n    return stripped;\n}\n\nfunction parseParams(func) {\n    const src = stripComments(func.toString());\n    let match = src.match(FN_ARGS);\n    if (!match) {\n        match = src.match(ARROW_FN_ARGS);\n    }\n    if (!match) throw new Error('could not parse args in autoInject\\nSource:\\n' + src)\n    let [, args] = match;\n    return args\n        .replace(/\\s/g, '')\n        .split(FN_ARG_SPLIT)\n        .map((arg) => arg.replace(FN_ARG, '').trim());\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n *   when finished, passing an `error` (which can be `null`) and the result of\n *   the function's execution. The remaining parameters name other tasks on\n *   which the task is dependent, and the results from those tasks are the\n *   arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * //  The example from `auto` can be rewritten as follows:\n * async.autoInject({\n *     get_data: function(callback) {\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: function(get_data, make_folder, callback) {\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     },\n *     email_link: function(write_file, callback) {\n *         // once the file is written let's email a link to it...\n *         // write_file contains the filename returned by write_file.\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier.  To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n *     //...\n *     write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(write_file, callback) {\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }]\n *     //...\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n    var newTasks = {};\n\n    Object.keys(tasks).forEach(key => {\n        var taskFn = tasks[key];\n        var params;\n        var fnIsAsync = isAsync(taskFn);\n        var hasNoDeps =\n            (!fnIsAsync && taskFn.length === 1) ||\n            (fnIsAsync && taskFn.length === 0);\n\n        if (Array.isArray(taskFn)) {\n            params = [...taskFn];\n            taskFn = params.pop();\n\n            newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n        } else if (hasNoDeps) {\n            // no dependencies, use the function as-is\n            newTasks[key] = taskFn;\n        } else {\n            params = parseParams(taskFn);\n            if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {\n                throw new Error(\"autoInject task functions require explicit parameters.\");\n            }\n\n            // remove callback param\n            if (!fnIsAsync) params.pop();\n\n            newTasks[key] = params.concat(newTask);\n        }\n\n        function newTask(results, taskCb) {\n            var newArgs = params.map(name => results[name]);\n            newArgs.push(taskCb);\n            wrapAsync(taskFn)(...newArgs);\n        }\n    });\n\n    return auto(newTasks, callback);\n}\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL {\n    constructor() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n\n    removeLink(node) {\n        if (node.prev) node.prev.next = node.next;\n        else this.head = node.next;\n        if (node.next) node.next.prev = node.prev;\n        else this.tail = node.prev;\n\n        node.prev = node.next = null;\n        this.length -= 1;\n        return node;\n    }\n\n    empty () {\n        while(this.head) this.shift();\n        return this;\n    }\n\n    insertAfter(node, newNode) {\n        newNode.prev = node;\n        newNode.next = node.next;\n        if (node.next) node.next.prev = newNode;\n        else this.tail = newNode;\n        node.next = newNode;\n        this.length += 1;\n    }\n\n    insertBefore(node, newNode) {\n        newNode.prev = node.prev;\n        newNode.next = node;\n        if (node.prev) node.prev.next = newNode;\n        else this.head = newNode;\n        node.prev = newNode;\n        this.length += 1;\n    }\n\n    unshift(node) {\n        if (this.head) this.insertBefore(this.head, node);\n        else setInitial(this, node);\n    }\n\n    push(node) {\n        if (this.tail) this.insertAfter(this.tail, node);\n        else setInitial(this, node);\n    }\n\n    shift() {\n        return this.head && this.removeLink(this.head);\n    }\n\n    pop() {\n        return this.tail && this.removeLink(this.tail);\n    }\n\n    toArray() {\n        return [...this]\n    }\n\n    *[Symbol.iterator] () {\n        var cur = this.head;\n        while (cur) {\n            yield cur.data;\n            cur = cur.next;\n        }\n    }\n\n    remove (testFn) {\n        var curr = this.head;\n        while(curr) {\n            var {next} = curr;\n            if (testFn(curr)) {\n                this.removeLink(curr);\n            }\n            curr = next;\n        }\n        return this;\n    }\n}\n\nfunction setInitial(dll, node) {\n    dll.length = 1;\n    dll.head = dll.tail = node;\n}\n\nfunction queue$1(worker, concurrency, payload) {\n    if (concurrency == null) {\n        concurrency = 1;\n    }\n    else if(concurrency === 0) {\n        throw new RangeError('Concurrency must not be zero');\n    }\n\n    var _worker = wrapAsync(worker);\n    var numRunning = 0;\n    var workersList = [];\n    const events = {\n        error: [],\n        drain: [],\n        saturated: [],\n        unsaturated: [],\n        empty: []\n    };\n\n    function on (event, handler) {\n        events[event].push(handler);\n    }\n\n    function once (event, handler) {\n        const handleAndRemove = (...args) => {\n            off(event, handleAndRemove);\n            handler(...args);\n        };\n        events[event].push(handleAndRemove);\n    }\n\n    function off (event, handler) {\n        if (!event) return Object.keys(events).forEach(ev => events[ev] = [])\n        if (!handler) return events[event] = []\n        events[event] = events[event].filter(ev => ev !== handler);\n    }\n\n    function trigger (event, ...args) {\n        events[event].forEach(handler => handler(...args));\n    }\n\n    var processingScheduled = false;\n    function _insert(data, insertAtFront, rejectOnError, callback) {\n        if (callback != null && typeof callback !== 'function') {\n            throw new Error('task callback must be a function');\n        }\n        q.started = true;\n\n        var res, rej;\n        function promiseCallback (err, ...args) {\n            // we don't care about the error, let the global error handler\n            // deal with it\n            if (err) return rejectOnError ? rej(err) : res()\n            if (args.length <= 1) return res(args[0])\n            res(args);\n        }\n\n        var item = q._createTaskItem(\n            data,\n            rejectOnError ? promiseCallback :\n                (callback || promiseCallback)\n        );\n\n        if (insertAtFront) {\n            q._tasks.unshift(item);\n        } else {\n            q._tasks.push(item);\n        }\n\n        if (!processingScheduled) {\n            processingScheduled = true;\n            setImmediate$1(() => {\n                processingScheduled = false;\n                q.process();\n            });\n        }\n\n        if (rejectOnError || !callback) {\n            return new Promise((resolve, reject) => {\n                res = resolve;\n                rej = reject;\n            })\n        }\n    }\n\n    function _createCB(tasks) {\n        return function (err, ...args) {\n            numRunning -= 1;\n\n            for (var i = 0, l = tasks.length; i < l; i++) {\n                var task = tasks[i];\n\n                var index = workersList.indexOf(task);\n                if (index === 0) {\n                    workersList.shift();\n                } else if (index > 0) {\n                    workersList.splice(index, 1);\n                }\n\n                task.callback(err, ...args);\n\n                if (err != null) {\n                    trigger('error', err, task.data);\n                }\n            }\n\n            if (numRunning <= (q.concurrency - q.buffer) ) {\n                trigger('unsaturated');\n            }\n\n            if (q.idle()) {\n                trigger('drain');\n            }\n            q.process();\n        };\n    }\n\n    function _maybeDrain(data) {\n        if (data.length === 0 && q.idle()) {\n            // call drain immediately if there are no tasks\n            setImmediate$1(() => trigger('drain'));\n            return true\n        }\n        return false\n    }\n\n    const eventMethod = (name) => (handler) => {\n        if (!handler) {\n            return new Promise((resolve, reject) => {\n                once(name, (err, data) => {\n                    if (err) return reject(err)\n                    resolve(data);\n                });\n            })\n        }\n        off(name);\n        on(name, handler);\n\n    };\n\n    var isProcessing = false;\n    var q = {\n        _tasks: new DLL(),\n        _createTaskItem (data, callback) {\n            return {\n                data,\n                callback\n            };\n        },\n        *[Symbol.iterator] () {\n            yield* q._tasks[Symbol.iterator]();\n        },\n        concurrency,\n        payload,\n        buffer: concurrency / 4,\n        started: false,\n        paused: false,\n        push (data, callback) {\n            if (Array.isArray(data)) {\n                if (_maybeDrain(data)) return\n                return data.map(datum => _insert(datum, false, false, callback))\n            }\n            return _insert(data, false, false, callback);\n        },\n        pushAsync (data, callback) {\n            if (Array.isArray(data)) {\n                if (_maybeDrain(data)) return\n                return data.map(datum => _insert(datum, false, true, callback))\n            }\n            return _insert(data, false, true, callback);\n        },\n        kill () {\n            off();\n            q._tasks.empty();\n        },\n        unshift (data, callback) {\n            if (Array.isArray(data)) {\n                if (_maybeDrain(data)) return\n                return data.map(datum => _insert(datum, true, false, callback))\n            }\n            return _insert(data, true, false, callback);\n        },\n        unshiftAsync (data, callback) {\n            if (Array.isArray(data)) {\n                if (_maybeDrain(data)) return\n                return data.map(datum => _insert(datum, true, true, callback))\n            }\n            return _insert(data, true, true, callback);\n        },\n        remove (testFn) {\n            q._tasks.remove(testFn);\n        },\n        process () {\n            // Avoid trying to start too many processing operations. This can occur\n            // when callbacks resolve synchronously (#1267).\n            if (isProcessing) {\n                return;\n            }\n            isProcessing = true;\n            while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n                var tasks = [], data = [];\n                var l = q._tasks.length;\n                if (q.payload) l = Math.min(l, q.payload);\n                for (var i = 0; i < l; i++) {\n                    var node = q._tasks.shift();\n                    tasks.push(node);\n                    workersList.push(node);\n                    data.push(node.data);\n                }\n\n                numRunning += 1;\n\n                if (q._tasks.length === 0) {\n                    trigger('empty');\n                }\n\n                if (numRunning === q.concurrency) {\n                    trigger('saturated');\n                }\n\n                var cb = onlyOnce(_createCB(tasks));\n                _worker(data, cb);\n            }\n            isProcessing = false;\n        },\n        length () {\n            return q._tasks.length;\n        },\n        running () {\n            return numRunning;\n        },\n        workersList () {\n            return workersList;\n        },\n        idle() {\n            return q._tasks.length + numRunning === 0;\n        },\n        pause () {\n            q.paused = true;\n        },\n        resume () {\n            if (q.paused === false) { return; }\n            q.paused = false;\n            setImmediate$1(q.process);\n        }\n    };\n    // define these as fixed properties, so people get useful errors when updating\n    Object.defineProperties(q, {\n        saturated: {\n            writable: false,\n            value: eventMethod('saturated')\n        },\n        unsaturated: {\n            writable: false,\n            value: eventMethod('unsaturated')\n        },\n        empty: {\n            writable: false,\n            value: eventMethod('empty')\n        },\n        drain: {\n            writable: false,\n            value: eventMethod('drain')\n        },\n        error: {\n            writable: false,\n            value: eventMethod('error')\n        },\n    });\n    return q;\n}\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n *     for (var i=0; i<tasks.length; i++) {\n *         console.log('hello ' + tasks[i].name);\n *     }\n *     callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n *     console.log('finished processing bar');\n * });\n * await cargo.push({name: 'baz'});\n * console.log('finished processing baz');\n */\nfunction cargo$1(worker, payload) {\n    return queue$1(worker, 1, payload);\n}\n\n/**\n * Creates a `cargoQueue` object with the specified payload. Tasks added to the\n * cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers.\n * If the all `workers` are in progress, the task is queued until one becomes available. Once\n * a `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker,\n * the cargoQueue passes an array of tasks to multiple parallel workers.\n *\n * @name cargoQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @see [async.cargo]{@link module:ControlFLow.cargo}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel.  If omitted, the concurrency\n * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargoQueue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargoQueue and inner queue.\n * @example\n *\n * // create a cargoQueue object with payload 2 and concurrency 2\n * var cargoQueue = async.cargoQueue(function(tasks, callback) {\n *     for (var i=0; i<tasks.length; i++) {\n *         console.log('hello ' + tasks[i].name);\n *     }\n *     callback();\n * }, 2, 2);\n *\n * // add some items\n * cargoQueue.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * cargoQueue.push({name: 'bar'}, function(err) {\n *     console.log('finished processing bar');\n * });\n * cargoQueue.push({name: 'baz'}, function(err) {\n *     console.log('finished processing baz');\n * });\n * cargoQueue.push({name: 'boo'}, function(err) {\n *     console.log('finished processing boo');\n * });\n */\nfunction cargo(worker, concurrency, payload) {\n    return queue$1(worker, concurrency, payload);\n}\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];\n *\n * // asynchronous function that computes the file size in bytes\n * // file size is added to the memoized value, then returned\n * function getFileSizeInBytes(memo, file, callback) {\n *     fs.stat(file, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         callback(null, memo + stat.size);\n *     });\n * }\n *\n * // Using callbacks\n * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {\n *     if (err) {\n *         console.log(err);\n *     } else {\n *         console.log(result);\n *         // 6000\n *         // which is the sum of the file sizes of the three files\n *     }\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {\n *     if (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     } else {\n *         console.log(result);\n *     }\n * });\n *\n * // Using Promises\n * async.reduce(fileList, 0, getFileSizeInBytes)\n * .then( result => {\n *     console.log(result);\n *     // 6000\n *     // which is the sum of the file sizes of the three files\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n *     console.log(result);\n * }).catch( err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n *         console.log(result);\n *         // 6000\n *         // which is the sum of the file sizes of the three files\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // Error Handling\n * async () => {\n *     try {\n *         let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n *         console.log(result);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     }\n * }\n *\n */\nfunction reduce(coll, memo, iteratee, callback) {\n    callback = once(callback);\n    var _iteratee = wrapAsync(iteratee);\n    return eachOfSeries$1(coll, (x, i, iterCb) => {\n        _iteratee(memo, x, (err, v) => {\n            memo = v;\n            iterCb(err);\n        });\n    }, err => callback(err, memo));\n}\nvar reduce$1 = awaitify(reduce, 4);\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n *     var User = request.models.User;\n *     async.seq(\n *         User.get.bind(User),  // 'User.get' has signature (id, callback(err, data))\n *         function(user, fn) {\n *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))\n *         }\n *     )(req.session.user_id, function (err, cats) {\n *         if (err) {\n *             console.error(err);\n *             response.json({ status: 'error', message: err.message });\n *         } else {\n *             response.json({ status: 'ok', message: 'Cats found', data: cats });\n *         }\n *     });\n * });\n */\nfunction seq(...functions) {\n    var _functions = functions.map(wrapAsync);\n    return function (...args) {\n        var that = this;\n\n        var cb = args[args.length - 1];\n        if (typeof cb == 'function') {\n            args.pop();\n        } else {\n            cb = promiseCallback();\n        }\n\n        reduce$1(_functions, args, (newargs, fn, iterCb) => {\n            fn.apply(that, newargs.concat((err, ...nextargs) => {\n                iterCb(err, nextargs);\n            }));\n        },\n        (err, results) => cb(err, ...results));\n\n        return cb[PROMISE_SYMBOL]\n    };\n}\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * If the last argument to the composed function is not a function, a promise\n * is returned when you call it.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n + 1);\n *     }, 10);\n * }\n *\n * function mul3(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n * 3);\n *     }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n *     // result now equals 15\n * });\n */\nfunction compose(...args) {\n    return seq(...args.reverse());\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapLimit (coll, limit, iteratee, callback) {\n    return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar mapLimit$1 = awaitify(mapLimit, 4);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatLimit(coll, limit, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    return mapLimit$1(coll, limit, (val, iterCb) => {\n        _iteratee(val, (err, ...args) => {\n            if (err) return iterCb(err);\n            return iterCb(err, args);\n        });\n    }, (err, mapResults) => {\n        var result = [];\n        for (var i = 0; i < mapResults.length; i++) {\n            if (mapResults[i]) {\n                result = result.concat(...mapResults[i]);\n            }\n        }\n\n        return callback(err, result);\n    });\n}\nvar concatLimit$1 = awaitify(concatLimit, 4);\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. The results array will be returned in\n * the original order of `coll` passed to the `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @alias flatMap\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * let directoryList = ['dir1','dir2','dir3'];\n * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];\n *\n * // Using callbacks\n * async.concat(directoryList, fs.readdir, function(err, results) {\n *    if (err) {\n *        console.log(err);\n *    } else {\n *        console.log(results);\n *        // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n *    }\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {\n *    if (err) {\n *        console.log(err);\n *        // [ Error: ENOENT: no such file or directory ]\n *        // since dir4 does not exist\n *    } else {\n *        console.log(results);\n *    }\n * });\n *\n * // Using Promises\n * async.concat(directoryList, fs.readdir)\n * .then(results => {\n *     console.log(results);\n *     // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n *      console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n *     console.log(results);\n * }).catch(err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n *     // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let results = await async.concat(directoryList, fs.readdir);\n *         console.log(results);\n *         // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n *     } catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // Error Handling\n * async () => {\n *     try {\n *         let results = await async.concat(withMissingDirectoryList, fs.readdir);\n *         console.log(results);\n *     } catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *         // since dir4 does not exist\n *     }\n * }\n *\n */\nfunction concat(coll, iteratee, callback) {\n    return concatLimit$1(coll, Infinity, iteratee, callback)\n}\nvar concat$1 = awaitify(concat, 3);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatSeries(coll, iteratee, callback) {\n    return concatLimit$1(coll, 1, iteratee, callback)\n}\nvar concatSeries$1 = awaitify(concatSeries, 3);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {AsyncFunction} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n *     async.constant(42),\n *     function (value, next) {\n *         // value === 42\n *     },\n *     //...\n * ], callback);\n *\n * async.waterfall([\n *     async.constant(filename, \"utf8\"),\n *     fs.readFile,\n *     function (fileData, next) {\n *         //...\n *     }\n *     //...\n * ], callback);\n *\n * async.auto({\n *     hostname: async.constant(\"https://server.net/\"),\n *     port: findFreePort,\n *     launchServer: [\"hostname\", \"port\", function (options, cb) {\n *         startServer(options, cb);\n *     }],\n *     //...\n * }, callback);\n */\nfunction constant$1(...args) {\n    return function (...ignoredArgs/*, callback*/) {\n        var callback = ignoredArgs.pop();\n        return callback(null, ...args);\n    };\n}\n\nfunction _createTester(check, getResult) {\n    return (eachfn, arr, _iteratee, cb) => {\n        var testPassed = false;\n        var testResult;\n        const iteratee = wrapAsync(_iteratee);\n        eachfn(arr, (value, _, callback) => {\n            iteratee(value, (err, result) => {\n                if (err || err === false) return callback(err);\n\n                if (check(result) && !testResult) {\n                    testPassed = true;\n                    testResult = getResult(true, value);\n                    return callback(null, breakLoop);\n                }\n                callback();\n            });\n        }, err => {\n            if (err) return cb(err);\n            cb(null, testPassed ? testResult : getResult(false));\n        });\n    };\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n *    fs.access(file, fs.constants.F_OK, (err) => {\n *        callback(null, !err);\n *    });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n *    function(err, result) {\n *        console.log(result);\n *        // dir1/file1.txt\n *        // result now equals the first file in the list that exists\n *    }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n *     console.log(result);\n *     // dir1/file1.txt\n *     // result now equals the first file in the list that exists\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n *         console.log(result);\n *         // dir1/file1.txt\n *         // result now equals the file in the list that exists\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction detect(coll, iteratee, callback) {\n    return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback)\n}\nvar detect$1 = awaitify(detect, 3);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectLimit(coll, limit, iteratee, callback) {\n    return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar detectLimit$1 = awaitify(detectLimit, 4);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectSeries(coll, iteratee, callback) {\n    return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback)\n}\n\nvar detectSeries$1 = awaitify(detectSeries, 3);\n\nfunction consoleFunc(name) {\n    return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n        /* istanbul ignore else */\n        if (typeof console === 'object') {\n            /* istanbul ignore else */\n            if (err) {\n                /* istanbul ignore else */\n                if (console.error) {\n                    console.error(err);\n                }\n            } else if (console[name]) { /* istanbul ignore else */\n                resultArgs.forEach(x => console[name](x));\n            }\n        }\n    })\n}\n\n/**\n * Logs the result of an [`async` function]{@link AsyncFunction} to the\n * `console` using `console.dir` to display the properties of the resulting object.\n * Only works in Node.js or in browsers that support `console.dir` and\n * `console.error` (such as FF and Chrome).\n * If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, {hello: name});\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doWhilst(iteratee, test, callback) {\n    callback = onlyOnce(callback);\n    var _fn = wrapAsync(iteratee);\n    var _test = wrapAsync(test);\n    var results;\n\n    function next(err, ...args) {\n        if (err) return callback(err);\n        if (err === false) return;\n        results = args;\n        _test(...args, check);\n    }\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (err === false) return;\n        if (!truth) return callback(null, ...results);\n        _fn(next);\n    }\n\n    return check(null, true);\n}\n\nvar doWhilst$1 = awaitify(doWhilst, 3);\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doUntil(iteratee, test, callback) {\n    const _test = wrapAsync(test);\n    return doWhilst$1(iteratee, (...args) => {\n        const cb = args.pop();\n        _test(...args, (err, truth) => cb (err, !truth));\n    }, callback);\n}\n\nfunction _withoutIndex(iteratee) {\n    return (value, index, callback) => iteratee(value, callback);\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n *     fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n *     if( err ) {\n *         console.log(err);\n *     } else {\n *         console.log('All files have been deleted successfully');\n *     }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n *     // since dir4/file2.txt does not exist\n *     // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n *     console.log('All files have been deleted successfully');\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n *     console.log('All files have been deleted successfully');\n * }).catch( err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n *     // since dir4/file2.txt does not exist\n *     // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         await async.each(files, deleteFile);\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // Error Handling\n * async () => {\n *     try {\n *         await async.each(withMissingFileList, deleteFile);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *         // since dir4/file2.txt does not exist\n *         // dir1/file1.txt could have been deleted\n *     }\n * }\n *\n */\nfunction eachLimit$2(coll, iteratee, callback) {\n    return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\nvar each = awaitify(eachLimit$2, 3);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit(coll, limit, iteratee, callback) {\n    return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar eachLimit$1 = awaitify(eachLimit, 4);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n    return eachLimit$1(coll, 1, iteratee, callback)\n}\nvar eachSeries$1 = awaitify(eachSeries, 3);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop.  If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n *     if (cache[arg]) {\n *         return callback(null, cache[arg]); // this would be synchronous!!\n *     } else {\n *         doSomeIO(arg, callback); // this IO would be asynchronous\n *     }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n    if (isAsync(fn)) return fn;\n    return function (...args/*, callback*/) {\n        var callback = args.pop();\n        var sync = true;\n        args.push((...innerArgs) => {\n            if (sync) {\n                setImmediate$1(() => callback(...innerArgs));\n            } else {\n                callback(...innerArgs);\n            }\n        });\n        fn.apply(this, args);\n        sync = false;\n    };\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n *    fs.access(file, fs.constants.F_OK, (err) => {\n *        callback(null, !err);\n *    });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n *     console.log(result);\n *     // true\n *     // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n *     console.log(result);\n *     // false\n *     // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n *     console.log(result);\n *     // true\n *     // result is true since every file exists\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n *     console.log(result);\n *     // false\n *     // result is false since NOT every file exists\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.every(fileList, fileExists);\n *         console.log(result);\n *         // true\n *         // result is true since every file exists\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * async () => {\n *     try {\n *         let result = await async.every(withMissingFileList, fileExists);\n *         console.log(result);\n *         // false\n *         // result is false since NOT every file exists\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction every(coll, iteratee, callback) {\n    return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback)\n}\nvar every$1 = awaitify(every, 3);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everyLimit(coll, limit, iteratee, callback) {\n    return _createTester(bool => !bool, res => !res)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar everyLimit$1 = awaitify(everyLimit, 4);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everySeries(coll, iteratee, callback) {\n    return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar everySeries$1 = awaitify(everySeries, 3);\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n    var truthValues = new Array(arr.length);\n    eachfn(arr, (x, index, iterCb) => {\n        iteratee(x, (err, v) => {\n            truthValues[index] = !!v;\n            iterCb(err);\n        });\n    }, err => {\n        if (err) return callback(err);\n        var results = [];\n        for (var i = 0; i < arr.length; i++) {\n            if (truthValues[i]) results.push(arr[i]);\n        }\n        callback(null, results);\n    });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n    var results = [];\n    eachfn(coll, (x, index, iterCb) => {\n        iteratee(x, (err, v) => {\n            if (err) return iterCb(err);\n            if (v) {\n                results.push({index, value: x});\n            }\n            iterCb(err);\n        });\n    }, err => {\n        if (err) return callback(err);\n        callback(null, results\n            .sort((a, b) => a.index - b.index)\n            .map(v => v.value));\n    });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n    var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n    return filter(eachfn, coll, wrapAsync(iteratee), callback);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n *    fs.access(file, fs.constants.F_OK, (err) => {\n *        callback(null, !err);\n *    });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n *    if(err) {\n *        console.log(err);\n *    } else {\n *        console.log(results);\n *        // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n *        // results is now an array of the existing files\n *    }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n *     console.log(results);\n *     // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n *     // results is now an array of the existing files\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let results = await async.filter(files, fileExists);\n *         console.log(results);\n *         // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n *         // results is now an array of the existing files\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction filter (coll, iteratee, callback) {\n    return _filter(eachOf$1, coll, iteratee, callback)\n}\nvar filter$1 = awaitify(filter, 3);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterLimit (coll, limit, iteratee, callback) {\n    return _filter(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar filterLimit$1 = awaitify(filterLimit, 4);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterSeries (coll, iteratee, callback) {\n    return _filter(eachOfSeries$1, coll, iteratee, callback)\n}\nvar filterSeries$1 = awaitify(filterSeries, 3);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n *     function(next) {\n *         // next is suitable for passing to things that need a callback(err [, whatever]);\n *         // it will result in this function being called again.\n *     },\n *     function(err) {\n *         // if next is called with a value in its first parameter, it will appear\n *         // in here as 'err', and execution will stop.\n *     }\n * );\n */\nfunction forever(fn, errback) {\n    var done = onlyOnce(errback);\n    var task = wrapAsync(ensureAsync(fn));\n\n    function next(err) {\n        if (err) return done(err);\n        if (err === false) return;\n        task(next);\n    }\n    return next();\n}\nvar forever$1 = awaitify(forever, 2);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupByLimit(coll, limit, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    return mapLimit$1(coll, limit, (val, iterCb) => {\n        _iteratee(val, (err, key) => {\n            if (err) return iterCb(err);\n            return iterCb(err, {key, val});\n        });\n    }, (err, mapResults) => {\n        var result = {};\n        // from MDN, handle object having an `hasOwnProperty` prop\n        var {hasOwnProperty} = Object.prototype;\n\n        for (var i = 0; i < mapResults.length; i++) {\n            if (mapResults[i]) {\n                var {key} = mapResults[i];\n                var {val} = mapResults[i];\n\n                if (hasOwnProperty.call(result, key)) {\n                    result[key].push(val);\n                } else {\n                    result[key] = [val];\n                }\n            }\n        }\n\n        return callback(err, result);\n    });\n}\n\nvar groupByLimit$1 = awaitify(groupByLimit, 4);\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const files = ['dir1/file1.txt','dir2','dir4']\n *\n * // asynchronous function that detects file type as none, file, or directory\n * function detectFile(file, callback) {\n *     fs.stat(file, function(err, stat) {\n *         if (err) {\n *             return callback(null, 'none');\n *         }\n *         callback(null, stat.isDirectory() ? 'directory' : 'file');\n *     });\n * }\n *\n * //Using callbacks\n * async.groupBy(files, detectFile, function(err, result) {\n *     if(err) {\n *         console.log(err);\n *     } else {\n *\t       console.log(result);\n *         // {\n *         //     file: [ 'dir1/file1.txt' ],\n *         //     none: [ 'dir4' ],\n *         //     directory: [ 'dir2']\n *         // }\n *         // result is object containing the files grouped by type\n *     }\n * });\n *\n * // Using Promises\n * async.groupBy(files, detectFile)\n * .then( result => {\n *     console.log(result);\n *     // {\n *     //     file: [ 'dir1/file1.txt' ],\n *     //     none: [ 'dir4' ],\n *     //     directory: [ 'dir2']\n *     // }\n *     // result is object containing the files grouped by type\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.groupBy(files, detectFile);\n *         console.log(result);\n *         // {\n *         //     file: [ 'dir1/file1.txt' ],\n *         //     none: [ 'dir4' ],\n *         //     directory: [ 'dir2']\n *         // }\n *         // result is object containing the files grouped by type\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction groupBy (coll, iteratee, callback) {\n    return groupByLimit$1(coll, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whose\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupBySeries (coll, iteratee, callback) {\n    return groupByLimit$1(coll, 1, iteratee, callback)\n}\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, 'hello ' + name);\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n    callback = once(callback);\n    var newObj = {};\n    var _iteratee = wrapAsync(iteratee);\n    return eachOfLimit$2(limit)(obj, (val, key, next) => {\n        _iteratee(val, key, (err, result) => {\n            if (err) return next(err);\n            newObj[key] = result;\n            next(err);\n        });\n    }, err => callback(err, newObj));\n}\n\nvar mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed.  The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileMap = {\n *     f1: 'file1.txt',\n *     f2: 'file2.txt',\n *     f3: 'file3.txt'\n * };\n *\n * const withMissingFileMap = {\n *     f1: 'file1.txt',\n *     f2: 'file2.txt',\n *     f3: 'file4.txt'\n * };\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, key, callback) {\n *     fs.stat(file, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         callback(null, stat.size);\n *     });\n * }\n *\n * // Using callbacks\n * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {\n *     if (err) {\n *         console.log(err);\n *     } else {\n *         console.log(result);\n *         // result is now a map of file size in bytes for each file, e.g.\n *         // {\n *         //     f1: 1000,\n *         //     f2: 2000,\n *         //     f3: 3000\n *         // }\n *     }\n * });\n *\n * // Error handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {\n *     if (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     } else {\n *         console.log(result);\n *     }\n * });\n *\n * // Using Promises\n * async.mapValues(fileMap, getFileSizeInBytes)\n * .then( result => {\n *     console.log(result);\n *     // result is now a map of file size in bytes for each file, e.g.\n *     // {\n *     //     f1: 1000,\n *     //     f2: 2000,\n *     //     f3: 3000\n *     // }\n * }).catch (err => {\n *     console.log(err);\n * });\n *\n * // Error Handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes)\n * .then( result => {\n *     console.log(result);\n * }).catch (err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.mapValues(fileMap, getFileSizeInBytes);\n *         console.log(result);\n *         // result is now a map of file size in bytes for each file, e.g.\n *         // {\n *         //     f1: 1000,\n *         //     f2: 2000,\n *         //     f3: 3000\n *         // }\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // Error Handling\n * async () => {\n *     try {\n *         let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);\n *         console.log(result);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     }\n * }\n *\n */\nfunction mapValues(obj, iteratee, callback) {\n    return mapValuesLimit$1(obj, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesSeries(obj, iteratee, callback) {\n    return mapValuesLimit$1(obj, 1, iteratee, callback)\n}\n\n/**\n * Caches the results of an async function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * **Note: if the async function errs, the result will not be cached and\n * subsequent calls will call the wrapped function.**\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {AsyncFunction} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n *     // do something\n *     callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n *     // callback\n * });\n */\nfunction memoize(fn, hasher = v => v) {\n    var memo = Object.create(null);\n    var queues = Object.create(null);\n    var _fn = wrapAsync(fn);\n    var memoized = initialParams((args, callback) => {\n        var key = hasher(...args);\n        if (key in memo) {\n            setImmediate$1(() => callback(null, ...memo[key]));\n        } else if (key in queues) {\n            queues[key].push(callback);\n        } else {\n            queues[key] = [callback];\n            _fn(...args, (err, ...resultArgs) => {\n                // #1465 don't memoize if an error occurred\n                if (!err) {\n                    memo[key] = resultArgs;\n                }\n                var q = queues[key];\n                delete queues[key];\n                for (var i = 0, l = q.length; i < l; i++) {\n                    q[i](err, ...resultArgs);\n                }\n            });\n        }\n    });\n    memoized.memo = memo;\n    memoized.unmemoized = fn;\n    return memoized;\n}\n\n/* istanbul ignore file */\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `process.nextTick`.  In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.setImmediate]{@link module:Utils.setImmediate}\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n *     call_order.push('two');\n *     // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n *     // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer;\n\nif (hasNextTick) {\n    _defer = process.nextTick;\n} else if (hasSetImmediate) {\n    _defer = setImmediate;\n} else {\n    _defer = fallback;\n}\n\nvar nextTick = wrap(_defer);\n\nvar _parallel = awaitify((eachfn, tasks, callback) => {\n    var results = isArrayLike(tasks) ? [] : {};\n\n    eachfn(tasks, (task, key, taskCb) => {\n        wrapAsync(task)((err, ...result) => {\n            if (result.length < 2) {\n                [result] = result;\n            }\n            results[key] = result;\n            taskCb(err);\n        });\n    }, err => callback(err, results));\n}, 3);\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code.  If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series.  Any synchronous setup\n * sections for each task will happen one after the other.  JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n *\n * //Using Callbacks\n * async.parallel([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ], function(err, results) {\n *     console.log(results);\n *     // results is equal to ['one','two'] even though\n *     // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     console.log(results);\n *     // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.parallel([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ]).then(results => {\n *     console.log(results);\n *     // results is equal to ['one','two'] even though\n *     // the second function had a shorter timeout.\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }).then(results => {\n *     console.log(results);\n *     // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n *     try {\n *         let results = await async.parallel([\n *             function(callback) {\n *                 setTimeout(function() {\n *                     callback(null, 'one');\n *                 }, 200);\n *             },\n *             function(callback) {\n *                 setTimeout(function() {\n *                     callback(null, 'two');\n *                 }, 100);\n *             }\n *         ]);\n *         console.log(results);\n *         // results is equal to ['one','two'] even though\n *         // the second function had a shorter timeout.\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n *     try {\n *         let results = await async.parallel({\n *             one: function(callback) {\n *                 setTimeout(function() {\n *                     callback(null, 1);\n *                 }, 200);\n *             },\n *            two: function(callback) {\n *                 setTimeout(function() {\n *                     callback(null, 2);\n *                 }, 100);\n *            }\n *         });\n *         console.log(results);\n *         // results is equal to: { one: 1, two: 2 }\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction parallel(tasks, callback) {\n    return _parallel(eachOf$1, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n */\nfunction parallelLimit(tasks, limit, callback) {\n    return _parallel(eachOfLimit$2(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function.  The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued.  If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n *     console.log(item)\n * }\n *\n * q.drain(() => {\n *     console.log('all done')\n * })\n * // or\n * await q.drain()\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel.  If omitted, the concurrency\n * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n *     console.log('hello ' + task.name);\n *     callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n *     console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n *     console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n *     console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n *     console.log('finished processing bar');\n * });\n */\nfunction queue (worker, concurrency) {\n    var _worker = wrapAsync(worker);\n    return queue$1((items, cb) => {\n        _worker(items[0], cb);\n    }, concurrency, 1);\n}\n\n// Binary min-heap implementation used for priority queue.\n// Implementation is stable, i.e. push time is considered for equal priorities\nclass Heap {\n    constructor() {\n        this.heap = [];\n        this.pushCount = Number.MIN_SAFE_INTEGER;\n    }\n\n    get length() {\n        return this.heap.length;\n    }\n\n    empty () {\n        this.heap = [];\n        return this;\n    }\n\n    percUp(index) {\n        let p;\n\n        while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) {\n            let t = this.heap[index];\n            this.heap[index] = this.heap[p];\n            this.heap[p] = t;\n\n            index = p;\n        }\n    }\n\n    percDown(index) {\n        let l;\n\n        while ((l=leftChi(index)) < this.heap.length) {\n            if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) {\n                l = l+1;\n            }\n\n            if (smaller(this.heap[index], this.heap[l])) {\n                break;\n            }\n\n            let t = this.heap[index];\n            this.heap[index] = this.heap[l];\n            this.heap[l] = t;\n\n            index = l;\n        }\n    }\n\n    push(node) {\n        node.pushCount = ++this.pushCount;\n        this.heap.push(node);\n        this.percUp(this.heap.length-1);\n    }\n\n    unshift(node) {\n        return this.heap.push(node);\n    }\n\n    shift() {\n        let [top] = this.heap;\n\n        this.heap[0] = this.heap[this.heap.length-1];\n        this.heap.pop();\n        this.percDown(0);\n\n        return top;\n    }\n\n    toArray() {\n        return [...this];\n    }\n\n    *[Symbol.iterator] () {\n        for (let i = 0; i < this.heap.length; i++) {\n            yield this.heap[i].data;\n        }\n    }\n\n    remove (testFn) {\n        let j = 0;\n        for (let i = 0; i < this.heap.length; i++) {\n            if (!testFn(this.heap[i])) {\n                this.heap[j] = this.heap[i];\n                j++;\n            }\n        }\n\n        this.heap.splice(j);\n\n        for (let i = parent(this.heap.length-1); i >= 0; i--) {\n            this.percDown(i);\n        }\n\n        return this;\n    }\n}\n\nfunction leftChi(i) {\n    return (i<<1)+1;\n}\n\nfunction parent(i) {\n    return ((i+1)>>1)-1;\n}\n\nfunction smaller(x, y) {\n    if (x.priority !== y.priority) {\n        return x.priority < y.priority;\n    }\n    else {\n        return x.pushCount < y.pushCount;\n    }\n}\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`.\n * Invoked with (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel.  If omitted, the concurrency defaults to\n * `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n *   array of `tasks` is given, all tasks will be assigned the same priority.\n * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`,\n *   except this returns a promise that rejects if an error occurs.\n * * The `unshift` and `unshiftAsync` methods were removed.\n */\nfunction priorityQueue(worker, concurrency) {\n    // Start with a normal queue\n    var q = queue(worker, concurrency);\n\n    var {\n        push,\n        pushAsync\n    } = q;\n\n    q._tasks = new Heap();\n    q._createTaskItem = ({data, priority}, callback) => {\n        return {\n            data,\n            priority,\n            callback\n        };\n    };\n\n    function createDataItems(tasks, priority) {\n        if (!Array.isArray(tasks)) {\n            return {data: tasks, priority};\n        }\n        return tasks.map(data => { return {data, priority}; });\n    }\n\n    // Override push to accept second parameter representing priority\n    q.push = function(data, priority = 0, callback) {\n        return push(createDataItems(data, priority), callback);\n    };\n\n    q.pushAsync = function(data, priority = 0, callback) {\n        return pushAsync(createDataItems(data, priority), callback);\n    };\n\n    // Remove unshift functions\n    delete q.unshift;\n    delete q.unshiftAsync;\n\n    return q;\n}\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ],\n * // main callback\n * function(err, result) {\n *     // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n    callback = once(callback);\n    if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n    if (!tasks.length) return callback();\n    for (var i = 0, l = tasks.length; i < l; i++) {\n        wrapAsync(tasks[i])(callback);\n    }\n}\n\nvar race$1 = awaitify(race, 2);\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction reduceRight (array, memo, iteratee, callback) {\n    var reversed = [...array].reverse();\n    return reduce$1(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the async function in another function that always completes with a\n * result object, even when it errors.\n *\n * The result object has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n *     async.reflect(function(callback) {\n *         // do some stuff ...\n *         callback(null, 'one');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff but error ...\n *         callback('bad stuff happened');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff ...\n *         callback(null, 'two');\n *     })\n * ],\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = 'bad stuff happened'\n *     // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n    var _fn = wrapAsync(fn);\n    return initialParams(function reflectOn(args, reflectCallback) {\n        args.push((error, ...cbArgs) => {\n            let retVal = {};\n            if (error) {\n                retVal.error = error;\n            }\n            if (cbArgs.length > 0){\n                var value = cbArgs;\n                if (cbArgs.length <= 1) {\n                    [value] = cbArgs;\n                }\n                retVal.value = value;\n            }\n            reflectCallback(null, retVal);\n        });\n\n        return _fn.apply(this, args);\n    });\n}\n\n/**\n * A helper function that wraps an array or an object of functions with `reflect`.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array|Object|Iterable} tasks - The collection of\n * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n * @returns {Array} Returns an array of async functions, each wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         // do some more stuff but error ...\n *         callback(new Error('bad stuff happened'));\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = Error('bad stuff happened')\n *     // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         callback('two');\n *     },\n *     three: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'three');\n *         }, 100);\n *     }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results.one.value = 'one'\n *     // results.two.error = 'two'\n *     // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n    var results;\n    if (Array.isArray(tasks)) {\n        results = tasks.map(reflect);\n    } else {\n        results = {};\n        Object.keys(tasks).forEach(key => {\n            results[key] = reflect.call(this, tasks[key]);\n        });\n    }\n    return results;\n}\n\nfunction reject$2(eachfn, arr, _iteratee, callback) {\n    const iteratee = wrapAsync(_iteratee);\n    return _filter(eachfn, arr, (value, cb) => {\n        iteratee(value, (err, v) => {\n            cb(err, !v);\n        });\n    }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n *    fs.access(file, fs.constants.F_OK, (err) => {\n *        callback(null, !err);\n *    });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n *    // [ 'dir3/file6.txt' ]\n *    // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n *     console.log(results);\n *     // [ 'dir3/file6.txt' ]\n *     // results now equals an array of the non-existing files\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let results = await async.reject(fileList, fileExists);\n *         console.log(results);\n *         // [ 'dir3/file6.txt' ]\n *         // results now equals an array of the non-existing files\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction reject (coll, iteratee, callback) {\n    return reject$2(eachOf$1, coll, iteratee, callback)\n}\nvar reject$1 = awaitify(reject, 3);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectLimit (coll, limit, iteratee, callback) {\n    return reject$2(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar rejectLimit$1 = awaitify(rejectLimit, 4);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectSeries (coll, iteratee, callback) {\n    return reject$2(eachOfSeries$1, coll, iteratee, callback)\n}\nvar rejectSeries$1 = awaitify(rejectSeries, 3);\n\nfunction constant(value) {\n    return function () {\n        return value;\n    }\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @see [async.retryable]{@link module:ControlFlow.retryable}\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up.  The default\n *   is `5`.\n * * `interval` - The time to wait between retries, in milliseconds.  The\n *   default is `0`. The interval may also be specified as a function of the\n *   retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n *   erroneous result. If it returns `true` the retry attempts will continue;\n *   if the function returns `false` the retry flow is aborted with the current\n *   attempt's error and result being returned to the final callback.\n *   Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n *   with the default interval of `0`.\n * @param {AsyncFunction} task - An async function to retry.\n * Invoked with (callback).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n * @returns {Promise} a promise if no callback provided\n *\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n *   times: 10,\n *   interval: function(retryCount) {\n *     return 50 * Math.pow(2, retryCount);\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n *   errorFilter: function(err) {\n *     return err.message === 'Temporary error'; // only retry on a specific error\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // to retry individual methods that are not as reliable within other\n * // control flow functions, use the `retryable` wrapper:\n * async.auto({\n *     users: api.getUsers.bind(api),\n *     payments: async.retryable(3, api.getPayments.bind(api))\n * }, function(err, results) {\n *     // do something with the results\n * });\n *\n */\nconst DEFAULT_TIMES = 5;\nconst DEFAULT_INTERVAL = 0;\n\nfunction retry(opts, task, callback) {\n    var options = {\n        times: DEFAULT_TIMES,\n        intervalFunc: constant(DEFAULT_INTERVAL)\n    };\n\n    if (arguments.length < 3 && typeof opts === 'function') {\n        callback = task || promiseCallback();\n        task = opts;\n    } else {\n        parseTimes(options, opts);\n        callback = callback || promiseCallback();\n    }\n\n    if (typeof task !== 'function') {\n        throw new Error(\"Invalid arguments for async.retry\");\n    }\n\n    var _task = wrapAsync(task);\n\n    var attempt = 1;\n    function retryAttempt() {\n        _task((err, ...args) => {\n            if (err === false) return\n            if (err && attempt++ < options.times &&\n                (typeof options.errorFilter != 'function' ||\n                    options.errorFilter(err))) {\n                setTimeout(retryAttempt, options.intervalFunc(attempt - 1));\n            } else {\n                callback(err, ...args);\n            }\n        });\n    }\n\n    retryAttempt();\n    return callback[PROMISE_SYMBOL]\n}\n\nfunction parseTimes(acc, t) {\n    if (typeof t === 'object') {\n        acc.times = +t.times || DEFAULT_TIMES;\n\n        acc.intervalFunc = typeof t.interval === 'function' ?\n            t.interval :\n            constant(+t.interval || DEFAULT_INTERVAL);\n\n        acc.errorFilter = t.errorFilter;\n    } else if (typeof t === 'number' || typeof t === 'string') {\n        acc.times = +t || DEFAULT_TIMES;\n    } else {\n        throw new Error(\"Invalid arguments for async.retry\");\n    }\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method\n * wraps a task and makes it retryable, rather than immediately calling it\n * with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`, except for a `opts.arity` that\n * is the arity of the `task` function, defaulting to `task.length`\n * @param {AsyncFunction} task - the asynchronous function to wrap.\n * This function will be passed any arguments passed to the returned wrapper.\n * Invoked with (...args, callback).\n * @returns {AsyncFunction} The wrapped function, which when invoked, will\n * retry on an error, based on the parameters specified in `opts`.\n * This function will accept the same parameters as `task`.\n * @example\n *\n * async.auto({\n *     dep1: async.retryable(3, getFromFlakyService),\n *     process: [\"dep1\", async.retryable(3, function (results, cb) {\n *         maybeProcessData(results.dep1, cb);\n *     })]\n * }, callback);\n */\nfunction retryable (opts, task) {\n    if (!task) {\n        task = opts;\n        opts = null;\n    }\n    let arity = (opts && opts.arity) || task.length;\n    if (isAsync(task)) {\n        arity += 1;\n    }\n    var _task = wrapAsync(task);\n    return initialParams((args, callback) => {\n        if (args.length < arity - 1 || callback == null) {\n            args.push(callback);\n            callback = promiseCallback();\n        }\n        function taskFn(cb) {\n            _task(...args, cb);\n        }\n\n        if (opts) retry(opts, taskFn, callback);\n        else retry(taskFn, callback);\n\n        return callback[PROMISE_SYMBOL]\n    });\n}\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n *  results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @return {Promise} a promise, if no callback is passed\n * @example\n *\n * //Using Callbacks\n * async.series([\n *     function(callback) {\n *         setTimeout(function() {\n *             // do some async task\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             // then do another async task\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ], function(err, results) {\n *     console.log(results);\n *     // results is equal to ['one','two']\n * });\n *\n * // an example using objects instead of arrays\n * async.series({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             // do some async task\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             // then do another async task\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     console.log(results);\n *     // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.series([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ]).then(results => {\n *     console.log(results);\n *     // results is equal to ['one','two']\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.series({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             // do some async task\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             // then do another async task\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }).then(results => {\n *     console.log(results);\n *     // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n *     try {\n *         let results = await async.series([\n *             function(callback) {\n *                 setTimeout(function() {\n *                     // do some async task\n *                     callback(null, 'one');\n *                 }, 200);\n *             },\n *             function(callback) {\n *                 setTimeout(function() {\n *                     // then do another async task\n *                     callback(null, 'two');\n *                 }, 100);\n *             }\n *         ]);\n *         console.log(results);\n *         // results is equal to ['one','two']\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n *     try {\n *         let results = await async.parallel({\n *             one: function(callback) {\n *                 setTimeout(function() {\n *                     // do some async task\n *                     callback(null, 1);\n *                 }, 200);\n *             },\n *            two: function(callback) {\n *                 setTimeout(function() {\n *                     // then do another async task\n *                     callback(null, 2);\n *                 }, 100);\n *            }\n *         });\n *         console.log(results);\n *         // results is equal to: { one: 1, two: 2 }\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction series(tasks, callback) {\n    return _parallel(eachOfSeries$1, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n *    fs.access(file, fs.constants.F_OK, (err) => {\n *        callback(null, !err);\n *    });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n *    function(err, result) {\n *        console.log(result);\n *        // true\n *        // result is true since some file in the list exists\n *    }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n *    function(err, result) {\n *        console.log(result);\n *        // false\n *        // result is false since none of the files exists\n *    }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n *     console.log(result);\n *     // true\n *     // result is true since some file in the list exists\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n *     console.log(result);\n *     // false\n *     // result is false since none of the files exists\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n *         console.log(result);\n *         // true\n *         // result is true since some file in the list exists\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n * async () => {\n *     try {\n *         let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n *         console.log(result);\n *         // false\n *         // result is false since none of the files exists\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction some(coll, iteratee, callback) {\n    return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback)\n}\nvar some$1 = awaitify(some, 3);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someLimit(coll, limit, iteratee, callback) {\n    return _createTester(Boolean, res => res)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar someLimit$1 = awaitify(someLimit, 4);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someSeries(coll, iteratee, callback) {\n    return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar someSeries$1 = awaitify(someSeries, 3);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n *     fs.stat(file, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         callback(null, stat.size);\n *     });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n *     function(err, results) {\n *         if (err) {\n *             console.log(err);\n *         } else {\n *             console.log(results);\n *             // results is now the original array of files sorted by\n *             // file size (ascending by default), e.g.\n *             // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n *         }\n *     }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n *     getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n *         if (getFileSizeErr) return callback(getFileSizeErr);\n *         callback(null, fileSize);\n *     });\n * }, function(err, results) {\n *         if (err) {\n *             console.log(err);\n *         } else {\n *             console.log(results);\n *             // results is now the original array of files sorted by\n *             // file size (ascending by default), e.g.\n *             // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n *         }\n *     }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n *     getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n *         if (getFileSizeErr) {\n *             return callback(getFileSizeErr);\n *         }\n *         callback(null, fileSize * -1);\n *     });\n * }, function(err, results) {\n *         if (err) {\n *             console.log(err);\n *         } else {\n *             console.log(results);\n *             // results is now the original array of files sorted by\n *             // file size (ascending by default), e.g.\n *             // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n *         }\n *     }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n *     function(err, results) {\n *         if (err) {\n *             console.log(err);\n *             // [ Error: ENOENT: no such file or directory ]\n *         } else {\n *             console.log(results);\n *         }\n *     }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n *     console.log(results);\n *     // results is now the original array of files sorted by\n *     // file size (ascending by default), e.g.\n *     // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n *     console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n *     console.log(results);\n * }).catch( err => {\n *     console.log(err);\n *     // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n *     try {\n *         let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n *         console.log(results);\n *         // results is now the original array of files sorted by\n *         // file size (ascending by default), e.g.\n *         // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * })();\n *\n * // Error handling\n * async () => {\n *     try {\n *         let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n *         console.log(results);\n *     }\n *     catch (err) {\n *         console.log(err);\n *         // [ Error: ENOENT: no such file or directory ]\n *     }\n * }\n *\n */\nfunction sortBy (coll, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    return map$1(coll, (x, iterCb) => {\n        _iteratee(x, (err, criteria) => {\n            if (err) return iterCb(err);\n            iterCb(err, {value: x, criteria});\n        });\n    }, (err, results) => {\n        if (err) return callback(err);\n        callback(null, results.sort(comparator).map(v => v.value));\n    });\n\n    function comparator(left, right) {\n        var a = left.criteria, b = right.criteria;\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n}\nvar sortBy$1 = awaitify(sortBy, 3);\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} asyncFn - The async function to limit in time.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n * of the control flow functions.\n * Invoke this function with the same parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n *     doAsyncTask(foo, function(err, data) {\n *         // handle errors\n *         if (err) return callback(err);\n *\n *         // do some stuff ...\n *\n *         // return processed data\n *         return callback(null, data);\n *     });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n *     // if `myFunction` takes < 1000 ms to execute, `err`\n *     // and `data` will have their expected values\n *\n *     // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n    var fn = wrapAsync(asyncFn);\n\n    return initialParams((args, callback) => {\n        var timedOut = false;\n        var timer;\n\n        function timeoutCallback() {\n            var name = asyncFn.name || 'anonymous';\n            var error  = new Error('Callback function \"' + name + '\" timed out.');\n            error.code = 'ETIMEDOUT';\n            if (info) {\n                error.info = info;\n            }\n            timedOut = true;\n            callback(error);\n        }\n\n        args.push((...cbArgs) => {\n            if (!timedOut) {\n                callback(...cbArgs);\n                clearTimeout(timer);\n            }\n        });\n\n        // setup timer and call original function\n        timer = setTimeout(timeoutCallback, milliseconds);\n        fn(...args);\n    });\n}\n\nfunction range(size) {\n    var result = Array(size);\n    while (size--) {\n        result[size] = size;\n    }\n    return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesLimit(count, limit, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    return mapLimit$1(range(count), limit, _iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n *     callback(null, {\n *         id: 'user' + id\n *     });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n *     createUser(n, function(err, user) {\n *         next(err, user);\n *     });\n * }, function(err, users) {\n *     // we should now have 5 users\n * });\n */\nfunction times (n, iteratee, callback) {\n    return timesLimit(n, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesSeries (n, iteratee, callback) {\n    return timesLimit(n, 1, iteratee, callback)\n}\n\n/**\n * A relative of `reduce`.  Takes an Object or Array, and iterates over each\n * element in parallel, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform.  If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n *   // implementation not included for brevity\n *   return humanReadbleFilesize;\n * }\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n *     fs.stat(value, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         acc[key] = formatBytes(stat.size);\n *         callback(null);\n *     });\n * }\n *\n * // Using callbacks\n * async.transform(fileList, transformFileSize, function(err, result) {\n *     if(err) {\n *         console.log(err);\n *     } else {\n *         console.log(result);\n *         // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n *     }\n * });\n *\n * // Using Promises\n * async.transform(fileList, transformFileSize)\n * .then(result => {\n *     console.log(result);\n *     // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * (async () => {\n *     try {\n *         let result = await async.transform(fileList, transformFileSize);\n *         console.log(result);\n *         // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * })();\n *\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n *   // implementation not included for brevity\n *   return humanReadbleFilesize;\n * }\n *\n * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n *     fs.stat(value, function(err, stat) {\n *         if (err) {\n *             return callback(err);\n *         }\n *         acc[key] = formatBytes(stat.size);\n *         callback(null);\n *     });\n * }\n *\n * // Using callbacks\n * async.transform(fileMap, transformFileSize, function(err, result) {\n *     if(err) {\n *         console.log(err);\n *     } else {\n *         console.log(result);\n *         // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n *     }\n * });\n *\n * // Using Promises\n * async.transform(fileMap, transformFileSize)\n * .then(result => {\n *     console.log(result);\n *     // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }).catch(err => {\n *     console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n *     try {\n *         let result = await async.transform(fileMap, transformFileSize);\n *         console.log(result);\n *         // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n *     }\n *     catch (err) {\n *         console.log(err);\n *     }\n * }\n *\n */\nfunction transform (coll, accumulator, iteratee, callback) {\n    if (arguments.length <= 3 && typeof accumulator === 'function') {\n        callback = iteratee;\n        iteratee = accumulator;\n        accumulator = Array.isArray(coll) ? [] : {};\n    }\n    callback = once(callback || promiseCallback());\n    var _iteratee = wrapAsync(iteratee);\n\n    eachOf$1(coll, (v, k, cb) => {\n        _iteratee(accumulator, v, k, cb);\n    }, err => callback(err, accumulator));\n    return callback[PROMISE_SYMBOL]\n}\n\n/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n *     function getDataFromFirstWebsite(callback) {\n *         // Try getting the data from the first website\n *         callback(err, data);\n *     },\n *     function getDataFromSecondWebsite(callback) {\n *         // First website failed,\n *         // Try getting the data from the backup website\n *         callback(err, data);\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     Now do something with the data.\n * });\n *\n */\nfunction tryEach(tasks, callback) {\n    var error = null;\n    var result;\n    return eachSeries$1(tasks, (task, taskCb) => {\n        wrapAsync(task)((err, ...args) => {\n            if (err === false) return taskCb(err);\n\n            if (args.length < 2) {\n                [result] = args;\n            } else {\n                result = args;\n            }\n            error = err;\n            taskCb(err ? null : {});\n        });\n    }, () => callback(error, result));\n}\n\nvar tryEach$1 = awaitify(tryEach);\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {AsyncFunction} fn - the memoized function\n * @returns {AsyncFunction} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n    return (...args) => {\n        return (fn.unmemoized || fn)(...args);\n    };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n *     function test(cb) { cb(null, count < 5); },\n *     function iter(callback) {\n *         count++;\n *         setTimeout(function() {\n *             callback(null, count);\n *         }, 1000);\n *     },\n *     function (err, n) {\n *         // 5 seconds have passed, n = 5\n *     }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n    callback = onlyOnce(callback);\n    var _fn = wrapAsync(iteratee);\n    var _test = wrapAsync(test);\n    var results = [];\n\n    function next(err, ...rest) {\n        if (err) return callback(err);\n        results = rest;\n        if (err === false) return;\n        _test(check);\n    }\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (err === false) return;\n        if (!truth) return callback(null, ...results);\n        _fn(next);\n    }\n\n    return _test(check);\n}\nvar whilst$1 = awaitify(whilst, 3);\n\n/**\n * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `iteratee`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n * const results = []\n * let finished = false\n * async.until(function test(cb) {\n *     cb(null, finished)\n * }, function iter(next) {\n *     fetchPage(url, (err, body) => {\n *         if (err) return next(err)\n *         results = results.concat(body.objects)\n *         finished = !!body.next\n *         next(err)\n *     })\n * }, function done (err) {\n *     // all pages have been fetched\n * })\n */\nfunction until(test, iteratee, callback) {\n    const _test = wrapAsync(test);\n    return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n *     function(callback) {\n *         callback(null, 'one', 'two');\n *     },\n *     function(arg1, arg2, callback) {\n *         // arg1 now equals 'one' and arg2 now equals 'two'\n *         callback(null, 'three');\n *     },\n *     function(arg1, callback) {\n *         // arg1 now equals 'three'\n *         callback(null, 'done');\n *     }\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n *     myFirstFunction,\n *     mySecondFunction,\n *     myLastFunction,\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n *     callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n *     // arg1 now equals 'one' and arg2 now equals 'two'\n *     callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n *     // arg1 now equals 'three'\n *     callback(null, 'done');\n * }\n */\nfunction waterfall (tasks, callback) {\n    callback = once(callback);\n    if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n    if (!tasks.length) return callback();\n    var taskIndex = 0;\n\n    function nextTask(args) {\n        var task = wrapAsync(tasks[taskIndex++]);\n        task(...args, onlyOnce(next));\n    }\n\n    function next(err, ...args) {\n        if (err === false) return\n        if (err || taskIndex === tasks.length) {\n            return callback(err, ...args);\n        }\n        nextTask(args);\n    }\n\n    nextTask([]);\n}\n\nvar waterfall$1 = awaitify(waterfall);\n\n/**\n * An \"async function\" in the context of Async is an asynchronous function with\n * a variable number of parameters, with the final parameter being a callback.\n * (`function (arg1, arg2, ..., callback) {}`)\n * The final callback is of the form `callback(err, results...)`, which must be\n * called once the function is completed.  The callback should be called with a\n * Error as its first argument to signal that an error occurred.\n * Otherwise, if no error occurred, it should be called with `null` as the first\n * argument, and any additional `result` arguments that may apply, to signal\n * successful completion.\n * The callback must be called exactly once, ideally on a later tick of the\n * JavaScript event loop.\n *\n * This type of function is also referred to as a \"Node-style async function\",\n * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n * library are themselves CPS/Node-style async functions, or functions that\n * return CPS/Node-style async functions.\n *\n * Wherever we accept a Node-style async function, we also directly accept an\n * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n * In this case, the `async` function will not be passed a final callback\n * argument, and any thrown error will be used as the `err` argument of the\n * implicit callback, and the return value will be used as the `result` value.\n * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n * argument, and a `resolved` value becomes the `result`.)\n *\n * Note, due to JavaScript limitations, we can only detect native `async`\n * functions and not transpilied implementations.\n * Your environment must have `async`/`await` support for this to work.\n * (e.g. Node > v7.6, or a recent version of a modern browser).\n * If you are using `async` functions through a transpiler (e.g. Babel), you\n * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n * because the `async function` will be compiled to an ordinary function that\n * returns a promise.\n *\n * @typedef {Function} AsyncFunction\n * @static\n */\n\n\nvar index = {\n    apply,\n    applyEach,\n    applyEachSeries,\n    asyncify,\n    auto,\n    autoInject,\n    cargo: cargo$1,\n    cargoQueue: cargo,\n    compose,\n    concat: concat$1,\n    concatLimit: concatLimit$1,\n    concatSeries: concatSeries$1,\n    constant: constant$1,\n    detect: detect$1,\n    detectLimit: detectLimit$1,\n    detectSeries: detectSeries$1,\n    dir,\n    doUntil,\n    doWhilst: doWhilst$1,\n    each,\n    eachLimit: eachLimit$1,\n    eachOf: eachOf$1,\n    eachOfLimit: eachOfLimit$1,\n    eachOfSeries: eachOfSeries$1,\n    eachSeries: eachSeries$1,\n    ensureAsync,\n    every: every$1,\n    everyLimit: everyLimit$1,\n    everySeries: everySeries$1,\n    filter: filter$1,\n    filterLimit: filterLimit$1,\n    filterSeries: filterSeries$1,\n    forever: forever$1,\n    groupBy,\n    groupByLimit: groupByLimit$1,\n    groupBySeries,\n    log,\n    map: map$1,\n    mapLimit: mapLimit$1,\n    mapSeries: mapSeries$1,\n    mapValues,\n    mapValuesLimit: mapValuesLimit$1,\n    mapValuesSeries,\n    memoize,\n    nextTick,\n    parallel,\n    parallelLimit,\n    priorityQueue,\n    queue,\n    race: race$1,\n    reduce: reduce$1,\n    reduceRight,\n    reflect,\n    reflectAll,\n    reject: reject$1,\n    rejectLimit: rejectLimit$1,\n    rejectSeries: rejectSeries$1,\n    retry,\n    retryable,\n    seq,\n    series,\n    setImmediate: setImmediate$1,\n    some: some$1,\n    someLimit: someLimit$1,\n    someSeries: someSeries$1,\n    sortBy: sortBy$1,\n    timeout,\n    times,\n    timesLimit,\n    timesSeries,\n    transform,\n    tryEach: tryEach$1,\n    unmemoize,\n    until,\n    waterfall: waterfall$1,\n    whilst: whilst$1,\n\n    // aliases\n    all: every$1,\n    allLimit: everyLimit$1,\n    allSeries: everySeries$1,\n    any: some$1,\n    anyLimit: someLimit$1,\n    anySeries: someSeries$1,\n    find: detect$1,\n    findLimit: detectLimit$1,\n    findSeries: detectSeries$1,\n    flatMap: concat$1,\n    flatMapLimit: concatLimit$1,\n    flatMapSeries: concatSeries$1,\n    forEach: each,\n    forEachSeries: eachSeries$1,\n    forEachLimit: eachLimit$1,\n    forEachOf: eachOf$1,\n    forEachOfSeries: eachOfSeries$1,\n    forEachOfLimit: eachOfLimit$1,\n    inject: reduce$1,\n    foldl: reduce$1,\n    foldr: reduceRight,\n    select: filter$1,\n    selectLimit: filterLimit$1,\n    selectSeries: filterSeries$1,\n    wrapSync: asyncify,\n    during: whilst$1,\n    doDuring: doWhilst$1\n};\n\nexport { every$1 as all, everyLimit$1 as allLimit, everySeries$1 as allSeries, some$1 as any, someLimit$1 as anyLimit, someSeries$1 as anySeries, apply, applyEach, applyEachSeries, asyncify, auto, autoInject, cargo$1 as cargo, cargo as cargoQueue, compose, concat$1 as concat, concatLimit$1 as concatLimit, concatSeries$1 as concatSeries, constant$1 as constant, index as default, detect$1 as detect, detectLimit$1 as detectLimit, detectSeries$1 as detectSeries, dir, doWhilst$1 as doDuring, doUntil, doWhilst$1 as doWhilst, whilst$1 as during, each, eachLimit$1 as eachLimit, eachOf$1 as eachOf, eachOfLimit$1 as eachOfLimit, eachOfSeries$1 as eachOfSeries, eachSeries$1 as eachSeries, ensureAsync, every$1 as every, everyLimit$1 as everyLimit, everySeries$1 as everySeries, filter$1 as filter, filterLimit$1 as filterLimit, filterSeries$1 as filterSeries, detect$1 as find, detectLimit$1 as findLimit, detectSeries$1 as findSeries, concat$1 as flatMap, concatLimit$1 as flatMapLimit, concatSeries$1 as flatMapSeries, reduce$1 as foldl, reduceRight as foldr, each as forEach, eachLimit$1 as forEachLimit, eachOf$1 as forEachOf, eachOfLimit$1 as forEachOfLimit, eachOfSeries$1 as forEachOfSeries, eachSeries$1 as forEachSeries, forever$1 as forever, groupBy, groupByLimit$1 as groupByLimit, groupBySeries, reduce$1 as inject, log, map$1 as map, mapLimit$1 as mapLimit, mapSeries$1 as mapSeries, mapValues, mapValuesLimit$1 as mapValuesLimit, mapValuesSeries, memoize, nextTick, parallel, parallelLimit, priorityQueue, queue, race$1 as race, reduce$1 as reduce, reduceRight, reflect, reflectAll, reject$1 as reject, rejectLimit$1 as rejectLimit, rejectSeries$1 as rejectSeries, retry, retryable, filter$1 as select, filterLimit$1 as selectLimit, filterSeries$1 as selectSeries, seq, series, setImmediate$1 as setImmediate, some$1 as some, someLimit$1 as someLimit, someSeries$1 as someSeries, sortBy$1 as sortBy, timeout, times, timesLimit, timesSeries, transform, tryEach$1 as tryEach, unmemoize, until, waterfall$1 as waterfall, whilst$1 as whilst, asyncify as wrapSync };\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';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('stream');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n","module.exports = require('./readable').PassThrough\n","var util = require('util');\nvar PassThrough = require('readable-stream/passthrough');\n\nmodule.exports = {\n  Readable: Readable,\n  Writable: Writable\n};\n\nutil.inherits(Readable, PassThrough);\nutil.inherits(Writable, PassThrough);\n\n// Patch the given method of instance so that the callback\n// is executed once, before the actual method is called the\n// first time.\nfunction beforeFirstCall(instance, method, callback) {\n  instance[method] = function() {\n    delete instance[method];\n    callback.apply(this, arguments);\n    return this[method].apply(this, arguments);\n  };\n}\n\nfunction Readable(fn, options) {\n  if (!(this instanceof Readable))\n    return new Readable(fn, options);\n\n  PassThrough.call(this, options);\n\n  beforeFirstCall(this, '_read', function() {\n    var source = fn.call(this, options);\n    var emit = this.emit.bind(this, 'error');\n    source.on('error', emit);\n    source.pipe(this);\n  });\n\n  this.emit('readable');\n}\n\nfunction Writable(fn, options) {\n  if (!(this instanceof Writable))\n    return new Writable(fn, options);\n\n  PassThrough.call(this, options);\n\n  beforeFirstCall(this, '_write', function() {\n    var destination = fn.call(this, options);\n    var emit = this.emit.bind(this, 'error');\n    destination.on('error', emit);\n    this.pipe(destination);\n  });\n\n  this.emit('writable');\n}\n\n","/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n  if (typeof path !== 'string') {\n    throw new TypeError('expected path to be a string');\n  }\n\n  if (path === '\\\\' || path === '/') return '/';\n\n  var len = path.length;\n  if (len <= 1) return path;\n\n  // ensure that win32 namespaces has two leading slashes, so that the path is\n  // handled properly by the win32 version of path.parse() after being normalized\n  // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n  var prefix = '';\n  if (len > 4 && path[3] === '\\\\') {\n    var ch = path[2];\n    if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n      path = path.slice(2);\n      prefix = '//';\n    }\n  }\n\n  var segs = path.split(/[/\\\\]+/);\n  if (stripTrailing !== false && segs[segs.length - 1] === '') {\n    segs.pop();\n  }\n  return prefix + segs.join('/');\n};\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var baseRest = require('./_baseRest'),\n    eq = require('./eq'),\n    isIterateeCall = require('./_isIterateeCall'),\n    keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n  object = Object(object);\n\n  var index = -1;\n  var length = sources.length;\n  var guard = length > 2 ? sources[2] : undefined;\n\n  if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n    length = 1;\n  }\n\n  while (++index < length) {\n    var source = sources[index];\n    var props = keysIn(source);\n    var propsIndex = -1;\n    var propsLength = props.length;\n\n    while (++propsIndex < propsLength) {\n      var key = props[propsIndex];\n      var value = object[key];\n\n      if (value === undefined ||\n          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        object[key] = source[key];\n      }\n    }\n  }\n\n  return object;\n});\n\nmodule.exports = defaults;\n","'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/main/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  PromiseResolve(val) {\n    return Promise.resolve(val)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n  SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Boolean,\n  Uint8Array\n}\n","'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/util/inspect.js file defined at\n\n  https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  }\n}\n","'use strict'\n\nconst { format, inspect } = require('./util/inspect')\nconst { AggregateError: CustomAggregateError } = require('./primordials')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/main/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      const limit = BigInt(2) ** BigInt(32)\n      if (input > limit || input < -limit) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n","/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event)\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    )\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            )\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault()\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    })\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n    // Define accessors\n    const keys = Object.keys(event)\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key))\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this)\n\n        data.stopped = true\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation()\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this)\n\n        data.stopped = true\n        data.immediateStopped = true\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation()\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this))\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this)\n\n        data.stopped = true\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this))\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto)\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event)\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    })\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n            const isFunc = typeof descriptor.value === \"function\"\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            )\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto)\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n        wrappers.set(proto, wrapper)\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event))\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener\n}\n","import {\n    isStopped,\n    setCurrentTarget,\n    setEventPhase,\n    setPassiveListener,\n    wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget)\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this)\n            let node = listeners.get(eventName)\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this)\n\n            // Traverse to the tail while removing old value.\n            let prev = null\n            let node = listeners.get(eventName)\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next)\n                    } else {\n                        listeners.delete(eventName)\n                    }\n                } else {\n                    prev = node\n                }\n\n                node = node.next\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                }\n                if (prev === null) {\n                    listeners.set(eventName, newNode)\n                } else {\n                    prev.next = newNode\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this)\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    })\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map())\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length)\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i]\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this)\n        const optionsIsObj = isObject(options)\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options)\n        const listenerType = capture ? CAPTURE : BUBBLE\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        }\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName)\n        if (node === undefined) {\n            listeners.set(eventName, newNode)\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node\n            node = node.next\n        }\n\n        // Add it.\n        prev.next = newNode\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this)\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options)\n        const listenerType = capture ? CAPTURE : BUBBLE\n\n        let prev = null\n        let node = listeners.get(eventName)\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next)\n                } else {\n                    listeners.delete(eventName)\n                }\n                return\n            }\n\n            prev = node\n            node = node.next\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this)\n        const eventName = event.type\n        let node = listeners.get(eventName)\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event)\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next)\n                } else {\n                    listeners.delete(eventName)\n                }\n            } else {\n                prev = node\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            )\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent)\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err)\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent)\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next\n        }\n        setPassiveListener(wrappedEvent, null)\n        setEventPhase(wrappedEvent, 0)\n        setCurrentTarget(wrappedEvent, null)\n\n        return !wrappedEvent.defaultPrevented\n    },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n","import {\n    // Event,\n    EventTarget,\n    // Type,\n    defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n//   Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n//   to make assignable our `AbortSignal` into that.\n//   https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n    abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n    onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    public constructor() {\n        super()\n        throw new TypeError(\"AbortSignal cannot be constructed directly\")\n    }\n\n    /**\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    public get aborted(): boolean {\n        const aborted = abortedFlags.get(this)\n        if (typeof aborted !== \"boolean\") {\n            throw new TypeError(\n                `Expected 'this' to be an 'AbortSignal' object, but got ${\n                    this === null ? \"null\" : typeof this\n                }`,\n            )\n        }\n        return aborted\n    }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n    const signal = Object.create(AbortSignal.prototype)\n    EventTarget.call(signal)\n    abortedFlags.set(signal, false)\n    return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n    if (abortedFlags.get(signal) !== false) {\n        return\n    }\n\n    abortedFlags.set(signal, true)\n    signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n    aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortSignal\",\n    })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n    /**\n     * Initialize this controller.\n     */\n    public constructor() {\n        signals.set(this, createAbortSignal())\n    }\n\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    public get signal(): AbortSignal {\n        return getSignal(this)\n    }\n\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    public abort(): void {\n        abortSignal(getSignal(this))\n    }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap<AbortController, AbortSignal>()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n    const signal = signals.get(controller)\n    if (signal == null) {\n        throw new TypeError(\n            `Expected 'this' to be an 'AbortController' object, but got ${\n                controller === null ? \"null\" : typeof controller\n            }`,\n        )\n    }\n    return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n    signal: { enumerable: true },\n    abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortController\",\n    })\n}\n\nexport { AbortController, AbortSignal }\n","'use strict'\n\nconst bufferModule = require('buffer')\nconst { format, inspect } = require('./util/inspect')\nconst {\n  codes: { ERR_INVALID_ARG_TYPE }\n} = require('./errors')\nconst { kResistStopPropagation, AggregateError, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nconst validateFunction = (value, name) => {\n  if (typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format,\n  inspect,\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob,\n  deprecate(fn, message) {\n    return fn\n  },\n  addAbortListener:\n    require('events').addAbortListener ||\n    function addAbortListener(signal, listener) {\n      if (signal === undefined) {\n        throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n      }\n      validateAbortSignal(signal, 'signal')\n      validateFunction(listener, 'listener')\n      let removeEventListener\n      if (signal.aborted) {\n        queueMicrotask(() => listener())\n      } else {\n        signal.addEventListener('abort', listener, {\n          __proto__: null,\n          once: true,\n          [kResistStopPropagation]: true\n        })\n        removeEventListener = () => {\n          signal.removeEventListener('abort', listener)\n        }\n      }\n      return {\n        __proto__: null,\n        [SymbolDispose]() {\n          var _removeEventListener\n          ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n            ? undefined\n            : _removeEventListener()\n        }\n      }\n    },\n  AbortSignalAny:\n    AbortSignal.any ||\n    function AbortSignalAny(signals) {\n      // Fast path if there is only one signal.\n      if (signals.length === 1) {\n        return signals[0]\n      }\n      const ac = new AbortController()\n      const abort = () => ac.abort()\n      signals.forEach((signal) => {\n        validateAbortSignal(signal, 'signals')\n        signal.addEventListener('abort', abort, {\n          once: true\n        })\n      })\n      ac.signal.addEventListener(\n        'abort',\n        () => {\n          signals.forEach((signal) => signal.removeEventListener('abort', abort))\n        },\n        {\n          once: true\n        }\n      )\n      return ac.signal\n    }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n","/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    const signal = value[i]\n    const indexedName = `${name}[${i}]`\n    if (signal == null) {\n      throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n    }\n    validateAbortSignal(signal, indexedName)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateAbortSignalArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n","// for now just expose the builtin process global from node.js\nmodule.exports = global.process;\n","'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  isDestroyed,\n  kIsDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  kIsWritable,\n  isClosed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kIsDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n","'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n","'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n    const disposable = addAbortListener(signal, onAbort)\n    eos(stream, disposable[SymbolDispose])\n  }\n  return stream\n}\n","'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n","'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n  validateInteger(value, 'value', 0)\n  if (objectMode) {\n    defaultHighWaterMarkObjectMode = value\n  } else {\n    defaultHighWaterMarkBytes = value\n  }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark,\n  setDefaultHighWaterMark\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncDispose,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder/')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n  return {\n    enumerable: false,\n    get() {\n      return (this.state & bit) !== 0\n    },\n    set(value) {\n      if (value) this.state |= bit\n      else this.state &= ~bit\n    }\n  }\n}\nObjectDefineProperties(ReadableState.prototype, {\n  objectMode: makeBitMapDescriptor(kObjectMode),\n  ended: makeBitMapDescriptor(kEnded),\n  endEmitted: makeBitMapDescriptor(kEndEmitted),\n  reading: makeBitMapDescriptor(kReading),\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  constructed: makeBitMapDescriptor(kConstructed),\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  sync: makeBitMapDescriptor(kSync),\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  needReadable: makeBitMapDescriptor(kNeedReadable),\n  emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n  readableListening: makeBitMapDescriptor(kReadableListening),\n  resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n  // True if the error was already emitted and should not be thrown again.\n  errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n  emitClose: makeBitMapDescriptor(kEmitClose),\n  autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n  // Has it been destroyed.\n  destroyed: makeBitMapDescriptor(kDestroyed),\n  // Indicates whether the stream has finished destroying.\n  closed: makeBitMapDescriptor(kClosed),\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n  multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n  // If true, a maybeReadMore has been scheduled.\n  readingMore: makeBitMapDescriptor(kReadingMore),\n  dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Bit map field to store ReadableState more effciently with 1 bit per field\n  // instead of a V8 slot per field.\n  this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  if (options && options.objectMode) this.state |= kObjectMode\n  if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this[kPaused] = null\n\n  // Should close be emitted on destroy. Defaults to true.\n  if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n  let error\n  if (!this.destroyed) {\n    error = this.readableEnded ? null : new AbortError()\n    this.destroy(error)\n  }\n  return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if ((state.state & kObjectMode) === 0) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.state &= ~kReading\n    onEofChunk(stream, state)\n  } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.state &= ~kReading\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.state &= ~kReading\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if ((state.state & kMultiAwaitDrain) !== 0) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if ((state.state & kObjectMode) !== 0) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.state &= ~kEmittedReadable\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = (state.state & kNeedReadable) !== 0\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.state |= kReading | kSync\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.state |= kNeedReadable\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.state &= ~kSync\n\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    pause()\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream,\n  isReadableStream,\n  isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n  if (isReadableStream(body)) {\n    return _duplexify({\n      readable: Readable.fromWeb(body)\n    })\n  }\n  if (isWritableStream(body)) {\n    return _duplexify({\n      writable: Writable.fromWeb(body)\n    })\n  }\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n  if (\n    isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n    isWritableStream(body === null || body === undefined ? undefined : body.writable)\n  ) {\n    return Duplexify.fromWeb(body)\n  }\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n      await wait()\n    }\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n  let disposable\n  if (outerSignal) {\n    disposable = addAbortListener(outerSignal, abort)\n  }\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    var _disposable\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableFinished(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n","'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n","'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n  ArrayPrototypePush,\n  Boolean,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromiseResolve,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  let highWaterMark = concurrency - 1\n  if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n    highWaterMark = MathFloor(options.highWaterMark)\n  }\n  validateInteger(concurrency, 'options.concurrency', 1)\n  validateInteger(highWaterMark, 'options.highWaterMark', 0)\n  highWaterMark += concurrency\n  return async function* map() {\n    const signal = require('../../ours/util').AbortSignalAny(\n      [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n    )\n    const stream = this\n    const queue = []\n    const signalOpt = {\n      signal\n    }\n    let next\n    let resume\n    let done = false\n    let cnt = 0\n    function onCatch() {\n      done = true\n      afterItemProcessed()\n    }\n    function afterItemProcessed() {\n      cnt -= 1\n      maybeResume()\n    }\n    function maybeResume() {\n      if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n        resume()\n        resume = null\n      }\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n            if (val === kEmpty) {\n              continue\n            }\n            val = PromiseResolve(val)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          cnt += 1\n          PromisePrototypeThen(val, afterItemProcessed, onCatch)\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, afterItemProcessed, onCatch)\n        queue.push(val)\n      } finally {\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          maybeResume()\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal = options.signal) !== null &&\n        _options$signal !== undefined &&\n        _options$signal.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal2\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal2 = options.signal) !== null &&\n    _options$signal2 !== undefined &&\n    _options$signal2.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this,\n      [kResistStopPropagation]: true\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal3\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal3 = options.signal) !== null &&\n        _options$signal3 !== undefined &&\n        _options$signal3.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal4\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal4 = options.signal) !== null &&\n      _options$signal4 !== undefined &&\n      _options$signal4.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal5\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal5 = options.signal) !== null &&\n      _options$signal5 !== undefined &&\n      _options$signal5.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal6\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal8\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal8 = options.signal) !== null &&\n        _options$signal8 !== undefined &&\n        _options$signal8.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      }\n\n      // Don't get another item from iterator in case we reached the end\n      if (number <= 0) {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n","'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n","'use strict'\n\nconst Stream = require('stream')\nif (Stream && process.env.READABLE_STREAM === 'disable') {\n  const promises = Stream.promises\n\n  // Explicit export naming is needed for ESM\n  module.exports._uint8ArrayToBuffer = Stream._uint8ArrayToBuffer\n  module.exports._isUint8Array = Stream._isUint8Array\n  module.exports.isDisturbed = Stream.isDisturbed\n  module.exports.isErrored = Stream.isErrored\n  module.exports.isReadable = Stream.isReadable\n  module.exports.Readable = Stream.Readable\n  module.exports.Writable = Stream.Writable\n  module.exports.Duplex = Stream.Duplex\n  module.exports.Transform = Stream.Transform\n  module.exports.PassThrough = Stream.PassThrough\n  module.exports.addAbortSignal = Stream.addAbortSignal\n  module.exports.finished = Stream.finished\n  module.exports.destroy = Stream.destroy\n  module.exports.pipeline = Stream.pipeline\n  module.exports.compose = Stream.compose\n  Object.defineProperty(Stream, 'promises', {\n    configurable: true,\n    enumerable: true,\n    get() {\n      return promises\n    }\n  })\n  module.exports.Stream = Stream.Stream\n} else {\n  const CustomStream = require('../stream')\n  const promises = require('../stream/promises')\n  const originalDestroy = CustomStream.Readable.destroy\n  module.exports = CustomStream.Readable\n\n  // Explicit export naming is needed for ESM\n  module.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\n  module.exports._isUint8Array = CustomStream._isUint8Array\n  module.exports.isDisturbed = CustomStream.isDisturbed\n  module.exports.isErrored = CustomStream.isErrored\n  module.exports.isReadable = CustomStream.isReadable\n  module.exports.Readable = CustomStream.Readable\n  module.exports.Writable = CustomStream.Writable\n  module.exports.Duplex = CustomStream.Duplex\n  module.exports.Transform = CustomStream.Transform\n  module.exports.PassThrough = CustomStream.PassThrough\n  module.exports.addAbortSignal = CustomStream.addAbortSignal\n  module.exports.finished = CustomStream.finished\n  module.exports.destroy = CustomStream.destroy\n  module.exports.destroy = originalDestroy\n  module.exports.pipeline = CustomStream.pipeline\n  module.exports.compose = CustomStream.compose\n  Object.defineProperty(CustomStream, 'promises', {\n    configurable: true,\n    enumerable: true,\n    get() {\n      return promises\n    }\n  })\n  module.exports.Stream = CustomStream.Stream\n}\n\n// Allow default importing\nmodule.exports.default = module.exports\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    arrayMap = require('./_arrayMap'),\n    baseUnary = require('./_baseUnary'),\n    cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseDifference;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseDifference = require('./_baseDifference'),\n    baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n    : [];\n});\n\nmodule.exports = difference;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    baseUniq = require('./_baseUniq'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n  pattern: any\n): asserts pattern is string => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses: { [k: string]: [e: string, u: boolean, n?: boolean] } = {\n  '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n  '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n  '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n  '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n  '[:cntrl:]': ['\\\\p{Cc}', true],\n  '[:digit:]': ['\\\\p{Nd}', true],\n  '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n  '[:lower:]': ['\\\\p{Ll}', true],\n  '[:print:]': ['\\\\p{C}', true],\n  '[:punct:]': ['\\\\p{P}', true],\n  '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n  '[:upper:]': ['\\\\p{Lu}', true],\n  '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n  '[:xdigit:]': ['A-Fa-f0-9', false],\n}\n\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s: string) => s.replace(/[[\\]\\\\-]/g, '\\\\$&')\n// escape all regexp magic characters\nconst regexpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges: string[]): string => ranges.join('')\n\nexport type ParseClassResult = [\n  src: string,\n  uFlag: boolean,\n  consumed: number,\n  hasMagic: boolean\n]\n\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (\n  glob: string,\n  position: number\n): ParseClassResult => {\n  const pos = position\n  /* c8 ignore start */\n  if (glob.charAt(pos) !== '[') {\n    throw new Error('not in a brace expression')\n  }\n  /* c8 ignore stop */\n  const ranges: string[] = []\n  const negs: string[] = []\n\n  let i = pos + 1\n  let sawStart = false\n  let uflag = false\n  let escaping = false\n  let negate = false\n  let endPos = pos\n  let rangeStart = ''\n  WHILE: while (i < glob.length) {\n    const c = glob.charAt(i)\n    if ((c === '!' || c === '^') && i === pos + 1) {\n      negate = true\n      i++\n      continue\n    }\n\n    if (c === ']' && sawStart && !escaping) {\n      endPos = i + 1\n      break\n    }\n\n    sawStart = true\n    if (c === '\\\\') {\n      if (!escaping) {\n        escaping = true\n        i++\n        continue\n      }\n      // escaped \\ char, fall through and treat like normal char\n    }\n    if (c === '[' && !escaping) {\n      // either a posix class, a collation equivalent, or just a [\n      for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n        if (glob.startsWith(cls, i)) {\n          // invalid, [a-[] is fine, but not [a-[:alpha]]\n          if (rangeStart) {\n            return ['$.', false, glob.length - pos, true]\n          }\n          i += cls.length\n          if (neg) negs.push(unip)\n          else ranges.push(unip)\n          uflag = uflag || u\n          continue WHILE\n        }\n      }\n    }\n\n    // now it's just a normal character, effectively\n    escaping = false\n    if (rangeStart) {\n      // throw this range away if it's not valid, but others\n      // can still match.\n      if (c > rangeStart) {\n        ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c))\n      } else if (c === rangeStart) {\n        ranges.push(braceEscape(c))\n      }\n      rangeStart = ''\n      i++\n      continue\n    }\n\n    // now might be the start of a range.\n    // can be either c-d or c-] or c<more...>] or c] at this point\n    if (glob.startsWith('-]', i + 1)) {\n      ranges.push(braceEscape(c + '-'))\n      i += 2\n      continue\n    }\n    if (glob.startsWith('-', i + 1)) {\n      rangeStart = c\n      i += 2\n      continue\n    }\n\n    // not the start of a range, just a single character\n    ranges.push(braceEscape(c))\n    i++\n  }\n\n  if (endPos < i) {\n    // didn't see the end of the class, not a valid class,\n    // but might still be valid as a literal match.\n    return ['', false, 0, false]\n  }\n\n  // if we got no ranges and no negates, then we have a range that\n  // cannot possibly match anything, and that poisons the whole glob\n  if (!ranges.length && !negs.length) {\n    return ['$.', false, glob.length - pos, true]\n  }\n\n  // if we got one positive range, and it's a single character, then that's\n  // not actually a magic pattern, it's just that one literal character.\n  // we should not treat that as \"magic\", we should just return the literal\n  // character. [_] is a perfectly valid way to escape glob magic chars.\n  if (\n    negs.length === 0 &&\n    ranges.length === 1 &&\n    /^\\\\?.$/.test(ranges[0]) &&\n    !negate\n  ) {\n    const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]\n    return [regexpEscape(r), false, endPos - pos, false]\n  }\n\n  const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'\n  const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'\n  const comb =\n    ranges.length && negs.length\n      ? '(' + sranges + '|' + snegs + ')'\n      : ranges.length\n      ? sranges\n      : snegs\n\n  return [comb, uflag, endPos - pos, true]\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n","// parse a single path portion\n\nimport { parseClass } from './brace-expressions.js'\nimport { MinimatchOptions, MMRegExp } from './index.js'\nimport { unescape } from './unescape.js'\n\n// classes [] are handled by the parseClass method\n// for positive extglobs, we sub-parse the contents, and combine,\n// with the appropriate regexp close.\n// for negative extglobs, we sub-parse the contents, but then\n// have to include the rest of the pattern, then the parent, etc.,\n// as the thing that cannot be because RegExp negative lookaheads\n// are different from globs.\n//\n// So for example:\n// a@(i|w!(x|y)z|j)b => ^a(i|w((!?(x|y)zb).*)z|j)b$\n//   1   2 3   4 5 6      1   2    3   46      5 6\n//\n// Assembling the extglob requires not just the negated patterns themselves,\n// but also anything following the negative patterns up to the boundary\n// of the current pattern, plus anything following in the parent pattern.\n//\n//\n// So, first, we parse the string into an AST of extglobs, without turning\n// anything into regexps yet.\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y']}, 'z'], ['j']]}, 'b']\n//\n// Then, for all the negative extglobs, we append whatever comes after in\n// each parent as their tail\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y'], 'z', 'b'}, 'z'], ['j']]}, 'b']\n//\n// Lastly, we turn each of these pieces into a regexp, and join\n//\n//                                 v----- .* because there's more following,\n//                                 v    v  otherwise, .+ because it must be\n//                                 v    v  *something* there.\n// ['^a', {@ ['i', 'w(?:(!?(?:x|y).*zb$).*)z', 'j' ]}, 'b$']\n//   copy what follows into here--^^^^^\n// ['^a', '(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)', 'b$']\n// ['^a(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)b$']\n\nexport type ExtglobType = '!' | '?' | '+' | '*' | '@'\nconst types = new Set<ExtglobType>(['!', '?', '+', '*', '@'])\nconst isExtglobType = (c: string | null): c is ExtglobType =>\n  types.has(c as ExtglobType)\nconst isExtglobAST = (c: AST): c is AST & { type: ExtglobType } =>\n  isExtglobType(c.type)\n\nconst adoptionMap = new Map<ExtglobType, ExtglobType[]>([\n  ['!', ['@']],\n  ['?', ['?', '@']],\n  ['@', ['@']],\n  ['*', ['*', '+', '?', '@']],\n  ['+', ['+', '@']],\n])\n\nconst adoptionWithSpaceMap = new Map<ExtglobType, ExtglobType[]>([\n  ['!', ['?']],\n  ['@', ['?']],\n  ['+', ['?', '*']],\n])\n\nconst adoptionAnyMap = new Map<ExtglobType, ExtglobType[]>([\n  ['!', ['?', '@']],\n  ['?', ['?', '@']],\n  ['@', ['?', '@']],\n  ['*', ['*', '+', '?', '@']],\n  ['+', ['+', '@', '?', '*']],\n])\n\nconst usurpMap = new Map<ExtglobType, Map<ExtglobType | null, ExtglobType | null>>([\n  ['!', new Map([['!', '@']])],\n  ['?', new Map([['*', '*'], ['+', '*']])],\n  ['@', new Map([['!', '!'], ['?', '?'], ['@', '@'], ['*', '*'], ['+', '+']])],\n  ['+', new Map([['?', '*'], ['*', '*']])],\n])\n\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))'\nconst startNoDot = '(?!\\\\.)'\n\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.'])\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.'])\nconst reSpecials = new Set('().*{}+?[]^$\\\\!')\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// any single thing other than /\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?'\n\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\n\nexport class AST {\n  type: ExtglobType | null\n  readonly #root: AST\n\n  #hasMagic?: boolean\n  #uflag: boolean = false\n  #parts: (string | AST)[] = []\n  #parent?: AST\n  #parentIndex: number\n  #negs: AST[]\n  #filledNegs: boolean = false\n  #options: MinimatchOptions\n  #toString?: string\n  // set to true if it's an extglob with no children\n  // (which really means one child of '')\n  #emptyExt: boolean = false\n\n  constructor(\n    type: ExtglobType | null,\n    parent?: AST,\n    options: MinimatchOptions = {}\n  ) {\n    this.type = type\n    // extglobs are inherently magical\n    if (type) this.#hasMagic = true\n    this.#parent = parent\n    this.#root = this.#parent ? this.#parent.#root : this\n    this.#options = this.#root === this ? options : this.#root.#options\n    this.#negs = this.#root === this ? [] : this.#root.#negs\n    if (type === '!' && !this.#root.#filledNegs) this.#negs.push(this)\n    this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0\n  }\n\n  get hasMagic(): boolean | undefined {\n    /* c8 ignore start */\n    if (this.#hasMagic !== undefined) return this.#hasMagic\n    /* c8 ignore stop */\n    for (const p of this.#parts) {\n      if (typeof p === 'string') continue\n      if (p.type || p.hasMagic) return (this.#hasMagic = true)\n    }\n    // note: will be undefined until we generate the regexp src and find out\n    return this.#hasMagic\n  }\n\n  // reconstructs the pattern\n  toString(): string {\n    if (this.#toString !== undefined) return this.#toString\n    if (!this.type) {\n      return (this.#toString = this.#parts.map(p => String(p)).join(''))\n    } else {\n      return (this.#toString =\n        this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')')\n    }\n  }\n\n  #fillNegs() {\n    /* c8 ignore start */\n    if (this !== this.#root) throw new Error('should only call on root')\n    if (this.#filledNegs) return this\n    /* c8 ignore stop */\n\n    // call toString() once to fill this out\n    this.toString()\n    this.#filledNegs = true\n    let n: AST | undefined\n    while ((n = this.#negs.pop())) {\n      if (n.type !== '!') continue\n      // walk up the tree, appending everthing that comes AFTER parentIndex\n      let p: AST | undefined = n\n      let pp = p.#parent\n      while (pp) {\n        for (\n          let i = p.#parentIndex + 1;\n          !pp.type && i < pp.#parts.length;\n          i++\n        ) {\n          for (const part of n.#parts) {\n            /* c8 ignore start */\n            if (typeof part === 'string') {\n              throw new Error('string part in extglob AST??')\n            }\n            /* c8 ignore stop */\n            part.copyIn(pp.#parts[i])\n          }\n        }\n        p = pp\n        pp = p.#parent\n      }\n    }\n    return this\n  }\n\n  push(...parts: (string | AST)[]) {\n    for (const p of parts) {\n      if (p === '') continue\n      /* c8 ignore start */\n      if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n        throw new Error('invalid part: ' + p)\n      }\n      /* c8 ignore stop */\n      this.#parts.push(p)\n    }\n  }\n\n  toJSON() {\n    const ret: any[] =\n      this.type === null\n        ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n        : [this.type, ...this.#parts.map(p => (p as AST).toJSON())]\n    if (this.isStart() && !this.type) ret.unshift([])\n    if (\n      this.isEnd() &&\n      (this === this.#root ||\n        (this.#root.#filledNegs && this.#parent?.type === '!'))\n    ) {\n      ret.push({})\n    }\n    return ret\n  }\n\n  isStart(): boolean {\n    if (this.#root === this) return true\n    // if (this.type) return !!this.#parent?.isStart()\n    if (!this.#parent?.isStart()) return false\n    if (this.#parentIndex === 0) return true\n    // if everything AHEAD of this is a negation, then it's still the \"start\"\n    const p = this.#parent\n    for (let i = 0; i < this.#parentIndex; i++) {\n      const pp = p.#parts[i]\n      if (!(pp instanceof AST && pp.type === '!')) {\n        return false\n      }\n    }\n    return true\n  }\n\n  isEnd(): boolean {\n    if (this.#root === this) return true\n    if (this.#parent?.type === '!') return true\n    if (!this.#parent?.isEnd()) return false\n    if (!this.type) return this.#parent?.isEnd()\n    // if not root, it'll always have a parent\n    /* c8 ignore start */\n    const pl = this.#parent ? this.#parent.#parts.length : 0\n    /* c8 ignore stop */\n    return this.#parentIndex === pl - 1\n  }\n\n  copyIn(part: AST | string) {\n    if (typeof part === 'string') this.push(part)\n    else this.push(part.clone(this))\n  }\n\n  clone(parent: AST) {\n    const c = new AST(this.type, parent)\n    for (const p of this.#parts) {\n      c.copyIn(p)\n    }\n    return c\n  }\n\n  static #parseAST(\n    str: string,\n    ast: AST,\n    pos: number,\n    opt: MinimatchOptions,\n    extDepth: number\n  ): number {\n    const maxDepth = opt.maxExtglobRecursion ?? 2\n    let escaping = false\n    let inBrace = false\n    let braceStart = -1\n    let braceNeg = false\n    if (ast.type === null) {\n      // outside of a extglob, append until we find a start\n      let i = pos\n      let acc = ''\n      while (i < str.length) {\n        const c = str.charAt(i++)\n        // still accumulate escapes at this point, but we do ignore\n        // starts that are escaped\n        if (escaping || c === '\\\\') {\n          escaping = !escaping\n          acc += c\n          continue\n        }\n\n        if (inBrace) {\n          if (i === braceStart + 1) {\n            if (c === '^' || c === '!') {\n              braceNeg = true\n            }\n          } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n            inBrace = false\n          }\n          acc += c\n          continue\n        } else if (c === '[') {\n          inBrace = true\n          braceStart = i\n          braceNeg = false\n          acc += c\n          continue\n        }\n\n        const doRecurse =\n          !opt.noext &&\n          isExtglobType(c) &&\n          str.charAt(i) === '(' &&\n          extDepth <= maxDepth\n        if (doRecurse) {\n          ast.push(acc)\n          acc = ''\n          const ext = new AST(c, ast)\n          i = AST.#parseAST(str, ext, i, opt, extDepth + 1)\n          ast.push(ext)\n          continue\n        }\n        acc += c\n      }\n      ast.push(acc)\n      return i\n    }\n\n    // some kind of extglob, pos is at the (\n    // find the next | or )\n    let i = pos + 1\n    let part = new AST(null, ast)\n    const parts: AST[] = []\n    let acc = ''\n    while (i < str.length) {\n      const c = str.charAt(i++)\n      // still accumulate escapes at this point, but we do ignore\n      // starts that are escaped\n      if (escaping || c === '\\\\') {\n        escaping = !escaping\n        acc += c\n        continue\n      }\n\n      if (inBrace) {\n        if (i === braceStart + 1) {\n          if (c === '^' || c === '!') {\n            braceNeg = true\n          }\n        } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n          inBrace = false\n        }\n        acc += c\n        continue\n      } else if (c === '[') {\n        inBrace = true\n        braceStart = i\n        braceNeg = false\n        acc += c\n        continue\n      }\n\n      const doRecurse =\n        isExtglobType(c) &&\n        str.charAt(i) === '(' &&\n        /* c8 ignore start - the maxDepth is sufficient here */\n        (extDepth <= maxDepth || (ast && ast.#canAdoptType(c)))\n      /* c8 ignore stop */\n      if (doRecurse) {\n        const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1\n        part.push(acc)\n        acc = ''\n        const ext = new AST(c, part)\n        part.push(ext)\n        i = AST.#parseAST(str, ext, i, opt, extDepth + depthAdd)\n        continue\n      }\n      if (c === '|') {\n        part.push(acc)\n        acc = ''\n        parts.push(part)\n        part = new AST(null, ast)\n        continue\n      }\n      if (c === ')') {\n        if (acc === '' && ast.#parts.length === 0) {\n          ast.#emptyExt = true\n        }\n        part.push(acc)\n        acc = ''\n        ast.push(...parts, part)\n        return i\n      }\n      acc += c\n    }\n\n    // unfinished extglob\n    // if we got here, it was a malformed extglob! not an extglob, but\n    // maybe something else in there.\n    ast.type = null\n    ast.#hasMagic = undefined\n    ast.#parts = [str.substring(pos - 1)]\n    return i\n  }\n\n  #canAdoptWithSpace(child?: AST | string): child is AST & {\n    type: null\n    parts: [AST & { type: ExtglobType }]\n  } {\n    return this.#canAdopt(child, adoptionWithSpaceMap)\n  }\n\n  #canAdopt(\n    child?: AST | string,\n    map: Map<ExtglobType, ExtglobType[]> = adoptionMap\n  ): child is AST & {\n    type: null\n    parts: [AST & { type: ExtglobType }]\n  } {\n    if (\n      !child ||\n      typeof child !== 'object' ||\n      child.type !== null ||\n      child.#parts.length !== 1 ||\n      this.type === null\n    ) {\n      return false\n    }\n    const gc = child.#parts[0]\n    if (!gc || typeof gc !== 'object' || gc.type === null) {\n      return false\n    }\n    return (this as AST & { type: ExtglobType }).#canAdoptType(\n      gc.type,\n      map\n    )\n  }\n\n  #canAdoptType(\n    c: string,\n    map: Map<ExtglobType, ExtglobType[]> = adoptionAnyMap\n  ): c is ExtglobType {\n    return !!map.get(this.type as ExtglobType)?.includes(c as ExtglobType)\n  }\n\n  #adoptWithSpace(\n    this: AST & { type: ExtglobType },\n    child: AST & { type: null },\n    index: number\n  ) {\n    const gc = child.#parts[0] as AST & { type: ExtglobType }\n    const blank = new AST(null, gc, this.options)\n    blank.#parts.push('')\n    gc.push(blank)\n    this.#adopt(child, index)\n  }\n\n  #adopt(child: AST & { type: null }, index: number) {\n    const gc = child.#parts[0] as AST & { type: ExtglobType }\n    this.#parts.splice(index, 1, ...gc.#parts)\n    for (const p of gc.#parts) {\n      if (typeof p === 'object') p.#parent = this\n    }\n    this.#toString = undefined\n  }\n\n  #canUsurpType(c: string): boolean {\n    const m = usurpMap.get(this.type as ExtglobType)\n    return !!(m?.has(c as ExtglobType))\n  }\n\n  #canUsurp(child?: AST | string): child is AST & {\n    type: null\n    parts: [AST & { type: ExtglobType }]\n  } {\n    if (\n      !child ||\n      typeof child !== 'object' ||\n      child.type !== null ||\n      child.#parts.length !== 1 ||\n      this.type === null ||\n      this.#parts.length !== 1\n    ) {\n      return false\n    }\n    const gc = child.#parts[0]\n    if (!gc || typeof gc !== 'object' || gc.type === null) {\n      return false\n    }\n    return (this as AST & { type: ExtglobType }).#canUsurpType(gc.type)\n  }\n\n  #usurp(this: AST & { type: ExtglobType }, child: AST & { type: null }) {\n    const m = usurpMap.get(this.type as ExtglobType)\n    const gc = child.#parts[0] as AST & { type: ExtglobType }\n    const nt = m?.get(gc.type)\n    /* c8 ignore start - impossible */\n    if (!nt) return false\n    /* c8 ignore stop */\n    this.#parts = gc.#parts\n    for (const p of this.#parts) {\n      if (typeof p === 'object') p.#parent = this\n    }\n    this.type = nt\n    this.#toString = undefined\n    this.#emptyExt = false\n  }\n\n  #flatten() {\n    if (!isExtglobAST(this)) {\n      for (const p of this.#parts) {\n        if (typeof p === 'object') p.#flatten()\n      }\n    } else {\n      let iterations = 0\n      let done = false\n      do {\n        done = true\n        for (let i = 0; i < this.#parts.length; i++) {\n          const c = this.#parts[i]\n          if (typeof c === 'object') {\n            c.#flatten()\n            if (this.#canAdopt(c)) {\n              done = false\n              this.#adopt(c, i)\n            } else if (this.#canAdoptWithSpace(c)) {\n              done = false\n              this.#adoptWithSpace(c, i)\n            } else if (this.#canUsurp(c)) {\n              done = false\n              this.#usurp(c)\n            }\n          }\n        }\n      } while (!done && ++iterations < 10)\n    }\n    this.#toString = undefined\n  }\n\n  static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n    const ast = new AST(null, undefined, options)\n    AST.#parseAST(pattern, ast, 0, options, 0)\n    return ast\n  }\n\n  // returns the regular expression if there's magic, or the unescaped\n  // string if not.\n  toMMPattern(): MMRegExp | string {\n    // should only be called on root\n    /* c8 ignore start */\n    if (this !== this.#root) return this.#root.toMMPattern()\n    /* c8 ignore stop */\n    const glob = this.toString()\n    const [re, body, hasMagic, uflag] = this.toRegExpSource()\n    // if we're in nocase mode, and not nocaseMagicOnly, then we do\n    // still need a regular expression if we have to case-insensitively\n    // match capital/lowercase characters.\n    const anyMagic =\n      hasMagic ||\n      this.#hasMagic ||\n      (this.#options.nocase &&\n        !this.#options.nocaseMagicOnly &&\n        glob.toUpperCase() !== glob.toLowerCase())\n    if (!anyMagic) {\n      return body\n    }\n\n    const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '')\n    return Object.assign(new RegExp(`^${re}$`, flags), {\n      _src: re,\n      _glob: glob,\n    })\n  }\n\n  get options() {\n    return this.#options\n  }\n\n  // returns the string match, the regexp source, whether there's magic\n  // in the regexp (so a regular expression is required) and whether or\n  // not the uflag is needed for the regular expression (for posix classes)\n  // TODO: instead of injecting the start/end at this point, just return\n  // the BODY of the regexp, along with the start/end portions suitable\n  // for binding the start/end in either a joined full-path makeRe context\n  // (where we bind to (^|/), or a standalone matchPart context (where\n  // we bind to ^, and not /).  Otherwise slashes get duped!\n  //\n  // In part-matching mode, the start is:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n  // - if dots allowed or not possible: ^\n  // - if dots possible and not allowed: ^(?!\\.)\n  // end is:\n  // - if not isEnd(): nothing\n  // - else: $\n  //\n  // In full-path matching mode, we put the slash at the START of the\n  // pattern, so start is:\n  // - if first pattern: same as part-matching mode\n  // - if not isStart(): nothing\n  // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n  // - if dots allowed or not possible: /\n  // - if dots possible and not allowed: /(?!\\.)\n  // end is:\n  // - if last pattern, same as part-matching mode\n  // - else nothing\n  //\n  // Always put the (?:$|/) on negated tails, though, because that has to be\n  // there to bind the end of the negated pattern portion, and it's easier to\n  // just stick it in now rather than try to inject it later in the middle of\n  // the pattern.\n  //\n  // We can just always return the same end, and leave it up to the caller\n  // to know whether it's going to be used joined or in parts.\n  // And, if the start is adjusted slightly, can do the same there:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n  // - if dots allowed or not possible: (?:/|^)\n  // - if dots possible and not allowed: (?:/|^)(?!\\.)\n  //\n  // But it's better to have a simpler binding without a conditional, for\n  // performance, so probably better to return both start options.\n  //\n  // Then the caller just ignores the end if it's not the first pattern,\n  // and the start always gets applied.\n  //\n  // But that's always going to be $ if it's the ending pattern, or nothing,\n  // so the caller can just attach $ at the end of the pattern when building.\n  //\n  // So the todo is:\n  // - better detect what kind of start is needed\n  // - return both flavors of starting pattern\n  // - attach $ at the end of the pattern when creating the actual RegExp\n  //\n  // Ah, but wait, no, that all only applies to the root when the first pattern\n  // is not an extglob. If the first pattern IS an extglob, then we need all\n  // that dot prevention biz to live in the extglob portions, because eg\n  // +(*|.x*) can match .xy but not .yx.\n  //\n  // So, return the two flavors if it's #root and the first child is not an\n  // AST, otherwise leave it to the child AST to handle it, and there,\n  // use the (?:^|/) style of start binding.\n  //\n  // Even simplified further:\n  // - Since the start for a join is eg /(?!\\.) and the start for a part\n  // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n  // or start or whatever) and prepend ^ or / at the Regexp construction.\n  toRegExpSource(\n    allowDot?: boolean\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    const dot = allowDot ?? !!this.#options.dot\n    if (this.#root === this) {\n      this.#flatten()\n      this.#fillNegs()\n    }\n    if (!isExtglobAST(this)) {\n      const noEmpty = this.isStart() && this.isEnd()\n      const src = this.#parts\n        .map(p => {\n          const [re, _, hasMagic, uflag] =\n            typeof p === 'string'\n              ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n              : p.toRegExpSource(allowDot)\n          this.#hasMagic = this.#hasMagic || hasMagic\n          this.#uflag = this.#uflag || uflag\n          return re\n        })\n        .join('')\n\n      let start = ''\n      if (this.isStart()) {\n        if (typeof this.#parts[0] === 'string') {\n          // this is the string that will match the start of the pattern,\n          // so we need to protect against dots and such.\n\n          // '.' and '..' cannot match unless the pattern is that exactly,\n          // even if it starts with . or dot:true is set.\n          const dotTravAllowed =\n            this.#parts.length === 1 && justDots.has(this.#parts[0])\n          if (!dotTravAllowed) {\n            const aps = addPatternStart\n            // check if we have a possibility of matching . or ..,\n            // and prevent that.\n            const needNoTrav =\n              // dots are allowed, and the pattern starts with [ or .\n              (dot && aps.has(src.charAt(0))) ||\n              // the pattern starts with \\., and then [ or .\n              (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n              // the pattern starts with \\.\\., and then [ or .\n              (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)))\n            // no need to prevent dots if it can't match a dot, or if a\n            // sub-pattern will be preventing it anyway.\n            const needNoDot = !dot && !allowDot && aps.has(src.charAt(0))\n\n            start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''\n          }\n        }\n      }\n\n      // append the \"end of path portion\" pattern to negation tails\n      let end = ''\n      if (\n        this.isEnd() &&\n        this.#root.#filledNegs &&\n        this.#parent?.type === '!'\n      ) {\n        end = '(?:$|\\\\/)'\n      }\n      const final = start + src + end\n      return [\n        final,\n        unescape(src),\n        (this.#hasMagic = !!this.#hasMagic),\n        this.#uflag,\n      ]\n    }\n\n    // We need to calculate the body *twice* if it's a repeat pattern\n    // at the start, once in nodot mode, then again in dot mode, so a\n    // pattern like *(?) can match 'x.y'\n\n    const repeated = this.type === '*' || this.type === '+'\n    // some kind of extglob\n    const start = this.type === '!' ? '(?:(?!(?:' : '(?:'\n    let body = this.#partsToRegExp(dot)\n\n    if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n      // invalid extglob, has to at least be *something* present, if it's\n      // the entire path portion.\n      const s = this.toString()\n      const me = this as AST\n      me.#parts = [s]\n      me.type = null\n      me.#hasMagic = undefined\n      return [s, unescape(this.toString()), false, false]\n    }\n\n    // XXX abstract out this map method\n    let bodyDotAllowed =\n      !repeated || allowDot || dot || !startNoDot\n        ? ''\n        : this.#partsToRegExp(true)\n    if (bodyDotAllowed === body) {\n      bodyDotAllowed = ''\n    }\n    if (bodyDotAllowed) {\n      body = `(?:${body})(?:${bodyDotAllowed})*?`\n    }\n\n    // an empty !() is exactly equivalent to a starNoEmpty\n    let final = ''\n    if (this.type === '!' && this.#emptyExt) {\n      final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty\n    } else {\n      const close =\n        this.type === '!'\n          ? // !() must match something,but !(x) can match ''\n            '))' +\n            (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n            star +\n            ')'\n          : this.type === '@'\n          ? ')'\n          : this.type === '?'\n          ? ')?'\n          : this.type === '+' && bodyDotAllowed\n          ? ')'\n          : this.type === '*' && bodyDotAllowed\n          ? `)?`\n          : `)${this.type}`\n      final = start + body + close\n    }\n    return [\n      final,\n      unescape(body),\n      (this.#hasMagic = !!this.#hasMagic),\n      this.#uflag,\n    ]\n  }\n\n  #partsToRegExp(dot: boolean) {\n    return this.#parts\n      .map(p => {\n        // extglob ASTs should only contain parent ASTs\n        /* c8 ignore start */\n        if (typeof p === 'string') {\n          throw new Error('string type in extglob ast??')\n        }\n        /* c8 ignore stop */\n        // can ignore hasMagic, because extglobs are already always magic\n        const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot)\n        this.#uflag = this.#uflag || uflag\n        return re\n      })\n      .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n      .join('|')\n  }\n\n  static #parseGlob(\n    glob: string,\n    hasMagic: boolean | undefined,\n    noEmpty: boolean = false\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    let escaping = false\n    let re = ''\n    let uflag = false\n    // multiple stars that aren't globstars coalesce into one *\n    let inStar = false\n    for (let i = 0; i < glob.length; i++) {\n      const c = glob.charAt(i)\n      if (escaping) {\n        escaping = false\n        re += (reSpecials.has(c) ? '\\\\' : '') + c\n        inStar = false\n        continue\n      }\n      if (c === '\\\\') {\n        if (i === glob.length - 1) {\n          re += '\\\\\\\\'\n        } else {\n          escaping = true\n        }\n        continue\n      }\n      if (c === '[') {\n        const [src, needUflag, consumed, magic] = parseClass(glob, i)\n        if (consumed) {\n          re += src\n          uflag = uflag || needUflag\n          i += consumed - 1\n          hasMagic = hasMagic || magic\n          inStar = false\n          continue\n        }\n      }\n      if (c === '*') {\n        if (inStar) continue\n        inStar = true\n        re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star\n        hasMagic = true\n        continue\n      } else {\n        inStar = false\n      }\n      if (c === '?') {\n        re += qmark\n        hasMagic = true\n        continue\n      }\n      re += regExpEscape(c)\n    }\n    return [re, unescape(glob), !!hasMagic, uflag]\n  }\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  // don't need to escape +@! because we escape the parens\n  // that make those magic, and escaping ! as [!] isn't valid,\n  // because [!]] is a valid glob class meaning not ']'.\n  return windowsPathsNoEscape\n    ? s.replace(/[?*()[\\]]/g, '[$&]')\n    : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n","import expand from 'brace-expansion'\nimport { assertValidPattern } from './assert-valid-pattern.js'\nimport { AST, ExtglobType } from './ast.js'\nimport { escape } from './escape.js'\nimport { unescape } from './unescape.js'\n\ntype Platform =\n  | 'aix'\n  | 'android'\n  | 'darwin'\n  | 'freebsd'\n  | 'haiku'\n  | 'linux'\n  | 'openbsd'\n  | 'sunos'\n  | 'win32'\n  | 'cygwin'\n  | 'netbsd'\n\nexport interface MinimatchOptions {\n  nobrace?: boolean\n  nocomment?: boolean\n  nonegate?: boolean\n  debug?: boolean\n  noglobstar?: boolean\n  noext?: boolean\n  nonull?: boolean\n  windowsPathsNoEscape?: boolean\n  allowWindowsEscape?: boolean\n  partial?: boolean\n  dot?: boolean\n  nocase?: boolean\n  nocaseMagicOnly?: boolean\n  magicalBraces?: boolean\n  matchBase?: boolean\n  flipNegate?: boolean\n  preserveMultipleSlashes?: boolean\n  optimizationLevel?: number\n  platform?: Platform\n  windowsNoMagicRoot?: boolean\n  maxGlobstarRecursion?: number\n  maxExtglobRecursion?: number\n}\n\nexport const minimatch = (\n  p: string,\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/\nconst starDotExtTest = (ext: string) => (f: string) =>\n  !f.startsWith('.') && f.endsWith(ext)\nconst starDotExtTestDot = (ext: string) => (f: string) => f.endsWith(ext)\nconst starDotExtTestNocase = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => !f.startsWith('.') && f.toLowerCase().endsWith(ext)\n}\nconst starDotExtTestNocaseDot = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => f.toLowerCase().endsWith(ext)\n}\nconst starDotStarRE = /^\\*+\\.\\*+$/\nconst starDotStarTest = (f: string) => !f.startsWith('.') && f.includes('.')\nconst starDotStarTestDot = (f: string) =>\n  f !== '.' && f !== '..' && f.includes('.')\nconst dotStarRE = /^\\.\\*+$/\nconst dotStarTest = (f: string) => f !== '.' && f !== '..' && f.startsWith('.')\nconst starRE = /^\\*+$/\nconst starTest = (f: string) => f.length !== 0 && !f.startsWith('.')\nconst starTestDot = (f: string) => f.length !== 0 && f !== '.' && f !== '..'\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/\nconst qmarksTestNocase = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestNocaseDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTest = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTestNoExt = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && !f.startsWith('.')\n}\nconst qmarksTestNoExtDot = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && f !== '.' && f !== '..'\n}\n\n/* c8 ignore start */\nconst defaultPlatform: Platform = (\n  typeof process === 'object' && process\n    ? (typeof process.env === 'object' &&\n        process.env &&\n        process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n      process.platform\n    : 'posix'\n) as Platform\ntype Sep = '\\\\' | '/'\nconst path: { [k: string]: { sep: Sep } } = {\n  win32: { sep: '\\\\' },\n  posix: { sep: '/' },\n}\n/* c8 ignore stop */\n\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep\nminimatch.sep = sep\n\nexport const GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?'\n\nexport const filter =\n  (pattern: string, options: MinimatchOptions = {}) =>\n  (p: string) =>\n    minimatch(p, pattern, options)\nminimatch.filter = filter\n\nconst ext = (a: MinimatchOptions, b: MinimatchOptions = {}) =>\n  Object.assign({}, a, b)\n\nexport const defaults = (def: MinimatchOptions): typeof minimatch => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p: string, pattern: string, options: MinimatchOptions = {}) =>\n    orig(p, pattern, ext(def, options))\n\n  return Object.assign(m, {\n    Minimatch: class Minimatch extends orig.Minimatch {\n      constructor(pattern: string, options: MinimatchOptions = {}) {\n        super(pattern, ext(def, options))\n      }\n      static defaults(options: MinimatchOptions) {\n        return orig.defaults(ext(def, options)).Minimatch\n      }\n    },\n\n    AST: class AST extends orig.AST {\n      /* c8 ignore start */\n      constructor(\n        type: ExtglobType | null,\n        parent?: AST,\n        options: MinimatchOptions = {}\n      ) {\n        super(type, parent, ext(def, options))\n      }\n      /* c8 ignore stop */\n\n      static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n        return orig.AST.fromGlob(pattern, ext(def, options))\n      }\n    },\n\n    unescape: (\n      s: string,\n      options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n    ) => orig.unescape(s, ext(def, options)),\n\n    escape: (\n      s: string,\n      options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n    ) => orig.escape(s, ext(def, options)),\n\n    filter: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.filter(pattern, ext(def, options)),\n\n    defaults: (options: MinimatchOptions) => orig.defaults(ext(def, options)),\n\n    makeRe: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.makeRe(pattern, ext(def, options)),\n\n    braceExpand: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.braceExpand(pattern, ext(def, options)),\n\n    match: (list: string[], pattern: string, options: MinimatchOptions = {}) =>\n      orig.match(list, pattern, ext(def, options)),\n\n    sep: orig.sep,\n    GLOBSTAR: GLOBSTAR as typeof GLOBSTAR,\n  })\n}\nminimatch.defaults = defaults\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\nminimatch.braceExpand = braceExpand\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\nexport const makeRe = (pattern: string, options: MinimatchOptions = {}) =>\n  new Minimatch(pattern, options).makeRe()\nminimatch.makeRe = makeRe\n\nexport const match = (\n  list: string[],\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\nminimatch.match = match\n\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\nexport type MMRegExp = RegExp & {\n  _src?: string\n  _glob?: string\n}\n\nexport type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR\nexport type ParseReturn = ParseReturnFiltered | false\n\nexport class Minimatch {\n  options: MinimatchOptions\n  set: ParseReturnFiltered[][]\n  pattern: string\n\n  windowsPathsNoEscape: boolean\n  nonegate: boolean\n  negate: boolean\n  comment: boolean\n  empty: boolean\n  preserveMultipleSlashes: boolean\n  partial: boolean\n  globSet: string[]\n  globParts: string[][]\n  nocase: boolean\n\n  isWindows: boolean\n  platform: Platform\n  windowsNoMagicRoot: boolean\n  maxGlobstarRecursion: number\n\n  regexp: false | null | MMRegExp\n  constructor(pattern: string, options: MinimatchOptions = {}) {\n    assertValidPattern(pattern)\n\n    options = options || {}\n    this.options = options\n    this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200\n    this.pattern = pattern\n    this.platform = options.platform || defaultPlatform\n    this.isWindows = this.platform === 'win32'\n    this.windowsPathsNoEscape =\n      !!options.windowsPathsNoEscape || options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.preserveMultipleSlashes = !!options.preserveMultipleSlashes\n    this.regexp = null\n    this.negate = false\n    this.nonegate = !!options.nonegate\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n    this.nocase = !!this.options.nocase\n    this.windowsNoMagicRoot =\n      options.windowsNoMagicRoot !== undefined\n        ? options.windowsNoMagicRoot\n        : !!(this.isWindows && this.nocase)\n\n    this.globSet = []\n    this.globParts = []\n    this.set = []\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  hasMagic(): boolean {\n    if (this.options.magicalBraces && this.set.length > 1) {\n      return true\n    }\n    for (const pattern of this.set) {\n      for (const part of pattern) {\n        if (typeof part !== 'string') return true\n      }\n    }\n    return false\n  }\n\n  debug(..._: any[]) {}\n\n  make() {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    this.globSet = [...new Set<string>(this.braceExpand())]\n\n    if (options.debug) {\n      this.debug = (...args: any[]) => console.error(...args)\n    }\n\n    this.debug(this.pattern, this.globSet)\n\n    // step 3: now we have a set, so turn each one into a series of\n    // path-portion matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    //\n    // First, we preprocess to make the glob pattern sets a bit simpler\n    // and deduped.  There are some perf-killing patterns that can cause\n    // problems with a glob walk, but we can simplify them down a bit.\n    const rawGlobParts = this.globSet.map(s => this.slashSplit(s))\n    this.globParts = this.preprocess(rawGlobParts)\n    this.debug(this.pattern, this.globParts)\n\n    // glob --> regexps\n    let set = this.globParts.map((s, _, __) => {\n      if (this.isWindows && this.windowsNoMagicRoot) {\n        // check if it's a drive or unc path.\n        const isUNC =\n          s[0] === '' &&\n          s[1] === '' &&\n          (s[2] === '?' || !globMagic.test(s[2])) &&\n          !globMagic.test(s[3])\n        const isDrive = /^[a-z]:/i.test(s[0])\n        if (isUNC) {\n          return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]\n        } else if (isDrive) {\n          return [s[0], ...s.slice(1).map(ss => this.parse(ss))]\n        }\n      }\n      return s.map(ss => this.parse(ss))\n    })\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    this.set = set.filter(\n      s => s.indexOf(false) === -1\n    ) as ParseReturnFiltered[][]\n\n    // do not treat the ? in UNC paths as magic\n    if (this.isWindows) {\n      for (let i = 0; i < this.set.length; i++) {\n        const p = this.set[i]\n        if (\n          p[0] === '' &&\n          p[1] === '' &&\n          this.globParts[i][2] === '?' &&\n          typeof p[3] === 'string' &&\n          /^[a-z]:$/i.test(p[3])\n        ) {\n          p[2] = '?'\n        }\n      }\n    }\n\n    this.debug(this.pattern, this.set)\n  }\n\n  // various transforms to equivalent pattern sets that are\n  // faster to process in a filesystem walk.  The goal is to\n  // eliminate what we can, and push all ** patterns as far\n  // to the right as possible, even if it increases the number\n  // of patterns that we have to process.\n  preprocess(globParts: string[][]) {\n    // if we're not in globstar mode, then turn all ** into *\n    if (this.options.noglobstar) {\n      for (let i = 0; i < globParts.length; i++) {\n        for (let j = 0; j < globParts[i].length; j++) {\n          if (globParts[i][j] === '**') {\n            globParts[i][j] = '*'\n          }\n        }\n      }\n    }\n\n    const { optimizationLevel = 1 } = this.options\n\n    if (optimizationLevel >= 2) {\n      // aggressive optimization for the purpose of fs walking\n      globParts = this.firstPhasePreProcess(globParts)\n      globParts = this.secondPhasePreProcess(globParts)\n    } else if (optimizationLevel >= 1) {\n      // just basic optimizations to remove some .. parts\n      globParts = this.levelOneOptimize(globParts)\n    } else {\n      // just collapse multiple ** portions into one\n      globParts = this.adjascentGlobstarOptimize(globParts)\n    }\n\n    return globParts\n  }\n\n  // just get rid of adjascent ** portions\n  adjascentGlobstarOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      let gs: number = -1\n      while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n        let i = gs\n        while (parts[i + 1] === '**') {\n          i++\n        }\n        if (i !== gs) {\n          parts.splice(gs, i - gs)\n        }\n      }\n      return parts\n    })\n  }\n\n  // get rid of adjascent ** and resolve .. portions\n  levelOneOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      parts = parts.reduce((set: string[], part) => {\n        const prev = set[set.length - 1]\n        if (part === '**' && prev === '**') {\n          return set\n        }\n        if (part === '..') {\n          if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n            set.pop()\n            return set\n          }\n        }\n        set.push(part)\n        return set\n      }, [])\n      return parts.length === 0 ? [''] : parts\n    })\n  }\n\n  levelTwoFileOptimize(parts: string | string[]) {\n    if (!Array.isArray(parts)) {\n      parts = this.slashSplit(parts)\n    }\n    let didSomething: boolean = false\n    do {\n      didSomething = false\n      // <pre>/<e>/<rest> -> <pre>/<rest>\n      if (!this.preserveMultipleSlashes) {\n        for (let i = 1; i < parts.length - 1; i++) {\n          const p = parts[i]\n          // don't squeeze out UNC patterns\n          if (i === 1 && p === '' && parts[0] === '') continue\n          if (p === '.' || p === '') {\n            didSomething = true\n            parts.splice(i, 1)\n            i--\n          }\n        }\n        if (\n          parts[0] === '.' &&\n          parts.length === 2 &&\n          (parts[1] === '.' || parts[1] === '')\n        ) {\n          didSomething = true\n          parts.pop()\n        }\n      }\n\n      // <pre>/<p>/../<rest> -> <pre>/<rest>\n      let dd: number = 0\n      while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n        const p = parts[dd - 1]\n        if (p && p !== '.' && p !== '..' && p !== '**') {\n          didSomething = true\n          parts.splice(dd - 1, 2)\n          dd -= 2\n        }\n      }\n    } while (didSomething)\n    return parts.length === 0 ? [''] : parts\n  }\n\n  // First phase: single-pattern processing\n  // <pre> is 1 or more portions\n  // <rest> is 1 or more portions\n  // <p> is any portion other than ., .., '', or **\n  // <e> is . or ''\n  //\n  // **/.. is *brutal* for filesystem walking performance, because\n  // it effectively resets the recursive walk each time it occurs,\n  // and ** cannot be reduced out by a .. pattern part like a regexp\n  // or most strings (other than .., ., and '') can be.\n  //\n  // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n  // <pre>/<e>/<rest> -> <pre>/<rest>\n  // <pre>/<p>/../<rest> -> <pre>/<rest>\n  // **/**/<rest> -> **/<rest>\n  //\n  // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n  // this WOULD be allowed if ** did follow symlinks, or * didn't\n  firstPhasePreProcess(globParts: string[][]) {\n    let didSomething = false\n    do {\n      didSomething = false\n      // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n      for (let parts of globParts) {\n        let gs: number = -1\n        while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n          let gss: number = gs\n          while (parts[gss + 1] === '**') {\n            // <pre>/**/**/<rest> -> <pre>/**/<rest>\n            gss++\n          }\n          // eg, if gs is 2 and gss is 4, that means we have 3 **\n          // parts, and can remove 2 of them.\n          if (gss > gs) {\n            parts.splice(gs + 1, gss - gs)\n          }\n\n          let next = parts[gs + 1]\n          const p = parts[gs + 2]\n          const p2 = parts[gs + 3]\n          if (next !== '..') continue\n          if (\n            !p ||\n            p === '.' ||\n            p === '..' ||\n            !p2 ||\n            p2 === '.' ||\n            p2 === '..'\n          ) {\n            continue\n          }\n          didSomething = true\n          // edit parts in place, and push the new one\n          parts.splice(gs, 1)\n          const other = parts.slice(0)\n          other[gs] = '**'\n          globParts.push(other)\n          gs--\n        }\n\n        // <pre>/<e>/<rest> -> <pre>/<rest>\n        if (!this.preserveMultipleSlashes) {\n          for (let i = 1; i < parts.length - 1; i++) {\n            const p = parts[i]\n            // don't squeeze out UNC patterns\n            if (i === 1 && p === '' && parts[0] === '') continue\n            if (p === '.' || p === '') {\n              didSomething = true\n              parts.splice(i, 1)\n              i--\n            }\n          }\n          if (\n            parts[0] === '.' &&\n            parts.length === 2 &&\n            (parts[1] === '.' || parts[1] === '')\n          ) {\n            didSomething = true\n            parts.pop()\n          }\n        }\n\n        // <pre>/<p>/../<rest> -> <pre>/<rest>\n        let dd: number = 0\n        while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n          const p = parts[dd - 1]\n          if (p && p !== '.' && p !== '..' && p !== '**') {\n            didSomething = true\n            const needDot = dd === 1 && parts[dd + 1] === '**'\n            const splin = needDot ? ['.'] : []\n            parts.splice(dd - 1, 2, ...splin)\n            if (parts.length === 0) parts.push('')\n            dd -= 2\n          }\n        }\n      }\n    } while (didSomething)\n\n    return globParts\n  }\n\n  // second phase: multi-pattern dedupes\n  // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n  // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n  // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n  //\n  // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n  // ^-- not valid because ** doens't follow symlinks\n  secondPhasePreProcess(globParts: string[][]): string[][] {\n    for (let i = 0; i < globParts.length - 1; i++) {\n      for (let j = i + 1; j < globParts.length; j++) {\n        const matched = this.partsMatch(\n          globParts[i],\n          globParts[j],\n          !this.preserveMultipleSlashes\n        )\n        if (matched) {\n          globParts[i] = []\n          globParts[j] = matched\n          break\n        }\n      }\n    }\n    return globParts.filter(gs => gs.length)\n  }\n\n  partsMatch(\n    a: string[],\n    b: string[],\n    emptyGSMatch: boolean = false\n  ): false | string[] {\n    let ai = 0\n    let bi = 0\n    let result: string[] = []\n    let which: string = ''\n    while (ai < a.length && bi < b.length) {\n      if (a[ai] === b[bi]) {\n        result.push(which === 'b' ? b[bi] : a[ai])\n        ai++\n        bi++\n      } else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n        result.push(a[ai])\n        ai++\n      } else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n        result.push(b[bi])\n        bi++\n      } else if (\n        a[ai] === '*' &&\n        b[bi] &&\n        (this.options.dot || !b[bi].startsWith('.')) &&\n        b[bi] !== '**'\n      ) {\n        if (which === 'b') return false\n        which = 'a'\n        result.push(a[ai])\n        ai++\n        bi++\n      } else if (\n        b[bi] === '*' &&\n        a[ai] &&\n        (this.options.dot || !a[ai].startsWith('.')) &&\n        a[ai] !== '**'\n      ) {\n        if (which === 'a') return false\n        which = 'b'\n        result.push(b[bi])\n        ai++\n        bi++\n      } else {\n        return false\n      }\n    }\n    // if we fall out of the loop, it means they two are identical\n    // as long as their lengths match\n    return a.length === b.length && result\n  }\n\n  parseNegate() {\n    if (this.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne(\n    file: string[],\n    pattern: ParseReturn[],\n    partial: boolean = false\n  ) {\n    let fileStartIndex = 0\n    let patternStartIndex = 0\n\n    // UNC paths like //?/X:/... can match X:/... and vice versa\n    // Drive letters in absolute drive or unc paths are always compared\n    // case-insensitively.\n    if (this.isWindows) {\n      const fileDrive =\n        typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0])\n      const fileUNC =\n        !fileDrive &&\n        file[0] === '' &&\n        file[1] === '' &&\n        file[2] === '?' &&\n        /^[a-z]:$/i.test(file[3])\n\n      const patternDrive =\n        typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0])\n      const patternUNC =\n        !patternDrive &&\n        pattern[0] === '' &&\n        pattern[1] === '' &&\n        pattern[2] === '?' &&\n        typeof pattern[3] === 'string' &&\n        /^[a-z]:$/i.test(pattern[3])\n\n      const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined\n      const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined\n      if (typeof fdi === 'number' && typeof pdi === 'number') {\n        const [fd, pd]: [string, string] = [\n          file[fdi],\n          pattern[pdi] as string,\n        ]\n        if (fd.toLowerCase() === pd.toLowerCase()) {\n          pattern[pdi] = fd\n          patternStartIndex = pdi\n          fileStartIndex = fdi\n        }\n      }\n    }\n\n    // resolve and reduce . and .. portions in the file as well.\n    // dont' need to do the second phase, because it's only one string[]\n    const { optimizationLevel = 1 } = this.options\n    if (optimizationLevel >= 2) {\n      file = this.levelTwoFileOptimize(file)\n    }\n\n    if (pattern.includes(GLOBSTAR)) {\n      return this.#matchGlobstar(\n        file, pattern, partial, fileStartIndex, patternStartIndex\n      )\n    }\n\n    return this.#matchOne(\n      file, pattern, partial, fileStartIndex, patternStartIndex\n    )\n  }\n\n  #matchGlobstar(\n    file: string[],\n    pattern: ParseReturn[],\n    partial: boolean,\n    fileIndex: number,\n    patternIndex: number\n  ) {\n    const firstgs = pattern.indexOf(GLOBSTAR, patternIndex)\n    const lastgs = pattern.lastIndexOf(GLOBSTAR)\n\n    const [head, body, tail] = partial ? [\n      pattern.slice(patternIndex, firstgs),\n      pattern.slice(firstgs + 1),\n      [],\n    ] : [\n      pattern.slice(patternIndex, firstgs),\n      pattern.slice(firstgs + 1, lastgs),\n      pattern.slice(lastgs + 1),\n    ]\n\n    if (head.length) {\n      const fileHead = file.slice(fileIndex, fileIndex + head.length)\n      if (!this.#matchOne(fileHead, head, partial, 0, 0)) return false\n      fileIndex += head.length\n    }\n\n    let fileTailMatch: number = 0\n    if (tail.length) {\n      if (tail.length + fileIndex > file.length) return false\n      let tailStart = file.length - tail.length\n      if (this.#matchOne(file, tail, partial, tailStart, 0)) {\n        fileTailMatch = tail.length\n      } else {\n        if (\n          file[file.length - 1] !== '' ||\n          fileIndex + tail.length === file.length\n        ) {\n          return false\n        }\n        tailStart--\n        if (!this.#matchOne(file, tail, partial, tailStart, 0)) return false\n        fileTailMatch = tail.length + 1\n      }\n    }\n\n    if (!body.length) {\n      let sawSome = !!fileTailMatch\n      for (let i = fileIndex; i < file.length - fileTailMatch; i++) {\n        const f = String(file[i])\n        sawSome = true\n        if (\n          f === '.' || f === '..' ||\n          (!this.options.dot && f.startsWith('.'))\n        ) {\n          return false\n        }\n      }\n      return partial || sawSome\n    }\n\n    const bodySegments: [ParseReturn[], number][] = [[[], 0]]\n    let currentBody: [ParseReturn[], number] = bodySegments[0]\n    let nonGsParts = 0\n    const nonGsPartsSums: number[] = [0]\n    for (const b of body) {\n      if (b === GLOBSTAR) {\n        nonGsPartsSums.push(nonGsParts)\n        currentBody = [[], 0]\n        bodySegments.push(currentBody)\n      } else {\n        currentBody[0].push(b)\n        nonGsParts++\n      }\n    }\n    let i = bodySegments.length - 1\n    const fileLength = file.length - fileTailMatch\n    for (const b of bodySegments) {\n      b[1] = fileLength - ((nonGsPartsSums[i--] as number) + b[0].length)\n    }\n\n    return !!this.#matchGlobStarBodySections(\n      file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n    )\n  }\n\n  #matchGlobStarBodySections(\n    file: string[],\n    bodySegments: [ParseReturn[], number][],\n    fileIndex: number,\n    bodyIndex: number,\n    partial: boolean,\n    globStarDepth: number,\n    sawTail: boolean\n  ): boolean | null {\n    const bs = bodySegments[bodyIndex]\n    if (!bs) {\n      for (let i = fileIndex; i < file.length; i++) {\n        sawTail = true\n        const f = file[i]\n        if (\n          f === '.' || f === '..' ||\n          (!this.options.dot && f.startsWith('.'))\n        ) {\n          return false\n        }\n      }\n      return sawTail\n    }\n\n    const [body, after] = bs\n    while (fileIndex <= after) {\n      const m = this.#matchOne(\n        file.slice(0, fileIndex + body.length),\n        body, partial, fileIndex, 0\n      )\n      if (m && globStarDepth < this.maxGlobstarRecursion) {\n        const sub = this.#matchGlobStarBodySections(\n          file, bodySegments, fileIndex + body.length,\n          bodyIndex + 1, partial, globStarDepth + 1, sawTail\n        )\n        if (sub !== false) return sub\n      }\n      const f = file[fileIndex]\n      if (\n        f === '.' || f === '..' ||\n        (!this.options.dot && f.startsWith('.'))\n      ) {\n        return false\n      }\n      fileIndex++\n    }\n    return partial || null\n  }\n\n  #matchOne(\n    file: string[],\n    pattern: ParseReturn[],\n    partial: boolean,\n    fileIndex: number,\n    patternIndex: number\n  ) {\n    let fi: number\n    let pi: number\n    let pl: number\n    let fl: number\n    for (\n      fi = fileIndex, pi = patternIndex,\n        fl = file.length, pl = pattern.length;\n      fi < fl && pi < pl;\n      fi++, pi++\n    ) {\n      this.debug('matchOne loop')\n      let p = pattern[pi]\n      let f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      /* c8 ignore start */\n      if (p === false || p === GLOBSTAR) return false\n      /* c8 ignore stop */\n\n      let hit: boolean\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = p.test(f)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    if (fi === fl && pi === pl) {\n      return true\n    } else if (fi === fl) {\n      return partial\n    } else if (pi === pl) {\n      return fi === fl - 1 && file[fi] === ''\n      /* c8 ignore start */\n    } else {\n      throw new Error('wtf?')\n    }\n    /* c8 ignore stop */\n  }\n\n  braceExpand(): string[] {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse(pattern: string): ParseReturn {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') return GLOBSTAR\n    if (pattern === '') return ''\n\n    // far and away, the most common glob pattern parts are\n    // *, *.*, and *.<ext>  Add a fast check method for those.\n    let m: RegExpMatchArray | null\n    let fastTest: null | ((f: string) => boolean) = null\n    if ((m = pattern.match(starRE))) {\n      fastTest = options.dot ? starTestDot : starTest\n    } else if ((m = pattern.match(starDotExtRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? starDotExtTestNocaseDot\n            : starDotExtTestNocase\n          : options.dot\n          ? starDotExtTestDot\n          : starDotExtTest\n      )(m[1])\n    } else if ((m = pattern.match(qmarksRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? qmarksTestNocaseDot\n            : qmarksTestNocase\n          : options.dot\n          ? qmarksTestDot\n          : qmarksTest\n      )(m)\n    } else if ((m = pattern.match(starDotStarRE))) {\n      fastTest = options.dot ? starDotStarTestDot : starDotStarTest\n    } else if ((m = pattern.match(dotStarRE))) {\n      fastTest = dotStarTest\n    }\n\n    const re = AST.fromGlob(pattern, this.options).toMMPattern()\n    if (fastTest && typeof re === 'object') {\n      // Avoids overriding in frozen environments\n      Reflect.defineProperty(re, 'test', { value: fastTest })\n    }\n    return re\n  }\n\n  makeRe() {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar\n      ? star\n      : options.dot\n      ? twoStarDot\n      : twoStarNoDot\n    const flags = new Set(options.nocase ? ['i'] : [])\n\n    // regexpify non-globstar patterns\n    // if ** is only item, then we just do one twoStar\n    // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if ** is last, append (\\/twoStar|) to previous\n    // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set\n      .map(pattern => {\n        const pp: (string | typeof GLOBSTAR)[] = pattern.map(p => {\n          if (p instanceof RegExp) {\n            for (const f of p.flags.split('')) flags.add(f)\n          }\n          return typeof p === 'string'\n            ? regExpEscape(p)\n            : p === GLOBSTAR\n            ? GLOBSTAR\n            : p._src\n        }) as (string | typeof GLOBSTAR)[]\n        pp.forEach((p, i) => {\n          const next = pp[i + 1]\n          const prev = pp[i - 1]\n          if (p !== GLOBSTAR || prev === GLOBSTAR) {\n            return\n          }\n          if (prev === undefined) {\n            if (next !== undefined && next !== GLOBSTAR) {\n              pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next\n            } else {\n              pp[i] = twoStar\n            }\n          } else if (next === undefined) {\n            pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?'\n          } else if (next !== GLOBSTAR) {\n            pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next\n            pp[i + 1] = GLOBSTAR\n          }\n        })\n        return pp.filter(p => p !== GLOBSTAR).join('/')\n      })\n      .join('|')\n\n    // need to wrap in parens if we had more than one thing with |,\n    // otherwise only the first will be anchored to ^ and the last to $\n    const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^' + open + re + close + '$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').+$'\n\n    try {\n      this.regexp = new RegExp(re, [...flags].join(''))\n      /* c8 ignore start */\n    } catch (ex) {\n      // should be impossible\n      this.regexp = false\n    }\n    /* c8 ignore stop */\n    return this.regexp\n  }\n\n  slashSplit(p: string) {\n    // if p starts with // on windows, we preserve that\n    // so that UNC paths aren't broken.  Otherwise, any number of\n    // / characters are coalesced into one, unless\n    // preserveMultipleSlashes is set to true.\n    if (this.preserveMultipleSlashes) {\n      return p.split('/')\n    } else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n      // add an extra '' for the one we lose\n      return ['', ...p.split(/\\/+/)]\n    } else {\n      return p.split(/\\/+/)\n    }\n  }\n\n  match(f: string, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) {\n      return false\n    }\n    if (this.empty) {\n      return f === ''\n    }\n\n    if (f === '/' && partial) {\n      return true\n    }\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (this.isWindows) {\n      f = f.split('\\\\').join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    const ff = this.slashSplit(f)\n    this.debug(this.pattern, 'split', ff)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename: string = ff[ff.length - 1]\n    if (!filename) {\n      for (let i = ff.length - 2; !filename && i >= 0; i--) {\n        filename = ff[i]\n      }\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = ff\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) {\n          return true\n        }\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) {\n      return false\n    }\n    return this.negate\n  }\n\n  static defaults(def: MinimatchOptions) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js'\nexport { escape } from './escape.js'\nexport { unescape } from './unescape.js'\n/* c8 ignore stop */\nminimatch.AST = AST\nminimatch.Minimatch = Minimatch\nminimatch.escape = escape\nminimatch.unescape = unescape\n","/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set<string>()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array<number> {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch<V> = Promise<V | undefined> & {\n  __returned: BackgroundFetch<V> | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask<K, V> = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   *\n   * - `evict`: The item was evicted because it is the least recently used,\n   *   and the cache is full.\n   * - `set`: A new value was set, overwriting the old value being disposed.\n   * - `delete`: The item was explicitly deleted, either by calling\n   *   {@link LRUCache#delete}, {@link LRUCache#clear}, or\n   *   {@link LRUCache#set} with an undefined value.\n   * - `expire`: The item was removed due to exceeding its TTL.\n   * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n   *   `undefined` or was aborted, causing the item to be deleted.\n   */\n  export type DisposeReason =\n    | 'evict'\n    | 'set'\n    | 'delete'\n    | 'expire'\n    | 'fetch'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer<K, V> = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator<K, V> = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions<K, V, FC = unknown> {\n    signal: AbortSignal\n    options: FetcherFetchOptions<K, V, FC>\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Occasionally, it may be useful to track the internal behavior of the\n   * cache, particularly for logging, debugging, or for behavior within the\n   * `fetchMethod`. To do this, you can pass a `status` object to the\n   * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n   * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n   *\n   * The `status` option should be a plain JavaScript object. The following\n   * fields will be set on it appropriately, depending on the situation.\n   */\n  export interface Status<V> {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no {@link OptionsBase.fetchMethod}, so\n     *   {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link FetcherOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status<V>\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions<K, V, FC>\n    extends FetcherFetchOptions<K, V, FC> {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status<V>\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext<K, V, FC>\n    extends FetchOptions<K, V, FC> {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext<K, V>\n    extends FetchOptions<K, V, undefined> {\n    context?: undefined\n  }\n\n  export interface MemoOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.memoMethod} as\n     * the {@link MemoizerOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    status?: Status<V>\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface MemoOptionsWithContext<K, V, FC>\n    extends MemoOptions<K, V, FC> {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface MemoOptionsNoContext<K, V>\n    extends MemoOptions<K, V, undefined> {\n    context?: undefined\n  }\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.memoMethod} function.\n   */\n  export interface MemoizerOptions<K, V, FC = unknown> {\n    options: MemoizerMemoOptions<K, V, FC>\n    /**\n     * Object provided in the {@link MemoOptions.context} option to\n     * {@link LRUCache#memo}\n     */\n    context: FC\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#memo}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link MemoOptions.forceRefresh}, and\n   * {@link MemoerOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.memoMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the memoMethod is called.\n   */\n  export interface MemoizerMemoOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n    > {\n    status?: Status<V>\n    size?: Size\n    start?: Milliseconds\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'updateAgeOnHas'> {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status<V>\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher<K, V, FC = unknown> = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions<K, V, FC>\n  ) => Promise<V | undefined | void> | V | undefined | void\n\n  /**\n   * the type signature for the {@link OptionsBase.memoMethod} option.\n   */\n  export type Memoizer<K, V, FC = unknown> = (\n    key: K,\n    staleValue: V | undefined,\n    options: MemoizerOptions<K, V, FC>\n  ) => V\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   *\n   * All options are also available on the {@link LRUCache} instance, making\n   * it safe to pass an LRUCache instance as the options argumemnt to\n   * make another empty cache of the same type.\n   *\n   * Some options are marked as read-only, because changing them after\n   * instantiation is not safe. Changing any of the other options will of\n   * course only have an effect on subsequent method calls.\n   */\n  export interface OptionsBase<K, V, FC> {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     *\n     * **It is strongly recommended to set a `max` to prevent unbounded growth\n     * of the cache.**\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed by\n     * default, and MAY live in the cache, contributing to its LRU max, long\n     * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n     * set.\n     *\n     * If set to `0` (the default value), then that means \"do not track\n     * TTL\", not \"expire immediately\".\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * This is not primarily a TTL cache, and does not make strong TTL\n     * guarantees. There is no pre-emptive pruning of expired items, but you\n     * _may_ set a TTL on the cache, and it will treat expired items as missing\n     * when they are fetched, and delete them.\n     *\n     * Optional, but must be a non-negative integer in ms if specified.\n     *\n     * This may be overridden by passing an options object to `cache.set()`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if ttl tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n     * and `ttlAutopurge` is not set, then a warning will be emitted\n     * cautioning about the potential for unbounded memory consumption.\n     * (The TypeScript definitions will also discourage this.)\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     *\n     * Note that this may *significantly* degrade performance, especially if\n     * the cache is storing a large number of items. It is almost always best\n     * to just leave the stale items in the cache, and let them fall out as new\n     * items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * Use with caution!\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever it is retrieved from cache with\n     * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n     * of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever its presence in the cache is\n     * checked with {@link LRUCache#has}, causing it to not expire. (It can\n     * still fall out of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     *\n     * By default, if you set `ttl`, stale items will only be deleted from the\n     * cache when you `get(key)`. That is, it's not preemptively pruning items,\n     * unless {@link OptionsBase.ttlAutopurge} is set.\n     *\n     * If you set `allowStale:true`, it'll return the stale value *as well as*\n     * deleting it. If you don't set this, then it'll return `undefined` when\n     * you try to get a stale entry.\n     *\n     * Note that when a stale entry is fetched, _even if it is returned due to\n     * `allowStale` being set_, it is removed from the cache immediately. You\n     * can suppress this behavior by setting\n     * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n     * the options provided to {@link LRUCache#get}.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     * The `cache.has()` method will always return `false` for stale items.\n     *\n     * Only relevant if a ttl is set.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the\n     * cache, as `dispose(value, key, reason)`.\n     *\n     * This can be handy if you want to close file descriptors or do\n     * other cleanup tasks when items are no longer stored in the cache.\n     *\n     * **NOTE**: It is called _before_ the item has been fully removed\n     * from the cache, so if you want to put it right back in, you need\n     * to wait until the next tick. If you try to add it back in during\n     * the `dispose()` function call, it will break things in subtle and\n     * weird ways.\n     *\n     * Unlike several other options, this may _not_ be overridden by\n     * passing an option to `set()`, for performance reasons.\n     *\n     * The `reason` will be one of the following strings, corresponding\n     * to the reason for the item's deletion:\n     *\n     * - `evict` Item was evicted to make space for a new addition\n     * - `set` Item was overwritten by a new value\n     * - `expire` Item expired its TTL\n     * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n     *   fetchMethod returning `undefined.\n     * - `delete` Item was removed by explicit `cache.delete(key)`,\n     *   `cache.clear()`, or `cache.set(key, undefined)`.\n     */\n    dispose?: Disposer<K, V>\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     *\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer<K, V>\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     *\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     *\n     * Only relevant if `dispose` or `disposeAfter` are set.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when setting a new\n     * value for an existing key (ie, when updating a value rather than\n     * inserting a new value).  Note that the TTL value is _always_ set (if\n     * provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     *\n     * May be passed as an option to {@link LRUCache#set}.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Set to a positive integer to track the sizes of items added to the\n     * cache, and automatically evict items in order to stay below this size.\n     * Note that this may result in fewer than `max` items being stored.\n     *\n     * Attempting to add an item to the cache whose calculated size is greater\n     * that this amount will be a no-op. The item will not be cached, and no\n     * other items will be evicted.\n     *\n     * Optional, must be a positive integer if provided.\n     *\n     * Sets `maxEntrySize` to the same value, unless a different value is\n     * provided for `maxEntrySize`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if size tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n     * it will not be stored in the cache.\n     *\n     * Attempting to add an item whose calculated size is greater than\n     * this amount will not cache the item or evict any old items, but\n     * WILL delete an existing value if one is already present.\n     *\n     * Optional, must be a positive integer if provided. Defaults to\n     * the value of `maxSize` if provided.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * Requires {@link OptionsBase.maxSize} to be set.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     *\n     * ```ts\n     * fetchMethod(key, staleValue, { signal, options, context })\n     * ```\n     *\n     * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n     * to `Promise.resolve(cache.get(key))`.\n     *\n     * If at any time, `signal.aborted` is set to `true`, or if the\n     * `signal.onabort` method is called, or if it emits an `'abort'` event\n     * which you can listen to with `addEventListener`, then that means that\n     * the fetch should be abandoned. This may be passed along to async\n     * functions aware of AbortController/AbortSignal behavior.\n     *\n     * The `fetchMethod` should **only** return `undefined` or a Promise\n     * resolving to `undefined` if the AbortController signaled an `abort`\n     * event. In all other cases, it should return or resolve to a value\n     * suitable for adding to the cache.\n     *\n     * The `options` object is a union of the options that may be provided to\n     * `set()` and `get()`. If they are modified, then that will result in\n     * modifying the settings to `cache.set()` when the value is resolved, and\n     * in the case of\n     * {@link OptionsBase.noDeleteOnFetchRejection} and\n     * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n     * `fetchMethod` failures.\n     *\n     * For example, a DNS cache may update the TTL based on the value returned\n     * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n     */\n    fetchMethod?: Fetcher<K, V, FC>\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#memo}\n     */\n    memoMethod?: Memoizer<K, V, FC>\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     *\n     * When using time-expiring entries with `ttl`, by default stale\n     * items will be removed from the cache when the key is accessed\n     * with `cache.get()`.\n     *\n     * Setting this option will cause stale items to remain in the cache, until\n     * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n     * `noDeleteOnStaleGet` set to `false`.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     *\n     * Only relevant if a ttl is used.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n     * fails, not any other times.\n     *\n     * If a `fetchMethod` fails, and there is no stale value available, the\n     * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n     * suppressed.\n     *\n     * Implies `noDeleteOnFetchRejection`.\n     *\n     * This may be set in calls to `fetch()`, or defaulted on the constructor,\n     * or overridden by modifying the options object in the `fetchMethod`.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n     * an `'abort'` event, whether user-triggered, or due to internal cache\n     * behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache<string, any>({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls\n     * are not immediately resolved or rejected when they are aborted, and\n     * instead take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * For example:\n     *\n     * ```ts\n     * const c = new LRUCache({\n     *   ttl: 100,\n     *   ignoreFetchAbort: true,\n     *   allowStaleOnFetchAbort: true,\n     *   fetchMethod: async (key, oldValue, { signal }) => {\n     *     // note: do NOT pass the signal to fetch()!\n     *     // let's say this fetch can take a long time.\n     *     const res = await fetch(`https://slow-backend-server/${key}`)\n     *     return await res.json()\n     *   },\n     * })\n     *\n     * // this will return the stale value after 100ms, while still\n     * // updating in the background for next time.\n     * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n     * ```\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    max: Count\n  }\n  export interface OptionsTTLLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options<K, V, FC> =\n    | OptionsMaxLimit<K, V, FC>\n    | OptionsSizeLimit<K, V, FC>\n    | OptionsTTLLimit<K, V, FC>\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n   * and returned by {@link LRUCache#info}.\n   */\n  export interface Entry<V> {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache<K extends {}, V extends {}, FC = unknown>\n  implements Map<K, V>\n{\n  // options that cannot be changed without disaster\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer<K, V>\n  readonly #disposeAfter?: LRUCache.Disposer<K, V>\n  readonly #fetchMethod?: LRUCache.Fetcher<K, V, FC>\n  readonly #memoMethod?: LRUCache.Memoizer<K, V, FC>\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map<K, Index>\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch<V> | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask<K, V>[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache<K, V, FC>) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map<K, number>,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions<K, V, FC>,\n        context: any\n      ): BackgroundFetch<V> =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher<K, V, FC> | undefined {\n    return this.#fetchMethod\n  }\n  get memoMethod(): LRUCache.Memoizer<K, V, FC> | undefined {\n    return this.#memoMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options<K, V, FC> | LRUCache<K, V, FC>\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      memoMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      memoMethod !== undefined &&\n      typeof memoMethod !== 'function'\n    ) {\n      throw new TypeError('memoMethod must be a function if defined')\n    }\n    this.#memoMethod = memoMethod\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.#delete(this.#keyList[index] as K, 'expire')\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        /* c8 ignore next */\n        if (!ttl || !start) return\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (!ttl || !start) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      const s = starts[index]\n      const t = ttls[index]\n      return !!t && !!s && (cachedNow || getNow()) - s > t\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status<V>, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index] as number\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status<V>\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - (sizes[index] as number)\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index] as number\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status<V>\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]] as [K, V]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i] as V\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = 'LRUCache'\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => boolean,\n    getOptions: LRUCache.GetOptions<K, V, FC> = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.#delete(this.#keyList[i] as K, 'expire')\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(key: K): LRUCache.Entry<V> | undefined {\n    const i = this.#keyMap.get(key)\n    if (i === undefined) return undefined\n    const v = this.#valList[i]\n    const value: V | undefined = this.#isBackgroundFetch(v)\n      ? v.__staleWhileFetching\n      : v\n    if (value === undefined) return undefined\n    const entry: LRUCache.Entry<V> = { value }\n    if (this.#ttls && this.#starts) {\n      const ttl = this.#ttls[i]\n      const start = this.#starts[i]\n      if (ttl && start) {\n        const remain = ttl - (perf.now() - start)\n        entry.ttl = remain\n        entry.start = Date.now()\n      }\n    }\n    if (this.#sizes) {\n      entry.size = this.#sizes[i]\n    }\n    return entry\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRLUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry<V>][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry<V> = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - (this.#starts[i] as number)\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(arr: [K, LRUCache.Entry<V>][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch<V> | undefined,\n    setOptions: LRUCache.SetOptions<K, V, FC> = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.#delete(k, 'set')\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch<V>\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n          const { __staleWhileFetching: s } = oldVal\n          if (s !== undefined && !noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(s as V, k, 'set')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([s as V, k, 'set'])\n            }\n          }\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask<K, V> | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions<K, V, FC> = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions<K, V, FC> = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index === undefined ||\n      (!allowStale && this.#isStale(index))\n    ) {\n      return\n    }\n    const v = this.#valList[index]\n    // either stale and allowed, or forcing a refresh of non-stale value\n    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions<K, V, FC>,\n    context: any\n  ): BackgroundFetch<V> {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | undefined,\n      updateCache = false\n    ): V | undefined => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.#delete(k, 'fetch')\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.#delete(k, 'fetch')\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v === undefined ? undefined : v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res(undefined)\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf: BackgroundFetch<V> = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch<V> {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch<V>\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If the value is in the cache and not stale, then the returned\n   * Promise resolves to the value.\n   *\n   * If not in the cache, or beyond its TTL staleness, then\n   * `fetchMethod(key, staleValue, { options, signal, context })` is\n   * called, and the value returned will be added to the cache once\n   * resolved.\n   *\n   * If called with `allowStale`, and an asynchronous fetch is\n   * currently in progress to reload a stale value, then the former\n   * stale value will be returned.\n   *\n   * If called with `forceRefresh`, then the cached item will be\n   * re-fetched, even if it is not stale. However, if `allowStale` is also\n   * set, then the old value will still be returned. This is useful\n   * in cases where you want to force a reload of a cached value. If\n   * a background fetch is already in progress, then `forceRefresh`\n   * has no effect.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n   * effectively an alias for `Promise.resolve(cache.get(key))`.\n   *\n   * When the fetch method resolves to a value, if the fetch has not\n   * been aborted due to deletion, eviction, or being overwritten,\n   * then it is added to the cache using the options provided.\n   *\n   * If the key is evicted or deleted before the `fetchMethod`\n   * resolves, then the AbortSignal passed to the `fetchMethod` will\n   * receive an `abort` event, and the promise returned by `fetch()`\n   * will reject with the reason for the abort.\n   *\n   * If a `signal` is passed to the `fetch()` call, then aborting the\n   * signal will abort the fetch and cause the `fetch()` promise to\n   * reject with the reason provided.\n   *\n   * **Setting `context`**\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the {@link LRUCache} constructor, then all\n   * calls to `cache.fetch()` _must_ provide a `context` option. If\n   * set to `undefined` or `void`, then calls to fetch _must not_\n   * provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that\n   * might be relevant in the course of fetching the data. It is only\n   * relevant for the course of a single `fetch()` operation, and\n   * discarded afterwards.\n   *\n   * **Note: `fetch()` calls are inflight-unique**\n   *\n   * If you call `fetch()` multiple times with the same key value,\n   * then every call after the first will resolve on the same\n   * promise<sup>1</sup>,\n   * _even if they have different settings that would otherwise change\n   * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n   * or `ignoreFetchAbort`.\n   *\n   * In most cases, this is not a problem (in fact, only fetching\n   * something once is what you probably want, if you're caching in\n   * the first place). If you are changing the fetch() options\n   * dramatically between runs, there's a good chance that you might\n   * be trying to fit divergent semantics into a single object, and\n   * would be better off with multiple cache instances.\n   *\n   * **1**: Ie, they're not the \"same Promise\", but they resolve at\n   * the same time, because they're both waiting on the same\n   * underlying fetchMethod response.\n   */\n\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : LRUCache.FetchOptionsWithContext<K, V, FC>\n  ): Promise<undefined | V>\n\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : never\n  ): Promise<undefined | V>\n\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n  ): Promise<undefined | V> {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n   * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n   * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n   * because `ignoreFetchAbort` was specified (either to the constructor or\n   * in the {@link LRUCache.FetchOptions}). Also, the\n   * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n   * the test even more complicated.\n   *\n   * Because inferring the cases where `undefined` might be returned are so\n   * cumbersome, but testing for `undefined` can also be annoying, this method\n   * can be used, which will reject if `this.fetch()` resolves to undefined.\n   */\n  forceFetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : LRUCache.FetchOptionsWithContext<K, V, FC>\n  ): Promise<V>\n  // this overload not allowed if context is required\n  forceFetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : never\n  ): Promise<V>\n  async forceFetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n  ): Promise<V> {\n    const v = await this.fetch(\n      k,\n      fetchOptions as unknown extends FC\n        ? LRUCache.FetchOptions<K, V, FC>\n        : FC extends undefined | void\n        ? LRUCache.FetchOptionsNoContext<K, V>\n        : LRUCache.FetchOptionsWithContext<K, V, FC>\n    )\n    if (v === undefined) throw new Error('fetch() returned undefined')\n    return v\n  }\n\n  /**\n   * If the key is found in the cache, then this is equivalent to\n   * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n   * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n   * _must_ provide a `context` option. If set to `undefined` or `void`, then\n   * calls to memo _must not_ provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that might be\n   * relevant in the course of fetching the data. It is only relevant for the\n   * course of a single `memo()` operation, and discarded afterwards.\n   */\n  memo(\n    k: K,\n    memoOptions: unknown extends FC\n      ? LRUCache.MemoOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext<K, V>\n      : LRUCache.MemoOptionsWithContext<K, V, FC>\n  ): V\n  // this overload not allowed if context is required\n  memo(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    memoOptions?: unknown extends FC\n      ? LRUCache.MemoOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext<K, V>\n      : never\n  ): V\n  memo(k: K, memoOptions: LRUCache.MemoOptions<K, V, FC> = {}) {\n    const memoMethod = this.#memoMethod\n    if (!memoMethod) {\n      throw new Error('no memoMethod provided to constructor')\n    }\n    const { context, forceRefresh, ...options } = memoOptions\n    const v = this.get(k, options)\n    if (!forceRefresh && v !== undefined) return v\n    const vv = memoMethod(k, v, {\n      options,\n      context,\n    } as LRUCache.MemoizerOptions<K, V, FC>)\n    this.set(k, vv, options)\n    return vv\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions<K, V, FC> = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.#delete(k, 'expire')\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    return this.#delete(k, 'delete')\n  }\n\n  #delete(k: K, reason: LRUCache.DisposeReason) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.#clear(reason)\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, reason)\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, reason])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            const pi = this.#prev[index] as number\n            this.#next[pi] = this.#next[index] as number\n            const ni = this.#next[index] as number\n            this.#prev[ni] = this.#prev[index] as number\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#clear('delete')\n  }\n  #clear(reason: LRUCache.DisposeReason) {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, reason)\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, reason])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n","const proc =\n  typeof process === 'object' && process\n    ? process\n    : {\n        stdout: null,\n        stderr: null,\n      }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n  s: any\n): s is Minipass.Readable | Minipass.Writable =>\n  !!s &&\n  typeof s === 'object' &&\n  (s instanceof Minipass ||\n    s instanceof Stream ||\n    isReadable(s) ||\n    isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Readable).pipe === 'function' &&\n  // node core Writable streams have a pipe() method, but it throws\n  (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Writable).write === 'function' &&\n  typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n  ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n  b instanceof ArrayBuffer ||\n  (!!b &&\n    typeof b === 'object' &&\n    b.constructor &&\n    b.constructor.name === 'ArrayBuffer' &&\n    b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n  !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n  /**\n   * end the destination stream when the source stream ends\n   */\n  end?: boolean\n  /**\n   * proxy errors from the source stream to the destination stream\n   */\n  proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe<T extends unknown> {\n  src: Minipass<T>\n  dest: Minipass<any, T>\n  opts: PipeOptions\n  ondrain: () => any\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    this.src = src\n    this.dest = dest as Minipass<any, T>\n    this.opts = opts\n    this.ondrain = () => src[RESUME]()\n    this.dest.on('drain', this.ondrain)\n  }\n  unpipe() {\n    this.dest.removeListener('drain', this.ondrain)\n  }\n  // only here for the prototype\n  /* c8 ignore start */\n  proxyErrors(_er: any) {}\n  /* c8 ignore stop */\n  end() {\n    this.unpipe()\n    if (this.opts.end) this.dest.end()\n  }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors<T> extends Pipe<T> {\n  unpipe() {\n    this.src.removeListener('error', this.proxyErrors)\n    super.unpipe()\n  }\n  constructor(\n    src: Minipass<T>,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    super(src, dest, opts)\n    this.proxyErrors = (er: Error) => this.dest.emit('error', er)\n    src.on('error', this.proxyErrors)\n  }\n}\n\nexport namespace Minipass {\n  /**\n   * Encoding used to create a stream that outputs strings rather than\n   * Buffer objects.\n   */\n  export type Encoding = BufferEncoding | 'buffer' | null\n\n  /**\n   * Any stream that Minipass can pipe into\n   */\n  export type Writable =\n    | Minipass<any, any, any>\n    | NodeJS.WriteStream\n    | (NodeJS.WriteStream & { fd: number })\n    | (EventEmitter & {\n        end(): any\n        write(chunk: any, ...args: any[]): any\n      })\n\n  /**\n   * Any stream that can be read from\n   */\n  export type Readable =\n    | Minipass<any, any, any>\n    | NodeJS.ReadStream\n    | (NodeJS.ReadStream & { fd: number })\n    | (EventEmitter & {\n        pause(): any\n        resume(): any\n        pipe(...destArgs: any[]): any\n      })\n\n  /**\n   * Utility type that can be iterated sync or async\n   */\n  export type DualIterable<T> = Iterable<T> & AsyncIterable<T>\n\n  type EventArguments = Record<string | symbol, unknown[]>\n\n  /**\n   * The listing of events that a Minipass class can emit.\n   * Extend this when extending the Minipass class, and pass as\n   * the third template argument.  The key is the name of the event,\n   * and the value is the argument list.\n   *\n   * Any undeclared events will still be allowed, but the handler will get\n   * arguments as `unknown[]`.\n   */\n  export interface Events<RType extends any = Buffer>\n    extends EventArguments {\n    readable: []\n    data: [chunk: RType]\n    error: [er: unknown]\n    abort: [reason: unknown]\n    drain: []\n    resume: []\n    end: []\n    finish: []\n    prefinish: []\n    close: []\n    [DESTROYED]: [er?: unknown]\n    [ERROR]: [er: unknown]\n  }\n\n  /**\n   * String or buffer-like data that can be joined and sliced\n   */\n  export type ContiguousData =\n    | Buffer\n    | ArrayBufferLike\n    | ArrayBufferView\n    | string\n  export type BufferOrString = Buffer | string\n\n  /**\n   * Options passed to the Minipass constructor.\n   */\n  export type SharedOptions = {\n    /**\n     * Defer all data emission and other events until the end of the\n     * current tick, similar to Node core streams\n     */\n    async?: boolean\n    /**\n     * A signal which will abort the stream\n     */\n    signal?: AbortSignal\n    /**\n     * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n     * emit Buffer objects rather than strings.\n     *\n     * Conflicts with `objectMode`\n     */\n    encoding?: BufferEncoding | null | 'buffer'\n    /**\n     * Output data exactly as it was written, supporting non-buffer/string\n     * data (such as arbitrary objects, falsey values, etc.)\n     *\n     * Conflicts with `encoding`\n     */\n    objectMode?: boolean\n  }\n\n  /**\n   * Options for a string encoded output\n   */\n  export type EncodingOptions = SharedOptions & {\n    encoding: BufferEncoding\n    objectMode?: false\n  }\n\n  /**\n   * Options for contiguous data buffer output\n   */\n  export type BufferOptions = SharedOptions & {\n    encoding?: null | 'buffer'\n    objectMode?: false\n  }\n\n  /**\n   * Options for objectMode arbitrary output\n   */\n  export type ObjectModeOptions = SharedOptions & {\n    objectMode: true\n    encoding?: null\n  }\n\n  /**\n   * Utility type to determine allowed options based on read type\n   */\n  export type Options<T> =\n    | ObjectModeOptions\n    | (T extends string\n        ? EncodingOptions\n        : T extends Buffer\n        ? BufferOptions\n        : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n  !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n    RType extends unknown = Buffer,\n    WType extends unknown = RType extends Minipass.BufferOrString\n      ? Minipass.ContiguousData\n      : RType,\n    Events extends Minipass.Events<RType> = Minipass.Events<RType>\n  >\n  extends EventEmitter\n  implements Minipass.DualIterable<RType>\n{\n  [FLOWING]: boolean = false;\n  [PAUSED]: boolean = false;\n  [PIPES]: Pipe<RType>[] = [];\n  [BUFFER]: RType[] = [];\n  [OBJECTMODE]: boolean;\n  [ENCODING]: BufferEncoding | null;\n  [ASYNC]: boolean;\n  [DECODER]: SD | null;\n  [EOF]: boolean = false;\n  [EMITTED_END]: boolean = false;\n  [EMITTING_END]: boolean = false;\n  [CLOSED]: boolean = false;\n  [EMITTED_ERROR]: unknown = null;\n  [BUFFERLENGTH]: number = 0;\n  [DESTROYED]: boolean = false;\n  [SIGNAL]?: AbortSignal;\n  [ABORTED]: boolean = false;\n  [DATALISTENERS]: number = 0;\n  [DISCARDED]: boolean = false\n\n  /**\n   * true if the stream can be written\n   */\n  writable: boolean = true\n  /**\n   * true if the stream can be read\n   */\n  readable: boolean = true\n\n  /**\n   * If `RType` is Buffer, then options do not need to be provided.\n   * Otherwise, an options object must be provided to specify either\n   * {@link Minipass.SharedOptions.objectMode} or\n   * {@link Minipass.SharedOptions.encoding}, as appropriate.\n   */\n  constructor(\n    ...args:\n      | [Minipass.ObjectModeOptions]\n      | (RType extends Buffer\n          ? [] | [Minipass.Options<RType>]\n          : [Minipass.Options<RType>])\n  ) {\n    const options: Minipass.Options<RType> = (args[0] ||\n      {}) as Minipass.Options<RType>\n    super()\n    if (options.objectMode && typeof options.encoding === 'string') {\n      throw new TypeError(\n        'Encoding and objectMode may not be used together'\n      )\n    }\n    if (isObjectModeOptions(options)) {\n      this[OBJECTMODE] = true\n      this[ENCODING] = null\n    } else if (isEncodingOptions(options)) {\n      this[ENCODING] = options.encoding\n      this[OBJECTMODE] = false\n    } else {\n      this[OBJECTMODE] = false\n      this[ENCODING] = null\n    }\n    this[ASYNC] = !!options.async\n    this[DECODER] = this[ENCODING]\n      ? (new StringDecoder(this[ENCODING]) as SD)\n      : null\n\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposeBuffer === true) {\n      Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n    }\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposePipes === true) {\n      Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n    }\n\n    const { signal } = options\n    if (signal) {\n      this[SIGNAL] = signal\n      if (signal.aborted) {\n        this[ABORT]()\n      } else {\n        signal.addEventListener('abort', () => this[ABORT]())\n      }\n    }\n  }\n\n  /**\n   * The amount of data stored in the buffer waiting to be read.\n   *\n   * For Buffer strings, this will be the total byte length.\n   * For string encoding streams, this will be the string character length,\n   * according to JavaScript's `string.length` logic.\n   * For objectMode streams, this is a count of the items waiting to be\n   * emitted.\n   */\n  get bufferLength() {\n    return this[BUFFERLENGTH]\n  }\n\n  /**\n   * The `BufferEncoding` currently in use, or `null`\n   */\n  get encoding() {\n    return this[ENCODING]\n  }\n\n  /**\n   * @deprecated - This is a read only property\n   */\n  set encoding(_enc) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * @deprecated - Encoding may only be set at instantiation time\n   */\n  setEncoding(_enc: Minipass.Encoding) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * True if this is an objectMode stream\n   */\n  get objectMode() {\n    return this[OBJECTMODE]\n  }\n\n  /**\n   * @deprecated - This is a read-only property\n   */\n  set objectMode(_om) {\n    throw new Error('objectMode must be set at instantiation time')\n  }\n\n  /**\n   * true if this is an async stream\n   */\n  get ['async'](): boolean {\n    return this[ASYNC]\n  }\n  /**\n   * Set to true to make this stream async.\n   *\n   * Once set, it cannot be unset, as this would potentially cause incorrect\n   * behavior.  Ie, a sync stream can be made async, but an async stream\n   * cannot be safely made sync.\n   */\n  set ['async'](a: boolean) {\n    this[ASYNC] = this[ASYNC] || !!a\n  }\n\n  // drop everything and get out of the flow completely\n  [ABORT]() {\n    this[ABORTED] = true\n    this.emit('abort', this[SIGNAL]?.reason)\n    this.destroy(this[SIGNAL]?.reason)\n  }\n\n  /**\n   * True if the stream has been aborted.\n   */\n  get aborted() {\n    return this[ABORTED]\n  }\n  /**\n   * No-op setter. Stream aborted status is set via the AbortSignal provided\n   * in the constructor options.\n   */\n  set aborted(_) {}\n\n  /**\n   * Write data into the stream\n   *\n   * If the chunk written is a string, and encoding is not specified, then\n   * `utf8` will be assumed. If the stream encoding matches the encoding of\n   * a written string, and the state of the string decoder allows it, then\n   * the string will be passed through to either the output or the internal\n   * buffer without any processing. Otherwise, it will be turned into a\n   * Buffer object for processing into the desired encoding.\n   *\n   * If provided, `cb` function is called immediately before return for\n   * sync streams, or on next tick for async streams, because for this\n   * base class, a chunk is considered \"processed\" once it is accepted\n   * and either emitted or buffered. That is, the callback does not indicate\n   * that the chunk has been eventually emitted, though of course child\n   * classes can override this function to do whatever processing is required\n   * and call `super.write(...)` only once processing is completed.\n   */\n  write(chunk: WType, cb?: () => void): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding,\n    cb?: () => void\n  ): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): boolean {\n    if (this[ABORTED]) return false\n    if (this[EOF]) throw new Error('write after end')\n\n    if (this[DESTROYED]) {\n      this.emit(\n        'error',\n        Object.assign(\n          new Error('Cannot call write after a stream was destroyed'),\n          { code: 'ERR_STREAM_DESTROYED' }\n        )\n      )\n      return true\n    }\n\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n\n    if (!encoding) encoding = 'utf8'\n\n    const fn = this[ASYNC] ? defer : nodefer\n\n    // convert array buffers and typed array views into buffers\n    // at some point in the future, we may want to do the opposite!\n    // leave strings and buffers as-is\n    // anything is only allowed if in object mode, so throw\n    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n      if (isArrayBufferView(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(\n          chunk.buffer,\n          chunk.byteOffset,\n          chunk.byteLength\n        )\n      } else if (isArrayBufferLike(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(chunk)\n      } else if (typeof chunk !== 'string') {\n        throw new Error(\n          'Non-contiguous data written to non-objectMode stream'\n        )\n      }\n    }\n\n    // handle object mode up front, since it's simpler\n    // this yields better performance, fewer checks later.\n    if (this[OBJECTMODE]) {\n      // maybe impossible?\n      /* c8 ignore start */\n      if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n      /* c8 ignore stop */\n\n      if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n      else this[BUFFERPUSH](chunk as unknown as RType)\n\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n      if (cb) fn(cb)\n\n      return this[FLOWING]\n    }\n\n    // at this point the chunk is a buffer or string\n    // don't buffer it up or send it to the decoder\n    if (!(chunk as Minipass.BufferOrString).length) {\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n      if (cb) fn(cb)\n      return this[FLOWING]\n    }\n\n    // fast-path writing strings of same encoding to a stream with\n    // an empty buffer, skipping the buffer/decoder dance\n    if (\n      typeof chunk === 'string' &&\n      // unless it is a string already ready for us to use\n      !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n    ) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = Buffer.from(chunk, encoding)\n    }\n\n    if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = this[DECODER].write(chunk)\n    }\n\n    // Note: flushing CAN potentially switch us into not-flowing mode\n    if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n    if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n    else this[BUFFERPUSH](chunk as unknown as RType)\n\n    if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n    if (cb) fn(cb)\n\n    return this[FLOWING]\n  }\n\n  /**\n   * Low-level explicit read method.\n   *\n   * In objectMode, the argument is ignored, and one item is returned if\n   * available.\n   *\n   * `n` is the number of bytes (or in the case of encoding streams,\n   * characters) to consume. If `n` is not provided, then the entire buffer\n   * is returned, or `null` is returned if no data is available.\n   *\n   * If `n` is greater that the amount of data in the internal buffer,\n   * then `null` is returned.\n   */\n  read(n?: number | null): RType | null {\n    if (this[DESTROYED]) return null\n    this[DISCARDED] = false\n\n    if (\n      this[BUFFERLENGTH] === 0 ||\n      n === 0 ||\n      (n && n > this[BUFFERLENGTH])\n    ) {\n      this[MAYBE_EMIT_END]()\n      return null\n    }\n\n    if (this[OBJECTMODE]) n = null\n\n    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n      // not object mode, so if we have an encoding, then RType is string\n      // otherwise, must be Buffer\n      this[BUFFER] = [\n        (this[ENCODING]\n          ? this[BUFFER].join('')\n          : Buffer.concat(\n              this[BUFFER] as Buffer[],\n              this[BUFFERLENGTH]\n            )) as RType,\n      ]\n    }\n\n    const ret = this[READ](n || null, this[BUFFER][0] as RType)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [READ](n: number | null, chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n    else {\n      const c = chunk as Minipass.BufferOrString\n      if (n === c.length || n === null) this[BUFFERSHIFT]()\n      else if (typeof c === 'string') {\n        this[BUFFER][0] = c.slice(n) as RType\n        chunk = c.slice(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      } else {\n        this[BUFFER][0] = c.subarray(n) as RType\n        chunk = c.subarray(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      }\n    }\n\n    this.emit('data', chunk)\n\n    if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n    return chunk\n  }\n\n  /**\n   * End the stream, optionally providing a final write.\n   *\n   * See {@link Minipass#write} for argument descriptions\n   */\n  end(cb?: () => void): this\n  end(chunk: WType, cb?: () => void): this\n  end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n  end(\n    chunk?: WType | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): this {\n    if (typeof chunk === 'function') {\n      cb = chunk as () => void\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n    if (chunk !== undefined) this.write(chunk, encoding)\n    if (cb) this.once('end', cb)\n    this[EOF] = true\n    this.writable = false\n\n    // if we haven't written anything, then go ahead and emit,\n    // even if we're not reading.\n    // we'll re-emit if a new 'end' listener is added anyway.\n    // This makes MP more suitable to write-only use cases.\n    if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n    return this\n  }\n\n  // don't let the internal resume be overwritten\n  [RESUME]() {\n    if (this[DESTROYED]) return\n\n    if (!this[DATALISTENERS] && !this[PIPES].length) {\n      this[DISCARDED] = true\n    }\n    this[PAUSED] = false\n    this[FLOWING] = true\n    this.emit('resume')\n    if (this[BUFFER].length) this[FLUSH]()\n    else if (this[EOF]) this[MAYBE_EMIT_END]()\n    else this.emit('drain')\n  }\n\n  /**\n   * Resume the stream if it is currently in a paused state\n   *\n   * If called when there are no pipe destinations or `data` event listeners,\n   * this will place the stream in a \"discarded\" state, where all data will\n   * be thrown away. The discarded state is removed if a pipe destination or\n   * data handler is added, if pause() is called, or if any synchronous or\n   * asynchronous iteration is started.\n   */\n  resume() {\n    return this[RESUME]()\n  }\n\n  /**\n   * Pause the stream\n   */\n  pause() {\n    this[FLOWING] = false\n    this[PAUSED] = true\n    this[DISCARDED] = false\n  }\n\n  /**\n   * true if the stream has been forcibly destroyed\n   */\n  get destroyed() {\n    return this[DESTROYED]\n  }\n\n  /**\n   * true if the stream is currently in a flowing state, meaning that\n   * any writes will be immediately emitted.\n   */\n  get flowing() {\n    return this[FLOWING]\n  }\n\n  /**\n   * true if the stream is currently in a paused state\n   */\n  get paused() {\n    return this[PAUSED]\n  }\n\n  [BUFFERPUSH](chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n    else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n    this[BUFFER].push(chunk)\n  }\n\n  [BUFFERSHIFT](): RType {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n    else\n      this[BUFFERLENGTH] -= (\n        this[BUFFER][0] as Minipass.BufferOrString\n      ).length\n    return this[BUFFER].shift() as RType\n  }\n\n  [FLUSH](noDrain: boolean = false) {\n    do {} while (\n      this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n      this[BUFFER].length\n    )\n\n    if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n  }\n\n  [FLUSHCHUNK](chunk: RType) {\n    this.emit('data', chunk)\n    return this[FLOWING]\n  }\n\n  /**\n   * Pipe all data emitted by this stream into the destination provided.\n   *\n   * Triggers the flow of data.\n   */\n  pipe<W extends Minipass.Writable>(dest: W, opts?: PipeOptions): W {\n    if (this[DESTROYED]) return dest\n    this[DISCARDED] = false\n\n    const ended = this[EMITTED_END]\n    opts = opts || {}\n    if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n    else opts.end = opts.end !== false\n    opts.proxyErrors = !!opts.proxyErrors\n\n    // piping an ended stream ends immediately\n    if (ended) {\n      if (opts.end) dest.end()\n    } else {\n      // \"as\" here just ignores the WType, which pipes don't care about,\n      // since they're only consuming from us, and writing to the dest\n      this[PIPES].push(\n        !opts.proxyErrors\n          ? new Pipe<RType>(this as Minipass<RType>, dest, opts)\n          : new PipeProxyErrors<RType>(this as Minipass<RType>, dest, opts)\n      )\n      if (this[ASYNC]) defer(() => this[RESUME]())\n      else this[RESUME]()\n    }\n\n    return dest\n  }\n\n  /**\n   * Fully unhook a piped destination stream.\n   *\n   * If the destination stream was the only consumer of this stream (ie,\n   * there are no other piped destinations or `'data'` event listeners)\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  unpipe<W extends Minipass.Writable>(dest: W) {\n    const p = this[PIPES].find(p => p.dest === dest)\n    if (p) {\n      if (this[PIPES].length === 1) {\n        if (this[FLOWING] && this[DATALISTENERS] === 0) {\n          this[FLOWING] = false\n        }\n        this[PIPES] = []\n      } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n      p.unpipe()\n    }\n  }\n\n  /**\n   * Alias for {@link Minipass#on}\n   */\n  addListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    return this.on(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.on`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * - Adding a 'data' event handler will trigger the flow of data\n   *\n   * - Adding a 'readable' event handler when there is data waiting to be read\n   *   will cause 'readable' to be emitted immediately.\n   *\n   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n   *   already passed will cause the event to be emitted immediately and all\n   *   handlers removed.\n   *\n   * - Adding an 'error' event handler after an error has been emitted will\n   *   cause the event to be re-emitted immediately with the error previously\n   *   raised.\n   */\n  on<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    const ret = super.on(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    if (ev === 'data') {\n      this[DISCARDED] = false\n      this[DATALISTENERS]++\n      if (!this[PIPES].length && !this[FLOWING]) {\n        this[RESUME]()\n      }\n    } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n      super.emit('readable')\n    } else if (isEndish(ev) && this[EMITTED_END]) {\n      super.emit(ev)\n      this.removeAllListeners(ev)\n    } else if (ev === 'error' && this[EMITTED_ERROR]) {\n      const h = handler as (...a: Events['error']) => any\n      if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n      else h.call(this, this[EMITTED_ERROR])\n    }\n    return ret\n  }\n\n  /**\n   * Alias for {@link Minipass#off}\n   */\n  removeListener<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    return this.off(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.off`\n   *\n   * If a 'data' event handler is removed, and it was the last consumer\n   * (ie, there are no pipe destinations or other 'data' event listeners),\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  off<Event extends keyof Events>(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    const ret = super.off(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    // if we previously had listeners, and now we don't, and we don't\n    // have any pipes, then stop the flow, unless it's been explicitly\n    // put in a discarded flowing state via stream.resume().\n    if (ev === 'data') {\n      this[DATALISTENERS] = this.listeners('data').length\n      if (\n        this[DATALISTENERS] === 0 &&\n        !this[DISCARDED] &&\n        !this[PIPES].length\n      ) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.removeAllListeners`\n   *\n   * If all 'data' event handlers are removed, and they were the last consumer\n   * (ie, there are no pipe destinations), then the flow of data will stop\n   * until there is another consumer or {@link Minipass#resume} is explicitly\n   * called.\n   */\n  removeAllListeners<Event extends keyof Events>(ev?: Event) {\n    const ret = super.removeAllListeners(ev as string | symbol | undefined)\n    if (ev === 'data' || ev === undefined) {\n      this[DATALISTENERS] = 0\n      if (!this[DISCARDED] && !this[PIPES].length) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * true if the 'end' event has been emitted\n   */\n  get emittedEnd() {\n    return this[EMITTED_END]\n  }\n\n  [MAYBE_EMIT_END]() {\n    if (\n      !this[EMITTING_END] &&\n      !this[EMITTED_END] &&\n      !this[DESTROYED] &&\n      this[BUFFER].length === 0 &&\n      this[EOF]\n    ) {\n      this[EMITTING_END] = true\n      this.emit('end')\n      this.emit('prefinish')\n      this.emit('finish')\n      if (this[CLOSED]) this.emit('close')\n      this[EMITTING_END] = false\n    }\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.emit`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * If the stream has been destroyed, and the event is something other\n   * than 'close' or 'error', then `false` is returned and no handlers\n   * are called.\n   *\n   * If the event is 'end', and has already been emitted, then the event\n   * is ignored. If the stream is in a paused or non-flowing state, then\n   * the event will be deferred until data flow resumes. If the stream is\n   * async, then handlers will be called on the next tick rather than\n   * immediately.\n   *\n   * If the event is 'close', and 'end' has not yet been emitted, then\n   * the event will be deferred until after 'end' is emitted.\n   *\n   * If the event is 'error', and an AbortSignal was provided for the stream,\n   * and there are no listeners, then the event is ignored, matching the\n   * behavior of node core streams in the presense of an AbortSignal.\n   *\n   * If the event is 'finish' or 'prefinish', then all listeners will be\n   * removed after emitting the event, to prevent double-firing.\n   */\n  emit<Event extends keyof Events>(\n    ev: Event,\n    ...args: Events[Event]\n  ): boolean {\n    const data = args[0]\n    // error and close are only events allowed after calling destroy()\n    if (\n      ev !== 'error' &&\n      ev !== 'close' &&\n      ev !== DESTROYED &&\n      this[DESTROYED]\n    ) {\n      return false\n    } else if (ev === 'data') {\n      return !this[OBJECTMODE] && !data\n        ? false\n        : this[ASYNC]\n        ? (defer(() => this[EMITDATA](data as RType)), true)\n        : this[EMITDATA](data as RType)\n    } else if (ev === 'end') {\n      return this[EMITEND]()\n    } else if (ev === 'close') {\n      this[CLOSED] = true\n      // don't emit close before 'end' and 'finish'\n      if (!this[EMITTED_END] && !this[DESTROYED]) return false\n      const ret = super.emit('close')\n      this.removeAllListeners('close')\n      return ret\n    } else if (ev === 'error') {\n      this[EMITTED_ERROR] = data\n      super.emit(ERROR, data)\n      const ret =\n        !this[SIGNAL] || this.listeners('error').length\n          ? super.emit('error', data)\n          : false\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'resume') {\n      const ret = super.emit('resume')\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'finish' || ev === 'prefinish') {\n      const ret = super.emit(ev)\n      this.removeAllListeners(ev)\n      return ret\n    }\n\n    // Some other unknown event\n    const ret = super.emit(ev as string, ...args)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITDATA](data: RType) {\n    for (const p of this[PIPES]) {\n      if (p.dest.write(data as RType) === false) this.pause()\n    }\n    const ret = this[DISCARDED] ? false : super.emit('data', data)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITEND]() {\n    if (this[EMITTED_END]) return false\n\n    this[EMITTED_END] = true\n    this.readable = false\n    return this[ASYNC]\n      ? (defer(() => this[EMITEND2]()), true)\n      : this[EMITEND2]()\n  }\n\n  [EMITEND2]() {\n    if (this[DECODER]) {\n      const data = this[DECODER].end()\n      if (data) {\n        for (const p of this[PIPES]) {\n          p.dest.write(data as RType)\n        }\n        if (!this[DISCARDED]) super.emit('data', data)\n      }\n    }\n\n    for (const p of this[PIPES]) {\n      p.end()\n    }\n    const ret = super.emit('end')\n    this.removeAllListeners('end')\n    return ret\n  }\n\n  /**\n   * Return a Promise that resolves to an array of all emitted data once\n   * the stream ends.\n   */\n  async collect(): Promise<RType[] & { dataLength: number }> {\n    const buf: RType[] & { dataLength: number } = Object.assign([], {\n      dataLength: 0,\n    })\n    if (!this[OBJECTMODE]) buf.dataLength = 0\n    // set the promise first, in case an error is raised\n    // by triggering the flow here.\n    const p = this.promise()\n    this.on('data', c => {\n      buf.push(c)\n      if (!this[OBJECTMODE])\n        buf.dataLength += (c as Minipass.BufferOrString).length\n    })\n    await p\n    return buf\n  }\n\n  /**\n   * Return a Promise that resolves to the concatenation of all emitted data\n   * once the stream ends.\n   *\n   * Not allowed on objectMode streams.\n   */\n  async concat(): Promise<RType> {\n    if (this[OBJECTMODE]) {\n      throw new Error('cannot concat in objectMode')\n    }\n    const buf = await this.collect()\n    return (\n      this[ENCODING]\n        ? buf.join('')\n        : Buffer.concat(buf as Buffer[], buf.dataLength)\n    ) as RType\n  }\n\n  /**\n   * Return a void Promise that resolves once the stream ends.\n   */\n  async promise(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n      this.on('error', er => reject(er))\n      this.on('end', () => resolve())\n    })\n  }\n\n  /**\n   * Asynchronous `for await of` iteration.\n   *\n   * This will continue emitting all chunks until the stream terminates.\n   */\n  [Symbol.asyncIterator](): AsyncGenerator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = async (): Promise<IteratorReturnResult<void>> => {\n      this.pause()\n      stopped = true\n      return { value: undefined, done: true }\n    }\n    const next = (): Promise<IteratorResult<RType, void>> => {\n      if (stopped) return stop()\n      const res = this.read()\n      if (res !== null) return Promise.resolve({ done: false, value: res })\n\n      if (this[EOF]) return stop()\n\n      let resolve!: (res: IteratorResult<RType>) => void\n      let reject!: (er: unknown) => void\n      const onerr = (er: unknown) => {\n        this.off('data', ondata)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        reject(er)\n      }\n      const ondata = (value: RType) => {\n        this.off('error', onerr)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        this.pause()\n        resolve({ value, done: !!this[EOF] })\n      }\n      const onend = () => {\n        this.off('error', onerr)\n        this.off('data', ondata)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        resolve({ done: true, value: undefined })\n      }\n      const ondestroy = () => onerr(new Error('stream destroyed'))\n      return new Promise<IteratorResult<RType>>((res, rej) => {\n        reject = rej\n        resolve = res\n        this.once(DESTROYED, ondestroy)\n        this.once('error', onerr)\n        this.once('end', onend)\n        this.once('data', ondata)\n      })\n    }\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.asyncIterator]() {\n        return this\n      },\n      [Symbol.asyncDispose]: async () => {},\n    }\n  }\n\n  /**\n   * Synchronous `for of` iteration.\n   *\n   * The iteration will terminate when the internal buffer runs out, even\n   * if the stream has not yet terminated.\n   */\n  [Symbol.iterator](): Generator<RType, void, void> {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = (): IteratorReturnResult<void> => {\n      this.pause()\n      this.off(ERROR, stop)\n      this.off(DESTROYED, stop)\n      this.off('end', stop)\n      stopped = true\n      return { done: true, value: undefined }\n    }\n\n    const next = (): IteratorResult<RType, void> => {\n      if (stopped) return stop()\n      const value = this.read()\n      return value === null ? stop() : { done: false, value }\n    }\n\n    this.once('end', stop)\n    this.once(ERROR, stop)\n    this.once(DESTROYED, stop)\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.iterator]() {\n        return this\n      },\n      [Symbol.dispose]: () => {},\n    }\n  }\n\n  /**\n   * Destroy a stream, preventing it from being used for any further purpose.\n   *\n   * If the stream has a `close()` method, then it will be called on\n   * destruction.\n   *\n   * After destruction, any attempt to write data, read data, or emit most\n   * events will be ignored.\n   *\n   * If an error argument is provided, then it will be emitted in an\n   * 'error' event.\n   */\n  destroy(er?: unknown) {\n    if (this[DESTROYED]) {\n      if (er) this.emit('error', er)\n      else this.emit(DESTROYED)\n      return this\n    }\n\n    this[DESTROYED] = true\n    this[DISCARDED] = true\n\n    // throw away all buffered data, it's never coming out\n    this[BUFFER].length = 0\n    this[BUFFERLENGTH] = 0\n\n    const wc = this as Minipass<RType, WType, Events> & {\n      close?: () => void\n    }\n    if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n    if (er) this.emit('error', er)\n    // if no error to emit, still reject pending promises\n    else this.emit(DESTROYED)\n\n    return this\n  }\n\n  /**\n   * Alias for {@link isStream}\n   *\n   * Former export location, maintained for backwards compatibility.\n   *\n   * @deprecated\n   */\n  static get isStream() {\n    return isStream\n  }\n}\n","import { LRUCache } from 'lru-cache'\nimport { posix, win32 } from 'node:path'\n\nimport { fileURLToPath } from 'node:url'\n\nimport {\n  lstatSync,\n  readdir as readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync as rps,\n} from 'fs'\nimport * as actualFS from 'node:fs'\n\nconst realpathSync = rps.native\n// TODO: test perf of fs/promises realpath vs realpathCB,\n// since the promises one uses realpath.native\n\nimport { lstat, readdir, readlink, realpath } from 'node:fs/promises'\n\nimport { Minipass } from 'minipass'\nimport type { Dirent, Stats } from 'node:fs'\n\n/**\n * An object that will be used to override the default `fs`\n * methods.  Any methods that are not overridden will use Node's\n * built-in implementations.\n *\n * - lstatSync\n * - readdir (callback `withFileTypes` Dirent variant, used for\n *   readdirCB and most walks)\n * - readdirSync\n * - readlinkSync\n * - realpathSync\n * - promises: Object containing the following async methods:\n *   - lstat\n *   - readdir (Dirent variant only)\n *   - readlink\n *   - realpath\n */\nexport interface FSOption {\n  lstatSync?: (path: string) => Stats\n  readdir?: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync?: (\n    path: string,\n    options: { withFileTypes: true },\n  ) => Dirent[]\n  readlinkSync?: (path: string) => string\n  realpathSync?: (path: string) => string\n  promises?: {\n    lstat?: (path: string) => Promise<Stats>\n    readdir?: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise<Dirent[]>\n    readlink?: (path: string) => Promise<string>\n    realpath?: (path: string) => Promise<string>\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\ninterface FSValue {\n  lstatSync: (path: string) => Stats\n  readdir: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync: (path: string, options: { withFileTypes: true }) => Dirent[]\n  readlinkSync: (path: string) => string\n  realpathSync: (path: string) => string\n  promises: {\n    lstat: (path: string) => Promise<Stats>\n    readdir: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise<Dirent[]>\n    readlink: (path: string) => Promise<string>\n    realpath: (path: string) => Promise<string>\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\nconst defaultFS: FSValue = {\n  lstatSync,\n  readdir: readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync,\n  promises: {\n    lstat,\n    readdir,\n    readlink,\n    realpath,\n  },\n}\n\n// if they just gave us require('fs') then use our default\nconst fsFromOption = (fsOption?: FSOption): FSValue =>\n  !fsOption || fsOption === defaultFS || fsOption === actualFS ?\n    defaultFS\n  : {\n      ...defaultFS,\n      ...fsOption,\n      promises: {\n        ...defaultFS.promises,\n        ...(fsOption.promises || {}),\n      },\n    }\n\n// turn something like //?/c:/ into c:\\\nconst uncDriveRegexp = /^\\\\\\\\\\?\\\\([a-z]:)\\\\?$/i\nconst uncToDrive = (rootPath: string): string =>\n  rootPath.replace(/\\//g, '\\\\').replace(uncDriveRegexp, '$1\\\\')\n\n// windows paths are separated by either / or \\\nconst eitherSep = /[\\\\\\/]/\n\nconst UNKNOWN = 0 // may not even exist, for all we know\nconst IFIFO = 0b0001\nconst IFCHR = 0b0010\nconst IFDIR = 0b0100\nconst IFBLK = 0b0110\nconst IFREG = 0b1000\nconst IFLNK = 0b1010\nconst IFSOCK = 0b1100\nconst IFMT = 0b1111\n\nexport type Type =\n  | 'Unknown'\n  | 'FIFO'\n  | 'CharacterDevice'\n  | 'Directory'\n  | 'BlockDevice'\n  | 'File'\n  | 'SymbolicLink'\n  | 'Socket'\n\n// mask to unset low 4 bits\nconst IFMT_UNKNOWN = ~IFMT\n\n// set after successfully calling readdir() and getting entries.\nconst READDIR_CALLED = 0b0000_0001_0000\n// set after a successful lstat()\nconst LSTAT_CALLED = 0b0000_0010_0000\n// set if an entry (or one of its parents) is definitely not a dir\nconst ENOTDIR = 0b0000_0100_0000\n// set if an entry (or one of its parents) does not exist\n// (can also be set on lstat errors like EACCES or ENAMETOOLONG)\nconst ENOENT = 0b0000_1000_0000\n// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK\n// set if we fail to readlink\nconst ENOREADLINK = 0b0001_0000_0000\n// set if we know realpath() will fail\nconst ENOREALPATH = 0b0010_0000_0000\n\nconst ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH\nconst TYPEMASK = 0b0011_1111_1111\n\nconst entToType = (s: Dirent | Stats) =>\n  s.isFile() ? IFREG\n  : s.isDirectory() ? IFDIR\n  : s.isSymbolicLink() ? IFLNK\n  : s.isCharacterDevice() ? IFCHR\n  : s.isBlockDevice() ? IFBLK\n  : s.isSocket() ? IFSOCK\n  : s.isFIFO() ? IFIFO\n  : UNKNOWN\n\n// normalize unicode path names\nconst normalizeCache = new Map<string, string>()\nconst normalize = (s: string) => {\n  const c = normalizeCache.get(s)\n  if (c) return c\n  const n = s.normalize('NFKD')\n  normalizeCache.set(s, n)\n  return n\n}\n\nconst normalizeNocaseCache = new Map<string, string>()\nconst normalizeNocase = (s: string) => {\n  const c = normalizeNocaseCache.get(s)\n  if (c) return c\n  const n = normalize(s.toLowerCase())\n  normalizeNocaseCache.set(s, n)\n  return n\n}\n\n/**\n * Options that may be provided to the Path constructor\n */\nexport interface PathOpts {\n  fullpath?: string\n  relative?: string\n  relativePosix?: string\n  parent?: PathBase\n  /**\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * An LRUCache for storing resolved path strings or Path objects.\n * @internal\n */\nexport class ResolveCache extends LRUCache<string, string> {\n  constructor() {\n    super({ max: 256 })\n  }\n}\n\n// In order to prevent blowing out the js heap by allocating hundreds of\n// thousands of Path entries when walking extremely large trees, the \"children\"\n// in this tree are represented by storing an array of Path entries in an\n// LRUCache, indexed by the parent.  At any time, Path.children() may return an\n// empty array, indicating that it doesn't know about any of its children, and\n// thus has to rebuild that cache.  This is fine, it just means that we don't\n// benefit as much from having the cached entries, but huge directory walks\n// don't blow out the stack, and smaller ones are still as fast as possible.\n//\n//It does impose some complexity when building up the readdir data, because we\n//need to pass a reference to the children array that we started with.\n\n/**\n * an LRUCache for storing child entries.\n * @internal\n */\nexport class ChildrenCache extends LRUCache<PathBase, Children> {\n  constructor(maxSize: number = 16 * 1024) {\n    super({\n      maxSize,\n      // parent + children\n      sizeCalculation: a => a.length + 1,\n    })\n  }\n}\n\n/**\n * Array of Path objects, plus a marker indicating the first provisional entry\n *\n * @internal\n */\nexport type Children = PathBase[] & { provisional: number }\n\nconst setAsCwd = Symbol('PathScurry setAsCwd')\n\n/**\n * Path objects are sort of like a super-powered\n * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}\n *\n * Each one represents a single filesystem entry on disk, which may or may not\n * exist. It includes methods for reading various types of information via\n * lstat, readlink, and readdir, and caches all information to the greatest\n * degree possible.\n *\n * Note that fs operations that would normally throw will instead return an\n * \"empty\" value. This is in order to prevent excessive overhead from error\n * stack traces.\n */\nexport abstract class PathBase implements Dirent {\n  /**\n   * the basename of this path\n   *\n   * **Important**: *always* test the path name against any test string\n   * usingthe {@link isNamed} method, and not by directly comparing this\n   * string. Otherwise, unicode path strings that the system sees as identical\n   * will not be properly treated as the same path, leading to incorrect\n   * behavior and possible security issues.\n   */\n  name: string\n  /**\n   * the Path entry corresponding to the path root.\n   *\n   * @internal\n   */\n  root: PathBase\n  /**\n   * All roots found within the current PathScurry family\n   *\n   * @internal\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * a reference to the parent path, or undefined in the case of root entries\n   *\n   * @internal\n   */\n  parent?: PathBase\n  /**\n   * boolean indicating whether paths are compared case-insensitively\n   * @internal\n   */\n  nocase: boolean\n\n  /**\n   * boolean indicating that this path is the current working directory\n   * of the PathScurry collection that contains it.\n   */\n  isCWD: boolean = false\n\n  /**\n   * the string or regexp used to split paths. On posix, it is `'/'`, and on\n   * windows it is a RegExp matching either `'/'` or `'\\\\'`\n   */\n  abstract splitSep: string | RegExp\n  /**\n   * The path separator string to use when joining paths\n   */\n  abstract sep: string\n\n  // potential default fs override\n  #fs: FSValue\n\n  // Stats fields\n  #dev?: number\n  get dev() {\n    return this.#dev\n  }\n  #mode?: number\n  get mode() {\n    return this.#mode\n  }\n  #nlink?: number\n  get nlink() {\n    return this.#nlink\n  }\n  #uid?: number\n  get uid() {\n    return this.#uid\n  }\n  #gid?: number\n  get gid() {\n    return this.#gid\n  }\n  #rdev?: number\n  get rdev() {\n    return this.#rdev\n  }\n  #blksize?: number\n  get blksize() {\n    return this.#blksize\n  }\n  #ino?: number\n  get ino() {\n    return this.#ino\n  }\n  #size?: number\n  get size() {\n    return this.#size\n  }\n  #blocks?: number\n  get blocks() {\n    return this.#blocks\n  }\n  #atimeMs?: number\n  get atimeMs() {\n    return this.#atimeMs\n  }\n  #mtimeMs?: number\n  get mtimeMs() {\n    return this.#mtimeMs\n  }\n  #ctimeMs?: number\n  get ctimeMs() {\n    return this.#ctimeMs\n  }\n  #birthtimeMs?: number\n  get birthtimeMs() {\n    return this.#birthtimeMs\n  }\n  #atime?: Date\n  get atime() {\n    return this.#atime\n  }\n  #mtime?: Date\n  get mtime() {\n    return this.#mtime\n  }\n  #ctime?: Date\n  get ctime() {\n    return this.#ctime\n  }\n  #birthtime?: Date\n  get birthtime() {\n    return this.#birthtime\n  }\n\n  #matchName: string\n  #depth?: number\n  #fullpath?: string\n  #fullpathPosix?: string\n  #relative?: string\n  #relativePosix?: string\n  #type: number\n  #children: ChildrenCache\n  #linkTarget?: PathBase\n  #realpath?: PathBase\n\n  /**\n   * This property is for compatibility with the Dirent class as of\n   * Node v20, where Dirent['parentPath'] refers to the path of the\n   * directory that was passed to readdir. For root entries, it's the path\n   * to the entry itself.\n   */\n  get parentPath(): string {\n    return (this.parent || this).fullpath()\n  }\n\n  /**\n   * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,\n   * this property refers to the *parent* path, not the path object itself.\n   */\n  get path(): string {\n    return this.parentPath\n  }\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    this.name = name\n    this.#matchName = nocase ? normalizeNocase(name) : normalize(name)\n    this.#type = type & TYPEMASK\n    this.nocase = nocase\n    this.roots = roots\n    this.root = root || this\n    this.#children = children\n    this.#fullpath = opts.fullpath\n    this.#relative = opts.relative\n    this.#relativePosix = opts.relativePosix\n    this.parent = opts.parent\n    if (this.parent) {\n      this.#fs = this.parent.#fs\n    } else {\n      this.#fs = fsFromOption(opts.fs)\n    }\n  }\n\n  /**\n   * Returns the depth of the Path object from its root.\n   *\n   * For example, a path at `/foo/bar` would have a depth of 2.\n   */\n  depth(): number {\n    if (this.#depth !== undefined) return this.#depth\n    if (!this.parent) return (this.#depth = 0)\n    return (this.#depth = this.parent.depth() + 1)\n  }\n\n  /**\n   * @internal\n   */\n  abstract getRootString(path: string): string\n  /**\n   * @internal\n   */\n  abstract getRoot(rootPath: string): PathBase\n  /**\n   * @internal\n   */\n  abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase\n\n  /**\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Get the Path object referenced by the string path, resolved from this Path\n   */\n  resolve(path?: string): PathBase {\n    if (!path) {\n      return this\n    }\n    const rootPath = this.getRootString(path)\n    const dir = path.substring(rootPath.length)\n    const dirParts = dir.split(this.splitSep)\n    const result: PathBase =\n      rootPath ?\n        this.getRoot(rootPath).#resolveParts(dirParts)\n      : this.#resolveParts(dirParts)\n    return result\n  }\n\n  #resolveParts(dirParts: string[]) {\n    let p: PathBase = this\n    for (const part of dirParts) {\n      p = p.child(part)\n    }\n    return p\n  }\n\n  /**\n   * Returns the cached children Path objects, if still available.  If they\n   * have fallen out of the cache, then returns an empty array, and resets the\n   * READDIR_CALLED bit, so that future calls to readdir() will require an fs\n   * lookup.\n   *\n   * @internal\n   */\n  children(): Children {\n    const cached = this.#children.get(this)\n    if (cached) {\n      return cached\n    }\n    const children: Children = Object.assign([], { provisional: 0 })\n    this.#children.set(this, children)\n    this.#type &= ~READDIR_CALLED\n    return children\n  }\n\n  /**\n   * Resolves a path portion and returns or creates the child Path.\n   *\n   * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is\n   * `'..'`.\n   *\n   * This should not be called directly.  If `pathPart` contains any path\n   * separators, it will lead to unsafe undefined behavior.\n   *\n   * Use `Path.resolve()` instead.\n   *\n   * @internal\n   */\n  child(pathPart: string, opts?: PathOpts): PathBase {\n    if (pathPart === '' || pathPart === '.') {\n      return this\n    }\n    if (pathPart === '..') {\n      return this.parent || this\n    }\n\n    // find the child\n    const children = this.children()\n    const name =\n      this.nocase ? normalizeNocase(pathPart) : normalize(pathPart)\n    for (const p of children) {\n      if (p.#matchName === name) {\n        return p\n      }\n    }\n\n    // didn't find it, create provisional child, since it might not\n    // actually exist.  If we know the parent isn't a dir, then\n    // in fact it CAN'T exist.\n    const s = this.parent ? this.sep : ''\n    const fullpath =\n      this.#fullpath ? this.#fullpath + s + pathPart : undefined\n    const pchild = this.newChild(pathPart, UNKNOWN, {\n      ...opts,\n      parent: this,\n      fullpath,\n    })\n\n    if (!this.canReaddir()) {\n      pchild.#type |= ENOENT\n    }\n\n    // don't have to update provisional, because if we have real children,\n    // then provisional is set to children.length, otherwise a lower number\n    children.push(pchild)\n    return pchild\n  }\n\n  /**\n   * The relative path from the cwd. If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpath()\n   */\n  relative(): string {\n    if (this.isCWD) return ''\n    if (this.#relative !== undefined) {\n      return this.#relative\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relative = this.name)\n    }\n    const pv = p.relative()\n    return pv + (!pv || !p.parent ? '' : this.sep) + name\n  }\n\n  /**\n   * The relative path from the cwd, using / as the path separator.\n   * If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpathPosix()\n   * On posix systems, this is identical to relative().\n   */\n  relativePosix(): string {\n    if (this.sep === '/') return this.relative()\n    if (this.isCWD) return ''\n    if (this.#relativePosix !== undefined) return this.#relativePosix\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relativePosix = this.fullpathPosix())\n    }\n    const pv = p.relativePosix()\n    return pv + (!pv || !p.parent ? '' : '/') + name\n  }\n\n  /**\n   * The fully resolved path string for this Path entry\n   */\n  fullpath(): string {\n    if (this.#fullpath !== undefined) {\n      return this.#fullpath\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#fullpath = this.name)\n    }\n    const pv = p.fullpath()\n    const fp = pv + (!p.parent ? '' : this.sep) + name\n    return (this.#fullpath = fp)\n  }\n\n  /**\n   * On platforms other than windows, this is identical to fullpath.\n   *\n   * On windows, this is overridden to return the forward-slash form of the\n   * full UNC path.\n   */\n  fullpathPosix(): string {\n    if (this.#fullpathPosix !== undefined) return this.#fullpathPosix\n    if (this.sep === '/') return (this.#fullpathPosix = this.fullpath())\n    if (!this.parent) {\n      const p = this.fullpath().replace(/\\\\/g, '/')\n      if (/^[a-z]:\\//i.test(p)) {\n        return (this.#fullpathPosix = `//?/${p}`)\n      } else {\n        return (this.#fullpathPosix = p)\n      }\n    }\n    const p = this.parent\n    const pfpp = p.fullpathPosix()\n    const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name\n    return (this.#fullpathPosix = fpp)\n  }\n\n  /**\n   * Is the Path of an unknown type?\n   *\n   * Note that we might know *something* about it if there has been a previous\n   * filesystem operation, for example that it does not exist, or is not a\n   * link, or whether it has child entries.\n   */\n  isUnknown(): boolean {\n    return (this.#type & IFMT) === UNKNOWN\n  }\n\n  isType(type: Type): boolean {\n    return this[`is${type}`]()\n  }\n\n  getType(): Type {\n    return (\n      this.isUnknown() ? 'Unknown'\n      : this.isDirectory() ? 'Directory'\n      : this.isFile() ? 'File'\n      : this.isSymbolicLink() ? 'SymbolicLink'\n      : this.isFIFO() ? 'FIFO'\n      : this.isCharacterDevice() ? 'CharacterDevice'\n      : this.isBlockDevice() ? 'BlockDevice'\n      : /* c8 ignore start */ this.isSocket() ? 'Socket'\n      : 'Unknown'\n    )\n    /* c8 ignore stop */\n  }\n\n  /**\n   * Is the Path a regular file?\n   */\n  isFile(): boolean {\n    return (this.#type & IFMT) === IFREG\n  }\n\n  /**\n   * Is the Path a directory?\n   */\n  isDirectory(): boolean {\n    return (this.#type & IFMT) === IFDIR\n  }\n\n  /**\n   * Is the path a character device?\n   */\n  isCharacterDevice(): boolean {\n    return (this.#type & IFMT) === IFCHR\n  }\n\n  /**\n   * Is the path a block device?\n   */\n  isBlockDevice(): boolean {\n    return (this.#type & IFMT) === IFBLK\n  }\n\n  /**\n   * Is the path a FIFO pipe?\n   */\n  isFIFO(): boolean {\n    return (this.#type & IFMT) === IFIFO\n  }\n\n  /**\n   * Is the path a socket?\n   */\n  isSocket(): boolean {\n    return (this.#type & IFMT) === IFSOCK\n  }\n\n  /**\n   * Is the path a symbolic link?\n   */\n  isSymbolicLink(): boolean {\n    return (this.#type & IFLNK) === IFLNK\n  }\n\n  /**\n   * Return the entry if it has been subject of a successful lstat, or\n   * undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* simply\n   * mean that we haven't called lstat on it.\n   */\n  lstatCached(): PathBase | undefined {\n    return this.#type & LSTAT_CALLED ? this : undefined\n  }\n\n  /**\n   * Return the cached link target if the entry has been the subject of a\n   * successful readlink, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readlink() has been called at some point.\n   */\n  readlinkCached(): PathBase | undefined {\n    return this.#linkTarget\n  }\n\n  /**\n   * Returns the cached realpath target if the entry has been the subject\n   * of a successful realpath, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * realpath() has been called at some point.\n   */\n  realpathCached(): PathBase | undefined {\n    return this.#realpath\n  }\n\n  /**\n   * Returns the cached child Path entries array if the entry has been the\n   * subject of a successful readdir(), or [] otherwise.\n   *\n   * Does not read the filesystem, so an empty array *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readdir() has been called recently enough to still be valid.\n   */\n  readdirCached(): PathBase[] {\n    const children = this.children()\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * Return true if it's worth trying to readlink.  Ie, we don't (yet) have\n   * any indication that readlink will definitely fail.\n   *\n   * Returns false if the path is known to not be a symlink, if a previous\n   * readlink failed, or if the entry does not exist.\n   */\n  canReadlink(): boolean {\n    if (this.#linkTarget) return true\n    if (!this.parent) return false\n    // cases where it cannot possibly succeed\n    const ifmt = this.#type & IFMT\n    return !(\n      (ifmt !== UNKNOWN && ifmt !== IFLNK) ||\n      this.#type & ENOREADLINK ||\n      this.#type & ENOENT\n    )\n  }\n\n  /**\n   * Return true if readdir has previously been successfully called on this\n   * path, indicating that cachedReaddir() is likely valid.\n   */\n  calledReaddir(): boolean {\n    return !!(this.#type & READDIR_CALLED)\n  }\n\n  /**\n   * Returns true if the path is known to not exist. That is, a previous lstat\n   * or readdir failed to verify its existence when that would have been\n   * expected, or a parent entry was marked either enoent or enotdir.\n   */\n  isENOENT(): boolean {\n    return !!(this.#type & ENOENT)\n  }\n\n  /**\n   * Return true if the path is a match for the given path name.  This handles\n   * case sensitivity and unicode normalization.\n   *\n   * Note: even on case-sensitive systems, it is **not** safe to test the\n   * equality of the `.name` property to determine whether a given pathname\n   * matches, due to unicode normalization mismatches.\n   *\n   * Always use this method instead of testing the `path.name` property\n   * directly.\n   */\n  isNamed(n: string): boolean {\n    return !this.nocase ?\n        this.#matchName === normalize(n)\n      : this.#matchName === normalizeNocase(n)\n  }\n\n  /**\n   * Return the Path object corresponding to the target of a symbolic link.\n   *\n   * If the Path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   */\n  async readlink(): Promise<PathBase | undefined> {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = await this.#fs.promises.readlink(this.fullpath())\n      const linkTarget = (await this.parent.realpath())?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  /**\n   * Synchronous {@link PathBase.readlink}\n   */\n  readlinkSync(): PathBase | undefined {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = this.#fs.readlinkSync(this.fullpath())\n      const linkTarget = this.parent.realpathSync()?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  #readdirSuccess(children: Children) {\n    // succeeded, mark readdir called bit\n    this.#type |= READDIR_CALLED\n    // mark all remaining provisional children as ENOENT\n    for (let p = children.provisional; p < children.length; p++) {\n      const c = children[p]\n      if (c) c.#markENOENT()\n    }\n  }\n\n  #markENOENT() {\n    // mark as UNKNOWN and ENOENT\n    if (this.#type & ENOENT) return\n    this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN\n    this.#markChildrenENOENT()\n  }\n\n  #markChildrenENOENT() {\n    // all children are provisional and do not exist\n    const children = this.children()\n    children.provisional = 0\n    for (const p of children) {\n      p.#markENOENT()\n    }\n  }\n\n  #markENOREALPATH() {\n    this.#type |= ENOREALPATH\n    this.#markENOTDIR()\n  }\n\n  // save the information when we know the entry is not a dir\n  #markENOTDIR() {\n    // entry is not a directory, so any children can't exist.\n    // this *should* be impossible, since any children created\n    // after it's been marked ENOTDIR should be marked ENOENT,\n    // so it won't even get to this point.\n    /* c8 ignore start */\n    if (this.#type & ENOTDIR) return\n    /* c8 ignore stop */\n    let t = this.#type\n    // this could happen if we stat a dir, then delete it,\n    // then try to read it or one of its children.\n    if ((t & IFMT) === IFDIR) t &= IFMT_UNKNOWN\n    this.#type = t | ENOTDIR\n    this.#markChildrenENOENT()\n  }\n\n  #readdirFail(code: string = '') {\n    // markENOTDIR and markENOENT also set provisional=0\n    if (code === 'ENOTDIR' || code === 'EPERM') {\n      this.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      this.#markENOENT()\n    } else {\n      this.children().provisional = 0\n    }\n  }\n\n  #lstatFail(code: string = '') {\n    // Windows just raises ENOENT in this case, disable for win CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR') {\n      // already know it has a parent by this point\n      const p = this.parent as PathBase\n      p.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      /* c8 ignore stop */\n      this.#markENOENT()\n    }\n  }\n\n  #readlinkFail(code: string = '') {\n    let ter = this.#type\n    ter |= ENOREADLINK\n    if (code === 'ENOENT') ter |= ENOENT\n    // windows gets a weird error when you try to readlink a file\n    if (code === 'EINVAL' || code === 'UNKNOWN') {\n      // exists, but not a symlink, we don't know WHAT it is, so remove\n      // all IFMT bits.\n      ter &= IFMT_UNKNOWN\n    }\n    this.#type = ter\n    // windows just gets ENOENT in this case.  We do cover the case,\n    // just disabled because it's impossible on Windows CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR' && this.parent) {\n      this.parent.#markENOTDIR()\n    }\n    /* c8 ignore stop */\n  }\n\n  #readdirAddChild(e: Dirent, c: Children) {\n    return (\n      this.#readdirMaybePromoteChild(e, c) ||\n      this.#readdirAddNewChild(e, c)\n    )\n  }\n\n  #readdirAddNewChild(e: Dirent, c: Children): PathBase {\n    // alloc new entry at head, so it's never provisional\n    const type = entToType(e)\n    const child = this.newChild(e.name, type, { parent: this })\n    const ifmt = child.#type & IFMT\n    if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {\n      child.#type |= ENOTDIR\n    }\n    c.unshift(child)\n    c.provisional++\n    return child\n  }\n\n  #readdirMaybePromoteChild(e: Dirent, c: Children): PathBase | undefined {\n    for (let p = c.provisional; p < c.length; p++) {\n      const pchild = c[p]\n      const name =\n        this.nocase ? normalizeNocase(e.name) : normalize(e.name)\n      if (name !== pchild!.#matchName) {\n        continue\n      }\n\n      return this.#readdirPromoteChild(e, pchild!, p, c)\n    }\n  }\n\n  #readdirPromoteChild(\n    e: Dirent,\n    p: PathBase,\n    index: number,\n    c: Children,\n  ): PathBase {\n    const v = p.name\n    // retain any other flags, but set ifmt from dirent\n    p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e)\n    // case sensitivity fixing when we learn the true name.\n    if (v !== e.name) p.name = e.name\n\n    // just advance provisional index (potentially off the list),\n    // otherwise we have to splice/pop it out and re-insert at head\n    if (index !== c.provisional) {\n      if (index === c.length - 1) c.pop()\n      else c.splice(index, 1)\n      c.unshift(p)\n    }\n    c.provisional++\n    return p\n  }\n\n  /**\n   * Call lstat() on this Path, and update all known information that can be\n   * determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(): Promise<PathBase | undefined> {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(await this.#fs.promises.lstat(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  /**\n   * synchronous {@link PathBase.lstat}\n   */\n  lstatSync(): PathBase | undefined {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(this.#fs.lstatSync(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  #applyStat(st: Stats) {\n    const {\n      atime,\n      atimeMs,\n      birthtime,\n      birthtimeMs,\n      blksize,\n      blocks,\n      ctime,\n      ctimeMs,\n      dev,\n      gid,\n      ino,\n      mode,\n      mtime,\n      mtimeMs,\n      nlink,\n      rdev,\n      size,\n      uid,\n    } = st\n    this.#atime = atime\n    this.#atimeMs = atimeMs\n    this.#birthtime = birthtime\n    this.#birthtimeMs = birthtimeMs\n    this.#blksize = blksize\n    this.#blocks = blocks\n    this.#ctime = ctime\n    this.#ctimeMs = ctimeMs\n    this.#dev = dev\n    this.#gid = gid\n    this.#ino = ino\n    this.#mode = mode\n    this.#mtime = mtime\n    this.#mtimeMs = mtimeMs\n    this.#nlink = nlink\n    this.#rdev = rdev\n    this.#size = size\n    this.#uid = uid\n    const ifmt = entToType(st)\n    // retain any other flags, but set the ifmt\n    this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED\n    if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {\n      this.#type |= ENOTDIR\n    }\n  }\n\n  #onReaddirCB: ((\n    er: NodeJS.ErrnoException | null,\n    entries: Path[],\n  ) => any)[] = []\n  #readdirCBInFlight: boolean = false\n  #callOnReaddirCB(children: Path[]) {\n    this.#readdirCBInFlight = false\n    const cbs = this.#onReaddirCB.slice()\n    this.#onReaddirCB.length = 0\n    cbs.forEach(cb => cb(null, children))\n  }\n\n  /**\n   * Standard node-style callback interface to get list of directory entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * @param cb The callback called with (er, entries).  Note that the `er`\n   * param is somewhat extraneous, as all readdir() errors are handled and\n   * simply result in an empty set of entries being returned.\n   * @param allowZalgo Boolean indicating that immediately known results should\n   * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release\n   * zalgo at your peril, the dark pony lord is devious and unforgiving.\n   */\n  readdirCB(\n    cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any,\n    allowZalgo: boolean = false,\n  ): void {\n    if (!this.canReaddir()) {\n      if (allowZalgo) cb(null, [])\n      else queueMicrotask(() => cb(null, []))\n      return\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      const c = children.slice(0, children.provisional)\n      if (allowZalgo) cb(null, c)\n      else queueMicrotask(() => cb(null, c))\n      return\n    }\n\n    // don't have to worry about zalgo at this point.\n    this.#onReaddirCB.push(cb)\n    if (this.#readdirCBInFlight) {\n      return\n    }\n    this.#readdirCBInFlight = true\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {\n      if (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      } else {\n        // if we didn't get an error, we always get entries.\n        //@ts-ignore\n        for (const e of entries) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      }\n      this.#callOnReaddirCB(children.slice(0, children.provisional))\n      return\n    })\n  }\n\n  #asyncReaddirInFlight?: Promise<void>\n\n  /**\n   * Return an array of known child entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async readdir(): Promise<PathBase[]> {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    if (this.#asyncReaddirInFlight) {\n      await this.#asyncReaddirInFlight\n    } else {\n      /* c8 ignore start */\n      let resolve: () => void = () => {}\n      /* c8 ignore stop */\n      this.#asyncReaddirInFlight = new Promise<void>(\n        res => (resolve = res),\n      )\n      try {\n        for (const e of await this.#fs.promises.readdir(fullpath, {\n          withFileTypes: true,\n        })) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      } catch (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      }\n      this.#asyncReaddirInFlight = undefined\n      resolve()\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * synchronous {@link PathBase.readdir}\n   */\n  readdirSync(): PathBase[] {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    try {\n      for (const e of this.#fs.readdirSync(fullpath, {\n        withFileTypes: true,\n      })) {\n        this.#readdirAddChild(e, children)\n      }\n      this.#readdirSuccess(children)\n    } catch (er) {\n      this.#readdirFail((er as NodeJS.ErrnoException).code)\n      children.provisional = 0\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  canReaddir() {\n    if (this.#type & ENOCHILD) return false\n    const ifmt = IFMT & this.#type\n    // we always set ENOTDIR when setting IFMT, so should be impossible\n    /* c8 ignore start */\n    if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {\n      return false\n    }\n    /* c8 ignore stop */\n    return true\n  }\n\n  shouldWalk(\n    dirs: Set<PathBase | undefined>,\n    walkFilter?: (e: PathBase) => boolean,\n  ): boolean {\n    return (\n      (this.#type & IFDIR) === IFDIR &&\n      !(this.#type & ENOCHILD) &&\n      !dirs.has(this) &&\n      (!walkFilter || walkFilter(this))\n    )\n  }\n\n  /**\n   * Return the Path object corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   * On success, returns a Path object.\n   */\n  async realpath(): Promise<PathBase | undefined> {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = await this.#fs.promises.realpath(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Synchronous {@link realpath}\n   */\n  realpathSync(): PathBase | undefined {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = this.#fs.realpathSync(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Internal method to mark this Path object as the scurry cwd,\n   * called by {@link PathScurry#chdir}\n   *\n   * @internal\n   */\n  [setAsCwd](oldCwd: PathBase): void {\n    if (oldCwd === this) return\n    oldCwd.isCWD = false\n    this.isCWD = true\n\n    const changed = new Set<PathBase>([])\n    let rp = []\n    let p: PathBase = this\n    while (p && p.parent) {\n      changed.add(p)\n      p.#relative = rp.join(this.sep)\n      p.#relativePosix = rp.join('/')\n      p = p.parent\n      rp.push('..')\n    }\n    // now un-memoize parents of old cwd\n    p = oldCwd\n    while (p && p.parent && !changed.has(p)) {\n      p.#relative = undefined\n      p.#relativePosix = undefined\n      p = p.parent\n    }\n  }\n}\n\n/**\n * Path class used on win32 systems\n *\n * Uses `'\\\\'` as the path separator for returned paths, either `'\\\\'` or `'/'`\n * as the path separator for parsing paths.\n */\nexport class PathWin32 extends PathBase {\n  /**\n   * Separator for generating path strings.\n   */\n  sep: '\\\\' = '\\\\'\n  /**\n   * Separator for parsing path strings.\n   */\n  splitSep: RegExp = eitherSep\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathWin32(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return win32.parse(path).root\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(rootPath: string): PathBase {\n    rootPath = uncToDrive(rootPath.toUpperCase())\n    if (rootPath === this.root.name) {\n      return this.root\n    }\n    // ok, not that one, check if it matches another we know about\n    for (const [compare, root] of Object.entries(this.roots)) {\n      if (this.sameRoot(rootPath, compare)) {\n        return (this.roots[rootPath] = root)\n      }\n    }\n    // otherwise, have to create a new one.\n    return (this.roots[rootPath] = new PathScurryWin32(\n      rootPath,\n      this,\n    ).root)\n  }\n\n  /**\n   * @internal\n   */\n  sameRoot(rootPath: string, compare: string = this.root.name): boolean {\n    // windows can (rarely) have case-sensitive filesystem, but\n    // UNC and drive letters are always case-insensitive, and canonically\n    // represented uppercase.\n    rootPath = rootPath\n      .toUpperCase()\n      .replace(/\\//g, '\\\\')\n      .replace(uncDriveRegexp, '$1\\\\')\n    return rootPath === compare\n  }\n}\n\n/**\n * Path class used on all posix systems.\n *\n * Uses `'/'` as the path separator.\n */\nexport class PathPosix extends PathBase {\n  /**\n   * separator for parsing path strings\n   */\n  splitSep: '/' = '/'\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return path.startsWith('/') ? '/' : ''\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(_rootPath: string): PathBase {\n    return this.root\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathPosix(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n}\n\n/**\n * Options that may be provided to the PathScurry constructor\n */\nexport interface PathScurryOpts {\n  /**\n   * perform case-insensitive path matching. Default based on platform\n   * subclass.\n   */\n  nocase?: boolean\n  /**\n   * Number of Path entries to keep in the cache of Path child references.\n   *\n   * Setting this higher than 65536 will dramatically increase the data\n   * consumption and construction time overhead of each PathScurry.\n   *\n   * Setting this value to 256 or lower will significantly reduce the data\n   * consumption and construction time overhead, but may also reduce resolve()\n   * and readdir() performance on large filesystems.\n   *\n   * Default `16384`.\n   */\n  childrenCacheSize?: number\n  /**\n   * An object that overrides the built-in functions from the fs and\n   * fs/promises modules.\n   *\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * The base class for all PathScurry classes, providing the interface for path\n * resolution and filesystem operations.\n *\n * Typically, you should *not* instantiate this class directly, but rather one\n * of the platform-specific classes, or the exported {@link PathScurry} which\n * defaults to the current platform.\n */\nexport abstract class PathScurryBase {\n  /**\n   * The root Path entry for the current working directory of this Scurry\n   */\n  root: PathBase\n  /**\n   * The string path for the root of this Scurry's current working directory\n   */\n  rootPath: string\n  /**\n   * A collection of all roots encountered, referenced by rootPath\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * The Path entry corresponding to this PathScurry's current working directory.\n   */\n  cwd: PathBase\n  #resolveCache: ResolveCache\n  #resolvePosixCache: ResolveCache\n  #children: ChildrenCache\n  /**\n   * Perform path comparisons case-insensitively.\n   *\n   * Defaults true on Darwin and Windows systems, false elsewhere.\n   */\n  nocase: boolean\n\n  /**\n   * The path separator used for parsing paths\n   *\n   * `'/'` on Posix systems, either `'/'` or `'\\\\'` on Windows\n   */\n  abstract sep: string | RegExp\n\n  #fs: FSValue\n\n  /**\n   * This class should not be instantiated directly.\n   *\n   * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry\n   *\n   * @internal\n   */\n  constructor(\n    cwd: URL | string = process.cwd(),\n    pathImpl: typeof win32 | typeof posix,\n    sep: string | RegExp,\n    {\n      nocase,\n      childrenCacheSize = 16 * 1024,\n      fs = defaultFS,\n    }: PathScurryOpts = {},\n  ) {\n    this.#fs = fsFromOption(fs)\n    if (cwd instanceof URL || cwd.startsWith('file://')) {\n      cwd = fileURLToPath(cwd)\n    }\n    // resolve and split root, and then add to the store.\n    // this is the only time we call path.resolve()\n    const cwdPath = pathImpl.resolve(cwd)\n    this.roots = Object.create(null)\n    this.rootPath = this.parseRootPath(cwdPath)\n    this.#resolveCache = new ResolveCache()\n    this.#resolvePosixCache = new ResolveCache()\n    this.#children = new ChildrenCache(childrenCacheSize)\n\n    const split = cwdPath.substring(this.rootPath.length).split(sep)\n    // resolve('/') leaves '', splits to [''], we don't want that.\n    if (split.length === 1 && !split[0]) {\n      split.pop()\n    }\n    /* c8 ignore start */\n    if (nocase === undefined) {\n      throw new TypeError(\n        'must provide nocase setting to PathScurryBase ctor',\n      )\n    }\n    /* c8 ignore stop */\n    this.nocase = nocase\n    this.root = this.newRoot(this.#fs)\n    this.roots[this.rootPath] = this.root\n    let prev: PathBase = this.root\n    let len = split.length - 1\n    const joinSep = pathImpl.sep\n    let abs = this.rootPath\n    let sawFirst = false\n    for (const part of split) {\n      const l = len--\n      prev = prev.child(part, {\n        relative: new Array(l).fill('..').join(joinSep),\n        relativePosix: new Array(l).fill('..').join('/'),\n        fullpath: (abs += (sawFirst ? '' : joinSep) + part),\n      })\n      sawFirst = true\n    }\n    this.cwd = prev\n  }\n\n  /**\n   * Get the depth of a provided path, string, or the cwd\n   */\n  depth(path: Path | string = this.cwd): number {\n    if (typeof path === 'string') {\n      path = this.cwd.resolve(path)\n    }\n    return path.depth()\n  }\n\n  /**\n   * Parse the root portion of a path string\n   *\n   * @internal\n   */\n  abstract parseRootPath(dir: string): string\n  /**\n   * create a new Path to use as root during construction.\n   *\n   * @internal\n   */\n  abstract newRoot(fs: FSValue): PathBase\n  /**\n   * Determine whether a given path string is absolute\n   */\n  abstract isAbsolute(p: string): boolean\n\n  /**\n   * Return the cache of child entries.  Exposed so subclasses can create\n   * child Path objects in a platform-specific way.\n   *\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolve(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolveCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpath()\n    this.#resolveCache.set(r, result)\n    return result\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string, returning\n   * the posix path.  Identical to .resolve() on posix systems, but on\n   * windows will return a forward-slash separated UNC path.\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolvePosix(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolvePosixCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpathPosix()\n    this.#resolvePosixCache.set(r, result)\n    return result\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or entry\n   */\n  relative(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relative()\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or\n   * entry, using / as the path delimiter, even on Windows.\n   */\n  relativePosix(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relativePosix()\n  }\n\n  /**\n   * Return the basename for the provided string or Path object\n   */\n  basename(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.name\n  }\n\n  /**\n   * Return the dirname for the provided string or Path object\n   */\n  dirname(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return (entry.parent || entry).fullpath()\n  }\n\n  /**\n   * Return an array of known child entries.\n   *\n   * First argument may be either a string, or a Path object.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set\n   * `{ withFileTypes: false }` to return strings.\n   */\n\n  readdir(): Promise<PathBase[]>\n  readdir(opts: { withFileTypes: true }): Promise<PathBase[]>\n  readdir(opts: { withFileTypes: false }): Promise<string[]>\n  readdir(opts: { withFileTypes: boolean }): Promise<PathBase[] | string[]>\n  readdir(entry: PathBase | string): Promise<PathBase[]>\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): Promise<PathBase[]>\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): Promise<string[]>\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): Promise<PathBase[] | string[]>\n  async readdir(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): Promise<PathBase[] | string[]> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else {\n      const p = await entry.readdir()\n      return withFileTypes ? p : p.map(e => e.name)\n    }\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readdir}\n   */\n  readdirSync(): PathBase[]\n  readdirSync(opts: { withFileTypes: true }): PathBase[]\n  readdirSync(opts: { withFileTypes: false }): string[]\n  readdirSync(opts: { withFileTypes: boolean }): PathBase[] | string[]\n  readdirSync(entry: PathBase | string): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): string[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): PathBase[] | string[]\n  readdirSync(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes = true } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else if (withFileTypes) {\n      return entry.readdirSync()\n    } else {\n      return entry.readdirSync().map(e => e.name)\n    }\n  }\n\n  /**\n   * Call lstat() on the string or Path object, and update all known\n   * information that can be determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(\n    entry: string | PathBase = this.cwd,\n  ): Promise<PathBase | undefined> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstat()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.lstat}\n   */\n  lstatSync(entry: string | PathBase = this.cwd): PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstatSync()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to the target of a\n   * symbolic link.\n   *\n   * If the path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  readlink(): Promise<string | undefined>\n  readlink(opt: { withFileTypes: false }): Promise<string | undefined>\n  readlink(opt: { withFileTypes: true }): Promise<PathBase | undefined>\n  readlink(opt: {\n    withFileTypes: boolean\n  }): Promise<PathBase | string | undefined>\n  readlink(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise<string | undefined>\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise<PathBase | undefined>\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise<string | PathBase | undefined>\n  async readlink(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise<string | PathBase | undefined> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.readlink()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readlink}\n   */\n  readlinkSync(): string | undefined\n  readlinkSync(opt: { withFileTypes: false }): string | undefined\n  readlinkSync(opt: { withFileTypes: true }): PathBase | undefined\n  readlinkSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.readlinkSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  realpath(): Promise<string | undefined>\n  realpath(opt: { withFileTypes: false }): Promise<string | undefined>\n  realpath(opt: { withFileTypes: true }): Promise<PathBase | undefined>\n  realpath(opt: {\n    withFileTypes: boolean\n  }): Promise<PathBase | string | undefined>\n  realpath(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise<string | undefined>\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise<PathBase | undefined>\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise<string | PathBase | undefined>\n  async realpath(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise<string | PathBase | undefined> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.realpath()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  realpathSync(): string | undefined\n  realpathSync(opt: { withFileTypes: false }): string | undefined\n  realpathSync(opt: { withFileTypes: true }): PathBase | undefined\n  realpathSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  realpathSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.realpathSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Asynchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walk(): Promise<PathBase[]>\n  walk(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise<PathBase[]>\n  walk(opts: WalkOptionsWithFileTypesFalse): Promise<string[]>\n  walk(opts: WalkOptions): Promise<string[] | PathBase[]>\n  walk(entry: string | PathBase): Promise<PathBase[]>\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise<PathBase[]>\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Promise<string[]>\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Promise<PathBase[] | string[]>\n  async walk(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Promise<PathBase[] | string[]> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set<PathBase>()\n    const walk = (\n      dir: PathBase,\n      cb: (er?: NodeJS.ErrnoException) => void,\n    ) => {\n      dirs.add(dir)\n      dir.readdirCB((er, entries) => {\n        /* c8 ignore start */\n        if (er) {\n          return cb(er)\n        }\n        /* c8 ignore stop */\n        let len = entries.length\n        if (!len) return cb()\n        const next = () => {\n          if (--len === 0) {\n            cb()\n          }\n        }\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            results.push(withFileTypes ? e : e.fullpath())\n          }\n          if (follow && e.isSymbolicLink()) {\n            e.realpath()\n              .then(r => (r?.isUnknown() ? r.lstat() : r))\n              .then(r =>\n                r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next(),\n              )\n          } else {\n            if (e.shouldWalk(dirs, walkFilter)) {\n              walk(e, next)\n            } else {\n              next()\n            }\n          }\n        }\n      }, true) // zalgooooooo\n    }\n\n    const start = entry\n    return new Promise<PathBase[] | string[]>((res, rej) => {\n      walk(start, er => {\n        /* c8 ignore start */\n        if (er) return rej(er)\n        /* c8 ignore stop */\n        res(results as PathBase[] | string[])\n      })\n    })\n  }\n\n  /**\n   * Synchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walkSync(): PathBase[]\n  walkSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): PathBase[]\n  walkSync(opts: WalkOptionsWithFileTypesFalse): string[]\n  walkSync(opts: WalkOptions): string[] | PathBase[]\n  walkSync(entry: string | PathBase): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): string[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): PathBase[] | string[]\n  walkSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set<PathBase>([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          results.push(withFileTypes ? e : e.fullpath())\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n    return results as string[] | PathBase[]\n  }\n\n  /**\n   * Support for `for await`\n   *\n   * Alias for {@link PathScurryBase.iterate}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  [Symbol.asyncIterator]() {\n    return this.iterate()\n  }\n\n  /**\n   * Async generator form of {@link PathScurryBase.walk}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking, especially if most/all of the directory tree has been previously\n   * walked.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  iterate(): AsyncGenerator<PathBase, void, void>\n  iterate(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator<PathBase, void, void>\n  iterate(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator<string, void, void>\n  iterate(opts: WalkOptions): AsyncGenerator<string | PathBase, void, void>\n  iterate(entry: string | PathBase): AsyncGenerator<PathBase, void, void>\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator<PathBase, void, void>\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator<string, void, void>\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): AsyncGenerator<PathBase | string, void, void>\n  iterate(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    options: WalkOptions = {},\n  ): AsyncGenerator<PathBase | string, void, void> {\n    // iterating async over the stream is significantly more performant,\n    // especially in the warm-cache scenario, because it buffers up directory\n    // entries in the background instead of waiting for a yield for each one.\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      options = entry\n      entry = this.cwd\n    }\n    return this.stream(entry, options)[Symbol.asyncIterator]()\n  }\n\n  /**\n   * Iterating over a PathScurry performs a synchronous walk.\n   *\n   * Alias for {@link PathScurryBase.iterateSync}\n   */\n  [Symbol.iterator]() {\n    return this.iterateSync()\n  }\n\n  iterateSync(): Generator<PathBase, void, void>\n  iterateSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator<PathBase, void, void>\n  iterateSync(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator<string, void, void>\n  iterateSync(opts: WalkOptions): Generator<string | PathBase, void, void>\n  iterateSync(entry: string | PathBase): Generator<PathBase, void, void>\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator<PathBase, void, void>\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator<string, void, void>\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Generator<PathBase | string, void, void>\n  *iterateSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Generator<PathBase | string, void, void> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    if (!filter || filter(entry)) {\n      yield withFileTypes ? entry : entry.fullpath()\n    }\n    const dirs = new Set<PathBase>([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          yield withFileTypes ? e : e.fullpath()\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n  }\n\n  /**\n   * Stream form of {@link PathScurryBase.walk}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   */\n  stream(): Minipass<PathBase>\n  stream(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass<PathBase>\n  stream(opts: WalkOptionsWithFileTypesFalse): Minipass<string>\n  stream(opts: WalkOptions): Minipass<string | PathBase>\n  stream(entry: string | PathBase): Minipass<PathBase>\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass<PathBase>\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass<string>\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass<string> | Minipass<PathBase>\n  stream(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass<string> | Minipass<PathBase> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass<string | PathBase>({ objectMode: true })\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set<PathBase>()\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n\n        processing++\n        dirs.add(dir)\n\n        const onReaddir = (\n          er: null | NodeJS.ErrnoException,\n          entries: PathBase[],\n          didRealpaths: boolean = false,\n        ) => {\n          /* c8 ignore start */\n          if (er) return results.emit('error', er)\n          /* c8 ignore stop */\n          if (follow && !didRealpaths) {\n            const promises: Promise<PathBase | undefined>[] = []\n            for (const e of entries) {\n              if (e.isSymbolicLink()) {\n                promises.push(\n                  e\n                    .realpath()\n                    .then((r: PathBase | undefined) =>\n                      r?.isUnknown() ? r.lstat() : r,\n                    ),\n                )\n              }\n            }\n            if (promises.length) {\n              Promise.all(promises).then(() =>\n                onReaddir(null, entries, true),\n              )\n              return\n            }\n          }\n\n          for (const e of entries) {\n            if (e && (!filter || filter(e))) {\n              if (!results.write(withFileTypes ? e : e.fullpath())) {\n                paused = true\n              }\n            }\n          }\n\n          processing--\n          for (const e of entries) {\n            const r = e.realpathCached() || e\n            if (r.shouldWalk(dirs, walkFilter)) {\n              queue.push(r)\n            }\n          }\n          if (paused && !results.flowing) {\n            results.once('drain', process)\n          } else if (!sync) {\n            process()\n          }\n        }\n\n        // zalgo containment\n        let sync = true\n        dir.readdirCB(onReaddir, true)\n        sync = false\n      }\n    }\n    process()\n    return results as Minipass<string> | Minipass<PathBase>\n  }\n\n  /**\n   * Synchronous form of {@link PathScurryBase.stream}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   *\n   * Will complete the walk in a single tick if the stream is consumed fully.\n   * Otherwise, will pause as needed for stream backpressure.\n   */\n  streamSync(): Minipass<PathBase>\n  streamSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass<PathBase>\n  streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass<string>\n  streamSync(opts: WalkOptions): Minipass<string | PathBase>\n  streamSync(entry: string | PathBase): Minipass<PathBase>\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass<PathBase>\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass<string>\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass<string> | Minipass<PathBase>\n  streamSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass<string> | Minipass<PathBase> {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass<string | PathBase>({ objectMode: true })\n    const dirs = new Set<PathBase>()\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n        processing++\n        dirs.add(dir)\n\n        const entries = dir.readdirSync()\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            if (!results.write(withFileTypes ? e : e.fullpath())) {\n              paused = true\n            }\n          }\n        }\n        processing--\n        for (const e of entries) {\n          let r: PathBase | undefined = e\n          if (e.isSymbolicLink()) {\n            if (!(follow && (r = e.realpathSync()))) continue\n            if (r.isUnknown()) r.lstatSync()\n          }\n          if (r.shouldWalk(dirs, walkFilter)) {\n            queue.push(r)\n          }\n        }\n      }\n      if (paused && !results.flowing) results.once('drain', process)\n    }\n    process()\n    return results as Minipass<string> | Minipass<PathBase>\n  }\n\n  chdir(path: string | Path = this.cwd) {\n    const oldCwd = this.cwd\n    this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path\n    this.cwd[setAsCwd](oldCwd)\n  }\n}\n\n/**\n * Options provided to all walk methods.\n */\nexport interface WalkOptions {\n  /**\n   * Return results as {@link PathBase} objects rather than strings.\n   * When set to false, results are fully resolved paths, as returned by\n   * {@link PathBase.fullpath}.\n   * @default true\n   */\n  withFileTypes?: boolean\n\n  /**\n   *  Attempt to read directory entries from symbolic links. Otherwise, only\n   *  actual directories are traversed. Regardless of this setting, a given\n   *  target path will only ever be walked once, meaning that a symbolic link\n   *  to a previously traversed directory will never be followed.\n   *\n   *  Setting this imposes a slight performance penalty, because `readlink`\n   *  must be called on all symbolic links encountered, in order to avoid\n   *  infinite cycles.\n   * @default false\n   */\n  follow?: boolean\n\n  /**\n   * Only return entries where the provided function returns true.\n   *\n   * This will not prevent directories from being traversed, even if they do\n   * not pass the filter, though it will prevent directories themselves from\n   * being included in the result set.  See {@link walkFilter}\n   *\n   * Asynchronous functions are not supported here.\n   *\n   * By default, if no filter is provided, all entries and traversed\n   * directories are included.\n   */\n  filter?: (entry: PathBase) => boolean\n\n  /**\n   * Only traverse directories (and in the case of {@link follow} being set to\n   * true, symbolic links to directories) if the provided function returns\n   * true.\n   *\n   * This will not prevent directories from being included in the result set,\n   * even if they do not pass the supplied filter function.  See {@link filter}\n   * to do that.\n   *\n   * Asynchronous functions are not supported here.\n   */\n  walkFilter?: (entry: PathBase) => boolean\n}\n\nexport type WalkOptionsWithFileTypesUnset = WalkOptions & {\n  withFileTypes?: undefined\n}\nexport type WalkOptionsWithFileTypesTrue = WalkOptions & {\n  withFileTypes: true\n}\nexport type WalkOptionsWithFileTypesFalse = WalkOptions & {\n  withFileTypes: false\n}\n\n/**\n * Windows implementation of {@link PathScurryBase}\n *\n * Defaults to case insensitve, uses `'\\\\'` to generate path strings.  Uses\n * {@link PathWin32} for Path objects.\n */\nexport class PathScurryWin32 extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '\\\\' = '\\\\'\n\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, win32, '\\\\', { ...opts, nocase })\n    this.nocase = nocase\n    for (let p: PathBase | undefined = this.cwd; p; p = p.parent) {\n      p.nocase = this.nocase\n    }\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(dir: string): string {\n    // if the path starts with a single separator, it's not a UNC, and we'll\n    // just get separator as the root, and driveFromUNC will return \\\n    // In that case, mount \\ on the root from the cwd.\n    return win32.parse(dir).root.toUpperCase()\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathWin32(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return (\n      p.startsWith('/') || p.startsWith('\\\\') || /^[a-z]:(\\/|\\\\)/i.test(p)\n    )\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for all posix systems other than Darwin.\n *\n * Defaults to case-sensitive matching, uses `'/'` to generate path strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryPosix extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = false } = opts\n    super(cwd, posix, '/', { ...opts, nocase })\n    this.nocase = nocase\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(_dir: string): string {\n    return '/'\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathPosix(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return p.startsWith('/')\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for Darwin (macOS) systems.\n *\n * Defaults to case-insensitive matching, uses `'/'` for generating path\n * strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryDarwin extends PathScurryPosix {\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, { ...opts, nocase })\n  }\n}\n\n/**\n * Default {@link PathBase} implementation for the current platform.\n *\n * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.\n */\nexport const Path = process.platform === 'win32' ? PathWin32 : PathPosix\nexport type Path = PathBase | InstanceType<typeof Path>\n\n/**\n * Default {@link PathScurryBase} implementation for the current platform.\n *\n * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on\n * Darwin (macOS) systems, {@link PathScurryPosix} on all others.\n */\nexport const PathScurry:\n  | typeof PathScurryWin32\n  | typeof PathScurryDarwin\n  | typeof PathScurryPosix =\n  process.platform === 'win32' ? PathScurryWin32\n  : process.platform === 'darwin' ? PathScurryDarwin\n  : PathScurryPosix\nexport type PathScurry = PathScurryBase | InstanceType<typeof PathScurry>\n","// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n  p0: '',\n  p1: '',\n  p2: string,\n  p3: string,\n  ...rest: MMPattern[],\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n  pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n  readonly #patternList: PatternList\n  readonly #globList: GlobList\n  readonly #index: number\n  readonly length: number\n  readonly #platform: NodeJS.Platform\n  #rest?: Pattern | null\n  #globString?: string\n  #isDrive?: boolean\n  #isUNC?: boolean\n  #isAbsolute?: boolean\n  #followGlobstar: boolean = true\n\n  constructor(\n    patternList: MMPattern[],\n    globList: string[],\n    index: number,\n    platform: NodeJS.Platform,\n  ) {\n    if (!isPatternList(patternList)) {\n      throw new TypeError('empty pattern list')\n    }\n    if (!isGlobList(globList)) {\n      throw new TypeError('empty glob list')\n    }\n    if (globList.length !== patternList.length) {\n      throw new TypeError('mismatched pattern list and glob list lengths')\n    }\n    this.length = patternList.length\n    if (index < 0 || index >= this.length) {\n      throw new TypeError('index out of range')\n    }\n    this.#patternList = patternList\n    this.#globList = globList\n    this.#index = index\n    this.#platform = platform\n\n    // normalize root entries of absolute patterns on initial creation.\n    if (this.#index === 0) {\n      // c: => ['c:/']\n      // C:/ => ['C:/']\n      // C:/x => ['C:/', 'x']\n      // //host/share => ['//host/share/']\n      // //host/share/ => ['//host/share/']\n      // //host/share/x => ['//host/share/', 'x']\n      // /etc => ['/', 'etc']\n      // / => ['/']\n      if (this.isUNC()) {\n        // '' / '' / 'host' / 'share'\n        const [p0, p1, p2, p3, ...prest] = this.#patternList\n        const [g0, g1, g2, g3, ...grest] = this.#globList\n        if (prest[0] === '') {\n          // ends in /\n          prest.shift()\n          grest.shift()\n        }\n        const p = [p0, p1, p2, p3, ''].join('/')\n        const g = [g0, g1, g2, g3, ''].join('/')\n        this.#patternList = [p, ...prest]\n        this.#globList = [g, ...grest]\n        this.length = this.#patternList.length\n      } else if (this.isDrive() || this.isAbsolute()) {\n        const [p1, ...prest] = this.#patternList\n        const [g1, ...grest] = this.#globList\n        if (prest[0] === '') {\n          // ends in /\n          prest.shift()\n          grest.shift()\n        }\n        const p = (p1 as string) + '/'\n        const g = g1 + '/'\n        this.#patternList = [p, ...prest]\n        this.#globList = [g, ...grest]\n        this.length = this.#patternList.length\n      }\n    }\n  }\n\n  /**\n   * The first entry in the parsed list of patterns\n   */\n  pattern(): MMPattern {\n    return this.#patternList[this.#index] as MMPattern\n  }\n\n  /**\n   * true of if pattern() returns a string\n   */\n  isString(): boolean {\n    return typeof this.#patternList[this.#index] === 'string'\n  }\n  /**\n   * true of if pattern() returns GLOBSTAR\n   */\n  isGlobstar(): boolean {\n    return this.#patternList[this.#index] === GLOBSTAR\n  }\n  /**\n   * true if pattern() returns a regexp\n   */\n  isRegExp(): boolean {\n    return this.#patternList[this.#index] instanceof RegExp\n  }\n\n  /**\n   * The /-joined set of glob parts that make up this pattern\n   */\n  globString(): string {\n    return (this.#globString =\n      this.#globString ||\n      (this.#index === 0 ?\n        this.isAbsolute() ?\n          this.#globList[0] + this.#globList.slice(1).join('/')\n        : this.#globList.join('/')\n      : this.#globList.slice(this.#index).join('/')))\n  }\n\n  /**\n   * true if there are more pattern parts after this one\n   */\n  hasMore(): boolean {\n    return this.length > this.#index + 1\n  }\n\n  /**\n   * The rest of the pattern after this part, or null if this is the end\n   */\n  rest(): Pattern | null {\n    if (this.#rest !== undefined) return this.#rest\n    if (!this.hasMore()) return (this.#rest = null)\n    this.#rest = new Pattern(\n      this.#patternList,\n      this.#globList,\n      this.#index + 1,\n      this.#platform,\n    )\n    this.#rest.#isAbsolute = this.#isAbsolute\n    this.#rest.#isUNC = this.#isUNC\n    this.#rest.#isDrive = this.#isDrive\n    return this.#rest\n  }\n\n  /**\n   * true if the pattern represents a //unc/path/ on windows\n   */\n  isUNC(): boolean {\n    const pl = this.#patternList\n    return this.#isUNC !== undefined ?\n        this.#isUNC\n      : (this.#isUNC =\n          this.#platform === 'win32' &&\n          this.#index === 0 &&\n          pl[0] === '' &&\n          pl[1] === '' &&\n          typeof pl[2] === 'string' &&\n          !!pl[2] &&\n          typeof pl[3] === 'string' &&\n          !!pl[3])\n  }\n\n  // pattern like C:/...\n  // split = ['C:', ...]\n  // XXX: would be nice to handle patterns like `c:*` to test the cwd\n  // in c: for *, but I don't know of a way to even figure out what that\n  // cwd is without actually chdir'ing into it?\n  /**\n   * True if the pattern starts with a drive letter on Windows\n   */\n  isDrive(): boolean {\n    const pl = this.#patternList\n    return this.#isDrive !== undefined ?\n        this.#isDrive\n      : (this.#isDrive =\n          this.#platform === 'win32' &&\n          this.#index === 0 &&\n          this.length > 1 &&\n          typeof pl[0] === 'string' &&\n          /^[a-z]:$/i.test(pl[0]))\n  }\n\n  // pattern = '/' or '/...' or '/x/...'\n  // split = ['', ''] or ['', ...] or ['', 'x', ...]\n  // Drive and UNC both considered absolute on windows\n  /**\n   * True if the pattern is rooted on an absolute path\n   */\n  isAbsolute(): boolean {\n    const pl = this.#patternList\n    return this.#isAbsolute !== undefined ?\n        this.#isAbsolute\n      : (this.#isAbsolute =\n          (pl[0] === '' && pl.length > 1) ||\n          this.isDrive() ||\n          this.isUNC())\n  }\n\n  /**\n   * consume the root of the pattern, and return it\n   */\n  root(): string {\n    const p = this.#patternList[0]\n    return (\n        typeof p === 'string' && this.isAbsolute() && this.#index === 0\n      ) ?\n        p\n      : ''\n  }\n\n  /**\n   * Check to see if the current globstar pattern is allowed to follow\n   * a symbolic link.\n   */\n  checkFollowGlobstar(): boolean {\n    return !(\n      this.#index === 0 ||\n      !this.isGlobstar() ||\n      !this.#followGlobstar\n    )\n  }\n\n  /**\n   * Mark that the current globstar pattern is following a symbolic link\n   */\n  markFollowGlobstar(): boolean {\n    if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n      return false\n    this.#followGlobstar = false\n    return true\n  }\n}\n","// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n  ignored?: (p: Path) => boolean\n  childrenIgnored?: (p: Path) => boolean\n  add?: (ignore: string) => void\n}\n\nconst defaultPlatform: NodeJS.Platform =\n  (\n    typeof process === 'object' &&\n    process &&\n    typeof process.platform === 'string'\n  ) ?\n    process.platform\n  : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n  relative: Minimatch[]\n  relativeChildren: Minimatch[]\n  absolute: Minimatch[]\n  absoluteChildren: Minimatch[]\n  platform: NodeJS.Platform\n  mmopts: MinimatchOptions\n\n  constructor(\n    ignored: string[],\n    {\n      nobrace,\n      nocase,\n      noext,\n      noglobstar,\n      platform = defaultPlatform,\n    }: GlobWalkerOpts,\n  ) {\n    this.relative = []\n    this.absolute = []\n    this.relativeChildren = []\n    this.absoluteChildren = []\n    this.platform = platform\n    this.mmopts = {\n      dot: true,\n      nobrace,\n      nocase,\n      noext,\n      noglobstar,\n      optimizationLevel: 2,\n      platform,\n      nocomment: true,\n      nonegate: true,\n    }\n    for (const ign of ignored) this.add(ign)\n  }\n\n  add(ign: string) {\n    // this is a little weird, but it gives us a clean set of optimized\n    // minimatch matchers, without getting tripped up if one of them\n    // ends in /** inside a brace section, and it's only inefficient at\n    // the start of the walk, not along it.\n    // It'd be nice if the Pattern class just had a .test() method, but\n    // handling globstars is a bit of a pita, and that code already lives\n    // in minimatch anyway.\n    // Another way would be if maybe Minimatch could take its set/globParts\n    // as an option, and then we could at least just use Pattern to test\n    // for absolute-ness.\n    // Yet another way, Minimatch could take an array of glob strings, and\n    // a cwd option, and do the right thing.\n    const mm = new Minimatch(ign, this.mmopts)\n    for (let i = 0; i < mm.set.length; i++) {\n      const parsed = mm.set[i]\n      const globParts = mm.globParts[i]\n      /* c8 ignore start */\n      if (!parsed || !globParts) {\n        throw new Error('invalid pattern object')\n      }\n      // strip off leading ./ portions\n      // https://github.com/isaacs/node-glob/issues/570\n      while (parsed[0] === '.' && globParts[0] === '.') {\n        parsed.shift()\n        globParts.shift()\n      }\n      /* c8 ignore stop */\n      const p = new Pattern(parsed, globParts, 0, this.platform)\n      const m = new Minimatch(p.globString(), this.mmopts)\n      const children = globParts[globParts.length - 1] === '**'\n      const absolute = p.isAbsolute()\n      if (absolute) this.absolute.push(m)\n      else this.relative.push(m)\n      if (children) {\n        if (absolute) this.absoluteChildren.push(m)\n        else this.relativeChildren.push(m)\n      }\n    }\n  }\n\n  ignored(p: Path): boolean {\n    const fullpath = p.fullpath()\n    const fullpaths = `${fullpath}/`\n    const relative = p.relative() || '.'\n    const relatives = `${relative}/`\n    for (const m of this.relative) {\n      if (m.match(relative) || m.match(relatives)) return true\n    }\n    for (const m of this.absolute) {\n      if (m.match(fullpath) || m.match(fullpaths)) return true\n    }\n    return false\n  }\n\n  childrenIgnored(p: Path): boolean {\n    const fullpath = p.fullpath() + '/'\n    const relative = (p.relative() || '.') + '/'\n    for (const m of this.relativeChildren) {\n      if (m.match(relative)) return true\n    }\n    for (const m of this.absoluteChildren) {\n      if (m.match(fullpath)) return true\n    }\n    return false\n  }\n}\n","// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n  store: Map<string, Set<string>>\n  constructor(store: Map<string, Set<string>> = new Map()) {\n    this.store = store\n  }\n  copy() {\n    return new HasWalkedCache(new Map(this.store))\n  }\n  hasWalked(target: Path, pattern: Pattern) {\n    return this.store.get(target.fullpath())?.has(pattern.globString())\n  }\n  storeWalked(target: Path, pattern: Pattern) {\n    const fullpath = target.fullpath()\n    const cached = this.store.get(fullpath)\n    if (cached) cached.add(pattern.globString())\n    else this.store.set(fullpath, new Set([pattern.globString()]))\n  }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n  store: Map<Path, number> = new Map()\n  add(target: Path, absolute: boolean, ifDir: boolean) {\n    const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n    const current = this.store.get(target)\n    this.store.set(target, current === undefined ? n : n & current)\n  }\n  // match, absolute, ifdir\n  entries(): [Path, boolean, boolean][] {\n    return [...this.store.entries()].map(([path, n]) => [\n      path,\n      !!(n & 2),\n      !!(n & 1),\n    ])\n  }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n  store: Map<Path, Pattern[]> = new Map()\n  add(target: Path, pattern: Pattern) {\n    if (!target.canReaddir()) {\n      return\n    }\n    const subs = this.store.get(target)\n    if (subs) {\n      if (!subs.find(p => p.globString() === pattern.globString())) {\n        subs.push(pattern)\n      }\n    } else this.store.set(target, [pattern])\n  }\n  get(target: Path): Pattern[] {\n    const subs = this.store.get(target)\n    /* c8 ignore start */\n    if (!subs) {\n      throw new Error('attempting to walk unknown path')\n    }\n    /* c8 ignore stop */\n    return subs\n  }\n  entries(): [Path, Pattern[]][] {\n    return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n  }\n  keys(): Path[] {\n    return [...this.store.keys()].filter(t => t.canReaddir())\n  }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n  hasWalkedCache: HasWalkedCache\n  matches = new MatchRecord()\n  subwalks = new SubWalks()\n  patterns?: Pattern[]\n  follow: boolean\n  dot: boolean\n  opts: GlobWalkerOpts\n\n  constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n    this.opts = opts\n    this.follow = !!opts.follow\n    this.dot = !!opts.dot\n    this.hasWalkedCache =\n      hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache()\n  }\n\n  processPatterns(target: Path, patterns: Pattern[]) {\n    this.patterns = patterns\n    const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n    // map of paths to the magic-starting subwalks they need to walk\n    // first item in patterns is the filter\n\n    for (let [t, pattern] of processingSet) {\n      this.hasWalkedCache.storeWalked(t, pattern)\n\n      const root = pattern.root()\n      const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n      // start absolute patterns at root\n      if (root) {\n        t = t.resolve(\n          root === '/' && this.opts.root !== undefined ?\n            this.opts.root\n          : root,\n        )\n        const rest = pattern.rest()\n        if (!rest) {\n          this.matches.add(t, true, false)\n          continue\n        } else {\n          pattern = rest\n        }\n      }\n\n      if (t.isENOENT()) continue\n\n      let p: MMPattern\n      let rest: Pattern | null\n      let changed = false\n      while (\n        typeof (p = pattern.pattern()) === 'string' &&\n        (rest = pattern.rest())\n      ) {\n        const c = t.resolve(p)\n        t = c\n        pattern = rest\n        changed = true\n      }\n      p = pattern.pattern()\n      rest = pattern.rest()\n      if (changed) {\n        if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n        this.hasWalkedCache.storeWalked(t, pattern)\n      }\n\n      // now we have either a final string for a known entry,\n      // more strings for an unknown entry,\n      // or a pattern starting with magic, mounted on t.\n      if (typeof p === 'string') {\n        // must not be final entry, otherwise we would have\n        // concatenated it earlier.\n        const ifDir = p === '..' || p === '' || p === '.'\n        this.matches.add(t.resolve(p), absolute, ifDir)\n        continue\n      } else if (p === GLOBSTAR) {\n        // if no rest, match and subwalk pattern\n        // if rest, process rest and subwalk pattern\n        // if it's a symlink, but we didn't get here by way of a\n        // globstar match (meaning it's the first time THIS globstar\n        // has traversed a symlink), then we follow it. Otherwise, stop.\n        if (\n          !t.isSymbolicLink() ||\n          this.follow ||\n          pattern.checkFollowGlobstar()\n        ) {\n          this.subwalks.add(t, pattern)\n        }\n        const rp = rest?.pattern()\n        const rrest = rest?.rest()\n        if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n          // only HAS to be a dir if it ends in **/ or **/.\n          // but ending in ** will match files as well.\n          this.matches.add(t, absolute, rp === '' || rp === '.')\n        } else {\n          if (rp === '..') {\n            // this would mean you're matching **/.. at the fs root,\n            // and no thanks, I'm not gonna test that specific case.\n            /* c8 ignore start */\n            const tp = t.parent || t\n            /* c8 ignore stop */\n            if (!rrest) this.matches.add(tp, absolute, true)\n            else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n              this.subwalks.add(tp, rrest)\n            }\n          }\n        }\n      } else if (p instanceof RegExp) {\n        this.subwalks.add(t, pattern)\n      }\n    }\n\n    return this\n  }\n\n  subwalkTargets(): Path[] {\n    return this.subwalks.keys()\n  }\n\n  child() {\n    return new Processor(this.opts, this.hasWalkedCache)\n  }\n\n  // return a new Processor containing the subwalks for each\n  // child entry, and a set of matches, and\n  // a hasWalkedCache that's a copy of this one\n  // then we're going to call\n  filterEntries(parent: Path, entries: Path[]): Processor {\n    const patterns = this.subwalks.get(parent)\n    // put matches and entry walks into the results processor\n    const results = this.child()\n    for (const e of entries) {\n      for (const pattern of patterns) {\n        const absolute = pattern.isAbsolute()\n        const p = pattern.pattern()\n        const rest = pattern.rest()\n        if (p === GLOBSTAR) {\n          results.testGlobstar(e, pattern, rest, absolute)\n        } else if (p instanceof RegExp) {\n          results.testRegExp(e, p, rest, absolute)\n        } else {\n          results.testString(e, p, rest, absolute)\n        }\n      }\n    }\n    return results\n  }\n\n  testGlobstar(\n    e: Path,\n    pattern: Pattern,\n    rest: Pattern | null,\n    absolute: boolean,\n  ) {\n    if (this.dot || !e.name.startsWith('.')) {\n      if (!pattern.hasMore()) {\n        this.matches.add(e, absolute, false)\n      }\n      if (e.canReaddir()) {\n        // if we're in follow mode or it's not a symlink, just keep\n        // testing the same pattern. If there's more after the globstar,\n        // then this symlink consumes the globstar. If not, then we can\n        // follow at most ONE symlink along the way, so we mark it, which\n        // also checks to ensure that it wasn't already marked.\n        if (this.follow || !e.isSymbolicLink()) {\n          this.subwalks.add(e, pattern)\n        } else if (e.isSymbolicLink()) {\n          if (rest && pattern.checkFollowGlobstar()) {\n            this.subwalks.add(e, rest)\n          } else if (pattern.markFollowGlobstar()) {\n            this.subwalks.add(e, pattern)\n          }\n        }\n      }\n    }\n    // if the NEXT thing matches this entry, then also add\n    // the rest.\n    if (rest) {\n      const rp = rest.pattern()\n      if (\n        typeof rp === 'string' &&\n        // dots and empty were handled already\n        rp !== '..' &&\n        rp !== '' &&\n        rp !== '.'\n      ) {\n        this.testString(e, rp, rest.rest(), absolute)\n      } else if (rp === '..') {\n        /* c8 ignore start */\n        const ep = e.parent || e\n        /* c8 ignore stop */\n        this.subwalks.add(ep, rest)\n      } else if (rp instanceof RegExp) {\n        this.testRegExp(e, rp, rest.rest(), absolute)\n      }\n    }\n  }\n\n  testRegExp(\n    e: Path,\n    p: MMRegExp,\n    rest: Pattern | null,\n    absolute: boolean,\n  ) {\n    if (!p.test(e.name)) return\n    if (!rest) {\n      this.matches.add(e, absolute, false)\n    } else {\n      this.subwalks.add(e, rest)\n    }\n  }\n\n  testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n    // should never happen?\n    if (!e.isNamed(p)) return\n    if (!rest) {\n      this.matches.add(e, absolute, false)\n    } else {\n      this.subwalks.add(e, rest)\n    }\n  }\n}\n","/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed?  that'd speed\n// things up a lot.  Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n  absolute?: boolean\n  allowWindowsEscape?: boolean\n  cwd?: string | URL\n  dot?: boolean\n  dotRelative?: boolean\n  follow?: boolean\n  ignore?: string | string[] | IgnoreLike\n  mark?: boolean\n  matchBase?: boolean\n  // Note: maxDepth here means \"maximum actual Path.depth()\",\n  // not \"maximum depth beyond cwd\"\n  maxDepth?: number\n  nobrace?: boolean\n  nocase?: boolean\n  nodir?: boolean\n  noext?: boolean\n  noglobstar?: boolean\n  platform?: NodeJS.Platform\n  posix?: boolean\n  realpath?: boolean\n  root?: string\n  stat?: boolean\n  signal?: AbortSignal\n  windowsPathsNoEscape?: boolean\n  withFileTypes?: boolean\n  includeChildMatches?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n  withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n  withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n  withFileTypes?: undefined\n}\n\nexport type Result<O extends GlobWalkerOpts> =\n  O extends GWOFileTypesTrue ? Path\n  : O extends GWOFileTypesFalse ? string\n  : O extends GWOFileTypesUnset ? string\n  : Path | string\n\nexport type Matches<O extends GlobWalkerOpts> =\n  O extends GWOFileTypesTrue ? Set<Path>\n  : O extends GWOFileTypesFalse ? Set<string>\n  : O extends GWOFileTypesUnset ? Set<string>\n  : Set<Path | string>\n\nexport type MatchStream<O extends GlobWalkerOpts> = Minipass<\n  Result<O>,\n  Result<O>\n>\n\nconst makeIgnore = (\n  ignore: string | string[] | IgnoreLike,\n  opts: GlobWalkerOpts,\n): IgnoreLike =>\n  typeof ignore === 'string' ? new Ignore([ignore], opts)\n  : Array.isArray(ignore) ? new Ignore(ignore, opts)\n  : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {\n  path: Path\n  patterns: Pattern[]\n  opts: O\n  seen: Set<Path> = new Set<Path>()\n  paused: boolean = false\n  aborted: boolean = false\n  #onResume: (() => any)[] = []\n  #ignore?: IgnoreLike\n  #sep: '\\\\' | '/'\n  signal?: AbortSignal\n  maxDepth: number\n  includeChildMatches: boolean\n\n  constructor(patterns: Pattern[], path: Path, opts: O)\n  constructor(patterns: Pattern[], path: Path, opts: O) {\n    this.patterns = patterns\n    this.path = path\n    this.opts = opts\n    this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n    this.includeChildMatches = opts.includeChildMatches !== false\n    if (opts.ignore || !this.includeChildMatches) {\n      this.#ignore = makeIgnore(opts.ignore ?? [], opts)\n      if (\n        !this.includeChildMatches &&\n        typeof this.#ignore.add !== 'function'\n      ) {\n        const m = 'cannot ignore child matches, ignore lacks add() method.'\n        throw new Error(m)\n      }\n    }\n    // ignore, always set with maxDepth, but it's optional on the\n    // GlobOptions type\n    /* c8 ignore start */\n    this.maxDepth = opts.maxDepth || Infinity\n    /* c8 ignore stop */\n    if (opts.signal) {\n      this.signal = opts.signal\n      this.signal.addEventListener('abort', () => {\n        this.#onResume.length = 0\n      })\n    }\n  }\n\n  #ignored(path: Path): boolean {\n    return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n  }\n  #childrenIgnored(path: Path): boolean {\n    return !!this.#ignore?.childrenIgnored?.(path)\n  }\n\n  // backpressure mechanism\n  pause() {\n    this.paused = true\n  }\n  resume() {\n    /* c8 ignore start */\n    if (this.signal?.aborted) return\n    /* c8 ignore stop */\n    this.paused = false\n    let fn: (() => any) | undefined = undefined\n    while (!this.paused && (fn = this.#onResume.shift())) {\n      fn()\n    }\n  }\n  onResume(fn: () => any) {\n    if (this.signal?.aborted) return\n    /* c8 ignore start */\n    if (!this.paused) {\n      fn()\n    } else {\n      /* c8 ignore stop */\n      this.#onResume.push(fn)\n    }\n  }\n\n  // do the requisite realpath/stat checking, and return the path\n  // to add or undefined to filter it out.\n  async matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined> {\n    if (ifDir && this.opts.nodir) return undefined\n    let rpc: Path | undefined\n    if (this.opts.realpath) {\n      rpc = e.realpathCached() || (await e.realpath())\n      if (!rpc) return undefined\n      e = rpc\n    }\n    const needStat = e.isUnknown() || this.opts.stat\n    const s = needStat ? await e.lstat() : e\n    if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n      const target = await s.realpath()\n      /* c8 ignore start */\n      if (target && (target.isUnknown() || this.opts.stat)) {\n        await target.lstat()\n      }\n      /* c8 ignore stop */\n    }\n    return this.matchCheckTest(s, ifDir)\n  }\n\n  matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n    return (\n        e &&\n          (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n          (!ifDir || e.canReaddir()) &&\n          (!this.opts.nodir || !e.isDirectory()) &&\n          (!this.opts.nodir ||\n            !this.opts.follow ||\n            !e.isSymbolicLink() ||\n            !e.realpathCached()?.isDirectory()) &&\n          !this.#ignored(e)\n      ) ?\n        e\n      : undefined\n  }\n\n  matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n    if (ifDir && this.opts.nodir) return undefined\n    let rpc: Path | undefined\n    if (this.opts.realpath) {\n      rpc = e.realpathCached() || e.realpathSync()\n      if (!rpc) return undefined\n      e = rpc\n    }\n    const needStat = e.isUnknown() || this.opts.stat\n    const s = needStat ? e.lstatSync() : e\n    if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n      const target = s.realpathSync()\n      if (target && (target?.isUnknown() || this.opts.stat)) {\n        target.lstatSync()\n      }\n    }\n    return this.matchCheckTest(s, ifDir)\n  }\n\n  abstract matchEmit(p: Result<O>): void\n  abstract matchEmit(p: string | Path): void\n\n  matchFinish(e: Path, absolute: boolean) {\n    if (this.#ignored(e)) return\n    // we know we have an ignore if this is false, but TS doesn't\n    if (!this.includeChildMatches && this.#ignore?.add) {\n      const ign = `${e.relativePosix()}/**`\n      this.#ignore.add(ign)\n    }\n    const abs =\n      this.opts.absolute === undefined ? absolute : this.opts.absolute\n    this.seen.add(e)\n    const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n    // ok, we have what we need!\n    if (this.opts.withFileTypes) {\n      this.matchEmit(e)\n    } else if (abs) {\n      const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n      this.matchEmit(abs + mark)\n    } else {\n      const rel = this.opts.posix ? e.relativePosix() : e.relative()\n      const pre =\n        this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n          '.' + this.#sep\n        : ''\n      this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n    }\n  }\n\n  async match(e: Path, absolute: boolean, ifDir: boolean): Promise<void> {\n    const p = await this.matchCheck(e, ifDir)\n    if (p) this.matchFinish(p, absolute)\n  }\n\n  matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n    const p = this.matchCheckSync(e, ifDir)\n    if (p) this.matchFinish(p, absolute)\n  }\n\n  walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n    /* c8 ignore start */\n    if (this.signal?.aborted) cb()\n    /* c8 ignore stop */\n    this.walkCB2(target, patterns, new Processor(this.opts), cb)\n  }\n\n  walkCB2(\n    target: Path,\n    patterns: Pattern[],\n    processor: Processor,\n    cb: () => any,\n  ) {\n    if (this.#childrenIgnored(target)) return cb()\n    if (this.signal?.aborted) cb()\n    if (this.paused) {\n      this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n      return\n    }\n    processor.processPatterns(target, patterns)\n\n    // done processing.  all of the above is sync, can be abstracted out.\n    // subwalks is a map of paths to the entry filters they need\n    // matches is a map of paths to [absolute, ifDir] tuples.\n    let tasks = 1\n    const next = () => {\n      if (--tasks === 0) cb()\n    }\n\n    for (const [m, absolute, ifDir] of processor.matches.entries()) {\n      if (this.#ignored(m)) continue\n      tasks++\n      this.match(m, absolute, ifDir).then(() => next())\n    }\n\n    for (const t of processor.subwalkTargets()) {\n      if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n        continue\n      }\n      tasks++\n      const childrenCached = t.readdirCached()\n      if (t.calledReaddir())\n        this.walkCB3(t, childrenCached, processor, next)\n      else {\n        t.readdirCB(\n          (_, entries) => this.walkCB3(t, entries, processor, next),\n          true,\n        )\n      }\n    }\n\n    next()\n  }\n\n  walkCB3(\n    target: Path,\n    entries: Path[],\n    processor: Processor,\n    cb: () => any,\n  ) {\n    processor = processor.filterEntries(target, entries)\n\n    let tasks = 1\n    const next = () => {\n      if (--tasks === 0) cb()\n    }\n\n    for (const [m, absolute, ifDir] of processor.matches.entries()) {\n      if (this.#ignored(m)) continue\n      tasks++\n      this.match(m, absolute, ifDir).then(() => next())\n    }\n    for (const [target, patterns] of processor.subwalks.entries()) {\n      tasks++\n      this.walkCB2(target, patterns, processor.child(), next)\n    }\n\n    next()\n  }\n\n  walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n    /* c8 ignore start */\n    if (this.signal?.aborted) cb()\n    /* c8 ignore stop */\n    this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n  }\n\n  walkCB2Sync(\n    target: Path,\n    patterns: Pattern[],\n    processor: Processor,\n    cb: () => any,\n  ) {\n    if (this.#childrenIgnored(target)) return cb()\n    if (this.signal?.aborted) cb()\n    if (this.paused) {\n      this.onResume(() =>\n        this.walkCB2Sync(target, patterns, processor, cb),\n      )\n      return\n    }\n    processor.processPatterns(target, patterns)\n\n    // done processing.  all of the above is sync, can be abstracted out.\n    // subwalks is a map of paths to the entry filters they need\n    // matches is a map of paths to [absolute, ifDir] tuples.\n    let tasks = 1\n    const next = () => {\n      if (--tasks === 0) cb()\n    }\n\n    for (const [m, absolute, ifDir] of processor.matches.entries()) {\n      if (this.#ignored(m)) continue\n      this.matchSync(m, absolute, ifDir)\n    }\n\n    for (const t of processor.subwalkTargets()) {\n      if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n        continue\n      }\n      tasks++\n      const children = t.readdirSync()\n      this.walkCB3Sync(t, children, processor, next)\n    }\n\n    next()\n  }\n\n  walkCB3Sync(\n    target: Path,\n    entries: Path[],\n    processor: Processor,\n    cb: () => any,\n  ) {\n    processor = processor.filterEntries(target, entries)\n\n    let tasks = 1\n    const next = () => {\n      if (--tasks === 0) cb()\n    }\n\n    for (const [m, absolute, ifDir] of processor.matches.entries()) {\n      if (this.#ignored(m)) continue\n      this.matchSync(m, absolute, ifDir)\n    }\n    for (const [target, patterns] of processor.subwalks.entries()) {\n      tasks++\n      this.walkCB2Sync(target, patterns, processor.child(), next)\n    }\n\n    next()\n  }\n}\n\nexport class GlobWalker<\n  O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n  matches = new Set<Result<O>>()\n\n  constructor(patterns: Pattern[], path: Path, opts: O) {\n    super(patterns, path, opts)\n  }\n\n  matchEmit(e: Result<O>): void {\n    this.matches.add(e)\n  }\n\n  async walk(): Promise<Set<Result<O>>> {\n    if (this.signal?.aborted) throw this.signal.reason\n    if (this.path.isUnknown()) {\n      await this.path.lstat()\n    }\n    await new Promise((res, rej) => {\n      this.walkCB(this.path, this.patterns, () => {\n        if (this.signal?.aborted) {\n          rej(this.signal.reason)\n        } else {\n          res(this.matches)\n        }\n      })\n    })\n    return this.matches\n  }\n\n  walkSync(): Set<Result<O>> {\n    if (this.signal?.aborted) throw this.signal.reason\n    if (this.path.isUnknown()) {\n      this.path.lstatSync()\n    }\n    // nothing for the callback to do, because this never pauses\n    this.walkCBSync(this.path, this.patterns, () => {\n      if (this.signal?.aborted) throw this.signal.reason\n    })\n    return this.matches\n  }\n}\n\nexport class GlobStream<\n  O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n  results: Minipass<Result<O>, Result<O>>\n\n  constructor(patterns: Pattern[], path: Path, opts: O) {\n    super(patterns, path, opts)\n    this.results = new Minipass<Result<O>, Result<O>>({\n      signal: this.signal,\n      objectMode: true,\n    })\n    this.results.on('drain', () => this.resume())\n    this.results.on('resume', () => this.resume())\n  }\n\n  matchEmit(e: Result<O>): void {\n    this.results.write(e)\n    if (!this.results.flowing) this.pause()\n  }\n\n  stream(): MatchStream<O> {\n    const target = this.path\n    if (target.isUnknown()) {\n      target.lstat().then(() => {\n        this.walkCB(target, this.patterns, () => this.results.end())\n      })\n    } else {\n      this.walkCB(target, this.patterns, () => this.results.end())\n    }\n    return this.results\n  }\n\n  streamSync(): MatchStream<O> {\n    if (this.path.isUnknown()) {\n      this.path.lstatSync()\n    }\n    this.walkCBSync(this.path, this.patterns, () => this.results.end())\n    return this.results\n  }\n}\n","import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { fileURLToPath } from 'node:url'\nimport {\n  FSOption,\n  Path,\n  PathScurry,\n  PathScurryDarwin,\n  PathScurryPosix,\n  PathScurryWin32,\n} from 'path-scurry'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude<Minimatch['globParts'], undefined>\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n  (\n    typeof process === 'object' &&\n    process &&\n    typeof process.platform === 'string'\n  ) ?\n    process.platform\n  : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n  /**\n   * Set to `true` to always receive absolute paths for\n   * matched files. Set to `false` to always return relative paths.\n   *\n   * When this option is not set, absolute paths are returned for patterns\n   * that are absolute, and otherwise paths are returned that are relative\n   * to the `cwd` setting.\n   *\n   * This does _not_ make an extra system call to get\n   * the realpath, it only does string path resolution.\n   *\n   * Conflicts with {@link withFileTypes}\n   */\n  absolute?: boolean\n\n  /**\n   * Set to false to enable {@link windowsPathsNoEscape}\n   *\n   * @deprecated\n   */\n  allowWindowsEscape?: boolean\n\n  /**\n   * The current working directory in which to search. Defaults to\n   * `process.cwd()`.\n   *\n   * May be eiher a string path or a `file://` URL object or string.\n   */\n  cwd?: string | URL\n\n  /**\n   * Include `.dot` files in normal matches and `globstar`\n   * matches. Note that an explicit dot in a portion of the pattern\n   * will always match dot files.\n   */\n  dot?: boolean\n\n  /**\n   * Prepend all relative path strings with `./` (or `.\\` on Windows).\n   *\n   * Without this option, returned relative paths are \"bare\", so instead of\n   * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n   *\n   * Relative patterns starting with `'../'` are not prepended with `./`, even\n   * if this option is set.\n   */\n  dotRelative?: boolean\n\n  /**\n   * Follow symlinked directories when expanding `**`\n   * patterns. This can result in a lot of duplicate references in\n   * the presence of cyclic links, and make performance quite bad.\n   *\n   * By default, a `**` in a pattern will follow 1 symbolic link if\n   * it is not the first item in the pattern, or none if it is the\n   * first item in the pattern, following the same behavior as Bash.\n   */\n  follow?: boolean\n\n  /**\n   * string or string[], or an object with `ignore` and `ignoreChildren`\n   * methods.\n   *\n   * If a string or string[] is provided, then this is treated as a glob\n   * pattern or array of glob patterns to exclude from matches. To ignore all\n   * children within a directory, as well as the entry itself, append `'/**'`\n   * to the ignore pattern.\n   *\n   * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n   * any other settings.\n   *\n   * If an object is provided that has `ignored(path)` and/or\n   * `childrenIgnored(path)` methods, then these methods will be called to\n   * determine whether any Path is a match or if its children should be\n   * traversed, respectively.\n   */\n  ignore?: string | string[] | IgnoreLike\n\n  /**\n   * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n   * effect if {@link nobrace} is set.\n   *\n   * Only has effect on the {@link hasMagic} function.\n   */\n  magicalBraces?: boolean\n\n  /**\n   * Add a `/` character to directory matches. Note that this requires\n   * additional stat calls in some cases.\n   */\n  mark?: boolean\n\n  /**\n   * Perform a basename-only match if the pattern does not contain any slash\n   * characters. That is, `*.js` would be treated as equivalent to\n   * `**\\/*.js`, matching all js files in all directories.\n   */\n  matchBase?: boolean\n\n  /**\n   * Limit the directory traversal to a given depth below the cwd.\n   * Note that this does NOT prevent traversal to sibling folders,\n   * root patterns, and so on. It only limits the maximum folder depth\n   * that the walk will descend, relative to the cwd.\n   */\n  maxDepth?: number\n\n  /**\n   * Do not expand `{a,b}` and `{1..3}` brace sets.\n   */\n  nobrace?: boolean\n\n  /**\n   * Perform a case-insensitive match. This defaults to `true` on macOS and\n   * Windows systems, and `false` on all others.\n   *\n   * **Note** `nocase` should only be explicitly set when it is\n   * known that the filesystem's case sensitivity differs from the\n   * platform default. If set `true` on case-sensitive file\n   * systems, or `false` on case-insensitive file systems, then the\n   * walk may return more or less results than expected.\n   */\n  nocase?: boolean\n\n  /**\n   * Do not match directories, only files. (Note: to match\n   * _only_ directories, put a `/` at the end of the pattern.)\n   */\n  nodir?: boolean\n\n  /**\n   * Do not match \"extglob\" patterns such as `+(a|b)`.\n   */\n  noext?: boolean\n\n  /**\n   * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n   * `*` instead.)\n   *\n   * Conflicts with {@link matchBase}\n   */\n  noglobstar?: boolean\n\n  /**\n   * Defaults to value of `process.platform` if available, or `'linux'` if\n   * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n   * behavior.\n   */\n  platform?: NodeJS.Platform\n\n  /**\n   * Set to true to call `fs.realpath` on all of the\n   * results. In the case of an entry that cannot be resolved, the\n   * entry is omitted. This incurs a slight performance penalty, of\n   * course, because of the added system calls.\n   */\n  realpath?: boolean\n\n  /**\n   *\n   * A string path resolved against the `cwd` option, which\n   * is used as the starting point for absolute patterns that start\n   * with `/`, (but not drive letters or UNC paths on Windows).\n   *\n   * Note that this _doesn't_ necessarily limit the walk to the\n   * `root` directory, and doesn't affect the cwd starting point for\n   * non-absolute patterns. A pattern containing `..` will still be\n   * able to traverse out of the root directory, if it is not an\n   * actual root directory on the filesystem, and any non-absolute\n   * patterns will be matched in the `cwd`. For example, the\n   * pattern `/../*` with `{root:'/some/path'}` will return all\n   * files in `/some`, not all files in `/some/path`. The pattern\n   * `*` with `{root:'/some/path'}` will return all the entries in\n   * the cwd, not the entries in `/some/path`.\n   *\n   * To start absolute and non-absolute patterns in the same\n   * path, you can use `{root:''}`. However, be aware that on\n   * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n   * _always_ start in the `x:/` or `//host/share` directory,\n   * regardless of the `root` setting.\n   */\n  root?: string\n\n  /**\n   * A [PathScurry](http://npm.im/path-scurry) object used\n   * to traverse the file system. If the `nocase` option is set\n   * explicitly, then any provided `scurry` object must match this\n   * setting.\n   */\n  scurry?: PathScurry\n\n  /**\n   * Call `lstat()` on all entries, whether required or not to determine\n   * if it's a valid match. When used with {@link withFileTypes}, this means\n   * that matches will include data such as modified time, permissions, and\n   * so on.  Note that this will incur a performance cost due to the added\n   * system calls.\n   */\n  stat?: boolean\n\n  /**\n   * An AbortSignal which will cancel the Glob walk when\n   * triggered.\n   */\n  signal?: AbortSignal\n\n  /**\n   * Use `\\\\` as a path separator _only_, and\n   *  _never_ as an escape character. If set, all `\\\\` characters are\n   *  replaced with `/` in the pattern.\n   *\n   *  Note that this makes it **impossible** to match against paths\n   *  containing literal glob pattern characters, but allows matching\n   *  with patterns constructed using `path.join()` and\n   *  `path.resolve()` on Windows platforms, mimicking the (buggy!)\n   *  behavior of Glob v7 and before on Windows. Please use with\n   *  caution, and be mindful of [the caveat below about Windows\n   *  paths](#windows). (For legacy reasons, this is also set if\n   *  `allowWindowsEscape` is set to the exact value `false`.)\n   */\n  windowsPathsNoEscape?: boolean\n\n  /**\n   * Return [PathScurry](http://npm.im/path-scurry)\n   * `Path` objects instead of strings. These are similar to a\n   * NodeJS `Dirent` object, but with additional methods and\n   * properties.\n   *\n   * Conflicts with {@link absolute}\n   */\n  withFileTypes?: boolean\n\n  /**\n   * An fs implementation to override some or all of the defaults.  See\n   * http://npm.im/path-scurry for details about what can be overridden.\n   */\n  fs?: FSOption\n\n  /**\n   * Just passed along to Minimatch.  Note that this makes all pattern\n   * matching operations slower and *extremely* noisy.\n   */\n  debug?: boolean\n\n  /**\n   * Return `/` delimited paths, even on Windows.\n   *\n   * On posix systems, this has no effect.  But, on Windows, it means that\n   * paths will be `/` delimited, and absolute paths will be their full\n   * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n   * `'//?/C:/foo/bar'`\n   */\n  posix?: boolean\n\n  /**\n   * Do not match any children of any matches. For example, the pattern\n   * `**\\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode.\n   *\n   * This is especially useful for cases like \"find all `node_modules`\n   * folders, but not the ones in `node_modules`\".\n   *\n   * In order to support this, the `Ignore` implementation must support an\n   * `add(pattern: string)` method. If using the default `Ignore` class, then\n   * this is fine, but if this is set to `false`, and a custom `Ignore` is\n   * provided that does not have an `add()` method, then it will throw an\n   * error.\n   *\n   * **Caveat** It *only* ignores matches that would be a descendant of a\n   * previous match, and only if that descendant is matched *after* the\n   * ancestor is encountered. Since the file system walk happens in\n   * indeterminate order, it's possible that a match will already be added\n   * before its ancestor, if multiple or braced patterns are used.\n   *\n   * For example:\n   *\n   * ```ts\n   * const results = await glob([\n   *   // likely to match first, since it's just a stat\n   *   'a/b/c/d/e/f',\n   *\n   *   // this pattern is more complicated! It must to various readdir()\n   *   // calls and test the results against a regular expression, and that\n   *   // is certainly going to take a little bit longer.\n   *   //\n   *   // So, later on, it encounters a match at 'a/b/c/d/e', but it's too\n   *   // late to ignore a/b/c/d/e/f, because it's already been emitted.\n   *   'a/[bdf]/?/[a-z]/*',\n   * ], { includeChildMatches: false })\n   * ```\n   *\n   * It's best to only set this to `false` if you can be reasonably sure that\n   * no components of the pattern will potentially match one another's file\n   * system descendants, or if the occasional included child entry will not\n   * cause problems.\n   *\n   * @default true\n   */\n  includeChildMatches?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n  withFileTypes: true\n  // string options not relevant if returning Path objects.\n  absolute?: undefined\n  mark?: undefined\n  posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n  withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n  withFileTypes?: undefined\n}\n\nexport type Result<Opts> =\n  Opts extends GlobOptionsWithFileTypesTrue ? Path\n  : Opts extends GlobOptionsWithFileTypesFalse ? string\n  : Opts extends GlobOptionsWithFileTypesUnset ? string\n  : string | Path\nexport type Results<Opts> = Result<Opts>[]\n\nexport type FileTypes<Opts> =\n  Opts extends GlobOptionsWithFileTypesTrue ? true\n  : Opts extends GlobOptionsWithFileTypesFalse ? false\n  : Opts extends GlobOptionsWithFileTypesUnset ? false\n  : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob<Opts extends GlobOptions> implements GlobOptions {\n  absolute?: boolean\n  cwd: string\n  root?: string\n  dot: boolean\n  dotRelative: boolean\n  follow: boolean\n  ignore?: string | string[] | IgnoreLike\n  magicalBraces: boolean\n  mark?: boolean\n  matchBase: boolean\n  maxDepth: number\n  nobrace: boolean\n  nocase: boolean\n  nodir: boolean\n  noext: boolean\n  noglobstar: boolean\n  pattern: string[]\n  platform: NodeJS.Platform\n  realpath: boolean\n  scurry: PathScurry\n  stat: boolean\n  signal?: AbortSignal\n  windowsPathsNoEscape: boolean\n  withFileTypes: FileTypes<Opts>\n  includeChildMatches: boolean\n\n  /**\n   * The options provided to the constructor.\n   */\n  opts: Opts\n\n  /**\n   * An array of parsed immutable {@link Pattern} objects.\n   */\n  patterns: Pattern[]\n\n  /**\n   * All options are stored as properties on the `Glob` object.\n   *\n   * See {@link GlobOptions} for full options descriptions.\n   *\n   * Note that a previous `Glob` object can be passed as the\n   * `GlobOptions` to another `Glob` instantiation to re-use settings\n   * and caches with a new pattern.\n   *\n   * Traversal functions can be called multiple times to run the walk\n   * again.\n   */\n  constructor(pattern: string | string[], opts: Opts) {\n    /* c8 ignore start */\n    if (!opts) throw new TypeError('glob options required')\n    /* c8 ignore stop */\n    this.withFileTypes = !!opts.withFileTypes as FileTypes<Opts>\n    this.signal = opts.signal\n    this.follow = !!opts.follow\n    this.dot = !!opts.dot\n    this.dotRelative = !!opts.dotRelative\n    this.nodir = !!opts.nodir\n    this.mark = !!opts.mark\n    if (!opts.cwd) {\n      this.cwd = ''\n    } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n      opts.cwd = fileURLToPath(opts.cwd)\n    }\n    this.cwd = opts.cwd || ''\n    this.root = opts.root\n    this.magicalBraces = !!opts.magicalBraces\n    this.nobrace = !!opts.nobrace\n    this.noext = !!opts.noext\n    this.realpath = !!opts.realpath\n    this.absolute = opts.absolute\n    this.includeChildMatches = opts.includeChildMatches !== false\n\n    this.noglobstar = !!opts.noglobstar\n    this.matchBase = !!opts.matchBase\n    this.maxDepth =\n      typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n    this.stat = !!opts.stat\n    this.ignore = opts.ignore\n\n    if (this.withFileTypes && this.absolute !== undefined) {\n      throw new Error('cannot set absolute and withFileTypes:true')\n    }\n\n    if (typeof pattern === 'string') {\n      pattern = [pattern]\n    }\n\n    this.windowsPathsNoEscape =\n      !!opts.windowsPathsNoEscape ||\n      (opts as { allowWindowsEscape?: boolean }).allowWindowsEscape ===\n        false\n\n    if (this.windowsPathsNoEscape) {\n      pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n    }\n\n    if (this.matchBase) {\n      if (opts.noglobstar) {\n        throw new TypeError('base matching requires globstar')\n      }\n      pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n    }\n\n    this.pattern = pattern\n\n    this.platform = opts.platform || defaultPlatform\n    this.opts = { ...opts, platform: this.platform }\n    if (opts.scurry) {\n      this.scurry = opts.scurry\n      if (\n        opts.nocase !== undefined &&\n        opts.nocase !== opts.scurry.nocase\n      ) {\n        throw new Error('nocase option contradicts provided scurry option')\n      }\n    } else {\n      const Scurry =\n        opts.platform === 'win32' ? PathScurryWin32\n        : opts.platform === 'darwin' ? PathScurryDarwin\n        : opts.platform ? PathScurryPosix\n        : PathScurry\n      this.scurry = new Scurry(this.cwd, {\n        nocase: opts.nocase,\n        fs: opts.fs,\n      })\n    }\n    this.nocase = this.scurry.nocase\n\n    // If you do nocase:true on a case-sensitive file system, then\n    // we need to use regexps instead of strings for non-magic\n    // path portions, because statting `aBc` won't return results\n    // for the file `AbC` for example.\n    const nocaseMagicOnly =\n      this.platform === 'darwin' || this.platform === 'win32'\n\n    const mmo: MinimatchOptions = {\n      // default nocase based on platform\n      ...opts,\n      dot: this.dot,\n      matchBase: this.matchBase,\n      nobrace: this.nobrace,\n      nocase: this.nocase,\n      nocaseMagicOnly,\n      nocomment: true,\n      noext: this.noext,\n      nonegate: true,\n      optimizationLevel: 2,\n      platform: this.platform,\n      windowsPathsNoEscape: this.windowsPathsNoEscape,\n      debug: !!this.opts.debug,\n    }\n\n    const mms = this.pattern.map(p => new Minimatch(p, mmo))\n    const [matchSet, globParts] = mms.reduce(\n      (set: [MatchSet, GlobParts], m) => {\n        set[0].push(...m.set)\n        set[1].push(...m.globParts)\n        return set\n      },\n      [[], []],\n    )\n    this.patterns = matchSet.map((set, i) => {\n      const g = globParts[i]\n      /* c8 ignore start */\n      if (!g) throw new Error('invalid pattern object')\n      /* c8 ignore stop */\n      return new Pattern(set, g, 0, this.platform)\n    })\n  }\n\n  /**\n   * Returns a Promise that resolves to the results array.\n   */\n  async walk(): Promise<Results<Opts>>\n  async walk(): Promise<(string | Path)[]> {\n    // Walkers always return array of Path objects, so we just have to\n    // coerce them into the right shape.  It will have already called\n    // realpath() if the option was set to do so, so we know that's cached.\n    // start out knowing the cwd, at least\n    return [\n      ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n        ...this.opts,\n        maxDepth:\n          this.maxDepth !== Infinity ?\n            this.maxDepth + this.scurry.cwd.depth()\n          : Infinity,\n        platform: this.platform,\n        nocase: this.nocase,\n        includeChildMatches: this.includeChildMatches,\n      }).walk()),\n    ]\n  }\n\n  /**\n   * synchronous {@link Glob.walk}\n   */\n  walkSync(): Results<Opts>\n  walkSync(): (string | Path)[] {\n    return [\n      ...new GlobWalker(this.patterns, this.scurry.cwd, {\n        ...this.opts,\n        maxDepth:\n          this.maxDepth !== Infinity ?\n            this.maxDepth + this.scurry.cwd.depth()\n          : Infinity,\n        platform: this.platform,\n        nocase: this.nocase,\n        includeChildMatches: this.includeChildMatches,\n      }).walkSync(),\n    ]\n  }\n\n  /**\n   * Stream results asynchronously.\n   */\n  stream(): Minipass<Result<Opts>, Result<Opts>>\n  stream(): Minipass<string | Path, string | Path> {\n    return new GlobStream(this.patterns, this.scurry.cwd, {\n      ...this.opts,\n      maxDepth:\n        this.maxDepth !== Infinity ?\n          this.maxDepth + this.scurry.cwd.depth()\n        : Infinity,\n      platform: this.platform,\n      nocase: this.nocase,\n      includeChildMatches: this.includeChildMatches,\n    }).stream()\n  }\n\n  /**\n   * Stream results synchronously.\n   */\n  streamSync(): Minipass<Result<Opts>, Result<Opts>>\n  streamSync(): Minipass<string | Path, string | Path> {\n    return new GlobStream(this.patterns, this.scurry.cwd, {\n      ...this.opts,\n      maxDepth:\n        this.maxDepth !== Infinity ?\n          this.maxDepth + this.scurry.cwd.depth()\n        : Infinity,\n      platform: this.platform,\n      nocase: this.nocase,\n      includeChildMatches: this.includeChildMatches,\n    }).streamSync()\n  }\n\n  /**\n   * Default sync iteration function. Returns a Generator that\n   * iterates over the results.\n   */\n  iterateSync(): Generator<Result<Opts>, void, void> {\n    return this.streamSync()[Symbol.iterator]()\n  }\n  [Symbol.iterator]() {\n    return this.iterateSync()\n  }\n\n  /**\n   * Default async iteration function. Returns an AsyncGenerator that\n   * iterates over the results.\n   */\n  iterate(): AsyncGenerator<Result<Opts>, void, void> {\n    return this.stream()[Symbol.asyncIterator]()\n  }\n  [Symbol.asyncIterator]() {\n    return this.iterate()\n  }\n}\n","import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n  pattern: string | string[],\n  options: GlobOptions = {},\n): boolean => {\n  if (!Array.isArray(pattern)) {\n    pattern = [pattern]\n  }\n  for (const p of pattern) {\n    if (new Minimatch(p, options).hasMagic()) return true\n  }\n  return false\n}\n","import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n  GlobOptions,\n  GlobOptionsWithFileTypesFalse,\n  GlobOptionsWithFileTypesTrue,\n  GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n  FSOption,\n  Path,\n  WalkOptions,\n  WalkOptionsWithFileTypesTrue,\n  WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n  GlobOptions,\n  GlobOptionsWithFileTypesFalse,\n  GlobOptionsWithFileTypesTrue,\n  GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): Minipass<Path, Path>\nexport function globStreamSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): Minipass<string, string>\nexport function globStreamSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesUnset,\n): Minipass<string, string>\nexport function globStreamSync(\n  pattern: string | string[],\n  options: GlobOptions,\n): Minipass<Path, Path> | Minipass<string, string>\nexport function globStreamSync(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): Minipass<string, string>\nexport function globStream(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): Minipass<Path, Path>\nexport function globStream(\n  pattern: string | string[],\n  options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass<string, string>\nexport function globStream(\n  pattern: string | string[],\n  options: GlobOptions,\n): Minipass<Path, Path> | Minipass<string, string>\nexport function globStream(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n  pattern: string | string[],\n  options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n  pattern: string | string[],\n  options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n  pattern: string | string[],\n  options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise<string[]>\nasync function glob_(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): Promise<Path[]>\nasync function glob_(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): Promise<string[]>\nasync function glob_(\n  pattern: string | string[],\n  options: GlobOptions,\n): Promise<Path[] | string[]>\nasync function glob_(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n  pattern: string | string[],\n  options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator<string, void, void>\nexport function globIterateSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): Generator<Path, void, void>\nexport function globIterateSync(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): Generator<string, void, void>\nexport function globIterateSync(\n  pattern: string | string[],\n  options: GlobOptions,\n): Generator<Path, void, void> | Generator<string, void, void>\nexport function globIterateSync(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n  pattern: string | string[],\n  options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator<Path, void, void>\nexport function globIterate(\n  pattern: string | string[],\n  options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n  pattern: string | string[],\n  options: GlobOptions,\n): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>\nexport function globIterate(\n  pattern: string | string[],\n  options: GlobOptions = {},\n) {\n  return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n  sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n  stream: globStreamSync,\n  iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n  glob: glob_,\n  globSync,\n  sync,\n  globStream,\n  stream,\n  globStreamSync,\n  streamSync,\n  globIterate,\n  iterate,\n  globIterateSync,\n  iterateSync,\n  Glob,\n  hasMagic,\n  escape,\n  unescape,\n})\nglob.glob = glob\n","/**\n * archiver-utils\n *\n * Copyright (c) 2012-2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT\n */\nvar fs = require('graceful-fs');\nvar path = require('path');\n\nvar flatten = require('lodash/flatten');\nvar difference = require('lodash/difference');\nvar union = require('lodash/union');\nvar isPlainObject = require('lodash/isPlainObject');\n\nvar glob = require('glob');\n\nvar file = module.exports = {};\n\nvar pathSeparatorRe = /[\\/\\\\]/g;\n\n// Process specified wildcard glob patterns or filenames against a\n// callback, excluding and uniquing files in the result set.\nvar processPatterns = function(patterns, fn) {\n  // Filepaths to return.\n  var result = [];\n  // Iterate over flattened patterns array.\n  flatten(patterns).forEach(function(pattern) {\n    // If the first character is ! it should be omitted\n    var exclusion = pattern.indexOf('!') === 0;\n    // If the pattern is an exclusion, remove the !\n    if (exclusion) { pattern = pattern.slice(1); }\n    // Find all matching files for this pattern.\n    var matches = fn(pattern);\n    if (exclusion) {\n      // If an exclusion, remove matching files.\n      result = difference(result, matches);\n    } else {\n      // Otherwise add matching files.\n      result = union(result, matches);\n    }\n  });\n  return result;\n};\n\n// True if the file path exists.\nfile.exists = function() {\n  var filepath = path.join.apply(path, arguments);\n  return fs.existsSync(filepath);\n};\n\n// Return an array of all file paths that match the given wildcard patterns.\nfile.expand = function(...args) {\n  // If the first argument is an options object, save those options to pass\n  // into the File.prototype.glob.sync method.\n  var options = isPlainObject(args[0]) ? args.shift() : {};\n  // Use the first argument if it's an Array, otherwise convert the arguments\n  // object to an array and use that.\n  var patterns = Array.isArray(args[0]) ? args[0] : args;\n  // Return empty set if there are no patterns or filepaths.\n  if (patterns.length === 0) { return []; }\n  // Return all matching filepaths.\n  var matches = processPatterns(patterns, function(pattern) {\n    // Find all matching files for this pattern.\n    return glob.sync(pattern, options);\n  });\n  // Filter result set?\n  if (options.filter) {\n    matches = matches.filter(function(filepath) {\n      filepath = path.join(options.cwd || '', filepath);\n      try {\n        if (typeof options.filter === 'function') {\n          return options.filter(filepath);\n        } else {\n          // If the file is of the right type and exists, this should work.\n          return fs.statSync(filepath)[options.filter]();\n        }\n      } catch(e) {\n        // Otherwise, it's probably not the right type.\n        return false;\n      }\n    });\n  }\n  return matches;\n};\n\n// Build a multi task \"files\" object dynamically.\nfile.expandMapping = function(patterns, destBase, options) {\n  options = Object.assign({\n    rename: function(destBase, destPath) {\n      return path.join(destBase || '', destPath);\n    }\n  }, options);\n  var files = [];\n  var fileByDest = {};\n  // Find all files matching pattern, using passed-in options.\n  file.expand(options, patterns).forEach(function(src) {\n    var destPath = src;\n    // Flatten?\n    if (options.flatten) {\n      destPath = path.basename(destPath);\n    }\n    // Change the extension?\n    if (options.ext) {\n      destPath = destPath.replace(/(\\.[^\\/]*)?$/, options.ext);\n    }\n    // Generate destination filename.\n    var dest = options.rename(destBase, destPath, options);\n    // Prepend cwd to src path if necessary.\n    if (options.cwd) { src = path.join(options.cwd, src); }\n    // Normalize filepaths to be unix-style.\n    dest = dest.replace(pathSeparatorRe, '/');\n    src = src.replace(pathSeparatorRe, '/');\n    // Map correct src path to dest path.\n    if (fileByDest[dest]) {\n      // If dest already exists, push this src onto that dest's src array.\n      fileByDest[dest].src.push(src);\n    } else {\n      // Otherwise create a new src-dest file mapping object.\n      files.push({\n        src: [src],\n        dest: dest,\n      });\n      // And store a reference for later use.\n      fileByDest[dest] = files[files.length - 1];\n    }\n  });\n  return files;\n};\n\n// reusing bits of grunt's multi-task source normalization\nfile.normalizeFilesArray = function(data) {\n  var files = [];\n\n  data.forEach(function(obj) {\n    var prop;\n    if ('src' in obj || 'dest' in obj) {\n      files.push(obj);\n    }\n  });\n\n  if (files.length === 0) {\n    return [];\n  }\n\n  files = _(files).chain().forEach(function(obj) {\n    if (!('src' in obj) || !obj.src) { return; }\n    // Normalize .src properties to flattened array.\n    if (Array.isArray(obj.src)) {\n      obj.src = flatten(obj.src);\n    } else {\n      obj.src = [obj.src];\n    }\n  }).map(function(obj) {\n    // Build options object, removing unwanted properties.\n    var expandOptions = Object.assign({}, obj);\n    delete expandOptions.src;\n    delete expandOptions.dest;\n\n    // Expand file mappings.\n    if (obj.expand) {\n      return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {\n        // Copy obj properties to result.\n        var result = Object.assign({}, obj);\n        // Make a clone of the orig obj available.\n        result.orig = Object.assign({}, obj);\n        // Set .src and .dest, processing both as templates.\n        result.src = mapObj.src;\n        result.dest = mapObj.dest;\n        // Remove unwanted properties.\n        ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {\n          delete result[prop];\n        });\n        return result;\n      });\n    }\n\n    // Copy obj properties to result, adding an .orig property.\n    var result = Object.assign({}, obj);\n    // Make a clone of the orig obj available.\n    result.orig = Object.assign({}, obj);\n\n    if ('src' in result) {\n      // Expose an expand-on-demand getter method as .src.\n      Object.defineProperty(result, 'src', {\n        enumerable: true,\n        get: function fn() {\n          var src;\n          if (!('result' in fn)) {\n            src = obj.src;\n            // If src is an array, flatten it. Otherwise, make it into an array.\n            src = Array.isArray(src) ? flatten(src) : [src];\n            // Expand src files, memoizing result.\n            fn.result = file.expand(expandOptions, src);\n          }\n          return fn.result;\n        }\n      });\n    }\n\n    if ('dest' in result) {\n      result.dest = obj.dest;\n    }\n\n    return result;\n  }).flatten().value();\n\n  return files;\n};\n","/**\n * archiver-utils\n *\n * Copyright (c) 2015 Chris Talkington.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/archiver-utils/blob/master/LICENSE\n */\nvar fs = require('graceful-fs');\nvar path = require('path');\nvar isStream = require('is-stream');\nvar lazystream = require('lazystream');\nvar normalizePath = require('normalize-path');\nvar defaults = require('lodash/defaults');\n\nvar Stream = require('stream').Stream;\nvar PassThrough = require('readable-stream').PassThrough;\n\nvar utils = module.exports = {};\nutils.file = require('./file.js');\n\nutils.collectStream = function(source, callback) {\n  var collection = [];\n  var size = 0;\n\n  source.on('error', callback);\n\n  source.on('data', function(chunk) {\n    collection.push(chunk);\n    size += chunk.length;\n  });\n\n  source.on('end', function() {\n    var buf = Buffer.alloc(size);\n    var offset = 0;\n\n    collection.forEach(function(data) {\n      data.copy(buf, offset);\n      offset += data.length;\n    });\n\n    callback(null, buf);\n  });\n};\n\nutils.dateify = function(dateish) {\n  dateish = dateish || new Date();\n\n  if (dateish instanceof Date) {\n    dateish = dateish;\n  } else if (typeof dateish === 'string') {\n    dateish = new Date(dateish);\n  } else {\n    dateish = new Date();\n  }\n\n  return dateish;\n};\n\n// this is slightly different from lodash version\nutils.defaults = function(object, source, guard) {\n  var args = arguments;\n  args[0] = args[0] || {};\n\n  return defaults(...args);\n};\n\nutils.isStream = function(source) {\n  return isStream(source);\n};\n\nutils.lazyReadStream = function(filepath) {\n  return new lazystream.Readable(function() {\n    return fs.createReadStream(filepath);\n  });\n};\n\nutils.normalizeInputSource = function(source) {\n  if (source === null) {\n    return Buffer.alloc(0);\n  } else if (typeof source === 'string') {\n    return Buffer.from(source);\n  } else if (utils.isStream(source)) {\n    // Always pipe through a PassThrough stream to guarantee pausing the stream if it's already flowing,\n    // since it will only be processed in a (distant) future iteration of the event loop, and will lose\n    // data if already flowing now.\n    return source.pipe(new PassThrough());\n  }\n\n  return source;\n};\n\nutils.sanitizePath = function(filepath) {\n  return normalizePath(filepath, false).replace(/^\\w+:/, '').replace(/^(\\.\\.\\/|\\/)+/, '');\n};\n\nutils.trailingSlashIt = function(str) {\n  return str.slice(-1) !== '/' ? str + '/' : str;\n};\n\nutils.unixifyPath = function(filepath) {\n  return normalizePath(filepath, false).replace(/^\\w+:/, '');\n};\n\nutils.walkdir = function(dirpath, base, callback) {\n  var results = [];\n\n  if (typeof base === 'function') {\n    callback = base;\n    base = dirpath;\n  }\n\n  fs.readdir(dirpath, function(err, list) {\n    var i = 0;\n    var file;\n    var filepath;\n\n    if (err) {\n      return callback(err);\n    }\n\n    (function next() {\n      file = list[i++];\n\n      if (!file) {\n        return callback(null, results);\n      }\n\n      filepath = path.join(dirpath, file);\n\n      fs.stat(filepath, function(err, stats) {\n        results.push({\n          path: filepath,\n          relative: path.relative(base, filepath).replace(/\\\\/g, '/'),\n          stats: stats\n        });\n\n        if (stats && stats.isDirectory()) {\n          utils.walkdir(filepath, base, function(err, res) {\n\t    if(err){\n\t      return callback(err);\n\t    }\n\n            res.forEach(function(dirEntry) {\n              results.push(dirEntry);\n            });\n\t\t  \n            next();  \n          });\n        } else {\n          next();\n        }\n      });\n    })();\n  });\n};\n","/**\n * Archiver Core\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\n\nvar util = require('util');\n\nconst ERROR_CODES = {\n  'ABORTED': 'archive was aborted',\n  'DIRECTORYDIRPATHREQUIRED': 'diretory dirpath argument must be a non-empty string value',\n  'DIRECTORYFUNCTIONINVALIDDATA': 'invalid data returned by directory custom data function',\n  'ENTRYNAMEREQUIRED': 'entry name must be a non-empty string value',\n  'FILEFILEPATHREQUIRED': 'file filepath argument must be a non-empty string value',\n  'FINALIZING': 'archive already finalizing',\n  'QUEUECLOSED': 'queue closed',\n  'NOENDMETHOD': 'no suitable finalize/end method defined by module',\n  'DIRECTORYNOTSUPPORTED': 'support for directory entries not defined by module',\n  'FORMATSET': 'archive format already set',\n  'INPUTSTEAMBUFFERREQUIRED': 'input source must be valid Stream or Buffer instance',\n  'MODULESET': 'module already set',\n  'SYMLINKNOTSUPPORTED': 'support for symlink entries not defined by module',\n  'SYMLINKFILEPATHREQUIRED': 'symlink filepath argument must be a non-empty string value',\n  'SYMLINKTARGETREQUIRED': 'symlink target argument must be a non-empty string value',\n  'ENTRYNOTSUPPORTED': 'entry not supported'\n};\n\nfunction ArchiverError(code, data) {\n  Error.captureStackTrace(this, this.constructor);\n  //this.name = this.constructor.name;\n  this.message = ERROR_CODES[code] || code;\n  this.code = code;\n  this.data = data;\n}\n\nutil.inherits(ArchiverError, Error);\n\nexports = module.exports = ArchiverError;","/**\n * Archiver Core\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar fs = require('fs');\nvar glob = require('readdir-glob');\nvar async = require('async');\nvar path = require('path');\nvar util = require('archiver-utils');\n\nvar inherits = require('util').inherits;\nvar ArchiverError = require('./error');\nvar Transform = require('readable-stream').Transform;\n\nvar win32 = process.platform === 'win32';\n\n/**\n * @constructor\n * @param {String} format The archive format to use.\n * @param {(CoreOptions|TransformOptions)} options See also {@link ZipOptions} and {@link TarOptions}.\n */\nvar Archiver = function(format, options) {\n  if (!(this instanceof Archiver)) {\n    return new Archiver(format, options);\n  }\n\n  if (typeof format !== 'string') {\n    options = format;\n    format = 'zip';\n  }\n\n  options = this.options = util.defaults(options, {\n    highWaterMark: 1024 * 1024,\n    statConcurrency: 4\n  });\n\n  Transform.call(this, options);\n\n  this._format = false;\n  this._module = false;\n  this._pending = 0;\n  this._pointer = 0;\n\n  this._entriesCount = 0;\n  this._entriesProcessedCount = 0;\n  this._fsEntriesTotalBytes = 0;\n  this._fsEntriesProcessedBytes = 0;\n\n  this._queue = async.queue(this._onQueueTask.bind(this), 1);\n  this._queue.drain(this._onQueueDrain.bind(this));\n\n  this._statQueue = async.queue(this._onStatQueueTask.bind(this), options.statConcurrency);\n  this._statQueue.drain(this._onQueueDrain.bind(this));\n\n  this._state = {\n    aborted: false,\n    finalize: false,\n    finalizing: false,\n    finalized: false,\n    modulePiped: false\n  };\n\n  this._streams = [];\n};\n\ninherits(Archiver, Transform);\n\n/**\n * Internal logic for `abort`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._abort = function() {\n  this._state.aborted = true;\n  this._queue.kill();\n  this._statQueue.kill();\n\n  if (this._queue.idle()) {\n    this._shutdown();\n  }\n};\n\n/**\n * Internal helper for appending files.\n *\n * @private\n * @param  {String} filepath The source filepath.\n * @param  {EntryData} data The entry data.\n * @return void\n */\nArchiver.prototype._append = function(filepath, data) {\n  data = data || {};\n\n  var task = {\n    source: null,\n    filepath: filepath\n  };\n\n  if (!data.name) {\n    data.name = filepath;\n  }\n\n  data.sourcePath = filepath;\n  task.data = data;\n  this._entriesCount++;\n\n  if (data.stats && data.stats instanceof fs.Stats) {\n    task = this._updateQueueTaskWithStats(task, data.stats);\n    if (task) {\n      if (data.stats.size) {\n        this._fsEntriesTotalBytes += data.stats.size;\n      }\n\n      this._queue.push(task);\n    }\n  } else {\n    this._statQueue.push(task);\n  }\n};\n\n/**\n * Internal logic for `finalize`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._finalize = function() {\n  if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n    return;\n  }\n\n  this._state.finalizing = true;\n\n  this._moduleFinalize();\n\n  this._state.finalizing = false;\n  this._state.finalized = true;\n};\n\n/**\n * Checks the various state variables to determine if we can `finalize`.\n *\n * @private\n * @return {Boolean}\n */\nArchiver.prototype._maybeFinalize = function() {\n  if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n    return false;\n  }\n\n  if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n    this._finalize();\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Appends an entry to the module.\n *\n * @private\n * @fires  Archiver#entry\n * @param  {(Buffer|Stream)} source\n * @param  {EntryData} data\n * @param  {Function} callback\n * @return void\n */\nArchiver.prototype._moduleAppend = function(source, data, callback) {\n  if (this._state.aborted) {\n    callback();\n    return;\n  }\n\n  this._module.append(source, data, function(err) {\n    this._task = null;\n\n    if (this._state.aborted) {\n      this._shutdown();\n      return;\n    }\n\n    if (err) {\n      this.emit('error', err);\n      setImmediate(callback);\n      return;\n    }\n\n    /**\n     * Fires when the entry's input has been processed and appended to the archive.\n     *\n     * @event Archiver#entry\n     * @type {EntryData}\n     */\n    this.emit('entry', data);\n    this._entriesProcessedCount++;\n\n    if (data.stats && data.stats.size) {\n      this._fsEntriesProcessedBytes += data.stats.size;\n    }\n\n    /**\n     * @event Archiver#progress\n     * @type {ProgressData}\n     */\n    this.emit('progress', {\n      entries: {\n        total: this._entriesCount,\n        processed: this._entriesProcessedCount\n      },\n      fs: {\n        totalBytes: this._fsEntriesTotalBytes,\n        processedBytes: this._fsEntriesProcessedBytes\n      }\n    });\n\n    setImmediate(callback);\n  }.bind(this));\n};\n\n/**\n * Finalizes the module.\n *\n * @private\n * @return void\n */\nArchiver.prototype._moduleFinalize = function() {\n  if (typeof this._module.finalize === 'function') {\n    this._module.finalize();\n  } else if (typeof this._module.end === 'function') {\n    this._module.end();\n  } else {\n    this.emit('error', new ArchiverError('NOENDMETHOD'));\n  }\n};\n\n/**\n * Pipes the module to our internal stream with error bubbling.\n *\n * @private\n * @return void\n */\nArchiver.prototype._modulePipe = function() {\n  this._module.on('error', this._onModuleError.bind(this));\n  this._module.pipe(this);\n  this._state.modulePiped = true;\n};\n\n/**\n * Determines if the current module supports a defined feature.\n *\n * @private\n * @param  {String} key\n * @return {Boolean}\n */\nArchiver.prototype._moduleSupports = function(key) {\n  if (!this._module.supports || !this._module.supports[key]) {\n    return false;\n  }\n\n  return this._module.supports[key];\n};\n\n/**\n * Unpipes the module from our internal stream.\n *\n * @private\n * @return void\n */\nArchiver.prototype._moduleUnpipe = function() {\n  this._module.unpipe(this);\n  this._state.modulePiped = false;\n};\n\n/**\n * Normalizes entry data with fallbacks for key properties.\n *\n * @private\n * @param  {Object} data\n * @param  {fs.Stats} stats\n * @return {Object}\n */\nArchiver.prototype._normalizeEntryData = function(data, stats) {\n  data = util.defaults(data, {\n    type: 'file',\n    name: null,\n    date: null,\n    mode: null,\n    prefix: null,\n    sourcePath: null,\n    stats: false\n  });\n\n  if (stats && data.stats === false) {\n    data.stats = stats;\n  }\n\n  var isDir = data.type === 'directory';\n\n  if (data.name) {\n    if (typeof data.prefix === 'string' && '' !== data.prefix) {\n      data.name = data.prefix + '/' + data.name;\n      data.prefix = null;\n    }\n\n    data.name = util.sanitizePath(data.name);\n\n    if (data.type !== 'symlink' && data.name.slice(-1) === '/') {\n      isDir = true;\n      data.type = 'directory';\n    } else if (isDir) {\n      data.name += '/';\n    }\n  }\n\n  // 511 === 0777; 493 === 0755; 438 === 0666; 420 === 0644\n  if (typeof data.mode === 'number') {\n    if (win32) {\n      data.mode &= 511;\n    } else {\n      data.mode &= 4095\n    }\n  } else if (data.stats && data.mode === null) {\n    if (win32) {\n      data.mode = data.stats.mode & 511;\n    } else {\n      data.mode = data.stats.mode & 4095;\n    }\n\n    // stat isn't reliable on windows; force 0755 for dir\n    if (win32 && isDir) {\n      data.mode = 493;\n    }\n  } else if (data.mode === null) {\n    data.mode = isDir ? 493 : 420;\n  }\n\n  if (data.stats && data.date === null) {\n    data.date = data.stats.mtime;\n  } else {\n    data.date = util.dateify(data.date);\n  }\n\n  return data;\n};\n\n/**\n * Error listener that re-emits error on to our internal stream.\n *\n * @private\n * @param  {Error} err\n * @return void\n */\nArchiver.prototype._onModuleError = function(err) {\n  /**\n   * @event Archiver#error\n   * @type {ErrorData}\n   */\n  this.emit('error', err);\n};\n\n/**\n * Checks the various state variables after queue has drained to determine if\n * we need to `finalize`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._onQueueDrain = function() {\n  if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n    return;\n  }\n\n  if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n    this._finalize();\n  }\n};\n\n/**\n * Appends each queue task to the module.\n *\n * @private\n * @param  {Object} task\n * @param  {Function} callback\n * @return void\n */\nArchiver.prototype._onQueueTask = function(task, callback) {\n  var fullCallback = () => {\n    if(task.data.callback) {\n      task.data.callback();\n    }\n    callback();\n  }\n\n  if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n    fullCallback();\n    return;\n  }\n\n  this._task = task;\n  this._moduleAppend(task.source, task.data, fullCallback);\n};\n\n/**\n * Performs a file stat and reinjects the task back into the queue.\n *\n * @private\n * @param  {Object} task\n * @param  {Function} callback\n * @return void\n */\nArchiver.prototype._onStatQueueTask = function(task, callback) {\n  if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n    callback();\n    return;\n  }\n\n  fs.lstat(task.filepath, function(err, stats) {\n    if (this._state.aborted) {\n      setImmediate(callback);\n      return;\n    }\n\n    if (err) {\n      this._entriesCount--;\n\n      /**\n       * @event Archiver#warning\n       * @type {ErrorData}\n       */\n      this.emit('warning', err);\n      setImmediate(callback);\n      return;\n    }\n\n    task = this._updateQueueTaskWithStats(task, stats);\n\n    if (task) {\n      if (stats.size) {\n        this._fsEntriesTotalBytes += stats.size;\n      }\n\n      this._queue.push(task);\n    }\n\n    setImmediate(callback);\n  }.bind(this));\n};\n\n/**\n * Unpipes the module and ends our internal stream.\n *\n * @private\n * @return void\n */\nArchiver.prototype._shutdown = function() {\n  this._moduleUnpipe();\n  this.end();\n};\n\n/**\n * Tracks the bytes emitted by our internal stream.\n *\n * @private\n * @param  {Buffer} chunk\n * @param  {String} encoding\n * @param  {Function} callback\n * @return void\n */\nArchiver.prototype._transform = function(chunk, encoding, callback) {\n  if (chunk) {\n    this._pointer += chunk.length;\n  }\n\n  callback(null, chunk);\n};\n\n/**\n * Updates and normalizes a queue task using stats data.\n *\n * @private\n * @param  {Object} task\n * @param  {fs.Stats} stats\n * @return {Object}\n */\nArchiver.prototype._updateQueueTaskWithStats = function(task, stats) {\n  if (stats.isFile()) {\n    task.data.type = 'file';\n    task.data.sourceType = 'stream';\n    task.source = util.lazyReadStream(task.filepath);\n  } else if (stats.isDirectory() && this._moduleSupports('directory')) {\n    task.data.name = util.trailingSlashIt(task.data.name);\n    task.data.type = 'directory';\n    task.data.sourcePath = util.trailingSlashIt(task.filepath);\n    task.data.sourceType = 'buffer';\n    task.source = Buffer.concat([]);\n  } else if (stats.isSymbolicLink() && this._moduleSupports('symlink')) {\n    var linkPath = fs.readlinkSync(task.filepath);\n    var dirName = path.dirname(task.filepath);\n    task.data.type = 'symlink';\n    task.data.linkname = path.relative(dirName, path.resolve(dirName, linkPath));\n    task.data.sourceType = 'buffer';\n    task.source = Buffer.concat([]);\n  } else {\n    if (stats.isDirectory()) {\n      this.emit('warning', new ArchiverError('DIRECTORYNOTSUPPORTED', task.data));\n    } else if (stats.isSymbolicLink()) {\n      this.emit('warning', new ArchiverError('SYMLINKNOTSUPPORTED', task.data));\n    } else {\n      this.emit('warning', new ArchiverError('ENTRYNOTSUPPORTED', task.data));\n    }\n\n    return null;\n  }\n\n  task.data = this._normalizeEntryData(task.data, stats);\n\n  return task;\n};\n\n/**\n * Aborts the archiving process, taking a best-effort approach, by:\n *\n * - removing any pending queue tasks\n * - allowing any active queue workers to finish\n * - detaching internal module pipes\n * - ending both sides of the Transform stream\n *\n * It will NOT drain any remaining sources.\n *\n * @return {this}\n */\nArchiver.prototype.abort = function() {\n  if (this._state.aborted || this._state.finalized) {\n    return this;\n  }\n\n  this._abort();\n\n  return this;\n};\n\n/**\n * Appends an input source (text string, buffer, or stream) to the instance.\n *\n * When the instance has received, processed, and emitted the input, the `entry`\n * event is fired.\n *\n * @fires  Archiver#entry\n * @param  {(Buffer|Stream|String)} source The input source.\n * @param  {EntryData} data See also {@link ZipEntryData} and {@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.append = function(source, data) {\n  if (this._state.finalize || this._state.aborted) {\n    this.emit('error', new ArchiverError('QUEUECLOSED'));\n    return this;\n  }\n\n  data = this._normalizeEntryData(data);\n\n  if (typeof data.name !== 'string' || data.name.length === 0) {\n    this.emit('error', new ArchiverError('ENTRYNAMEREQUIRED'));\n    return this;\n  }\n\n  if (data.type === 'directory' && !this._moduleSupports('directory')) {\n    this.emit('error', new ArchiverError('DIRECTORYNOTSUPPORTED', { name: data.name }));\n    return this;\n  }\n\n  source = util.normalizeInputSource(source);\n\n  if (Buffer.isBuffer(source)) {\n    data.sourceType = 'buffer';\n  } else if (util.isStream(source)) {\n    data.sourceType = 'stream';\n  } else {\n    this.emit('error', new ArchiverError('INPUTSTEAMBUFFERREQUIRED', { name: data.name }));\n    return this;\n  }\n\n  this._entriesCount++;\n  this._queue.push({\n    data: data,\n    source: source\n  });\n\n  return this;\n};\n\n/**\n * Appends a directory and its files, recursively, given its dirpath.\n *\n * @param  {String} dirpath The source directory path.\n * @param  {String} destpath The destination path within the archive.\n * @param  {(EntryData|Function)} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.directory = function(dirpath, destpath, data) {\n  if (this._state.finalize || this._state.aborted) {\n    this.emit('error', new ArchiverError('QUEUECLOSED'));\n    return this;\n  }\n\n  if (typeof dirpath !== 'string' || dirpath.length === 0) {\n    this.emit('error', new ArchiverError('DIRECTORYDIRPATHREQUIRED'));\n    return this;\n  }\n\n  this._pending++;\n\n  if (destpath === false) {\n    destpath = '';\n  } else if (typeof destpath !== 'string'){\n    destpath = dirpath;\n  }\n\n  var dataFunction = false;\n  if (typeof data === 'function') {\n    dataFunction = data;\n    data = {};\n  } else if (typeof data !== 'object') {\n    data = {};\n  }\n\n  var globOptions = {\n    stat: true,\n    dot: true\n  };\n\n  function onGlobEnd() {\n    this._pending--;\n    this._maybeFinalize();\n  }\n\n  function onGlobError(err) {\n    this.emit('error', err);\n  }\n\n  function onGlobMatch(match){\n    globber.pause();\n\n    var ignoreMatch = false;\n    var entryData = Object.assign({}, data);\n    entryData.name = match.relative;\n    entryData.prefix = destpath;\n    entryData.stats = match.stat;\n    entryData.callback = globber.resume.bind(globber);\n\n    try {\n      if (dataFunction) {\n        entryData = dataFunction(entryData);\n\n        if (entryData === false) {\n          ignoreMatch = true;\n        } else if (typeof entryData !== 'object') {\n          throw new ArchiverError('DIRECTORYFUNCTIONINVALIDDATA', { dirpath: dirpath });\n        }\n      }\n    } catch(e) {\n      this.emit('error', e);\n      return;\n    }\n\n    if (ignoreMatch) {\n      globber.resume();\n      return;\n    }\n\n    this._append(match.absolute, entryData);\n  }\n\n  var globber = glob(dirpath, globOptions);\n  globber.on('error', onGlobError.bind(this));\n  globber.on('match', onGlobMatch.bind(this));\n  globber.on('end', onGlobEnd.bind(this));\n\n  return this;\n};\n\n/**\n * Appends a file given its filepath using a\n * [lazystream]{@link https://github.com/jpommerening/node-lazystream} wrapper to\n * prevent issues with open file limits.\n *\n * When the instance has received, processed, and emitted the file, the `entry`\n * event is fired.\n *\n * @param  {String} filepath The source filepath.\n * @param  {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.file = function(filepath, data) {\n  if (this._state.finalize || this._state.aborted) {\n    this.emit('error', new ArchiverError('QUEUECLOSED'));\n    return this;\n  }\n\n  if (typeof filepath !== 'string' || filepath.length === 0) {\n    this.emit('error', new ArchiverError('FILEFILEPATHREQUIRED'));\n    return this;\n  }\n\n  this._append(filepath, data);\n\n  return this;\n};\n\n/**\n * Appends multiple files that match a glob pattern.\n *\n * @param  {String} pattern The [glob pattern]{@link https://github.com/isaacs/minimatch} to match.\n * @param  {Object} options See [node-readdir-glob]{@link https://github.com/yqnn/node-readdir-glob#options}.\n * @param  {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.glob = function(pattern, options, data) {\n  this._pending++;\n\n  options = util.defaults(options, {\n    stat: true,\n    pattern: pattern\n  });\n\n  function onGlobEnd() {\n    this._pending--;\n    this._maybeFinalize();\n  }\n\n  function onGlobError(err) {\n    this.emit('error', err);\n  }\n\n  function onGlobMatch(match){\n    globber.pause();\n    var entryData = Object.assign({}, data);\n    entryData.callback = globber.resume.bind(globber);\n    entryData.stats = match.stat;\n    entryData.name = match.relative;\n\n    this._append(match.absolute, entryData);\n  }\n\n  var globber = glob(options.cwd || '.', options);\n  globber.on('error', onGlobError.bind(this));\n  globber.on('match', onGlobMatch.bind(this));\n  globber.on('end', onGlobEnd.bind(this));\n\n  return this;\n};\n\n/**\n * Finalizes the instance and prevents further appending to the archive\n * structure (queue will continue til drained).\n *\n * The `end`, `close` or `finish` events on the destination stream may fire\n * right after calling this method so you should set listeners beforehand to\n * properly detect stream completion.\n *\n * @return {Promise}\n */\nArchiver.prototype.finalize = function() {\n  if (this._state.aborted) {\n    var abortedError = new ArchiverError('ABORTED');\n    this.emit('error', abortedError);\n    return Promise.reject(abortedError);\n  }\n\n  if (this._state.finalize) {\n    var finalizingError = new ArchiverError('FINALIZING');\n    this.emit('error', finalizingError);\n    return Promise.reject(finalizingError);\n  }\n\n  this._state.finalize = true;\n\n  if (this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n    this._finalize();\n  }\n\n  var self = this;\n\n  return new Promise(function(resolve, reject) {\n    var errored;\n\n    self._module.on('end', function() {\n      if (!errored) {\n        resolve();\n      }\n    })\n\n    self._module.on('error', function(err) {\n      errored = true;\n      reject(err);\n    })\n  })\n};\n\n/**\n * Sets the module format name used for archiving.\n *\n * @param {String} format The name of the format.\n * @return {this}\n */\nArchiver.prototype.setFormat = function(format) {\n  if (this._format) {\n    this.emit('error', new ArchiverError('FORMATSET'));\n    return this;\n  }\n\n  this._format = format;\n\n  return this;\n};\n\n/**\n * Sets the module used for archiving.\n *\n * @param {Function} module The function for archiver to interact with.\n * @return {this}\n */\nArchiver.prototype.setModule = function(module) {\n  if (this._state.aborted) {\n    this.emit('error', new ArchiverError('ABORTED'));\n    return this;\n  }\n\n  if (this._state.module) {\n    this.emit('error', new ArchiverError('MODULESET'));\n    return this;\n  }\n\n  this._module = module;\n  this._modulePipe();\n\n  return this;\n};\n\n/**\n * Appends a symlink to the instance.\n *\n * This does NOT interact with filesystem and is used for programmatically creating symlinks.\n *\n * @param  {String} filepath The symlink path (within archive).\n * @param  {String} target The target path (within archive).\n * @param  {Number} mode Sets the entry permissions.\n * @return {this}\n */\nArchiver.prototype.symlink = function(filepath, target, mode) {\n  if (this._state.finalize || this._state.aborted) {\n    this.emit('error', new ArchiverError('QUEUECLOSED'));\n    return this;\n  }\n\n  if (typeof filepath !== 'string' || filepath.length === 0) {\n    this.emit('error', new ArchiverError('SYMLINKFILEPATHREQUIRED'));\n    return this;\n  }\n\n  if (typeof target !== 'string' || target.length === 0) {\n    this.emit('error', new ArchiverError('SYMLINKTARGETREQUIRED', { filepath: filepath }));\n    return this;\n  }\n\n  if (!this._moduleSupports('symlink')) {\n    this.emit('error', new ArchiverError('SYMLINKNOTSUPPORTED', { filepath: filepath }));\n    return this;\n  }\n\n  var data = {};\n  data.type = 'symlink';\n  data.name = filepath.replace(/\\\\/g, '/');\n  data.linkname = target.replace(/\\\\/g, '/');\n  data.sourceType = 'buffer';\n\n  if (typeof mode === \"number\") {\n    data.mode = mode;\n  }\n\n  this._entriesCount++;\n  this._queue.push({\n    data: data,\n    source: Buffer.concat([])\n  });\n\n  return this;\n};\n\n/**\n * Returns the current length (in bytes) that has been emitted.\n *\n * @return {Number}\n */\nArchiver.prototype.pointer = function() {\n  return this._pointer;\n};\n\n/**\n * Middleware-like helper that has yet to be fully implemented.\n *\n * @private\n * @param  {Function} plugin\n * @return {this}\n */\nArchiver.prototype.use = function(plugin) {\n  this._streams.push(plugin);\n  return this;\n};\n\nmodule.exports = Archiver;\n\n/**\n * @typedef {Object} CoreOptions\n * @global\n * @property {Number} [statConcurrency=4] Sets the number of workers used to\n * process the internal fs stat queue.\n */\n\n/**\n * @typedef {Object} TransformOptions\n * @property {Boolean} [allowHalfOpen=true] If set to false, then the stream\n * will automatically end the readable side when the writable side ends and vice\n * versa.\n * @property {Boolean} [readableObjectMode=false] Sets objectMode for readable\n * side of the stream. Has no effect if objectMode is true.\n * @property {Boolean} [writableObjectMode=false] Sets objectMode for writable\n * side of the stream. Has no effect if objectMode is true.\n * @property {Boolean} [decodeStrings=true] Whether or not to decode strings\n * into Buffers before passing them to _write(). `Writable`\n * @property {String} [encoding=NULL] If specified, then buffers will be decoded\n * to strings using the specified encoding. `Readable`\n * @property {Number} [highWaterMark=16kb] The maximum number of bytes to store\n * in the internal buffer before ceasing to read from the underlying resource.\n * `Readable` `Writable`\n * @property {Boolean} [objectMode=false] Whether this stream should behave as a\n * stream of objects. Meaning that stream.read(n) returns a single value instead\n * of a Buffer of size n. `Readable` `Writable`\n */\n\n/**\n * @typedef {Object} EntryData\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n */\n\n/**\n * @typedef {Object} ErrorData\n * @property {String} message The message of the error.\n * @property {String} code The error code assigned to this error.\n * @property {String} data Additional data provided for reporting or debugging (where available).\n */\n\n/**\n * @typedef {Object} ProgressData\n * @property {Object} entries\n * @property {Number} entries.total Number of entries that have been appended.\n * @property {Number} entries.processed Number of entries that have been processed.\n * @property {Object} fs\n * @property {Number} fs.totalBytes Number of bytes that have been appended. Calculated asynchronously and might not be accurate: it growth while entries are added. (based on fs.Stats)\n * @property {Number} fs.processedBytes Number of bytes that have been processed. (based on fs.Stats)\n */\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar ArchiveEntry = module.exports = function() {};\n\nArchiveEntry.prototype.getName = function() {};\n\nArchiveEntry.prototype.getSize = function() {};\n\nArchiveEntry.prototype.getLastModifiedDate = function() {};\n\nArchiveEntry.prototype.isDirectory = function() {};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar util = module.exports = {};\n\nutil.dateToDos = function(d, forceLocalTime) {\n  forceLocalTime = forceLocalTime || false;\n\n  var year = forceLocalTime ? d.getFullYear() : d.getUTCFullYear();\n\n  if (year < 1980) {\n    return 2162688; // 1980-1-1 00:00:00\n  } else if (year >= 2044) {\n    return 2141175677; // 2043-12-31 23:59:58\n  }\n\n  var val = {\n    year: year,\n    month: forceLocalTime ? d.getMonth() : d.getUTCMonth(),\n    date: forceLocalTime ? d.getDate() : d.getUTCDate(),\n    hours: forceLocalTime ? d.getHours() : d.getUTCHours(),\n    minutes: forceLocalTime ? d.getMinutes() : d.getUTCMinutes(),\n    seconds: forceLocalTime ? d.getSeconds() : d.getUTCSeconds()\n  };\n\n  return ((val.year - 1980) << 25) | ((val.month + 1) << 21) | (val.date << 16) |\n    (val.hours << 11) | (val.minutes << 5) | (val.seconds / 2);\n};\n\nutil.dosToDate = function(dos) {\n  return new Date(((dos >> 25) & 0x7f) + 1980, ((dos >> 21) & 0x0f) - 1, (dos >> 16) & 0x1f, (dos >> 11) & 0x1f, (dos >> 5) & 0x3f, (dos & 0x1f) << 1);\n};\n\nutil.fromDosTime = function(buf) {\n  return util.dosToDate(buf.readUInt32LE(0));\n};\n\nutil.getEightBytes = function(v) {\n  var buf = Buffer.alloc(8);\n  buf.writeUInt32LE(v % 0x0100000000, 0);\n  buf.writeUInt32LE((v / 0x0100000000) | 0, 4);\n\n  return buf;\n};\n\nutil.getShortBytes = function(v) {\n  var buf = Buffer.alloc(2);\n  buf.writeUInt16LE((v & 0xFFFF) >>> 0, 0);\n\n  return buf;\n};\n\nutil.getShortBytesValue = function(buf, offset) {\n  return buf.readUInt16LE(offset);\n};\n\nutil.getLongBytes = function(v) {\n  var buf = Buffer.alloc(4);\n  buf.writeUInt32LE((v & 0xFFFFFFFF) >>> 0, 0);\n\n  return buf;\n};\n\nutil.getLongBytesValue = function(buf, offset) {\n  return buf.readUInt32LE(offset);\n};\n\nutil.toDosTime = function(d) {\n  return util.getLongBytes(util.dateToDos(d));\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar zipUtil = require('./util');\n\nvar DATA_DESCRIPTOR_FLAG = 1 << 3;\nvar ENCRYPTION_FLAG = 1 << 0;\nvar NUMBER_OF_SHANNON_FANO_TREES_FLAG = 1 << 2;\nvar SLIDING_DICTIONARY_SIZE_FLAG = 1 << 1;\nvar STRONG_ENCRYPTION_FLAG = 1 << 6;\nvar UFT8_NAMES_FLAG = 1 << 11;\n\nvar GeneralPurposeBit = module.exports = function() {\n  if (!(this instanceof GeneralPurposeBit)) {\n    return new GeneralPurposeBit();\n  }\n\n  this.descriptor = false;\n  this.encryption = false;\n  this.utf8 = false;\n  this.numberOfShannonFanoTrees = 0;\n  this.strongEncryption = false;\n  this.slidingDictionarySize = 0;\n\n  return this;\n};\n\nGeneralPurposeBit.prototype.encode = function() {\n  return zipUtil.getShortBytes(\n    (this.descriptor ? DATA_DESCRIPTOR_FLAG : 0) |\n    (this.utf8 ? UFT8_NAMES_FLAG : 0) |\n    (this.encryption ? ENCRYPTION_FLAG : 0) |\n    (this.strongEncryption ? STRONG_ENCRYPTION_FLAG : 0)\n  );\n};\n\nGeneralPurposeBit.prototype.parse = function(buf, offset) {\n  var flag = zipUtil.getShortBytesValue(buf, offset);\n  var gbp = new GeneralPurposeBit();\n\n  gbp.useDataDescriptor((flag & DATA_DESCRIPTOR_FLAG) !== 0);\n  gbp.useUTF8ForNames((flag & UFT8_NAMES_FLAG) !== 0);\n  gbp.useStrongEncryption((flag & STRONG_ENCRYPTION_FLAG) !== 0);\n  gbp.useEncryption((flag & ENCRYPTION_FLAG) !== 0);\n  gbp.setSlidingDictionarySize((flag & SLIDING_DICTIONARY_SIZE_FLAG) !== 0 ? 8192 : 4096);\n  gbp.setNumberOfShannonFanoTrees((flag & NUMBER_OF_SHANNON_FANO_TREES_FLAG) !== 0 ? 3 : 2);\n\n  return gbp;\n};\n\nGeneralPurposeBit.prototype.setNumberOfShannonFanoTrees = function(n) {\n  this.numberOfShannonFanoTrees = n;\n};\n\nGeneralPurposeBit.prototype.getNumberOfShannonFanoTrees = function() {\n  return this.numberOfShannonFanoTrees;\n};\n\nGeneralPurposeBit.prototype.setSlidingDictionarySize = function(n) {\n  this.slidingDictionarySize = n;\n};\n\nGeneralPurposeBit.prototype.getSlidingDictionarySize = function() {\n  return this.slidingDictionarySize;\n};\n\nGeneralPurposeBit.prototype.useDataDescriptor = function(b) {\n  this.descriptor = b;\n};\n\nGeneralPurposeBit.prototype.usesDataDescriptor = function() {\n  return this.descriptor;\n};\n\nGeneralPurposeBit.prototype.useEncryption = function(b) {\n  this.encryption = b;\n};\n\nGeneralPurposeBit.prototype.usesEncryption = function() {\n  return this.encryption;\n};\n\nGeneralPurposeBit.prototype.useStrongEncryption = function(b) {\n  this.strongEncryption = b;\n};\n\nGeneralPurposeBit.prototype.usesStrongEncryption = function() {\n  return this.strongEncryption;\n};\n\nGeneralPurposeBit.prototype.useUTF8ForNames = function(b) {\n  this.utf8 = b;\n};\n\nGeneralPurposeBit.prototype.usesUTF8ForNames = function() {\n  return this.utf8;\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n    /**\n     * Bits used for permissions (and sticky bit)\n     */\n    PERM_MASK: 4095, // 07777\n\n    /**\n     * Bits used to indicate the filesystem object type.\n     */\n    FILE_TYPE_FLAG: 61440, // 0170000\n\n    /**\n     * Indicates symbolic links.\n     */\n    LINK_FLAG: 40960, // 0120000\n\n    /**\n     * Indicates plain files.\n     */\n    FILE_FLAG: 32768, // 0100000\n\n    /**\n     * Indicates directories.\n     */\n    DIR_FLAG: 16384, // 040000\n\n    // ----------------------------------------------------------\n    // somewhat arbitrary choices that are quite common for shared\n    // installations\n    // -----------------------------------------------------------\n\n    /**\n     * Default permissions for symbolic links.\n     */\n    DEFAULT_LINK_PERM: 511, // 0777\n\n    /**\n     * Default permissions for directories.\n     */\n    DEFAULT_DIR_PERM: 493, // 0755\n\n    /**\n     * Default permissions for plain files.\n     */\n    DEFAULT_FILE_PERM: 420 // 0644\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n  WORD: 4,\n  DWORD: 8,\n  EMPTY: Buffer.alloc(0),\n\n  SHORT: 2,\n  SHORT_MASK: 0xffff,\n  SHORT_SHIFT: 16,\n  SHORT_ZERO: Buffer.from(Array(2)),\n  LONG: 4,\n  LONG_ZERO: Buffer.from(Array(4)),\n\n  MIN_VERSION_INITIAL: 10,\n  MIN_VERSION_DATA_DESCRIPTOR: 20,\n  MIN_VERSION_ZIP64: 45,\n  VERSION_MADEBY: 45,\n\n  METHOD_STORED: 0,\n  METHOD_DEFLATED: 8,\n\n  PLATFORM_UNIX: 3,\n  PLATFORM_FAT: 0,\n\n  SIG_LFH: 0x04034b50,\n  SIG_DD: 0x08074b50,\n  SIG_CFH: 0x02014b50,\n  SIG_EOCD: 0x06054b50,\n  SIG_ZIP64_EOCD: 0x06064B50,\n  SIG_ZIP64_EOCD_LOC: 0x07064B50,\n\n  ZIP64_MAGIC_SHORT: 0xffff,\n  ZIP64_MAGIC: 0xffffffff,\n  ZIP64_EXTRA_ID: 0x0001,\n\n  ZLIB_NO_COMPRESSION: 0,\n  ZLIB_BEST_SPEED: 1,\n  ZLIB_BEST_COMPRESSION: 9,\n  ZLIB_DEFAULT_COMPRESSION: -1,\n\n  MODE_MASK: 0xFFF,\n  DEFAULT_FILE_MODE: 33188, // 010644 = -rw-r--r-- = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH\n  DEFAULT_DIR_MODE: 16877,  // 040755 = drwxr-xr-x = S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH\n\n  EXT_FILE_ATTR_DIR: 1106051088,  // 010173200020 = drwxr-xr-x = (((S_IFDIR | 0755) << 16) | S_DOS_D)\n  EXT_FILE_ATTR_FILE: 2175008800, // 020151000040 = -rw-r--r-- = (((S_IFREG | 0644) << 16) | S_DOS_A) >>> 0\n\n  // Unix file types\n  S_IFMT: 61440,   // 0170000 type of file mask\n  S_IFIFO: 4096,   // 010000 named pipe (fifo)\n  S_IFCHR: 8192,   // 020000 character special\n  S_IFDIR: 16384,  // 040000 directory\n  S_IFBLK: 24576,  // 060000 block special\n  S_IFREG: 32768,  // 0100000 regular\n  S_IFLNK: 40960,  // 0120000 symbolic link\n  S_IFSOCK: 49152, // 0140000 socket\n\n  // DOS file type flags\n  S_DOS_A: 32, // 040 Archive\n  S_DOS_D: 16, // 020 Directory\n  S_DOS_V: 8,  // 010 Volume\n  S_DOS_S: 4,  // 04 System\n  S_DOS_H: 2,  // 02 Hidden\n  S_DOS_R: 1   // 01 Read Only\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar normalizePath = require('normalize-path');\n\nvar ArchiveEntry = require('../archive-entry');\nvar GeneralPurposeBit = require('./general-purpose-bit');\nvar UnixStat = require('./unix-stat');\n\nvar constants = require('./constants');\nvar zipUtil = require('./util');\n\nvar ZipArchiveEntry = module.exports = function(name) {\n  if (!(this instanceof ZipArchiveEntry)) {\n    return new ZipArchiveEntry(name);\n  }\n\n  ArchiveEntry.call(this);\n\n  this.platform = constants.PLATFORM_FAT;\n  this.method = -1;\n\n  this.name = null;\n  this.size = 0;\n  this.csize = 0;\n  this.gpb = new GeneralPurposeBit();\n  this.crc = 0;\n  this.time = -1;\n\n  this.minver = constants.MIN_VERSION_INITIAL;\n  this.mode = -1;\n  this.extra = null;\n  this.exattr = 0;\n  this.inattr = 0;\n  this.comment = null;\n\n  if (name) {\n    this.setName(name);\n  }\n};\n\ninherits(ZipArchiveEntry, ArchiveEntry);\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getCentralDirectoryExtra = function() {\n  return this.getExtra();\n};\n\n/**\n * Returns the comment set for the entry.\n *\n * @returns {string}\n */\nZipArchiveEntry.prototype.getComment = function() {\n  return this.comment !== null ? this.comment : '';\n};\n\n/**\n * Returns the compressed size of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getCompressedSize = function() {\n  return this.csize;\n};\n\n/**\n * Returns the CRC32 digest for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getCrc = function() {\n  return this.crc;\n};\n\n/**\n * Returns the external file attributes for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getExternalAttributes = function() {\n  return this.exattr;\n};\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getExtra = function() {\n  return this.extra !== null ? this.extra : constants.EMPTY;\n};\n\n/**\n * Returns the general purpose bits related to the entry.\n *\n * @returns {GeneralPurposeBit}\n */\nZipArchiveEntry.prototype.getGeneralPurposeBit = function() {\n  return this.gpb;\n};\n\n/**\n * Returns the internal file attributes for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getInternalAttributes = function() {\n  return this.inattr;\n};\n\n/**\n * Returns the last modified date of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getLastModifiedDate = function() {\n  return this.getTime();\n};\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getLocalFileDataExtra = function() {\n  return this.getExtra();\n};\n\n/**\n * Returns the compression method used on the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getMethod = function() {\n  return this.method;\n};\n\n/**\n * Returns the filename of the entry.\n *\n * @returns {string}\n */\nZipArchiveEntry.prototype.getName = function() {\n  return this.name;\n};\n\n/**\n * Returns the platform on which the entry was made.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getPlatform = function() {\n  return this.platform;\n};\n\n/**\n * Returns the size of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getSize = function() {\n  return this.size;\n};\n\n/**\n * Returns a date object representing the last modified date of the entry.\n *\n * @returns {number|Date}\n */\nZipArchiveEntry.prototype.getTime = function() {\n  return this.time !== -1 ? zipUtil.dosToDate(this.time) : -1;\n};\n\n/**\n * Returns the DOS timestamp for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getTimeDos = function() {\n  return this.time !== -1 ? this.time : 0;\n};\n\n/**\n * Returns the UNIX file permissions for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getUnixMode = function() {\n  return this.platform !== constants.PLATFORM_UNIX ? 0 : ((this.getExternalAttributes() >> constants.SHORT_SHIFT) & constants.SHORT_MASK);\n};\n\n/**\n * Returns the version of ZIP needed to extract the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getVersionNeededToExtract = function() {\n  return this.minver;\n};\n\n/**\n * Sets the comment of the entry.\n *\n * @param comment\n */\nZipArchiveEntry.prototype.setComment = function(comment) {\n  if (Buffer.byteLength(comment) !== comment.length) {\n    this.getGeneralPurposeBit().useUTF8ForNames(true);\n  }\n\n  this.comment = comment;\n};\n\n/**\n * Sets the compressed size of the entry.\n *\n * @param size\n */\nZipArchiveEntry.prototype.setCompressedSize = function(size) {\n  if (size < 0) {\n    throw new Error('invalid entry compressed size');\n  }\n\n  this.csize = size;\n};\n\n/**\n * Sets the checksum of the entry.\n *\n * @param crc\n */\nZipArchiveEntry.prototype.setCrc = function(crc) {\n  if (crc < 0) {\n    throw new Error('invalid entry crc32');\n  }\n\n  this.crc = crc;\n};\n\n/**\n * Sets the external file attributes of the entry.\n *\n * @param attr\n */\nZipArchiveEntry.prototype.setExternalAttributes = function(attr) {\n  this.exattr = attr >>> 0;\n};\n\n/**\n * Sets the extra fields related to the entry.\n *\n * @param extra\n */\nZipArchiveEntry.prototype.setExtra = function(extra) {\n  this.extra = extra;\n};\n\n/**\n * Sets the general purpose bits related to the entry.\n *\n * @param gpb\n */\nZipArchiveEntry.prototype.setGeneralPurposeBit = function(gpb) {\n  if (!(gpb instanceof GeneralPurposeBit)) {\n    throw new Error('invalid entry GeneralPurposeBit');\n  }\n\n  this.gpb = gpb;\n};\n\n/**\n * Sets the internal file attributes of the entry.\n *\n * @param attr\n */\nZipArchiveEntry.prototype.setInternalAttributes = function(attr) {\n  this.inattr = attr;\n};\n\n/**\n * Sets the compression method of the entry.\n *\n * @param method\n */\nZipArchiveEntry.prototype.setMethod = function(method) {\n  if (method < 0) {\n    throw new Error('invalid entry compression method');\n  }\n\n  this.method = method;\n};\n\n/**\n * Sets the name of the entry.\n *\n * @param name\n * @param prependSlash\n */\nZipArchiveEntry.prototype.setName = function(name, prependSlash = false) {\n  name = normalizePath(name, false)\n    .replace(/^\\w+:/, '')\n    .replace(/^(\\.\\.\\/|\\/)+/, '');\n\n  if (prependSlash) {\n    name = `/${name}`;\n  }\n\n  if (Buffer.byteLength(name) !== name.length) {\n    this.getGeneralPurposeBit().useUTF8ForNames(true);\n  }\n\n  this.name = name;\n};\n\n/**\n * Sets the platform on which the entry was made.\n *\n * @param platform\n */\nZipArchiveEntry.prototype.setPlatform = function(platform) {\n  this.platform = platform;\n};\n\n/**\n * Sets the size of the entry.\n *\n * @param size\n */\nZipArchiveEntry.prototype.setSize = function(size) {\n  if (size < 0) {\n    throw new Error('invalid entry size');\n  }\n\n  this.size = size;\n};\n\n/**\n * Sets the time of the entry.\n *\n * @param time\n * @param forceLocalTime\n */\nZipArchiveEntry.prototype.setTime = function(time, forceLocalTime) {\n  if (!(time instanceof Date)) {\n    throw new Error('invalid entry time');\n  }\n\n  this.time = zipUtil.dateToDos(time, forceLocalTime);\n};\n\n/**\n * Sets the UNIX file permissions for the entry.\n *\n * @param mode\n */\nZipArchiveEntry.prototype.setUnixMode = function(mode) {\n  mode |= this.isDirectory() ? constants.S_IFDIR : constants.S_IFREG;\n\n  var extattr = 0;\n  extattr |= (mode << constants.SHORT_SHIFT) | (this.isDirectory() ? constants.S_DOS_D : constants.S_DOS_A);\n\n  this.setExternalAttributes(extattr);\n  this.mode = mode & constants.MODE_MASK;\n  this.platform = constants.PLATFORM_UNIX;\n};\n\n/**\n * Sets the version of ZIP needed to extract this entry.\n *\n * @param minver\n */\nZipArchiveEntry.prototype.setVersionNeededToExtract = function(minver) {\n  this.minver = minver;\n};\n\n/**\n * Returns true if this entry represents a directory.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isDirectory = function() {\n  return this.getName().slice(-1) === '/';\n};\n\n/**\n * Returns true if this entry represents a unix symlink,\n * in which case the entry's content contains the target path\n * for the symlink.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isUnixSymlink = function() {\n  return (this.getUnixMode() & UnixStat.FILE_TYPE_FLAG) === UnixStat.LINK_FLAG;\n};\n\n/**\n * Returns true if this entry is using the ZIP64 extension of ZIP.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isZip64 = function() {\n  return this.csize > constants.ZIP64_MAGIC || this.size > constants.ZIP64_MAGIC;\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar Stream = require('stream').Stream;\nvar PassThrough = require('readable-stream').PassThrough;\nvar isStream = require('is-stream');\n\nvar util = module.exports = {};\n\nutil.normalizeInputSource = function(source) {\n  if (source === null) {\n    return Buffer.alloc(0);\n  } else if (typeof source === 'string') {\n    return Buffer.from(source);\n  } else if (isStream(source) && !source._readableState) {\n    var normalized = new PassThrough();\n    source.pipe(normalized);\n\n    return normalized;\n  }\n\n  return source;\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar isStream = require('is-stream');\nvar Transform = require('readable-stream').Transform;\n\nvar ArchiveEntry = require('./archive-entry');\nvar util = require('../util');\n\nvar ArchiveOutputStream = module.exports = function(options) {\n  if (!(this instanceof ArchiveOutputStream)) {\n    return new ArchiveOutputStream(options);\n  }\n\n  Transform.call(this, options);\n\n  this.offset = 0;\n  this._archive = {\n    finish: false,\n    finished: false,\n    processing: false\n  };\n};\n\ninherits(ArchiveOutputStream, Transform);\n\nArchiveOutputStream.prototype._appendBuffer = function(zae, source, callback) {\n  // scaffold only\n};\n\nArchiveOutputStream.prototype._appendStream = function(zae, source, callback) {\n  // scaffold only\n};\n\nArchiveOutputStream.prototype._emitErrorCallback = function(err) {\n  if (err) {\n    this.emit('error', err);\n  }\n};\n\nArchiveOutputStream.prototype._finish = function(ae) {\n  // scaffold only\n};\n\nArchiveOutputStream.prototype._normalizeEntry = function(ae) {\n  // scaffold only\n};\n\nArchiveOutputStream.prototype._transform = function(chunk, encoding, callback) {\n  callback(null, chunk);\n};\n\nArchiveOutputStream.prototype.entry = function(ae, source, callback) {\n  source = source || null;\n\n  if (typeof callback !== 'function') {\n    callback = this._emitErrorCallback.bind(this);\n  }\n\n  if (!(ae instanceof ArchiveEntry)) {\n    callback(new Error('not a valid instance of ArchiveEntry'));\n    return;\n  }\n\n  if (this._archive.finish || this._archive.finished) {\n    callback(new Error('unacceptable entry after finish'));\n    return;\n  }\n\n  if (this._archive.processing) {\n    callback(new Error('already processing an entry'));\n    return;\n  }\n\n  this._archive.processing = true;\n  this._normalizeEntry(ae);\n  this._entry = ae;\n\n  source = util.normalizeInputSource(source);\n\n  if (Buffer.isBuffer(source)) {\n    this._appendBuffer(ae, source, callback);\n  } else if (isStream(source)) {\n    this._appendStream(ae, source, callback);\n  } else {\n    this._archive.processing = false;\n    callback(new Error('input source must be valid Stream or Buffer instance'));\n    return;\n  }\n\n  return this;\n};\n\nArchiveOutputStream.prototype.finish = function() {\n  if (this._archive.processing) {\n    this._archive.finish = true;\n    return;\n  }\n\n  this._finish();\n};\n\nArchiveOutputStream.prototype.getBytesWritten = function() {\n  return this.offset;\n};\n\nArchiveOutputStream.prototype.write = function(chunk, cb) {\n  if (chunk) {\n    this.offset += chunk.length;\n  }\n\n  return Transform.prototype.write.call(this, chunk, cb);\n};","/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tif(typeof DO_NOT_EXPORT_CRC === 'undefined') {\n\t\tif('object' === typeof exports) {\n\t\t\tfactory(exports);\n\t\t} else if ('function' === typeof define && define.amd) {\n\t\t\tdefine(function () {\n\t\t\t\tvar module = {};\n\t\t\t\tfactory(module);\n\t\t\t\treturn module;\n\t\t\t});\n\t\t} else {\n\t\t\tfactory(CRC32 = {});\n\t\t}\n\t} else {\n\t\tfactory(CRC32 = {});\n\t}\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.2';\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0],  T2 = TT[1],  T3 = TT[2],  T4 = TT[3],  T5 = TT[4];\nvar T6 = TT[5],  T7 = TT[6],  T8 = TT[7],  T9 = TT[8],  Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B, seed) {\n\tvar C = seed ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\n// $FlowIgnore\nCRC32.bstr = crc32_bstr;\n// $FlowIgnore\nCRC32.buf = crc32_buf;\n// $FlowIgnore\nCRC32.str = crc32_str;\n}));\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n 'use strict';\n\nconst {Transform} = require('readable-stream');\n\nconst crc32 = require('crc-32');\n\nclass CRC32Stream extends Transform {\n  constructor(options) {\n    super(options);\n    this.checksum = Buffer.allocUnsafe(4);\n    this.checksum.writeInt32BE(0, 0);\n\n    this.rawSize = 0;\n  }\n\n  _transform(chunk, encoding, callback) {\n    if (chunk) {\n      this.checksum = crc32.buf(chunk, this.checksum) >>> 0;\n      this.rawSize += chunk.length;\n    }\n\n    callback(null, chunk);\n  }\n\n  digest(encoding) {\n    const checksum = Buffer.allocUnsafe(4);\n    checksum.writeUInt32BE(this.checksum >>> 0, 0);\n    return encoding ? checksum.toString(encoding) : checksum;\n  }\n\n  hex() {\n    return this.digest('hex').toUpperCase();\n  }\n\n  size() {\n    return this.rawSize;\n  }\n}\n\nmodule.exports = CRC32Stream;\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n'use strict';\n\nconst {DeflateRaw} = require('zlib');\n\nconst crc32 = require('crc-32');\n\nclass DeflateCRC32Stream extends DeflateRaw {\n  constructor(options) {\n    super(options);\n\n    this.checksum = Buffer.allocUnsafe(4);\n    this.checksum.writeInt32BE(0, 0);\n\n    this.rawSize = 0;\n    this.compressedSize = 0;\n  }\n\n  push(chunk, encoding) {\n    if (chunk) {\n      this.compressedSize += chunk.length;\n    }\n\n    return super.push(chunk, encoding);\n  }\n\n  _transform(chunk, encoding, callback) {\n    if (chunk) {\n      this.checksum = crc32.buf(chunk, this.checksum) >>> 0;\n      this.rawSize += chunk.length;\n    }\n\n    super._transform(chunk, encoding, callback)\n  }\n\n  digest(encoding) {\n    const checksum = Buffer.allocUnsafe(4);\n    checksum.writeUInt32BE(this.checksum >>> 0, 0);\n    return encoding ? checksum.toString(encoding) : checksum;\n  }\n\n  hex() {\n    return this.digest('hex').toUpperCase();\n  }\n\n  size(compressed = false) {\n    if (compressed) {\n      return this.compressedSize;\n    } else {\n      return this.rawSize;\n    }\n  }\n}\n\nmodule.exports = DeflateCRC32Stream;\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n'use strict';\n\nmodule.exports = {\n  CRC32Stream: require('./crc32-stream'),\n  DeflateCRC32Stream: require('./deflate-crc32-stream')\n}\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar crc32 = require('crc-32');\nvar {CRC32Stream} = require('crc32-stream');\nvar {DeflateCRC32Stream} = require('crc32-stream');\n\nvar ArchiveOutputStream = require('../archive-output-stream');\nvar ZipArchiveEntry = require('./zip-archive-entry');\nvar GeneralPurposeBit = require('./general-purpose-bit');\n\nvar constants = require('./constants');\nvar util = require('../../util');\nvar zipUtil = require('./util');\n\nvar ZipArchiveOutputStream = module.exports = function(options) {\n  if (!(this instanceof ZipArchiveOutputStream)) {\n    return new ZipArchiveOutputStream(options);\n  }\n\n  options = this.options = this._defaults(options);\n\n  ArchiveOutputStream.call(this, options);\n\n  this._entry = null;\n  this._entries = [];\n  this._archive = {\n    centralLength: 0,\n    centralOffset: 0,\n    comment: '',\n    finish: false,\n    finished: false,\n    processing: false,\n    forceZip64: options.forceZip64,\n    forceLocalTime: options.forceLocalTime\n  };\n};\n\ninherits(ZipArchiveOutputStream, ArchiveOutputStream);\n\nZipArchiveOutputStream.prototype._afterAppend = function(ae) {\n  this._entries.push(ae);\n\n  if (ae.getGeneralPurposeBit().usesDataDescriptor()) {\n    this._writeDataDescriptor(ae);\n  }\n\n  this._archive.processing = false;\n  this._entry = null;\n\n  if (this._archive.finish && !this._archive.finished) {\n    this._finish();\n  }\n};\n\nZipArchiveOutputStream.prototype._appendBuffer = function(ae, source, callback) {\n  if (source.length === 0) {\n    ae.setMethod(constants.METHOD_STORED);\n  }\n\n  var method = ae.getMethod();\n\n  if (method === constants.METHOD_STORED) {\n    ae.setSize(source.length);\n    ae.setCompressedSize(source.length);\n    ae.setCrc(crc32.buf(source) >>> 0);\n  }\n\n  this._writeLocalFileHeader(ae);\n\n  if (method === constants.METHOD_STORED) {\n    this.write(source);\n    this._afterAppend(ae);\n    callback(null, ae);\n    return;\n  } else if (method === constants.METHOD_DEFLATED) {\n    this._smartStream(ae, callback).end(source);\n    return;\n  } else {\n    callback(new Error('compression method ' + method + ' not implemented'));\n    return;\n  }\n};\n\nZipArchiveOutputStream.prototype._appendStream = function(ae, source, callback) {\n  ae.getGeneralPurposeBit().useDataDescriptor(true);\n  ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR);\n\n  this._writeLocalFileHeader(ae);\n\n  var smart = this._smartStream(ae, callback);\n  source.once('error', function(err) {\n    smart.emit('error', err);\n    smart.end();\n  })\n  source.pipe(smart);\n};\n\nZipArchiveOutputStream.prototype._defaults = function(o) {\n  if (typeof o !== 'object') {\n    o = {};\n  }\n\n  if (typeof o.zlib !== 'object') {\n    o.zlib = {};\n  }\n\n  if (typeof o.zlib.level !== 'number') {\n    o.zlib.level = constants.ZLIB_BEST_SPEED;\n  }\n\n  o.forceZip64 = !!o.forceZip64;\n  o.forceLocalTime = !!o.forceLocalTime;\n\n  return o;\n};\n\nZipArchiveOutputStream.prototype._finish = function() {\n  this._archive.centralOffset = this.offset;\n\n  this._entries.forEach(function(ae) {\n    this._writeCentralFileHeader(ae);\n  }.bind(this));\n\n  this._archive.centralLength = this.offset - this._archive.centralOffset;\n\n  if (this.isZip64()) {\n    this._writeCentralDirectoryZip64();\n  }\n\n  this._writeCentralDirectoryEnd();\n\n  this._archive.processing = false;\n  this._archive.finish = true;\n  this._archive.finished = true;\n  this.end();\n};\n\nZipArchiveOutputStream.prototype._normalizeEntry = function(ae) {\n  if (ae.getMethod() === -1) {\n    ae.setMethod(constants.METHOD_DEFLATED);\n  }\n\n  if (ae.getMethod() === constants.METHOD_DEFLATED) {\n    ae.getGeneralPurposeBit().useDataDescriptor(true);\n    ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR);\n  }\n\n  if (ae.getTime() === -1) {\n    ae.setTime(new Date(), this._archive.forceLocalTime);\n  }\n\n  ae._offsets = {\n    file: 0,\n    data: 0,\n    contents: 0,\n  };\n};\n\nZipArchiveOutputStream.prototype._smartStream = function(ae, callback) {\n  var deflate = ae.getMethod() === constants.METHOD_DEFLATED;\n  var process = deflate ? new DeflateCRC32Stream(this.options.zlib) : new CRC32Stream();\n  var error = null;\n\n  function handleStuff() {\n    var digest = process.digest().readUInt32BE(0);\n    ae.setCrc(digest);\n    ae.setSize(process.size());\n    ae.setCompressedSize(process.size(true));\n    this._afterAppend(ae);\n    callback(error, ae);\n  }\n\n  process.once('end', handleStuff.bind(this));\n  process.once('error', function(err) {\n    error = err;\n  });\n\n  process.pipe(this, { end: false });\n\n  return process;\n};\n\nZipArchiveOutputStream.prototype._writeCentralDirectoryEnd = function() {\n  var records = this._entries.length;\n  var size = this._archive.centralLength;\n  var offset = this._archive.centralOffset;\n\n  if (this.isZip64()) {\n    records = constants.ZIP64_MAGIC_SHORT;\n    size = constants.ZIP64_MAGIC;\n    offset = constants.ZIP64_MAGIC;\n  }\n\n  // signature\n  this.write(zipUtil.getLongBytes(constants.SIG_EOCD));\n\n  // disk numbers\n  this.write(constants.SHORT_ZERO);\n  this.write(constants.SHORT_ZERO);\n\n  // number of entries\n  this.write(zipUtil.getShortBytes(records));\n  this.write(zipUtil.getShortBytes(records));\n\n  // length and location of CD\n  this.write(zipUtil.getLongBytes(size));\n  this.write(zipUtil.getLongBytes(offset));\n\n  // archive comment\n  var comment = this.getComment();\n  var commentLength = Buffer.byteLength(comment);\n  this.write(zipUtil.getShortBytes(commentLength));\n  this.write(comment);\n};\n\nZipArchiveOutputStream.prototype._writeCentralDirectoryZip64 = function() {\n  // signature\n  this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD));\n\n  // size of the ZIP64 EOCD record\n  this.write(zipUtil.getEightBytes(44));\n\n  // version made by\n  this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64));\n\n  // version to extract\n  this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64));\n\n  // disk numbers\n  this.write(constants.LONG_ZERO);\n  this.write(constants.LONG_ZERO);\n\n  // number of entries\n  this.write(zipUtil.getEightBytes(this._entries.length));\n  this.write(zipUtil.getEightBytes(this._entries.length));\n\n  // length and location of CD\n  this.write(zipUtil.getEightBytes(this._archive.centralLength));\n  this.write(zipUtil.getEightBytes(this._archive.centralOffset));\n\n  // extensible data sector\n  // not implemented at this time\n\n  // end of central directory locator\n  this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD_LOC));\n\n  // disk number holding the ZIP64 EOCD record\n  this.write(constants.LONG_ZERO);\n\n  // relative offset of the ZIP64 EOCD record\n  this.write(zipUtil.getEightBytes(this._archive.centralOffset + this._archive.centralLength));\n\n  // total number of disks\n  this.write(zipUtil.getLongBytes(1));\n};\n\nZipArchiveOutputStream.prototype._writeCentralFileHeader = function(ae) {\n  var gpb = ae.getGeneralPurposeBit();\n  var method = ae.getMethod();\n  var fileOffset = ae._offsets.file;\n\n  var size = ae.getSize();\n  var compressedSize = ae.getCompressedSize();\n\n  if (ae.isZip64() || fileOffset > constants.ZIP64_MAGIC) {\n    size = constants.ZIP64_MAGIC;\n    compressedSize = constants.ZIP64_MAGIC;\n    fileOffset = constants.ZIP64_MAGIC;\n\n    ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64);\n\n    var extraBuf = Buffer.concat([\n      zipUtil.getShortBytes(constants.ZIP64_EXTRA_ID),\n      zipUtil.getShortBytes(24),\n      zipUtil.getEightBytes(ae.getSize()),\n      zipUtil.getEightBytes(ae.getCompressedSize()),\n      zipUtil.getEightBytes(ae._offsets.file)\n    ], 28);\n\n    ae.setExtra(extraBuf);\n  }\n\n  // signature\n  this.write(zipUtil.getLongBytes(constants.SIG_CFH));\n\n  // version made by\n  this.write(zipUtil.getShortBytes((ae.getPlatform() << 8) | constants.VERSION_MADEBY));\n\n  // version to extract and general bit flag\n  this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract()));\n  this.write(gpb.encode());\n\n  // compression method\n  this.write(zipUtil.getShortBytes(method));\n\n  // datetime\n  this.write(zipUtil.getLongBytes(ae.getTimeDos()));\n\n  // crc32 checksum\n  this.write(zipUtil.getLongBytes(ae.getCrc()));\n\n  // sizes\n  this.write(zipUtil.getLongBytes(compressedSize));\n  this.write(zipUtil.getLongBytes(size));\n\n  var name = ae.getName();\n  var comment = ae.getComment();\n  var extra = ae.getCentralDirectoryExtra();\n\n  if (gpb.usesUTF8ForNames()) {\n    name = Buffer.from(name);\n    comment = Buffer.from(comment);\n  }\n\n  // name length\n  this.write(zipUtil.getShortBytes(name.length));\n\n  // extra length\n  this.write(zipUtil.getShortBytes(extra.length));\n\n  // comments length\n  this.write(zipUtil.getShortBytes(comment.length));\n\n  // disk number start\n  this.write(constants.SHORT_ZERO);\n\n  // internal attributes\n  this.write(zipUtil.getShortBytes(ae.getInternalAttributes()));\n\n  // external attributes\n  this.write(zipUtil.getLongBytes(ae.getExternalAttributes()));\n\n  // relative offset of LFH\n  this.write(zipUtil.getLongBytes(fileOffset));\n\n  // name\n  this.write(name);\n\n  // extra\n  this.write(extra);\n\n  // comment\n  this.write(comment);\n};\n\nZipArchiveOutputStream.prototype._writeDataDescriptor = function(ae) {\n  // signature\n  this.write(zipUtil.getLongBytes(constants.SIG_DD));\n\n  // crc32 checksum\n  this.write(zipUtil.getLongBytes(ae.getCrc()));\n\n  // sizes\n  if (ae.isZip64()) {\n    this.write(zipUtil.getEightBytes(ae.getCompressedSize()));\n    this.write(zipUtil.getEightBytes(ae.getSize()));\n  } else {\n    this.write(zipUtil.getLongBytes(ae.getCompressedSize()));\n    this.write(zipUtil.getLongBytes(ae.getSize()));\n  }\n};\n\nZipArchiveOutputStream.prototype._writeLocalFileHeader = function(ae) {\n  var gpb = ae.getGeneralPurposeBit();\n  var method = ae.getMethod();\n  var name = ae.getName();\n  var extra = ae.getLocalFileDataExtra();\n\n  if (ae.isZip64()) {\n    gpb.useDataDescriptor(true);\n    ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64);\n  }\n\n  if (gpb.usesUTF8ForNames()) {\n    name = Buffer.from(name);\n  }\n\n  ae._offsets.file = this.offset;\n\n  // signature\n  this.write(zipUtil.getLongBytes(constants.SIG_LFH));\n\n  // version to extract and general bit flag\n  this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract()));\n  this.write(gpb.encode());\n\n  // compression method\n  this.write(zipUtil.getShortBytes(method));\n\n  // datetime\n  this.write(zipUtil.getLongBytes(ae.getTimeDos()));\n\n  ae._offsets.data = this.offset;\n\n  // crc32 checksum and sizes\n  if (gpb.usesDataDescriptor()) {\n    this.write(constants.LONG_ZERO);\n    this.write(constants.LONG_ZERO);\n    this.write(constants.LONG_ZERO);\n  } else {\n    this.write(zipUtil.getLongBytes(ae.getCrc()));\n    this.write(zipUtil.getLongBytes(ae.getCompressedSize()));\n    this.write(zipUtil.getLongBytes(ae.getSize()));\n  }\n\n  // name length\n  this.write(zipUtil.getShortBytes(name.length));\n\n  // extra length\n  this.write(zipUtil.getShortBytes(extra.length));\n\n  // name\n  this.write(name);\n\n  // extra\n  this.write(extra);\n\n  ae._offsets.contents = this.offset;\n};\n\nZipArchiveOutputStream.prototype.getComment = function(comment) {\n  return this._archive.comment !== null ? this._archive.comment : '';\n};\n\nZipArchiveOutputStream.prototype.isZip64 = function() {\n  return this._archive.forceZip64 || this._entries.length > constants.ZIP64_MAGIC_SHORT || this._archive.centralLength > constants.ZIP64_MAGIC || this._archive.centralOffset > constants.ZIP64_MAGIC;\n};\n\nZipArchiveOutputStream.prototype.setComment = function(comment) {\n  this._archive.comment = comment;\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n  ArchiveEntry: require('./archivers/archive-entry'),\n  ZipArchiveEntry: require('./archivers/zip/zip-archive-entry'),\n  ArchiveOutputStream: require('./archivers/archive-output-stream'),\n  ZipArchiveOutputStream: require('./archivers/zip/zip-archive-output-stream')\n};","/**\n * ZipStream\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-zip-stream/blob/master/LICENSE}\n * @copyright (c) 2014 Chris Talkington, contributors.\n */\nvar inherits = require('util').inherits;\n\nvar ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream;\nvar ZipArchiveEntry = require('compress-commons').ZipArchiveEntry;\n\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @extends external:ZipArchiveOutputStream\n * @param {Object} [options]\n * @param {String} [options.comment] Sets the zip archive comment.\n * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @param {Boolean} [options.store=false] Sets the compression method to STORE.\n * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n */\nvar ZipStream = module.exports = function(options) {\n  if (!(this instanceof ZipStream)) {\n    return new ZipStream(options);\n  }\n\n  options = this.options = options || {};\n  options.zlib = options.zlib || {};\n\n  ZipArchiveOutputStream.call(this, options);\n\n  if (typeof options.level === 'number' && options.level >= 0) {\n    options.zlib.level = options.level;\n    delete options.level;\n  }\n\n  if (!options.forceZip64 && typeof options.zlib.level === 'number' && options.zlib.level === 0) {\n    options.store = true;\n  }\n\n  options.namePrependSlash = options.namePrependSlash || false;\n\n  if (options.comment && options.comment.length > 0) {\n    this.setComment(options.comment);\n  }\n};\n\ninherits(ZipStream, ZipArchiveOutputStream);\n\n/**\n * Normalizes entry data with fallbacks for key properties.\n *\n * @private\n * @param  {Object} data\n * @return {Object}\n */\nZipStream.prototype._normalizeFileData = function(data) {\n  data = util.defaults(data, {\n    type: 'file',\n    name: null,\n    namePrependSlash: this.options.namePrependSlash,\n    linkname: null,\n    date: null,\n    mode: null,\n    store: this.options.store,\n    comment: ''\n  });\n\n  var isDir = data.type === 'directory';\n  var isSymlink = data.type === 'symlink';\n\n  if (data.name) {\n    data.name = util.sanitizePath(data.name);\n\n    if (!isSymlink && data.name.slice(-1) === '/') {\n      isDir = true;\n      data.type = 'directory';\n    } else if (isDir) {\n      data.name += '/';\n    }\n  }\n\n  if (isDir || isSymlink) {\n    data.store = true;\n  }\n\n  data.date = util.dateify(data.date);\n\n  return data;\n};\n\n/**\n * Appends an entry given an input source (text string, buffer, or stream).\n *\n * @param  {(Buffer|Stream|String)} source The input source.\n * @param  {Object} data\n * @param  {String} data.name Sets the entry name including internal path.\n * @param  {String} [data.comment] Sets the entry comment.\n * @param  {(String|Date)} [data.date=NOW()] Sets the entry date.\n * @param  {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.\n * @param  {Boolean} [data.store=options.store] Sets the compression method to STORE.\n * @param  {String} [data.type=file] Sets the entry type. Defaults to `directory`\n * if name ends with trailing slash.\n * @param  {Function} callback\n * @return this\n */\nZipStream.prototype.entry = function(source, data, callback) {\n  if (typeof callback !== 'function') {\n    callback = this._emitErrorCallback.bind(this);\n  }\n\n  data = this._normalizeFileData(data);\n\n  if (data.type !== 'file' && data.type !== 'directory' && data.type !== 'symlink') {\n    callback(new Error(data.type + ' entries not currently supported'));\n    return;\n  }\n\n  if (typeof data.name !== 'string' || data.name.length === 0) {\n    callback(new Error('entry name must be a non-empty string value'));\n    return;\n  }\n\n  if (data.type === 'symlink' && typeof data.linkname !== 'string') {\n    callback(new Error('entry linkname must be a non-empty string value when type equals symlink'));\n    return;\n  }\n\n  var entry = new ZipArchiveEntry(data.name);\n  entry.setTime(data.date, this.options.forceLocalTime);\n\n  if (data.namePrependSlash) {\n    entry.setName(data.name, true);\n  }\n\n  if (data.store) {\n    entry.setMethod(0);\n  }\n\n  if (data.comment.length > 0) {\n    entry.setComment(data.comment);\n  }\n\n  if (data.type === 'symlink' && typeof data.mode !== 'number') {\n    data.mode = 40960; // 0120000\n  }\n\n  if (typeof data.mode === 'number') {\n    if (data.type === 'symlink') {\n      data.mode |= 40960;\n    }\n\n    entry.setUnixMode(data.mode);\n  }\n\n  if (data.type === 'symlink' && typeof data.linkname === 'string') {\n    source = Buffer.from(data.linkname);\n  }\n\n  return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback);\n};\n\n/**\n * Finalizes the instance and prevents further appending to the archive\n * structure (queue will continue til drained).\n *\n * @return void\n */\nZipStream.prototype.finalize = function() {\n  this.finish();\n};\n\n/**\n * Returns the current number of bytes written to this stream.\n * @function ZipStream#getBytesWritten\n * @returns {Number}\n */\n\n/**\n * Compress Commons ZipArchiveOutputStream\n * @external ZipArchiveOutputStream\n * @see {@link https://github.com/archiverjs/node-compress-commons}\n */\n","/**\n * ZIP Format Plugin\n *\n * @module plugins/zip\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar engine = require('zip-stream');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {ZipOptions} [options]\n * @param {String} [options.comment] Sets the zip archive comment.\n * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @param {Boolean} [options.namePrependSlash=false] Prepends a forward slash to archive file paths.\n * @param {Boolean} [options.store=false] Sets the compression method to STORE.\n * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n */\nvar Zip = function(options) {\n  if (!(this instanceof Zip)) {\n    return new Zip(options);\n  }\n\n  options = this.options = util.defaults(options, {\n    comment: '',\n    forceUTC: false,\n    namePrependSlash: false,\n    store: false\n  });\n\n  this.supports = {\n    directory: true,\n    symlink: true\n  };\n\n  this.engine = new engine(options);\n};\n\n/**\n * @param  {(Buffer|Stream)} source\n * @param  {ZipEntryData} data\n * @param  {String} data.name Sets the entry name including internal path.\n * @param  {(String|Date)} [data.date=NOW()] Sets the entry date.\n * @param  {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.\n * @param  {String} [data.prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @param  {fs.Stats} [data.stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n * @param  {Boolean} [data.store=ZipOptions.store] Sets the compression method to STORE.\n * @param  {Function} callback\n * @return void\n */\nZip.prototype.append = function(source, data, callback) {\n  this.engine.entry(source, data, callback);\n};\n\n/**\n * @return void\n */\nZip.prototype.finalize = function() {\n  this.engine.finalize();\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.on = function() {\n  return this.engine.on.apply(this.engine, arguments);\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.pipe = function() {\n  return this.engine.pipe.apply(this.engine, arguments);\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.unpipe = function() {\n  return this.engine.unpipe.apply(this.engine, arguments);\n};\n\nmodule.exports = Zip;\n\n/**\n * @typedef {Object} ZipOptions\n * @global\n * @property {String} [comment] Sets the zip archive comment.\n * @property {Boolean} [forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @property {Boolean} [forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @prpperty {Boolean} [namePrependSlash=false] Prepends a forward slash to archive file paths.\n * @property {Boolean} [store=false] Sets the compression method to STORE.\n * @property {Object} [zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n * @property {*} [*] See [zip-stream]{@link https://archiverjs.com/zip-stream/ZipStream.html} documentation for current list of properties.\n */\n\n/**\n * @typedef {Object} ZipEntryData\n * @global\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {Boolean} [namePrependSlash=ZipOptions.namePrependSlash] Prepends a forward slash to archive file paths.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n * @property {Boolean} [store=ZipOptions.store] Sets the compression method to STORE.\n */\n\n/**\n * ZipStream Module\n * @external ZipStream\n * @see {@link https://www.archiverjs.com/zip-stream/ZipStream.html}\n */\n","module.exports = require('events')\n","module.exports = class FixedFIFO {\n  constructor (hwm) {\n    if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) throw new Error('Max size for a FixedFIFO should be a power of two')\n    this.buffer = new Array(hwm)\n    this.mask = hwm - 1\n    this.top = 0\n    this.btm = 0\n    this.next = null\n  }\n\n  clear () {\n    this.top = this.btm = 0\n    this.next = null\n    this.buffer.fill(undefined)\n  }\n\n  push (data) {\n    if (this.buffer[this.top] !== undefined) return false\n    this.buffer[this.top] = data\n    this.top = (this.top + 1) & this.mask\n    return true\n  }\n\n  shift () {\n    const last = this.buffer[this.btm]\n    if (last === undefined) return undefined\n    this.buffer[this.btm] = undefined\n    this.btm = (this.btm + 1) & this.mask\n    return last\n  }\n\n  peek () {\n    return this.buffer[this.btm]\n  }\n\n  isEmpty () {\n    return this.buffer[this.btm] === undefined\n  }\n}\n","const FixedFIFO = require('./fixed-size')\n\nmodule.exports = class FastFIFO {\n  constructor (hwm) {\n    this.hwm = hwm || 16\n    this.head = new FixedFIFO(this.hwm)\n    this.tail = this.head\n    this.length = 0\n  }\n\n  clear () {\n    this.head = this.tail\n    this.head.clear()\n    this.length = 0\n  }\n\n  push (val) {\n    this.length++\n    if (!this.head.push(val)) {\n      const prev = this.head\n      this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)\n      this.head.push(val)\n    }\n  }\n\n  shift () {\n    if (this.length !== 0) this.length--\n    const val = this.tail.shift()\n    if (val === undefined && this.tail.next) {\n      const next = this.tail.next\n      this.tail.next = null\n      this.tail = next\n      return this.tail.shift()\n    }\n\n    return val\n  }\n\n  peek () {\n    const val = this.tail.peek()\n    if (val === undefined && this.tail.next) return this.tail.next.peek()\n    return val\n  }\n\n  isEmpty () {\n    return this.length === 0\n  }\n}\n","function isBuffer(value) {\n  return Buffer.isBuffer(value) || value instanceof Uint8Array\n}\n\nfunction isEncoding(encoding) {\n  return Buffer.isEncoding(encoding)\n}\n\nfunction alloc(size, fill, encoding) {\n  return Buffer.alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe(size) {\n  return Buffer.allocUnsafe(size)\n}\n\nfunction allocUnsafeSlow(size) {\n  return Buffer.allocUnsafeSlow(size)\n}\n\nfunction byteLength(string, encoding) {\n  return Buffer.byteLength(string, encoding)\n}\n\nfunction compare(a, b) {\n  return Buffer.compare(a, b)\n}\n\nfunction concat(buffers, totalLength) {\n  return Buffer.concat(buffers, totalLength)\n}\n\nfunction copy(source, target, targetStart, start, end) {\n  return toBuffer(source).copy(target, targetStart, start, end)\n}\n\nfunction equals(a, b) {\n  return toBuffer(a).equals(b)\n}\n\nfunction fill(buffer, value, offset, end, encoding) {\n  return toBuffer(buffer).fill(value, offset, end, encoding)\n}\n\nfunction from(value, encodingOrOffset, length) {\n  return Buffer.from(value, encodingOrOffset, length)\n}\n\nfunction includes(buffer, value, byteOffset, encoding) {\n  return toBuffer(buffer).includes(value, byteOffset, encoding)\n}\n\nfunction indexOf(buffer, value, byfeOffset, encoding) {\n  return toBuffer(buffer).indexOf(value, byfeOffset, encoding)\n}\n\nfunction lastIndexOf(buffer, value, byteOffset, encoding) {\n  return toBuffer(buffer).lastIndexOf(value, byteOffset, encoding)\n}\n\nfunction swap16(buffer) {\n  return toBuffer(buffer).swap16()\n}\n\nfunction swap32(buffer) {\n  return toBuffer(buffer).swap32()\n}\n\nfunction swap64(buffer) {\n  return toBuffer(buffer).swap64()\n}\n\nfunction toBuffer(buffer) {\n  if (Buffer.isBuffer(buffer)) return buffer\n  return Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\nfunction toString(buffer, encoding, start, end) {\n  return toBuffer(buffer).toString(encoding, start, end)\n}\n\nfunction write(buffer, string, offset, length, encoding) {\n  return toBuffer(buffer).write(string, offset, length, encoding)\n}\n\nfunction readDoubleBE(buffer, offset) {\n  return toBuffer(buffer).readDoubleBE(offset)\n}\n\nfunction readDoubleLE(buffer, offset) {\n  return toBuffer(buffer).readDoubleLE(offset)\n}\n\nfunction readFloatBE(buffer, offset) {\n  return toBuffer(buffer).readFloatBE(offset)\n}\n\nfunction readFloatLE(buffer, offset) {\n  return toBuffer(buffer).readFloatLE(offset)\n}\n\nfunction readInt32BE(buffer, offset) {\n  return toBuffer(buffer).readInt32BE(offset)\n}\n\nfunction readInt32LE(buffer, offset) {\n  return toBuffer(buffer).readInt32LE(offset)\n}\n\nfunction readUInt32BE(buffer, offset) {\n  return toBuffer(buffer).readUInt32BE(offset)\n}\n\nfunction readUInt32LE(buffer, offset) {\n  return toBuffer(buffer).readUInt32LE(offset)\n}\n\nfunction writeDoubleBE(buffer, value, offset) {\n  return toBuffer(buffer).writeDoubleBE(value, offset)\n}\n\nfunction writeDoubleLE(buffer, value, offset) {\n  return toBuffer(buffer).writeDoubleLE(value, offset)\n}\n\nfunction writeFloatBE(buffer, value, offset) {\n  return toBuffer(buffer).writeFloatBE(value, offset)\n}\n\nfunction writeFloatLE(buffer, value, offset) {\n  return toBuffer(buffer).writeFloatLE(value, offset)\n}\n\nfunction writeInt32BE(buffer, value, offset) {\n  return toBuffer(buffer).writeInt32BE(value, offset)\n}\n\nfunction writeInt32LE(buffer, value, offset) {\n  return toBuffer(buffer).writeInt32LE(value, offset)\n}\n\nfunction writeUInt32BE(buffer, value, offset) {\n  return toBuffer(buffer).writeUInt32BE(value, offset)\n}\n\nfunction writeUInt32LE(buffer, value, offset) {\n  return toBuffer(buffer).writeUInt32LE(value, offset)\n}\n\nmodule.exports = {\n  isBuffer,\n  isEncoding,\n  alloc,\n  allocUnsafe,\n  allocUnsafeSlow,\n  byteLength,\n  compare,\n  concat,\n  copy,\n  equals,\n  fill,\n  from,\n  includes,\n  indexOf,\n  lastIndexOf,\n  swap16,\n  swap32,\n  swap64,\n  toBuffer,\n  toString,\n  write,\n  readDoubleBE,\n  readDoubleLE,\n  readFloatBE,\n  readFloatLE,\n  readInt32BE,\n  readInt32LE,\n  readUInt32BE,\n  readUInt32LE,\n  writeDoubleBE,\n  writeDoubleLE,\n  writeFloatBE,\n  writeFloatLE,\n  writeInt32BE,\n  writeInt32LE,\n  writeUInt32BE,\n  writeUInt32LE\n}\n","const b4a = require('b4a')\n\nmodule.exports = class PassThroughDecoder {\n  constructor(encoding) {\n    this.encoding = encoding\n  }\n\n  get remaining() {\n    return 0\n  }\n\n  decode(data) {\n    return b4a.toString(data, this.encoding)\n  }\n\n  flush() {\n    return ''\n  }\n}\n","const b4a = require('b4a')\n\n/**\n * https://encoding.spec.whatwg.org/#utf-8-decoder\n */\nmodule.exports = class UTF8Decoder {\n  constructor() {\n    this._reset()\n  }\n\n  get remaining() {\n    return this.bytesSeen\n  }\n\n  decode(data) {\n    if (data.byteLength === 0) return ''\n\n    if (this.bytesNeeded === 0 && trailingIncomplete(data, 0) === 0) {\n      this.bytesSeen = trailingBytesSeen(data)\n      return b4a.toString(data, 'utf8')\n    }\n\n    let result = ''\n    let start = 0\n\n    if (this.bytesNeeded > 0) {\n      while (start < data.byteLength) {\n        const byte = data[start]\n\n        if (byte < this.lowerBoundary || byte > this.upperBoundary) {\n          result += '\\ufffd'\n          this._reset()\n          break\n        }\n\n        this.lowerBoundary = 0x80\n        this.upperBoundary = 0xbf\n        this.codePoint = (this.codePoint << 6) | (byte & 0x3f)\n        this.bytesSeen++\n        start++\n\n        if (this.bytesSeen === this.bytesNeeded) {\n          result += String.fromCodePoint(this.codePoint)\n          this._reset()\n          break\n        }\n      }\n\n      if (this.bytesNeeded > 0) return result\n    }\n\n    const trailing = trailingIncomplete(data, start)\n    const end = data.byteLength - trailing\n\n    if (end > start) result += b4a.toString(data, 'utf8', start, end)\n\n    for (let i = end; i < data.byteLength; i++) {\n      const byte = data[i]\n\n      if (this.bytesNeeded === 0) {\n        if (byte <= 0x7f) {\n          this.bytesSeen = 0\n          result += String.fromCharCode(byte)\n        } else if (byte >= 0xc2 && byte <= 0xdf) {\n          this.bytesNeeded = 2\n          this.bytesSeen = 1\n          this.codePoint = byte & 0x1f\n        } else if (byte >= 0xe0 && byte <= 0xef) {\n          if (byte === 0xe0) this.lowerBoundary = 0xa0\n          else if (byte === 0xed) this.upperBoundary = 0x9f\n          this.bytesNeeded = 3\n          this.bytesSeen = 1\n          this.codePoint = byte & 0xf\n        } else if (byte >= 0xf0 && byte <= 0xf4) {\n          if (byte === 0xf0) this.lowerBoundary = 0x90\n          else if (byte === 0xf4) this.upperBoundary = 0x8f\n          this.bytesNeeded = 4\n          this.bytesSeen = 1\n          this.codePoint = byte & 0x7\n        } else {\n          this.bytesSeen = 1\n          result += '\\ufffd'\n        }\n\n        continue\n      }\n\n      if (byte < this.lowerBoundary || byte > this.upperBoundary) {\n        result += '\\ufffd'\n        i--\n        this._reset()\n\n        continue\n      }\n\n      this.lowerBoundary = 0x80\n      this.upperBoundary = 0xbf\n\n      this.codePoint = (this.codePoint << 6) | (byte & 0x3f)\n      this.bytesSeen++\n\n      if (this.bytesSeen === this.bytesNeeded) {\n        result += String.fromCodePoint(this.codePoint)\n        this._reset()\n      }\n    }\n\n    return result\n  }\n\n  flush() {\n    const result = this.bytesNeeded > 0 ? '\\ufffd' : ''\n    this._reset()\n    return result\n  }\n\n  _reset() {\n    this.codePoint = 0\n    this.bytesNeeded = 0\n    this.bytesSeen = 0\n    this.lowerBoundary = 0x80\n    this.upperBoundary = 0xbf\n  }\n}\n\nfunction trailingIncomplete(data, start) {\n  const len = data.byteLength\n  if (len <= start) return 0\n\n  const limit = Math.max(start, len - 4)\n\n  let i = len - 1\n  while (i > limit && (data[i] & 0xc0) === 0x80) i--\n\n  if (i < start) return 0\n\n  const byte = data[i]\n\n  let needed\n  if (byte <= 0x7f) return 0\n  if (byte >= 0xc2 && byte <= 0xdf) needed = 2\n  else if (byte >= 0xe0 && byte <= 0xef) needed = 3\n  else if (byte >= 0xf0 && byte <= 0xf4) needed = 4\n  else return 0\n\n  const available = len - i\n  return available < needed ? available : 0\n}\n\nfunction trailingBytesSeen(data) {\n  const len = data.byteLength\n  if (len === 0) return 0\n\n  const last = data[len - 1]\n\n  if (last <= 0x7f) return 0\n  if ((last & 0xc0) !== 0x80) return 1\n\n  const limit = Math.max(0, len - 4)\n\n  let i = len - 2\n  while (i >= limit && (data[i] & 0xc0) === 0x80) i--\n\n  if (i < 0) return 1\n\n  const first = data[i]\n\n  let needed\n  if (first >= 0xc2 && first <= 0xdf) needed = 2\n  else if (first >= 0xe0 && first <= 0xef) needed = 3\n  else if (first >= 0xf0 && first <= 0xf4) needed = 4\n  else return 1\n\n  if (len - i !== needed) return 1\n\n  if (needed >= 3) {\n    const second = data[i + 1]\n    if (first === 0xe0 && second < 0xa0) return 1\n    if (first === 0xed && second > 0x9f) return 1\n    if (first === 0xf0 && second < 0x90) return 1\n    if (first === 0xf4 && second > 0x8f) return 1\n  }\n\n  return 0\n}\n","const PassThroughDecoder = require('./lib/pass-through-decoder')\nconst UTF8Decoder = require('./lib/utf8-decoder')\n\nmodule.exports = class TextDecoder {\n  constructor(encoding = 'utf8') {\n    this.encoding = normalizeEncoding(encoding)\n\n    switch (this.encoding) {\n      case 'utf8':\n        this.decoder = new UTF8Decoder()\n        break\n      case 'utf16le':\n      case 'base64':\n        throw new Error('Unsupported encoding: ' + this.encoding)\n      default:\n        this.decoder = new PassThroughDecoder(this.encoding)\n    }\n  }\n\n  get remaining() {\n    return this.decoder.remaining\n  }\n\n  push(data) {\n    if (typeof data === 'string') return data\n    return this.decoder.decode(data)\n  }\n\n  // For Node.js compatibility\n  write(data) {\n    return this.push(data)\n  }\n\n  end(data) {\n    let result = ''\n    if (data) result = this.push(data)\n    result += this.decoder.flush()\n    return result\n  }\n}\n\nfunction normalizeEncoding(encoding) {\n  encoding = encoding.toLowerCase()\n\n  switch (encoding) {\n    case 'utf8':\n    case 'utf-8':\n      return 'utf8'\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return 'utf16le'\n    case 'latin1':\n    case 'binary':\n      return 'latin1'\n    case 'base64':\n    case 'ascii':\n    case 'hex':\n      return encoding\n    default:\n      throw new Error('Unknown encoding: ' + encoding)\n  }\n}\n","const { EventEmitter } = require('events-universal')\nconst STREAM_DESTROYED = new Error('Stream was destroyed')\nconst PREMATURE_CLOSE = new Error('Premature close')\n\nconst FIFO = require('fast-fifo')\nconst TextDecoder = require('text-decoder')\n\n// if we do a future major, expect queue microtask to be there always, for now a bit defensive\nconst qmt =\n  typeof queueMicrotask === 'undefined' ? (fn) => global.process.nextTick(fn) : queueMicrotask\n\n// 29 bits used total (4 from shared, 14 from read, and 11 from write)\nconst MAX = (1 << 29) - 1\n\n// Shared state\nconst OPENING = 0b0001\nconst PREDESTROYING = 0b0010\nconst DESTROYING = 0b0100\nconst DESTROYED = 0b1000\n\nconst NOT_OPENING = MAX ^ OPENING\nconst NOT_PREDESTROYING = MAX ^ PREDESTROYING\n\n// Read state (4 bit offset from shared state)\nconst READ_ACTIVE = 0b00000000000001 << 4\nconst READ_UPDATING = 0b00000000000010 << 4\nconst READ_PRIMARY = 0b00000000000100 << 4\nconst READ_QUEUED = 0b00000000001000 << 4\nconst READ_RESUMED = 0b00000000010000 << 4\nconst READ_PIPE_DRAINED = 0b00000000100000 << 4\nconst READ_ENDING = 0b00000001000000 << 4\nconst READ_EMIT_DATA = 0b00000010000000 << 4\nconst READ_EMIT_READABLE = 0b00000100000000 << 4\nconst READ_EMITTED_READABLE = 0b00001000000000 << 4\nconst READ_DONE = 0b00010000000000 << 4\nconst READ_NEXT_TICK = 0b00100000000000 << 4\nconst READ_NEEDS_PUSH = 0b01000000000000 << 4\nconst READ_READ_AHEAD = 0b10000000000000 << 4\n\n// Combined read state\nconst READ_FLOWING = READ_RESUMED | READ_PIPE_DRAINED\nconst READ_ACTIVE_AND_NEEDS_PUSH = READ_ACTIVE | READ_NEEDS_PUSH\nconst READ_PRIMARY_AND_ACTIVE = READ_PRIMARY | READ_ACTIVE\nconst READ_EMIT_READABLE_AND_QUEUED = READ_EMIT_READABLE | READ_QUEUED\nconst READ_RESUMED_READ_AHEAD = READ_RESUMED | READ_READ_AHEAD\n\nconst READ_NOT_ACTIVE = MAX ^ READ_ACTIVE\nconst READ_NON_PRIMARY = MAX ^ READ_PRIMARY\nconst READ_NON_PRIMARY_AND_PUSHED = MAX ^ (READ_PRIMARY | READ_NEEDS_PUSH)\nconst READ_PUSHED = MAX ^ READ_NEEDS_PUSH\nconst READ_PAUSED = MAX ^ READ_RESUMED\nconst READ_NOT_QUEUED = MAX ^ (READ_QUEUED | READ_EMITTED_READABLE)\nconst READ_NOT_ENDING = MAX ^ READ_ENDING\nconst READ_PIPE_NOT_DRAINED = MAX ^ READ_FLOWING\nconst READ_NOT_NEXT_TICK = MAX ^ READ_NEXT_TICK\nconst READ_NOT_UPDATING = MAX ^ READ_UPDATING\nconst READ_NO_READ_AHEAD = MAX ^ READ_READ_AHEAD\nconst READ_PAUSED_NO_READ_AHEAD = MAX ^ READ_RESUMED_READ_AHEAD\n\n// Write state (18 bit offset, 4 bit offset from shared state and 14 from read state)\nconst WRITE_ACTIVE = 0b00000000001 << 18\nconst WRITE_UPDATING = 0b00000000010 << 18\nconst WRITE_PRIMARY = 0b00000000100 << 18\nconst WRITE_QUEUED = 0b00000001000 << 18\nconst WRITE_UNDRAINED = 0b00000010000 << 18\nconst WRITE_DONE = 0b00000100000 << 18\nconst WRITE_EMIT_DRAIN = 0b00001000000 << 18\nconst WRITE_NEXT_TICK = 0b00010000000 << 18\nconst WRITE_WRITING = 0b00100000000 << 18\nconst WRITE_FINISHING = 0b01000000000 << 18\nconst WRITE_CORKED = 0b10000000000 << 18\n\nconst WRITE_NOT_ACTIVE = MAX ^ (WRITE_ACTIVE | WRITE_WRITING)\nconst WRITE_NON_PRIMARY = MAX ^ WRITE_PRIMARY\nconst WRITE_NOT_FINISHING = MAX ^ (WRITE_ACTIVE | WRITE_FINISHING)\nconst WRITE_DRAINED = MAX ^ WRITE_UNDRAINED\nconst WRITE_NOT_QUEUED = MAX ^ WRITE_QUEUED\nconst WRITE_NOT_NEXT_TICK = MAX ^ WRITE_NEXT_TICK\nconst WRITE_NOT_UPDATING = MAX ^ WRITE_UPDATING\nconst WRITE_NOT_CORKED = MAX ^ WRITE_CORKED\n\n// Combined shared state\nconst ACTIVE = READ_ACTIVE | WRITE_ACTIVE\nconst NOT_ACTIVE = MAX ^ ACTIVE\nconst DONE = READ_DONE | WRITE_DONE\nconst DESTROY_STATUS = DESTROYING | DESTROYED | PREDESTROYING\nconst OPEN_STATUS = DESTROY_STATUS | OPENING\nconst AUTO_DESTROY = DESTROY_STATUS | DONE\nconst NON_PRIMARY = WRITE_NON_PRIMARY & READ_NON_PRIMARY\nconst ACTIVE_OR_TICKING = WRITE_NEXT_TICK | READ_NEXT_TICK\nconst TICKING = ACTIVE_OR_TICKING & NOT_ACTIVE\nconst IS_OPENING = OPEN_STATUS | TICKING\n\n// Combined shared state and read state\nconst READ_PRIMARY_STATUS = OPEN_STATUS | READ_ENDING | READ_DONE\nconst READ_STATUS = OPEN_STATUS | READ_DONE | READ_QUEUED\nconst READ_ENDING_STATUS = OPEN_STATUS | READ_ENDING | READ_QUEUED\nconst READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | READ_EMITTED_READABLE\nconst SHOULD_NOT_READ =\n  OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD\nconst READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE\nconst READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY\nconst READ_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING\n\n// Combined write state\nconst WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_QUEUED_AND_UNDRAINED = WRITE_QUEUED | WRITE_UNDRAINED\nconst WRITE_QUEUED_AND_ACTIVE = WRITE_QUEUED | WRITE_ACTIVE\nconst WRITE_DRAIN_STATUS = WRITE_QUEUED | WRITE_UNDRAINED | OPEN_STATUS | WRITE_ACTIVE\nconst WRITE_STATUS = OPEN_STATUS | WRITE_ACTIVE | WRITE_QUEUED | WRITE_CORKED\nconst WRITE_PRIMARY_AND_ACTIVE = WRITE_PRIMARY | WRITE_ACTIVE\nconst WRITE_ACTIVE_AND_WRITING = WRITE_ACTIVE | WRITE_WRITING\nconst WRITE_FINISHING_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_QUEUED_AND_ACTIVE | WRITE_DONE\nconst WRITE_BACKPRESSURE_STATUS = WRITE_UNDRAINED | DESTROY_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_UPDATE_SYNC_STATUS = WRITE_UPDATING | OPEN_STATUS | WRITE_NEXT_TICK | WRITE_PRIMARY\nconst WRITE_DROP_DATA = WRITE_FINISHING | WRITE_DONE | DESTROY_STATUS\n\nconst asyncIterator = Symbol.asyncIterator || Symbol('asyncIterator')\n\nclass WritableState {\n  constructor(\n    stream,\n    { highWaterMark = 16384, map = null, mapWritable, byteLength, byteLengthWritable } = {}\n  ) {\n    this.stream = stream\n    this.queue = new FIFO()\n    this.highWaterMark = highWaterMark\n    this.buffered = 0\n    this.error = null\n    this.pipeline = null\n    this.drains = null // if we add more seldomly used helpers we might them into a subobject so its a single ptr\n    this.byteLength = byteLengthWritable || byteLength || defaultByteLength\n    this.map = mapWritable || map\n    this.afterWrite = afterWrite.bind(this)\n    this.afterUpdateNextTick = updateWriteNT.bind(this)\n  }\n\n  get ending() {\n    return (this.stream._duplexState & WRITE_FINISHING) !== 0\n  }\n\n  get ended() {\n    return (this.stream._duplexState & WRITE_DONE) !== 0\n  }\n\n  push(data) {\n    if ((this.stream._duplexState & WRITE_DROP_DATA) !== 0) return false\n    if (this.map !== null) data = this.map(data)\n\n    this.buffered += this.byteLength(data)\n    this.queue.push(data)\n\n    if (this.buffered < this.highWaterMark) {\n      this.stream._duplexState |= WRITE_QUEUED\n      return true\n    }\n\n    this.stream._duplexState |= WRITE_QUEUED_AND_UNDRAINED\n    return false\n  }\n\n  shift() {\n    const data = this.queue.shift()\n\n    this.buffered -= this.byteLength(data)\n    if (this.buffered === 0) this.stream._duplexState &= WRITE_NOT_QUEUED\n\n    return data\n  }\n\n  end(data) {\n    if (typeof data === 'function') this.stream.once('finish', data)\n    else if (data !== undefined && data !== null) this.push(data)\n    this.stream._duplexState = (this.stream._duplexState | WRITE_FINISHING) & WRITE_NON_PRIMARY\n  }\n\n  autoBatch(data, cb) {\n    const buffer = []\n    const stream = this.stream\n\n    buffer.push(data)\n    while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED_AND_ACTIVE) {\n      buffer.push(stream._writableState.shift())\n    }\n\n    if ((stream._duplexState & OPEN_STATUS) !== 0) return cb(null)\n    stream._writev(buffer, cb)\n  }\n\n  update() {\n    const stream = this.stream\n\n    stream._duplexState |= WRITE_UPDATING\n\n    do {\n      while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED) {\n        const data = this.shift()\n        stream._duplexState |= WRITE_ACTIVE_AND_WRITING\n        stream._write(data, this.afterWrite)\n      }\n\n      if ((stream._duplexState & WRITE_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary()\n    } while (this.continueUpdate() === true)\n\n    stream._duplexState &= WRITE_NOT_UPDATING\n  }\n\n  updateNonPrimary() {\n    const stream = this.stream\n\n    if ((stream._duplexState & WRITE_FINISHING_STATUS) === WRITE_FINISHING) {\n      stream._duplexState = stream._duplexState | WRITE_ACTIVE\n      stream._final(afterFinal.bind(this))\n      return\n    }\n\n    if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n      if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n        stream._duplexState |= ACTIVE\n        stream._destroy(afterDestroy.bind(this))\n      }\n      return\n    }\n\n    if ((stream._duplexState & IS_OPENING) === OPENING) {\n      stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n      stream._open(afterOpen.bind(this))\n    }\n  }\n\n  continueUpdate() {\n    if ((this.stream._duplexState & WRITE_NEXT_TICK) === 0) return false\n    this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n    return true\n  }\n\n  updateCallback() {\n    if ((this.stream._duplexState & WRITE_UPDATE_SYNC_STATUS) === WRITE_PRIMARY) this.update()\n    else this.updateNextTick()\n  }\n\n  updateNextTick() {\n    if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return\n    this.stream._duplexState |= WRITE_NEXT_TICK\n    if ((this.stream._duplexState & WRITE_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n  }\n}\n\nclass ReadableState {\n  constructor(\n    stream,\n    { highWaterMark = 16384, map = null, mapReadable, byteLength, byteLengthReadable } = {}\n  ) {\n    this.stream = stream\n    this.queue = new FIFO()\n    this.highWaterMark = highWaterMark === 0 ? 1 : highWaterMark\n    this.buffered = 0\n    this.readAhead = highWaterMark > 0\n    this.error = null\n    this.pipeline = null\n    this.byteLength = byteLengthReadable || byteLength || defaultByteLength\n    this.map = mapReadable || map\n    this.pipeTo = null\n    this.afterRead = afterRead.bind(this)\n    this.afterUpdateNextTick = updateReadNT.bind(this)\n  }\n\n  get ending() {\n    return (this.stream._duplexState & READ_ENDING) !== 0\n  }\n\n  get ended() {\n    return (this.stream._duplexState & READ_DONE) !== 0\n  }\n\n  pipe(pipeTo, cb) {\n    if (this.pipeTo !== null) throw new Error('Can only pipe to one destination')\n    if (typeof cb !== 'function') cb = null\n\n    this.stream._duplexState |= READ_PIPE_DRAINED\n    this.pipeTo = pipeTo\n    this.pipeline = new Pipeline(this.stream, pipeTo, cb)\n\n    if (cb) this.stream.on('error', noop) // We already error handle this so supress crashes\n\n    if (isStreamx(pipeTo)) {\n      pipeTo._writableState.pipeline = this.pipeline\n      if (cb) pipeTo.on('error', noop) // We already error handle this so supress crashes\n      pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline)) // TODO: just call finished from pipeTo itself\n    } else {\n      const onerror = this.pipeline.done.bind(this.pipeline, pipeTo)\n      const onclose = this.pipeline.done.bind(this.pipeline, pipeTo, null) // onclose has a weird bool arg\n      pipeTo.on('error', onerror)\n      pipeTo.on('close', onclose)\n      pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline))\n    }\n\n    pipeTo.on('drain', afterDrain.bind(this))\n    this.stream.emit('piping', pipeTo)\n    pipeTo.emit('pipe', this.stream)\n  }\n\n  push(data) {\n    const stream = this.stream\n\n    if (data === null) {\n      this.highWaterMark = 0\n      stream._duplexState = (stream._duplexState | READ_ENDING) & READ_NON_PRIMARY_AND_PUSHED\n      return false\n    }\n\n    if (this.map !== null) {\n      data = this.map(data)\n      if (data === null) {\n        stream._duplexState &= READ_PUSHED\n        return this.buffered < this.highWaterMark\n      }\n    }\n\n    this.buffered += this.byteLength(data)\n    this.queue.push(data)\n\n    stream._duplexState = (stream._duplexState | READ_QUEUED) & READ_PUSHED\n\n    return this.buffered < this.highWaterMark\n  }\n\n  shift() {\n    const data = this.queue.shift()\n\n    this.buffered -= this.byteLength(data)\n    if (this.buffered === 0) this.stream._duplexState &= READ_NOT_QUEUED\n    return data\n  }\n\n  unshift(data) {\n    const pending = [this.map !== null ? this.map(data) : data]\n    while (this.buffered > 0) pending.push(this.shift())\n\n    for (let i = 0; i < pending.length - 1; i++) {\n      const data = pending[i]\n      this.buffered += this.byteLength(data)\n      this.queue.push(data)\n    }\n\n    this.push(pending[pending.length - 1])\n  }\n\n  read() {\n    const stream = this.stream\n\n    if ((stream._duplexState & READ_STATUS) === READ_QUEUED) {\n      const data = this.shift()\n      if (this.pipeTo !== null && this.pipeTo.write(data) === false)\n        stream._duplexState &= READ_PIPE_NOT_DRAINED\n      if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit('data', data)\n      return data\n    }\n\n    if (this.readAhead === false) {\n      stream._duplexState |= READ_READ_AHEAD\n      this.updateNextTick()\n    }\n\n    return null\n  }\n\n  drain() {\n    const stream = this.stream\n\n    while (\n      (stream._duplexState & READ_STATUS) === READ_QUEUED &&\n      (stream._duplexState & READ_FLOWING) !== 0\n    ) {\n      const data = this.shift()\n      if (this.pipeTo !== null && this.pipeTo.write(data) === false)\n        stream._duplexState &= READ_PIPE_NOT_DRAINED\n      if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit('data', data)\n    }\n  }\n\n  update() {\n    const stream = this.stream\n\n    stream._duplexState |= READ_UPDATING\n\n    do {\n      this.drain()\n\n      while (\n        this.buffered < this.highWaterMark &&\n        (stream._duplexState & SHOULD_NOT_READ) === READ_READ_AHEAD\n      ) {\n        stream._duplexState |= READ_ACTIVE_AND_NEEDS_PUSH\n        stream._read(this.afterRead)\n        this.drain()\n      }\n\n      if ((stream._duplexState & READ_READABLE_STATUS) === READ_EMIT_READABLE_AND_QUEUED) {\n        stream._duplexState |= READ_EMITTED_READABLE\n        stream.emit('readable')\n      }\n\n      if ((stream._duplexState & READ_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary()\n    } while (this.continueUpdate() === true)\n\n    stream._duplexState &= READ_NOT_UPDATING\n  }\n\n  updateNonPrimary() {\n    const stream = this.stream\n\n    if ((stream._duplexState & READ_ENDING_STATUS) === READ_ENDING) {\n      stream._duplexState = (stream._duplexState | READ_DONE) & READ_NOT_ENDING\n      stream.emit('end')\n      if ((stream._duplexState & AUTO_DESTROY) === DONE) stream._duplexState |= DESTROYING\n      if (this.pipeTo !== null) this.pipeTo.end()\n    }\n\n    if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n      if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n        stream._duplexState |= ACTIVE\n        stream._destroy(afterDestroy.bind(this))\n      }\n      return\n    }\n\n    if ((stream._duplexState & IS_OPENING) === OPENING) {\n      stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n      stream._open(afterOpen.bind(this))\n    }\n  }\n\n  continueUpdate() {\n    if ((this.stream._duplexState & READ_NEXT_TICK) === 0) return false\n    this.stream._duplexState &= READ_NOT_NEXT_TICK\n    return true\n  }\n\n  updateCallback() {\n    if ((this.stream._duplexState & READ_UPDATE_SYNC_STATUS) === READ_PRIMARY) this.update()\n    else this.updateNextTick()\n  }\n\n  updateNextTickIfOpen() {\n    if ((this.stream._duplexState & READ_NEXT_TICK_OR_OPENING) !== 0) return\n    this.stream._duplexState |= READ_NEXT_TICK\n    if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n  }\n\n  updateNextTick() {\n    if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return\n    this.stream._duplexState |= READ_NEXT_TICK\n    if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)\n  }\n}\n\nclass TransformState {\n  constructor(stream) {\n    this.data = null\n    this.afterTransform = afterTransform.bind(stream)\n    this.afterFinal = null\n  }\n}\n\nclass Pipeline {\n  constructor(src, dst, cb) {\n    this.from = src\n    this.to = dst\n    this.afterPipe = cb\n    this.error = null\n    this.pipeToFinished = false\n  }\n\n  finished() {\n    this.pipeToFinished = true\n  }\n\n  done(stream, err) {\n    if (err) this.error = err\n\n    if (stream === this.to) {\n      this.to = null\n\n      if (this.from !== null) {\n        if ((this.from._duplexState & READ_DONE) === 0 || !this.pipeToFinished) {\n          this.from.destroy(this.error || new Error('Writable stream closed prematurely'))\n        }\n        return\n      }\n    }\n\n    if (stream === this.from) {\n      this.from = null\n\n      if (this.to !== null) {\n        if ((stream._duplexState & READ_DONE) === 0) {\n          this.to.destroy(this.error || new Error('Readable stream closed before ending'))\n        }\n        return\n      }\n    }\n\n    if (this.afterPipe !== null) this.afterPipe(this.error)\n    this.to = this.from = this.afterPipe = null\n  }\n}\n\nfunction afterDrain() {\n  this.stream._duplexState |= READ_PIPE_DRAINED\n  this.updateCallback()\n}\n\nfunction afterFinal(err) {\n  const stream = this.stream\n  if (err) stream.destroy(err)\n  if ((stream._duplexState & DESTROY_STATUS) === 0) {\n    stream._duplexState |= WRITE_DONE\n    stream.emit('finish')\n  }\n  if ((stream._duplexState & AUTO_DESTROY) === DONE) {\n    stream._duplexState |= DESTROYING\n  }\n\n  stream._duplexState &= WRITE_NOT_FINISHING\n\n  // no need to wait the extra tick here, so we short circuit that\n  if ((stream._duplexState & WRITE_UPDATING) === 0) this.update()\n  else this.updateNextTick()\n}\n\nfunction afterDestroy(err) {\n  const stream = this.stream\n\n  if (!err && this.error !== STREAM_DESTROYED) err = this.error\n  if (err) stream.emit('error', err)\n  stream._duplexState |= DESTROYED\n  stream.emit('close')\n\n  const rs = stream._readableState\n  const ws = stream._writableState\n\n  if (rs !== null && rs.pipeline !== null) rs.pipeline.done(stream, err)\n\n  if (ws !== null) {\n    while (ws.drains !== null && ws.drains.length > 0) ws.drains.shift().resolve(false)\n    if (ws.pipeline !== null) ws.pipeline.done(stream, err)\n  }\n}\n\nfunction afterWrite(err) {\n  const stream = this.stream\n\n  if (err) stream.destroy(err)\n  stream._duplexState &= WRITE_NOT_ACTIVE\n\n  if (this.drains !== null) tickDrains(this.drains)\n\n  if ((stream._duplexState & WRITE_DRAIN_STATUS) === WRITE_UNDRAINED) {\n    stream._duplexState &= WRITE_DRAINED\n    if ((stream._duplexState & WRITE_EMIT_DRAIN) === WRITE_EMIT_DRAIN) {\n      stream.emit('drain')\n    }\n  }\n\n  this.updateCallback()\n}\n\nfunction afterRead(err) {\n  if (err) this.stream.destroy(err)\n  this.stream._duplexState &= READ_NOT_ACTIVE\n  if (this.readAhead === false && (this.stream._duplexState & READ_RESUMED) === 0)\n    this.stream._duplexState &= READ_NO_READ_AHEAD\n  this.updateCallback()\n}\n\nfunction updateReadNT() {\n  if ((this.stream._duplexState & READ_UPDATING) === 0) {\n    this.stream._duplexState &= READ_NOT_NEXT_TICK\n    this.update()\n  }\n}\n\nfunction updateWriteNT() {\n  if ((this.stream._duplexState & WRITE_UPDATING) === 0) {\n    this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n    this.update()\n  }\n}\n\nfunction tickDrains(drains) {\n  for (let i = 0; i < drains.length; i++) {\n    // drains.writes are monotonic, so if one is 0 its always the first one\n    if (--drains[i].writes === 0) {\n      drains.shift().resolve(true)\n      i--\n    }\n  }\n}\n\nfunction afterOpen(err) {\n  const stream = this.stream\n\n  if (err) stream.destroy(err)\n\n  if ((stream._duplexState & DESTROYING) === 0) {\n    if ((stream._duplexState & READ_PRIMARY_STATUS) === 0) stream._duplexState |= READ_PRIMARY\n    if ((stream._duplexState & WRITE_PRIMARY_STATUS) === 0) stream._duplexState |= WRITE_PRIMARY\n    stream.emit('open')\n  }\n\n  stream._duplexState &= NOT_ACTIVE\n\n  if (stream._writableState !== null) {\n    stream._writableState.updateCallback()\n  }\n\n  if (stream._readableState !== null) {\n    stream._readableState.updateCallback()\n  }\n}\n\nfunction afterTransform(err, data) {\n  if (data !== undefined && data !== null) this.push(data)\n  this._writableState.afterWrite(err)\n}\n\nfunction newListener(name) {\n  if (this._readableState !== null) {\n    if (name === 'data') {\n      this._duplexState |= READ_EMIT_DATA | READ_RESUMED_READ_AHEAD\n      this._readableState.updateNextTick()\n    }\n    if (name === 'readable') {\n      this._duplexState |= READ_EMIT_READABLE\n      this._readableState.updateNextTick()\n    }\n  }\n\n  if (this._writableState !== null) {\n    if (name === 'drain') {\n      this._duplexState |= WRITE_EMIT_DRAIN\n      this._writableState.updateNextTick()\n    }\n  }\n}\n\nclass Stream extends EventEmitter {\n  constructor(opts) {\n    super()\n\n    this._duplexState = 0\n    this._readableState = null\n    this._writableState = null\n\n    if (opts) {\n      if (opts.open) this._open = opts.open\n      if (opts.destroy) this._destroy = opts.destroy\n      if (opts.predestroy) this._predestroy = opts.predestroy\n      if (opts.signal) {\n        opts.signal.addEventListener('abort', abort.bind(this))\n      }\n    }\n\n    this.on('newListener', newListener)\n  }\n\n  _open(cb) {\n    cb(null)\n  }\n\n  _destroy(cb) {\n    cb(null)\n  }\n\n  _predestroy() {\n    // does nothing\n  }\n\n  get readable() {\n    return this._readableState !== null ? true : undefined\n  }\n\n  get writable() {\n    return this._writableState !== null ? true : undefined\n  }\n\n  get destroyed() {\n    return (this._duplexState & DESTROYED) !== 0\n  }\n\n  get destroying() {\n    return (this._duplexState & DESTROY_STATUS) !== 0\n  }\n\n  destroy(err) {\n    if ((this._duplexState & DESTROY_STATUS) === 0) {\n      if (!err) err = STREAM_DESTROYED\n      this._duplexState = (this._duplexState | DESTROYING) & NON_PRIMARY\n\n      if (this._readableState !== null) {\n        this._readableState.highWaterMark = 0\n        this._readableState.error = err\n      }\n      if (this._writableState !== null) {\n        this._writableState.highWaterMark = 0\n        this._writableState.error = err\n      }\n\n      this._duplexState |= PREDESTROYING\n      this._predestroy()\n      this._duplexState &= NOT_PREDESTROYING\n\n      if (this._readableState !== null) this._readableState.updateNextTick()\n      if (this._writableState !== null) this._writableState.updateNextTick()\n    }\n  }\n}\n\nclass Readable extends Stream {\n  constructor(opts) {\n    super(opts)\n\n    this._duplexState |= OPENING | WRITE_DONE | READ_READ_AHEAD\n    this._readableState = new ReadableState(this, opts)\n\n    if (opts) {\n      if (this._readableState.readAhead === false) this._duplexState &= READ_NO_READ_AHEAD\n      if (opts.read) this._read = opts.read\n      if (opts.eagerOpen) this._readableState.updateNextTick()\n      if (opts.encoding) this.setEncoding(opts.encoding)\n    }\n  }\n\n  setEncoding(encoding) {\n    const dec = new TextDecoder(encoding)\n    const map = this._readableState.map || echo\n    this._readableState.map = mapOrSkip\n    return this\n\n    function mapOrSkip(data) {\n      const next = dec.push(data)\n      return next === '' && (data.byteLength !== 0 || dec.remaining > 0) ? null : map(next)\n    }\n  }\n\n  _read(cb) {\n    cb(null)\n  }\n\n  pipe(dest, cb) {\n    this._readableState.updateNextTick()\n    this._readableState.pipe(dest, cb)\n    return dest\n  }\n\n  read() {\n    this._readableState.updateNextTick()\n    return this._readableState.read()\n  }\n\n  push(data) {\n    this._readableState.updateNextTickIfOpen()\n    return this._readableState.push(data)\n  }\n\n  unshift(data) {\n    this._readableState.updateNextTickIfOpen()\n    return this._readableState.unshift(data)\n  }\n\n  resume() {\n    this._duplexState |= READ_RESUMED_READ_AHEAD\n    this._readableState.updateNextTick()\n    return this\n  }\n\n  pause() {\n    this._duplexState &=\n      this._readableState.readAhead === false ? READ_PAUSED_NO_READ_AHEAD : READ_PAUSED\n    return this\n  }\n\n  static _fromAsyncIterator(ite, opts) {\n    let destroy\n\n    const rs = new Readable({\n      ...opts,\n      read(cb) {\n        ite.next().then(push).then(cb.bind(null, null)).catch(cb)\n      },\n      predestroy() {\n        destroy = ite.return()\n      },\n      destroy(cb) {\n        if (!destroy) return cb(null)\n        destroy.then(cb.bind(null, null)).catch(cb)\n      }\n    })\n\n    return rs\n\n    function push(data) {\n      if (data.done) rs.push(null)\n      else rs.push(data.value)\n    }\n  }\n\n  static from(data, opts) {\n    if (isReadStreamx(data)) return data\n    if (data[asyncIterator]) return this._fromAsyncIterator(data[asyncIterator](), opts)\n    if (!Array.isArray(data)) data = data === undefined ? [] : [data]\n\n    let i = 0\n    return new Readable({\n      ...opts,\n      read(cb) {\n        this.push(i === data.length ? null : data[i++])\n        cb(null)\n      }\n    })\n  }\n\n  static isBackpressured(rs) {\n    return (\n      (rs._duplexState & READ_BACKPRESSURE_STATUS) !== 0 ||\n      rs._readableState.buffered >= rs._readableState.highWaterMark\n    )\n  }\n\n  static isPaused(rs) {\n    return (rs._duplexState & READ_RESUMED) === 0\n  }\n\n  [asyncIterator]() {\n    const stream = this\n\n    let error = null\n    let promiseResolve = null\n    let promiseReject = null\n\n    this.on('error', (err) => {\n      error = err\n    })\n    this.on('readable', onreadable)\n    this.on('close', onclose)\n\n    return {\n      [asyncIterator]() {\n        return this\n      },\n      next() {\n        return new Promise(function (resolve, reject) {\n          promiseResolve = resolve\n          promiseReject = reject\n          const data = stream.read()\n          if (data !== null) ondata(data)\n          else if ((stream._duplexState & DESTROYED) !== 0) ondata(null)\n        })\n      },\n      return() {\n        return destroy(null)\n      },\n      throw(err) {\n        return destroy(err)\n      }\n    }\n\n    function onreadable() {\n      if (promiseResolve !== null) ondata(stream.read())\n    }\n\n    function onclose() {\n      if (promiseResolve !== null) ondata(null)\n    }\n\n    function ondata(data) {\n      if (promiseReject === null) return\n      if (error) promiseReject(error)\n      else if (data === null && (stream._duplexState & READ_DONE) === 0)\n        promiseReject(STREAM_DESTROYED)\n      else promiseResolve({ value: data, done: data === null })\n      promiseReject = promiseResolve = null\n    }\n\n    function destroy(err) {\n      stream.destroy(err)\n      return new Promise((resolve, reject) => {\n        if (stream._duplexState & DESTROYED) return resolve({ value: undefined, done: true })\n        stream.once('close', function () {\n          if (err) reject(err)\n          else resolve({ value: undefined, done: true })\n        })\n      })\n    }\n  }\n}\n\nclass Writable extends Stream {\n  constructor(opts) {\n    super(opts)\n\n    this._duplexState |= OPENING | READ_DONE\n    this._writableState = new WritableState(this, opts)\n\n    if (opts) {\n      if (opts.writev) this._writev = opts.writev\n      if (opts.write) this._write = opts.write\n      if (opts.final) this._final = opts.final\n      if (opts.eagerOpen) this._writableState.updateNextTick()\n    }\n  }\n\n  cork() {\n    this._duplexState |= WRITE_CORKED\n  }\n\n  uncork() {\n    this._duplexState &= WRITE_NOT_CORKED\n    this._writableState.updateNextTick()\n  }\n\n  _writev(batch, cb) {\n    cb(null)\n  }\n\n  _write(data, cb) {\n    this._writableState.autoBatch(data, cb)\n  }\n\n  _final(cb) {\n    cb(null)\n  }\n\n  static isBackpressured(ws) {\n    return (ws._duplexState & WRITE_BACKPRESSURE_STATUS) !== 0\n  }\n\n  static drained(ws) {\n    if (ws.destroyed) return Promise.resolve(false)\n    const state = ws._writableState\n    const pending = isWritev(ws) ? Math.min(1, state.queue.length) : state.queue.length\n    const writes = pending + (ws._duplexState & WRITE_WRITING ? 1 : 0)\n    if (writes === 0) return Promise.resolve(true)\n    if (state.drains === null) state.drains = []\n    return new Promise((resolve) => {\n      state.drains.push({ writes, resolve })\n    })\n  }\n\n  write(data) {\n    this._writableState.updateNextTick()\n    return this._writableState.push(data)\n  }\n\n  end(data) {\n    this._writableState.updateNextTick()\n    this._writableState.end(data)\n    return this\n  }\n}\n\nclass Duplex extends Readable {\n  // and Writable\n  constructor(opts) {\n    super(opts)\n\n    this._duplexState = OPENING | (this._duplexState & READ_READ_AHEAD)\n    this._writableState = new WritableState(this, opts)\n\n    if (opts) {\n      if (opts.writev) this._writev = opts.writev\n      if (opts.write) this._write = opts.write\n      if (opts.final) this._final = opts.final\n    }\n  }\n\n  cork() {\n    this._duplexState |= WRITE_CORKED\n  }\n\n  uncork() {\n    this._duplexState &= WRITE_NOT_CORKED\n    this._writableState.updateNextTick()\n  }\n\n  _writev(batch, cb) {\n    cb(null)\n  }\n\n  _write(data, cb) {\n    this._writableState.autoBatch(data, cb)\n  }\n\n  _final(cb) {\n    cb(null)\n  }\n\n  write(data) {\n    this._writableState.updateNextTick()\n    return this._writableState.push(data)\n  }\n\n  end(data) {\n    this._writableState.updateNextTick()\n    this._writableState.end(data)\n    return this\n  }\n}\n\nclass Transform extends Duplex {\n  constructor(opts) {\n    super(opts)\n    this._transformState = new TransformState(this)\n\n    if (opts) {\n      if (opts.transform) this._transform = opts.transform\n      if (opts.flush) this._flush = opts.flush\n    }\n  }\n\n  _write(data, cb) {\n    if (this._readableState.buffered >= this._readableState.highWaterMark) {\n      this._transformState.data = data\n    } else {\n      this._transform(data, this._transformState.afterTransform)\n    }\n  }\n\n  _read(cb) {\n    if (this._transformState.data !== null) {\n      const data = this._transformState.data\n      this._transformState.data = null\n      cb(null)\n      this._transform(data, this._transformState.afterTransform)\n    } else {\n      cb(null)\n    }\n  }\n\n  destroy(err) {\n    super.destroy(err)\n    if (this._transformState.data !== null) {\n      this._transformState.data = null\n      this._transformState.afterTransform()\n    }\n  }\n\n  _transform(data, cb) {\n    cb(null, data)\n  }\n\n  _flush(cb) {\n    cb(null)\n  }\n\n  _final(cb) {\n    this._transformState.afterFinal = cb\n    this._flush(transformAfterFlush.bind(this))\n  }\n}\n\nclass PassThrough extends Transform {}\n\nfunction transformAfterFlush(err, data) {\n  const cb = this._transformState.afterFinal\n  if (err) return cb(err)\n  if (data !== null && data !== undefined) this.push(data)\n  this.push(null)\n  cb(null)\n}\n\nfunction pipelinePromise(...streams) {\n  return new Promise((resolve, reject) => {\n    return pipeline(...streams, (err) => {\n      if (err) return reject(err)\n      resolve()\n    })\n  })\n}\n\nfunction pipeline(stream, ...streams) {\n  const all = Array.isArray(stream) ? [...stream, ...streams] : [stream, ...streams]\n  const done = all.length && typeof all[all.length - 1] === 'function' ? all.pop() : null\n\n  if (all.length < 2) throw new Error('Pipeline requires at least 2 streams')\n\n  let src = all[0]\n  let dest = null\n  let error = null\n\n  for (let i = 1; i < all.length; i++) {\n    dest = all[i]\n\n    if (isStreamx(src)) {\n      src.pipe(dest, onerror)\n    } else {\n      errorHandle(src, true, i > 1, onerror)\n      src.pipe(dest)\n    }\n\n    src = dest\n  }\n\n  if (done) {\n    let fin = false\n\n    const autoDestroy =\n      isStreamx(dest) || !!(dest._writableState && dest._writableState.autoDestroy)\n\n    dest.on('error', (err) => {\n      if (error === null) error = err\n    })\n\n    dest.on('finish', () => {\n      fin = true\n      if (!autoDestroy) done(error)\n    })\n\n    if (autoDestroy) {\n      dest.on('close', () => done(error || (fin ? null : PREMATURE_CLOSE)))\n    }\n  }\n\n  return dest\n\n  function errorHandle(s, rd, wr, onerror) {\n    s.on('error', onerror)\n    s.on('close', onclose)\n\n    function onclose() {\n      if (rd && s._readableState && !s._readableState.ended) return onerror(PREMATURE_CLOSE)\n      if (wr && s._writableState && !s._writableState.ended) return onerror(PREMATURE_CLOSE)\n    }\n  }\n\n  function onerror(err) {\n    if (!err || error) return\n    error = err\n\n    for (const s of all) {\n      s.destroy(err)\n    }\n  }\n}\n\nfunction echo(s) {\n  return s\n}\n\nfunction isStream(stream) {\n  return !!stream._readableState || !!stream._writableState\n}\n\nfunction isStreamx(stream) {\n  return typeof stream._duplexState === 'number' && isStream(stream)\n}\n\nfunction isEnding(stream) {\n  return !!stream._readableState && stream._readableState.ending\n}\n\nfunction isEnded(stream) {\n  return !!stream._readableState && stream._readableState.ended\n}\n\nfunction isFinishing(stream) {\n  return !!stream._writableState && stream._writableState.ending\n}\n\nfunction isFinished(stream) {\n  return !!stream._writableState && stream._writableState.ended\n}\n\nfunction getStreamError(stream, opts = {}) {\n  const err =\n    (stream._readableState && stream._readableState.error) ||\n    (stream._writableState && stream._writableState.error)\n\n  // avoid implicit errors by default\n  return !opts.all && err === STREAM_DESTROYED ? null : err\n}\n\nfunction isReadStreamx(stream) {\n  return isStreamx(stream) && stream.readable\n}\n\nfunction isDisturbed(stream) {\n  return (\n    (stream._duplexState & OPENING) !== OPENING ||\n    (stream._duplexState & DESTROYING) === DESTROYING ||\n    (stream._duplexState & ACTIVE_OR_TICKING) !== 0\n  )\n}\n\nfunction isTypedArray(data) {\n  return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'\n}\n\nfunction defaultByteLength(data) {\n  return isTypedArray(data) ? data.byteLength : 1024\n}\n\nfunction noop() {}\n\nfunction abort() {\n  this.destroy(new Error('Stream aborted.'))\n}\n\nfunction isWritev(s) {\n  return s._writev !== Writable.prototype._writev && s._writev !== Duplex.prototype._writev\n}\n\nmodule.exports = {\n  pipeline,\n  pipelinePromise,\n  isStream,\n  isStreamx,\n  isEnding,\n  isEnded,\n  isFinishing,\n  isFinished,\n  isDisturbed,\n  getStreamError,\n  Stream,\n  Writable,\n  Readable,\n  Duplex,\n  Transform,\n  // Export PassThrough for compatibility with Node.js core's stream module\n  PassThrough\n}\n","const b4a = require('b4a')\n\nconst ZEROS = '0000000000000000000'\nconst SEVENS = '7777777777777777777'\nconst ZERO_OFFSET = '0'.charCodeAt(0)\nconst USTAR_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x00]) // ustar\\x00\nconst USTAR_VER = b4a.from([ZERO_OFFSET, ZERO_OFFSET])\nconst GNU_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x20]) // ustar\\x20\nconst GNU_VER = b4a.from([0x20, 0x00])\nconst MASK = 0o7777\nconst MAGIC_OFFSET = 257\nconst VERSION_OFFSET = 263\n\nexports.decodeLongPath = function decodeLongPath (buf, encoding) {\n  return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function encodePax (opts) { // TODO: encode more stuff in pax\n  let result = ''\n  if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n  if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n  const pax = opts.pax\n  if (pax) {\n    for (const key in pax) {\n      result += addLength(' ' + key + '=' + pax[key] + '\\n')\n    }\n  }\n  return b4a.from(result)\n}\n\nexports.decodePax = function decodePax (buf) {\n  const result = {}\n\n  while (buf.length) {\n    let i = 0\n    while (i < buf.length && buf[i] !== 32) i++\n    const len = parseInt(b4a.toString(buf.subarray(0, i)), 10)\n    if (!len) return result\n\n    const b = b4a.toString(buf.subarray(i + 1, len - 1))\n    const keyIndex = b.indexOf('=')\n    if (keyIndex === -1) return result\n    result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n    buf = buf.subarray(len)\n  }\n\n  return result\n}\n\nexports.encode = function encode (opts) {\n  const buf = b4a.alloc(512)\n  let name = opts.name\n  let prefix = ''\n\n  if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n  if (b4a.byteLength(name) !== name.length) return null // utf-8\n\n  while (b4a.byteLength(name) > 100) {\n    const i = name.indexOf('/')\n    if (i === -1) return null\n    prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n    name = name.slice(i + 1)\n  }\n\n  if (b4a.byteLength(name) > 100 || b4a.byteLength(prefix) > 155) return null\n  if (opts.linkname && b4a.byteLength(opts.linkname) > 100) return null\n\n  b4a.write(buf, name)\n  b4a.write(buf, encodeOct(opts.mode & MASK, 6), 100)\n  b4a.write(buf, encodeOct(opts.uid, 6), 108)\n  b4a.write(buf, encodeOct(opts.gid, 6), 116)\n  encodeSize(opts.size, buf, 124)\n  b4a.write(buf, encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n  buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n  if (opts.linkname) b4a.write(buf, opts.linkname, 157)\n\n  b4a.copy(USTAR_MAGIC, buf, MAGIC_OFFSET)\n  b4a.copy(USTAR_VER, buf, VERSION_OFFSET)\n  if (opts.uname) b4a.write(buf, opts.uname, 265)\n  if (opts.gname) b4a.write(buf, opts.gname, 297)\n  b4a.write(buf, encodeOct(opts.devmajor || 0, 6), 329)\n  b4a.write(buf, encodeOct(opts.devminor || 0, 6), 337)\n\n  if (prefix) b4a.write(buf, prefix, 345)\n\n  b4a.write(buf, encodeOct(cksum(buf), 6), 148)\n\n  return buf\n}\n\nexports.decode = function decode (buf, filenameEncoding, allowUnknownFormat) {\n  let typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n  let name = decodeStr(buf, 0, 100, filenameEncoding)\n  const mode = decodeOct(buf, 100, 8)\n  const uid = decodeOct(buf, 108, 8)\n  const gid = decodeOct(buf, 116, 8)\n  const size = decodeOct(buf, 124, 12)\n  const mtime = decodeOct(buf, 136, 12)\n  const type = toType(typeflag)\n  const linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n  const uname = decodeStr(buf, 265, 32)\n  const gname = decodeStr(buf, 297, 32)\n  const devmajor = decodeOct(buf, 329, 8)\n  const devminor = decodeOct(buf, 337, 8)\n\n  const c = cksum(buf)\n\n  // checksum is still initial value if header was null.\n  if (c === 8 * 32) return null\n\n  // valid checksum\n  if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n  if (isUSTAR(buf)) {\n    // ustar (posix) format.\n    // prepend prefix, if present.\n    if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n  } else if (isGNU(buf)) {\n    // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and\n    // multi-volume tarballs.\n  } else {\n    if (!allowUnknownFormat) {\n      throw new Error('Invalid tar header: unknown format.')\n    }\n  }\n\n  // to support old tar versions that use trailing / to indicate dirs\n  if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n  return {\n    name,\n    mode,\n    uid,\n    gid,\n    size,\n    mtime: new Date(1000 * mtime),\n    type,\n    linkname,\n    uname,\n    gname,\n    devmajor,\n    devminor,\n    pax: null\n  }\n}\n\nfunction isUSTAR (buf) {\n  return b4a.equals(USTAR_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6))\n}\n\nfunction isGNU (buf) {\n  return b4a.equals(GNU_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6)) &&\n    b4a.equals(GNU_VER, buf.subarray(VERSION_OFFSET, VERSION_OFFSET + 2))\n}\n\nfunction clamp (index, len, defaultValue) {\n  if (typeof index !== 'number') return defaultValue\n  index = ~~index // Coerce to integer.\n  if (index >= len) return len\n  if (index >= 0) return index\n  index += len\n  if (index >= 0) return index\n  return 0\n}\n\nfunction toType (flag) {\n  switch (flag) {\n    case 0:\n      return 'file'\n    case 1:\n      return 'link'\n    case 2:\n      return 'symlink'\n    case 3:\n      return 'character-device'\n    case 4:\n      return 'block-device'\n    case 5:\n      return 'directory'\n    case 6:\n      return 'fifo'\n    case 7:\n      return 'contiguous-file'\n    case 72:\n      return 'pax-header'\n    case 55:\n      return 'pax-global-header'\n    case 27:\n      return 'gnu-long-link-path'\n    case 28:\n    case 30:\n      return 'gnu-long-path'\n  }\n\n  return null\n}\n\nfunction toTypeflag (flag) {\n  switch (flag) {\n    case 'file':\n      return 0\n    case 'link':\n      return 1\n    case 'symlink':\n      return 2\n    case 'character-device':\n      return 3\n    case 'block-device':\n      return 4\n    case 'directory':\n      return 5\n    case 'fifo':\n      return 6\n    case 'contiguous-file':\n      return 7\n    case 'pax-header':\n      return 72\n  }\n\n  return 0\n}\n\nfunction indexOf (block, num, offset, end) {\n  for (; offset < end; offset++) {\n    if (block[offset] === num) return offset\n  }\n  return end\n}\n\nfunction cksum (block) {\n  let sum = 8 * 32\n  for (let i = 0; i < 148; i++) sum += block[i]\n  for (let j = 156; j < 512; j++) sum += block[j]\n  return sum\n}\n\nfunction encodeOct (val, n) {\n  val = val.toString(8)\n  if (val.length > n) return SEVENS.slice(0, n) + ' '\n  return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\nfunction encodeSizeBin (num, buf, off) {\n  buf[off] = 0x80\n  for (let i = 11; i > 0; i--) {\n    buf[off + i] = num & 0xff\n    num = Math.floor(num / 0x100)\n  }\n}\n\nfunction encodeSize (num, buf, off) {\n  if (num.toString(8).length > 11) {\n    encodeSizeBin(num, buf, off)\n  } else {\n    b4a.write(buf, encodeOct(num, 11), off)\n  }\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n  // first byte MUST be either 80 or FF\n  // 80 for positive, FF for 2's comp\n  let positive\n  if (buf[0] === 0x80) positive = true\n  else if (buf[0] === 0xFF) positive = false\n  else return null\n\n  // build up a base-256 tuple from the least sig to the highest\n  const tuple = []\n  let i\n  for (i = buf.length - 1; i > 0; i--) {\n    const byte = buf[i]\n    if (positive) tuple.push(byte)\n    else tuple.push(0xFF - byte)\n  }\n\n  let sum = 0\n  const l = tuple.length\n  for (i = 0; i < l; i++) {\n    sum += tuple[i] * Math.pow(256, i)\n  }\n\n  return positive ? sum : -1 * sum\n}\n\nfunction decodeOct (val, offset, length) {\n  val = val.subarray(offset, offset + length)\n  offset = 0\n\n  // If prefixed with 0x80 then parse as a base-256 integer\n  if (val[offset] & 0x80) {\n    return parse256(val)\n  } else {\n    // Older versions of tar can prefix with spaces\n    while (offset < val.length && val[offset] === 32) offset++\n    const end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n    while (offset < end && val[offset] === 0) offset++\n    if (end === offset) return 0\n    return parseInt(b4a.toString(val.subarray(offset, end)), 8)\n  }\n}\n\nfunction decodeStr (val, offset, length, encoding) {\n  return b4a.toString(val.subarray(offset, indexOf(val, 0, offset, offset + length)), encoding)\n}\n\nfunction addLength (str) {\n  const len = b4a.byteLength(str)\n  let digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n  if (len + digits >= Math.pow(10, digits)) digits++\n\n  return (len + digits) + str\n}\n","const { Writable, Readable, getStreamError } = require('streamx')\nconst FIFO = require('fast-fifo')\nconst b4a = require('b4a')\nconst headers = require('./headers')\n\nconst EMPTY = b4a.alloc(0)\n\nclass BufferList {\n  constructor () {\n    this.buffered = 0\n    this.shifted = 0\n    this.queue = new FIFO()\n\n    this._offset = 0\n  }\n\n  push (buffer) {\n    this.buffered += buffer.byteLength\n    this.queue.push(buffer)\n  }\n\n  shiftFirst (size) {\n    return this._buffered === 0 ? null : this._next(size)\n  }\n\n  shift (size) {\n    if (size > this.buffered) return null\n    if (size === 0) return EMPTY\n\n    let chunk = this._next(size)\n\n    if (size === chunk.byteLength) return chunk // likely case\n\n    const chunks = [chunk]\n\n    while ((size -= chunk.byteLength) > 0) {\n      chunk = this._next(size)\n      chunks.push(chunk)\n    }\n\n    return b4a.concat(chunks)\n  }\n\n  _next (size) {\n    const buf = this.queue.peek()\n    const rem = buf.byteLength - this._offset\n\n    if (size >= rem) {\n      const sub = this._offset ? buf.subarray(this._offset, buf.byteLength) : buf\n      this.queue.shift()\n      this._offset = 0\n      this.buffered -= rem\n      this.shifted += rem\n      return sub\n    }\n\n    this.buffered -= size\n    this.shifted += size\n\n    return buf.subarray(this._offset, (this._offset += size))\n  }\n}\n\nclass Source extends Readable {\n  constructor (self, header, offset) {\n    super()\n\n    this.header = header\n    this.offset = offset\n\n    this._parent = self\n  }\n\n  _read (cb) {\n    if (this.header.size === 0) {\n      this.push(null)\n    }\n    if (this._parent._stream === this) {\n      this._parent._update()\n    }\n    cb(null)\n  }\n\n  _predestroy () {\n    this._parent.destroy(getStreamError(this))\n  }\n\n  _detach () {\n    if (this._parent._stream === this) {\n      this._parent._stream = null\n      this._parent._missing = overflow(this.header.size)\n      this._parent._update()\n    }\n  }\n\n  _destroy (cb) {\n    this._detach()\n    cb(null)\n  }\n}\n\nclass Extract extends Writable {\n  constructor (opts) {\n    super(opts)\n\n    if (!opts) opts = {}\n\n    this._buffer = new BufferList()\n    this._offset = 0\n    this._header = null\n    this._stream = null\n    this._missing = 0\n    this._longHeader = false\n    this._callback = noop\n    this._locked = false\n    this._finished = false\n    this._pax = null\n    this._paxGlobal = null\n    this._gnuLongPath = null\n    this._gnuLongLinkPath = null\n    this._filenameEncoding = opts.filenameEncoding || 'utf-8'\n    this._allowUnknownFormat = !!opts.allowUnknownFormat\n    this._unlockBound = this._unlock.bind(this)\n  }\n\n  _unlock (err) {\n    this._locked = false\n\n    if (err) {\n      this.destroy(err)\n      this._continueWrite(err)\n      return\n    }\n\n    this._update()\n  }\n\n  _consumeHeader () {\n    if (this._locked) return false\n\n    this._offset = this._buffer.shifted\n\n    try {\n      this._header = headers.decode(this._buffer.shift(512), this._filenameEncoding, this._allowUnknownFormat)\n    } catch (err) {\n      this._continueWrite(err)\n      return false\n    }\n\n    if (!this._header) return true\n\n    switch (this._header.type) {\n      case 'gnu-long-path':\n      case 'gnu-long-link-path':\n      case 'pax-global-header':\n      case 'pax-header':\n        this._longHeader = true\n        this._missing = this._header.size\n        return true\n    }\n\n    this._locked = true\n    this._applyLongHeaders()\n\n    if (this._header.size === 0 || this._header.type === 'directory') {\n      this.emit('entry', this._header, this._createStream(), this._unlockBound)\n      return true\n    }\n\n    this._stream = this._createStream()\n    this._missing = this._header.size\n\n    this.emit('entry', this._header, this._stream, this._unlockBound)\n    return true\n  }\n\n  _applyLongHeaders () {\n    if (this._gnuLongPath) {\n      this._header.name = this._gnuLongPath\n      this._gnuLongPath = null\n    }\n\n    if (this._gnuLongLinkPath) {\n      this._header.linkname = this._gnuLongLinkPath\n      this._gnuLongLinkPath = null\n    }\n\n    if (this._pax) {\n      if (this._pax.path) this._header.name = this._pax.path\n      if (this._pax.linkpath) this._header.linkname = this._pax.linkpath\n      if (this._pax.size) this._header.size = parseInt(this._pax.size, 10)\n      this._header.pax = this._pax\n      this._pax = null\n    }\n  }\n\n  _decodeLongHeader (buf) {\n    switch (this._header.type) {\n      case 'gnu-long-path':\n        this._gnuLongPath = headers.decodeLongPath(buf, this._filenameEncoding)\n        break\n      case 'gnu-long-link-path':\n        this._gnuLongLinkPath = headers.decodeLongPath(buf, this._filenameEncoding)\n        break\n      case 'pax-global-header':\n        this._paxGlobal = headers.decodePax(buf)\n        break\n      case 'pax-header':\n        this._pax = this._paxGlobal === null\n          ? headers.decodePax(buf)\n          : Object.assign({}, this._paxGlobal, headers.decodePax(buf))\n        break\n    }\n  }\n\n  _consumeLongHeader () {\n    this._longHeader = false\n    this._missing = overflow(this._header.size)\n\n    const buf = this._buffer.shift(this._header.size)\n\n    try {\n      this._decodeLongHeader(buf)\n    } catch (err) {\n      this._continueWrite(err)\n      return false\n    }\n\n    return true\n  }\n\n  _consumeStream () {\n    const buf = this._buffer.shiftFirst(this._missing)\n    if (buf === null) return false\n\n    this._missing -= buf.byteLength\n    const drained = this._stream.push(buf)\n\n    if (this._missing === 0) {\n      this._stream.push(null)\n      if (drained) this._stream._detach()\n      return drained && this._locked === false\n    }\n\n    return drained\n  }\n\n  _createStream () {\n    return new Source(this, this._header, this._offset)\n  }\n\n  _update () {\n    while (this._buffer.buffered > 0 && !this.destroying) {\n      if (this._missing > 0) {\n        if (this._stream !== null) {\n          if (this._consumeStream() === false) return\n          continue\n        }\n\n        if (this._longHeader === true) {\n          if (this._missing > this._buffer.buffered) break\n          if (this._consumeLongHeader() === false) return false\n          continue\n        }\n\n        const ignore = this._buffer.shiftFirst(this._missing)\n        if (ignore !== null) this._missing -= ignore.byteLength\n        continue\n      }\n\n      if (this._buffer.buffered < 512) break\n      if (this._stream !== null || this._consumeHeader() === false) return\n    }\n\n    this._continueWrite(null)\n  }\n\n  _continueWrite (err) {\n    const cb = this._callback\n    this._callback = noop\n    cb(err)\n  }\n\n  _write (data, cb) {\n    this._callback = cb\n    this._buffer.push(data)\n    this._update()\n  }\n\n  _final (cb) {\n    this._finished = this._missing === 0 && this._buffer.buffered === 0\n    cb(this._finished ? null : new Error('Unexpected end of data'))\n  }\n\n  _predestroy () {\n    this._continueWrite(null)\n  }\n\n  _destroy (cb) {\n    if (this._stream) this._stream.destroy(getStreamError(this))\n    cb(null)\n  }\n\n  [Symbol.asyncIterator] () {\n    let error = null\n\n    let promiseResolve = null\n    let promiseReject = null\n\n    let entryStream = null\n    let entryCallback = null\n\n    const extract = this\n\n    this.on('entry', onentry)\n    this.on('error', (err) => { error = err })\n    this.on('close', onclose)\n\n    return {\n      [Symbol.asyncIterator] () {\n        return this\n      },\n      next () {\n        return new Promise(onnext)\n      },\n      return () {\n        return destroy(null)\n      },\n      throw (err) {\n        return destroy(err)\n      }\n    }\n\n    function consumeCallback (err) {\n      if (!entryCallback) return\n      const cb = entryCallback\n      entryCallback = null\n      cb(err)\n    }\n\n    function onnext (resolve, reject) {\n      if (error) {\n        return reject(error)\n      }\n\n      if (entryStream) {\n        resolve({ value: entryStream, done: false })\n        entryStream = null\n        return\n      }\n\n      promiseResolve = resolve\n      promiseReject = reject\n\n      consumeCallback(null)\n\n      if (extract._finished && promiseResolve) {\n        promiseResolve({ value: undefined, done: true })\n        promiseResolve = promiseReject = null\n      }\n    }\n\n    function onentry (header, stream, callback) {\n      entryCallback = callback\n      stream.on('error', noop) // no way around this due to tick sillyness\n\n      if (promiseResolve) {\n        promiseResolve({ value: stream, done: false })\n        promiseResolve = promiseReject = null\n      } else {\n        entryStream = stream\n      }\n    }\n\n    function onclose () {\n      consumeCallback(error)\n      if (!promiseResolve) return\n      if (error) promiseReject(error)\n      else promiseResolve({ value: undefined, done: true })\n      promiseResolve = promiseReject = null\n    }\n\n    function destroy (err) {\n      extract.destroy(err)\n      consumeCallback(err)\n      return new Promise((resolve, reject) => {\n        if (extract.destroyed) return resolve({ value: undefined, done: true })\n        extract.once('close', function () {\n          if (err) reject(err)\n          else resolve({ value: undefined, done: true })\n        })\n      })\n    }\n  }\n}\n\nmodule.exports = function extract (opts) {\n  return new Extract(opts)\n}\n\nfunction noop () {}\n\nfunction overflow (size) {\n  size &= 511\n  return size && 512 - size\n}\n","const constants = { // just for envs without fs\n  S_IFMT: 61440,\n  S_IFDIR: 16384,\n  S_IFCHR: 8192,\n  S_IFBLK: 24576,\n  S_IFIFO: 4096,\n  S_IFLNK: 40960\n}\n\ntry {\n  module.exports = require('fs').constants || constants\n} catch {\n  module.exports = constants\n}\n","const { Readable, Writable, getStreamError } = require('streamx')\nconst b4a = require('b4a')\n\nconst constants = require('./constants')\nconst headers = require('./headers')\n\nconst DMODE = 0o755\nconst FMODE = 0o644\n\nconst END_OF_TAR = b4a.alloc(1024)\n\nclass Sink extends Writable {\n  constructor (pack, header, callback) {\n    super({ mapWritable, eagerOpen: true })\n\n    this.written = 0\n    this.header = header\n\n    this._callback = callback\n    this._linkname = null\n    this._isLinkname = header.type === 'symlink' && !header.linkname\n    this._isVoid = header.type !== 'file' && header.type !== 'contiguous-file'\n    this._finished = false\n    this._pack = pack\n    this._openCallback = null\n\n    if (this._pack._stream === null) this._pack._stream = this\n    else this._pack._pending.push(this)\n  }\n\n  _open (cb) {\n    this._openCallback = cb\n    if (this._pack._stream === this) this._continueOpen()\n  }\n\n  _continuePack (err) {\n    if (this._callback === null) return\n\n    const callback = this._callback\n    this._callback = null\n\n    callback(err)\n  }\n\n  _continueOpen () {\n    if (this._pack._stream === null) this._pack._stream = this\n\n    const cb = this._openCallback\n    this._openCallback = null\n    if (cb === null) return\n\n    if (this._pack.destroying) return cb(new Error('pack stream destroyed'))\n    if (this._pack._finalized) return cb(new Error('pack stream is already finalized'))\n\n    this._pack._stream = this\n\n    if (!this._isLinkname) {\n      this._pack._encode(this.header)\n    }\n\n    if (this._isVoid) {\n      this._finish()\n      this._continuePack(null)\n    }\n\n    cb(null)\n  }\n\n  _write (data, cb) {\n    if (this._isLinkname) {\n      this._linkname = this._linkname ? b4a.concat([this._linkname, data]) : data\n      return cb(null)\n    }\n\n    if (this._isVoid) {\n      if (data.byteLength > 0) {\n        return cb(new Error('No body allowed for this entry'))\n      }\n      return cb()\n    }\n\n    this.written += data.byteLength\n    if (this._pack.push(data)) return cb()\n    this._pack._drain = cb\n  }\n\n  _finish () {\n    if (this._finished) return\n    this._finished = true\n\n    if (this._isLinkname) {\n      this.header.linkname = this._linkname ? b4a.toString(this._linkname, 'utf-8') : ''\n      this._pack._encode(this.header)\n    }\n\n    overflow(this._pack, this.header.size)\n\n    this._pack._done(this)\n  }\n\n  _final (cb) {\n    if (this.written !== this.header.size) { // corrupting tar\n      return cb(new Error('Size mismatch'))\n    }\n\n    this._finish()\n    cb(null)\n  }\n\n  _getError () {\n    return getStreamError(this) || new Error('tar entry destroyed')\n  }\n\n  _predestroy () {\n    this._pack.destroy(this._getError())\n  }\n\n  _destroy (cb) {\n    this._pack._done(this)\n\n    this._continuePack(this._finished ? null : this._getError())\n\n    cb()\n  }\n}\n\nclass Pack extends Readable {\n  constructor (opts) {\n    super(opts)\n    this._drain = noop\n    this._finalized = false\n    this._finalizing = false\n    this._pending = []\n    this._stream = null\n  }\n\n  entry (header, buffer, callback) {\n    if (this._finalized || this.destroying) throw new Error('already finalized or destroyed')\n\n    if (typeof buffer === 'function') {\n      callback = buffer\n      buffer = null\n    }\n\n    if (!callback) callback = noop\n\n    if (!header.size || header.type === 'symlink') header.size = 0\n    if (!header.type) header.type = modeToType(header.mode)\n    if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n    if (!header.uid) header.uid = 0\n    if (!header.gid) header.gid = 0\n    if (!header.mtime) header.mtime = new Date()\n\n    if (typeof buffer === 'string') buffer = b4a.from(buffer)\n\n    const sink = new Sink(this, header, callback)\n\n    if (b4a.isBuffer(buffer)) {\n      header.size = buffer.byteLength\n      sink.write(buffer)\n      sink.end()\n      return sink\n    }\n\n    if (sink._isVoid) {\n      return sink\n    }\n\n    return sink\n  }\n\n  finalize () {\n    if (this._stream || this._pending.length > 0) {\n      this._finalizing = true\n      return\n    }\n\n    if (this._finalized) return\n    this._finalized = true\n\n    this.push(END_OF_TAR)\n    this.push(null)\n  }\n\n  _done (stream) {\n    if (stream !== this._stream) return\n\n    this._stream = null\n\n    if (this._finalizing) this.finalize()\n    if (this._pending.length) this._pending.shift()._continueOpen()\n  }\n\n  _encode (header) {\n    if (!header.pax) {\n      const buf = headers.encode(header)\n      if (buf) {\n        this.push(buf)\n        return\n      }\n    }\n    this._encodePax(header)\n  }\n\n  _encodePax (header) {\n    const paxHeader = headers.encodePax({\n      name: header.name,\n      linkname: header.linkname,\n      pax: header.pax\n    })\n\n    const newHeader = {\n      name: 'PaxHeader',\n      mode: header.mode,\n      uid: header.uid,\n      gid: header.gid,\n      size: paxHeader.byteLength,\n      mtime: header.mtime,\n      type: 'pax-header',\n      linkname: header.linkname && 'PaxHeader',\n      uname: header.uname,\n      gname: header.gname,\n      devmajor: header.devmajor,\n      devminor: header.devminor\n    }\n\n    this.push(headers.encode(newHeader))\n    this.push(paxHeader)\n    overflow(this, paxHeader.byteLength)\n\n    newHeader.size = header.size\n    newHeader.type = header.type\n    this.push(headers.encode(newHeader))\n  }\n\n  _doDrain () {\n    const drain = this._drain\n    this._drain = noop\n    drain()\n  }\n\n  _predestroy () {\n    const err = getStreamError(this)\n\n    if (this._stream) this._stream.destroy(err)\n\n    while (this._pending.length) {\n      const stream = this._pending.shift()\n      stream.destroy(err)\n      stream._continueOpen()\n    }\n\n    this._doDrain()\n  }\n\n  _read (cb) {\n    this._doDrain()\n    cb()\n  }\n}\n\nmodule.exports = function pack (opts) {\n  return new Pack(opts)\n}\n\nfunction modeToType (mode) {\n  switch (mode & constants.S_IFMT) {\n    case constants.S_IFBLK: return 'block-device'\n    case constants.S_IFCHR: return 'character-device'\n    case constants.S_IFDIR: return 'directory'\n    case constants.S_IFIFO: return 'fifo'\n    case constants.S_IFLNK: return 'symlink'\n  }\n\n  return 'file'\n}\n\nfunction noop () {}\n\nfunction overflow (self, size) {\n  size &= 511\n  if (size) self.push(END_OF_TAR.subarray(0, 512 - size))\n}\n\nfunction mapWritable (buf) {\n  return b4a.isBuffer(buf) ? buf : b4a.from(buf)\n}\n","exports.extract = require('./extract')\nexports.pack = require('./pack')\n","/**\n * TAR Format Plugin\n *\n * @module plugins/tar\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar zlib = require('zlib');\n\nvar engine = require('tar-stream');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {TarOptions} options\n */\nvar Tar = function(options) {\n  if (!(this instanceof Tar)) {\n    return new Tar(options);\n  }\n\n  options = this.options = util.defaults(options, {\n    gzip: false\n  });\n\n  if (typeof options.gzipOptions !== 'object') {\n    options.gzipOptions = {};\n  }\n\n  this.supports = {\n    directory: true,\n    symlink: true\n  };\n\n  this.engine = engine.pack(options);\n  this.compressor = false;\n\n  if (options.gzip) {\n    this.compressor = zlib.createGzip(options.gzipOptions);\n    this.compressor.on('error', this._onCompressorError.bind(this));\n  }\n};\n\n/**\n * [_onCompressorError description]\n *\n * @private\n * @param  {Error} err\n * @return void\n */\nTar.prototype._onCompressorError = function(err) {\n  this.engine.emit('error', err);\n};\n\n/**\n * [append description]\n *\n * @param  {(Buffer|Stream)} source\n * @param  {TarEntryData} data\n * @param  {Function} callback\n * @return void\n */\nTar.prototype.append = function(source, data, callback) {\n  var self = this;\n\n  data.mtime = data.date;\n\n  function append(err, sourceBuffer) {\n    if (err) {\n      callback(err);\n      return;\n    }\n\n    self.engine.entry(data, sourceBuffer, function(err) {\n      callback(err, data);\n    });\n  }\n\n  if (data.sourceType === 'buffer') {\n    append(null, source);\n  } else if (data.sourceType === 'stream' && data.stats) {\n    data.size = data.stats.size;\n\n    var entry = self.engine.entry(data, function(err) {\n      callback(err, data);\n    });\n\n    source.pipe(entry);\n  } else if (data.sourceType === 'stream') {\n    util.collectStream(source, append);\n  }\n};\n\n/**\n * [finalize description]\n *\n * @return void\n */\nTar.prototype.finalize = function() {\n  this.engine.finalize();\n};\n\n/**\n * [on description]\n *\n * @return this.engine\n */\nTar.prototype.on = function() {\n  return this.engine.on.apply(this.engine, arguments);\n};\n\n/**\n * [pipe description]\n *\n * @param  {String} destination\n * @param  {Object} options\n * @return this.engine\n */\nTar.prototype.pipe = function(destination, options) {\n  if (this.compressor) {\n    return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options);\n  } else {\n    return this.engine.pipe.apply(this.engine, arguments);\n  }\n};\n\n/**\n * [unpipe description]\n *\n * @return this.engine\n */\nTar.prototype.unpipe = function() {\n  if (this.compressor) {\n    return this.compressor.unpipe.apply(this.compressor, arguments);\n  } else {\n    return this.engine.unpipe.apply(this.engine, arguments);\n  }\n};\n\nmodule.exports = Tar;\n\n/**\n * @typedef {Object} TarOptions\n * @global\n * @property {Boolean} [gzip=false] Compress the tar archive using gzip.\n * @property {Object} [gzipOptions] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n * @property {*} [*] See [tar-stream]{@link https://github.com/mafintosh/tar-stream} documentation for additional properties.\n */\n\n/**\n * @typedef {Object} TarEntryData\n * @global\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n */\n\n/**\n * TarStream Module\n * @external TarStream\n * @see {@link https://github.com/mafintosh/tar-stream}\n */\n","'use strict';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nconst CRC_TABLE = new Int32Array([\n  0,\n  1996959894,\n  3993919788,\n  2567524794,\n  124634137,\n  1886057615,\n  3915621685,\n  2657392035,\n  249268274,\n  2044508324,\n  3772115230,\n  2547177864,\n  162941995,\n  2125561021,\n  3887607047,\n  2428444049,\n  498536548,\n  1789927666,\n  4089016648,\n  2227061214,\n  450548861,\n  1843258603,\n  4107580753,\n  2211677639,\n  325883990,\n  1684777152,\n  4251122042,\n  2321926636,\n  335633487,\n  1661365465,\n  4195302755,\n  2366115317,\n  997073096,\n  1281953886,\n  3579855332,\n  2724688242,\n  1006888145,\n  1258607687,\n  3524101629,\n  2768942443,\n  901097722,\n  1119000684,\n  3686517206,\n  2898065728,\n  853044451,\n  1172266101,\n  3705015759,\n  2882616665,\n  651767980,\n  1373503546,\n  3369554304,\n  3218104598,\n  565507253,\n  1454621731,\n  3485111705,\n  3099436303,\n  671266974,\n  1594198024,\n  3322730930,\n  2970347812,\n  795835527,\n  1483230225,\n  3244367275,\n  3060149565,\n  1994146192,\n  31158534,\n  2563907772,\n  4023717930,\n  1907459465,\n  112637215,\n  2680153253,\n  3904427059,\n  2013776290,\n  251722036,\n  2517215374,\n  3775830040,\n  2137656763,\n  141376813,\n  2439277719,\n  3865271297,\n  1802195444,\n  476864866,\n  2238001368,\n  4066508878,\n  1812370925,\n  453092731,\n  2181625025,\n  4111451223,\n  1706088902,\n  314042704,\n  2344532202,\n  4240017532,\n  1658658271,\n  366619977,\n  2362670323,\n  4224994405,\n  1303535960,\n  984961486,\n  2747007092,\n  3569037538,\n  1256170817,\n  1037604311,\n  2765210733,\n  3554079995,\n  1131014506,\n  879679996,\n  2909243462,\n  3663771856,\n  1141124467,\n  855842277,\n  2852801631,\n  3708648649,\n  1342533948,\n  654459306,\n  3188396048,\n  3373015174,\n  1466479909,\n  544179635,\n  3110523913,\n  3462522015,\n  1591671054,\n  702138776,\n  2966460450,\n  3352799412,\n  1504918807,\n  783551873,\n  3082640443,\n  3233442989,\n  3988292384,\n  2596254646,\n  62317068,\n  1957810842,\n  3939845945,\n  2647816111,\n  81470997,\n  1943803523,\n  3814918930,\n  2489596804,\n  225274430,\n  2053790376,\n  3826175755,\n  2466906013,\n  167816743,\n  2097651377,\n  4027552580,\n  2265490386,\n  503444072,\n  1762050814,\n  4150417245,\n  2154129355,\n  426522225,\n  1852507879,\n  4275313526,\n  2312317920,\n  282753626,\n  1742555852,\n  4189708143,\n  2394877945,\n  397917763,\n  1622183637,\n  3604390888,\n  2714866558,\n  953729732,\n  1340076626,\n  3518719985,\n  2797360999,\n  1068828381,\n  1219638859,\n  3624741850,\n  2936675148,\n  906185462,\n  1090812512,\n  3747672003,\n  2825379669,\n  829329135,\n  1181335161,\n  3412177804,\n  3160834842,\n  628085408,\n  1382605366,\n  3423369109,\n  3138078467,\n  570562233,\n  1426400815,\n  3317316542,\n  2998733608,\n  733239954,\n  1555261956,\n  3268935591,\n  3050360625,\n  752459403,\n  1541320221,\n  2607071920,\n  3965973030,\n  1969922972,\n  40735498,\n  2617837225,\n  3943577151,\n  1913087877,\n  83908371,\n  2512341634,\n  3803740692,\n  2075208622,\n  213261112,\n  2463272603,\n  3855990285,\n  2094854071,\n  198958881,\n  2262029012,\n  4057260610,\n  1759359992,\n  534414190,\n  2176718541,\n  4139329115,\n  1873836001,\n  414664567,\n  2282248934,\n  4279200368,\n  1711684554,\n  285281116,\n  2405801727,\n  4167216745,\n  1634467795,\n  376229701,\n  2685067896,\n  3608007406,\n  1308918612,\n  956543938,\n  2808555105,\n  3495958263,\n  1231636301,\n  1047427035,\n  2932959818,\n  3654703836,\n  1088359270,\n  936918e3,\n  2847714899,\n  3736837829,\n  1202900863,\n  817233897,\n  3183342108,\n  3401237130,\n  1404277552,\n  615818150,\n  3134207493,\n  3453421203,\n  1423857449,\n  601450431,\n  3009837614,\n  3294710456,\n  1567103746,\n  711928724,\n  3020668471,\n  3272380065,\n  1510334235,\n  755167117\n]);\nfunction ensureBuffer(input) {\n  if (Buffer.isBuffer(input)) {\n    return input;\n  }\n  if (typeof input === \"number\") {\n    return Buffer.alloc(input);\n  } else if (typeof input === \"string\") {\n    return Buffer.from(input);\n  } else {\n    throw new Error(\"input must be buffer, number, or string, received \" + typeof input);\n  }\n}\nfunction bufferizeInt(num) {\n  const tmp = ensureBuffer(4);\n  tmp.writeInt32BE(num, 0);\n  return tmp;\n}\nfunction _crc32(buf, previous) {\n  buf = ensureBuffer(buf);\n  if (Buffer.isBuffer(previous)) {\n    previous = previous.readUInt32BE(0);\n  }\n  let crc = ~~previous ^ -1;\n  for (var n = 0; n < buf.length; n++) {\n    crc = CRC_TABLE[(crc ^ buf[n]) & 255] ^ crc >>> 8;\n  }\n  return crc ^ -1;\n}\nfunction crc32() {\n  return bufferizeInt(_crc32.apply(null, arguments));\n}\ncrc32.signed = function() {\n  return _crc32.apply(null, arguments);\n};\ncrc32.unsigned = function() {\n  return _crc32.apply(null, arguments) >>> 0;\n};\nvar bufferCrc32 = crc32;\n\nconst index = /*@__PURE__*/getDefaultExportFromCjs(bufferCrc32);\n\nmodule.exports = index;\n","/**\n * JSON Format Plugin\n *\n * @module plugins/json\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar inherits = require('util').inherits;\nvar Transform = require('readable-stream').Transform;\n\nvar crc32 = require('buffer-crc32');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {(JsonOptions|TransformOptions)} options\n */\nvar Json = function(options) {\n  if (!(this instanceof Json)) {\n    return new Json(options);\n  }\n\n  options = this.options = util.defaults(options, {});\n\n  Transform.call(this, options);\n\n  this.supports = {\n    directory: true,\n    symlink: true\n  };\n\n  this.files = [];\n};\n\ninherits(Json, Transform);\n\n/**\n * [_transform description]\n *\n * @private\n * @param  {Buffer}   chunk\n * @param  {String}   encoding\n * @param  {Function} callback\n * @return void\n */\nJson.prototype._transform = function(chunk, encoding, callback) {\n  callback(null, chunk);\n};\n\n/**\n * [_writeStringified description]\n *\n * @private\n * @return void\n */\nJson.prototype._writeStringified = function() {\n  var fileString = JSON.stringify(this.files);\n  this.write(fileString);\n};\n\n/**\n * [append description]\n *\n * @param  {(Buffer|Stream)}   source\n * @param  {EntryData}   data\n * @param  {Function} callback\n * @return void\n */\nJson.prototype.append = function(source, data, callback) {\n  var self = this;\n\n  data.crc32 = 0;\n\n  function onend(err, sourceBuffer) {\n    if (err) {\n      callback(err);\n      return;\n    }\n\n    data.size = sourceBuffer.length || 0;\n    data.crc32 = crc32.unsigned(sourceBuffer);\n\n    self.files.push(data);\n\n    callback(null, data);\n  }\n\n  if (data.sourceType === 'buffer') {\n    onend(null, source);\n  } else if (data.sourceType === 'stream') {\n    util.collectStream(source, onend);\n  }\n};\n\n/**\n * [finalize description]\n *\n * @return void\n */\nJson.prototype.finalize = function() {\n  this._writeStringified();\n  this.end();\n};\n\nmodule.exports = Json;\n\n/**\n * @typedef {Object} JsonOptions\n * @global\n */\n","/**\n * Archiver Vending\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar Archiver = require('./lib/core');\n\nvar formats = {};\n\n/**\n * Dispenses a new Archiver instance.\n *\n * @constructor\n * @param  {String} format The archive format to use.\n * @param  {Object} options See [Archiver]{@link Archiver}\n * @return {Archiver}\n */\nvar vending = function(format, options) {\n  return vending.create(format, options);\n};\n\n/**\n * Creates a new Archiver instance.\n *\n * @param  {String} format The archive format to use.\n * @param  {Object} options See [Archiver]{@link Archiver}\n * @return {Archiver}\n */\nvending.create = function(format, options) {\n  if (formats[format]) {\n    var instance = new Archiver(format, options);\n    instance.setFormat(format);\n    instance.setModule(new formats[format](options));\n\n    return instance;\n  } else {\n    throw new Error('create(' + format + '): format not registered');\n  }\n};\n\n/**\n * Registers a format for use with archiver.\n *\n * @param  {String} format The name of the format.\n * @param  {Function} module The function for archiver to interact with.\n * @return void\n */\nvending.registerFormat = function(format, module) {\n  if (formats[format]) {\n    throw new Error('register(' + format + '): format already registered');\n  }\n\n  if (typeof module !== 'function') {\n    throw new Error('register(' + format + '): format module invalid');\n  }\n\n  if (typeof module.prototype.append !== 'function' || typeof module.prototype.finalize !== 'function') {\n    throw new Error('register(' + format + '): format module missing methods');\n  }\n\n  formats[format] = module;\n};\n\n/**\n * Check if the format is already registered.\n * \n * @param {String} format the name of the format.\n * @return boolean\n */\nvending.isRegisteredFormat = function (format) {\n  if (formats[format]) {\n    return true;\n  }\n  \n  return false;\n};\n\nvending.registerFormat('zip', require('./lib/plugins/zip'));\nvending.registerFormat('tar', require('./lib/plugins/tar'));\nvending.registerFormat('json', require('./lib/plugins/json'));\n\nmodule.exports = vending;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n    return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n    const result = [[]];\n    let groupIndex = 0;\n    for (const item of items) {\n        if (predicate(item)) {\n            groupIndex++;\n            result[groupIndex] = [];\n        }\n        else {\n            result[groupIndex].push(item);\n        }\n    }\n    return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n    return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n    return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n    return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n    if (entry.charAt(0) === '.') {\n        const secondCharactery = entry.charAt(1);\n        if (secondCharactery === '/' || secondCharactery === '\\\\') {\n            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n        }\n    }\n    return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n    return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n    return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n    return escapeWindowsPath(filepath)\n        .replace(DOS_DEVICE_PATH_RE, '//$1')\n        .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n    return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  __proto__: null,\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  DEFAULT_MAX_EXTGLOB_RECURSION,\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n  const parts = [];\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let value = '';\n  let escaped = false;\n\n  for (const ch of input) {\n    if (escaped === true) {\n      value += ch;\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      value += ch;\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      value += ch;\n      continue;\n    }\n\n    if (quote === 0) {\n      if (ch === '[') {\n        bracket++;\n      } else if (ch === ']' && bracket > 0) {\n        bracket--;\n      } else if (bracket === 0) {\n        if (ch === '(') {\n          paren++;\n        } else if (ch === ')' && paren > 0) {\n          paren--;\n        } else if (ch === '|' && paren === 0) {\n          parts.push(value);\n          value = '';\n          continue;\n        }\n      }\n    }\n\n    value += ch;\n  }\n\n  parts.push(value);\n  return parts;\n};\n\nconst isPlainBranch = branch => {\n  let escaped = false;\n\n  for (const ch of branch) {\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (/[?*+@!()[\\]{}]/.test(ch)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n  let value = branch.trim();\n  let changed = true;\n\n  while (changed === true) {\n    changed = false;\n\n    if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n      value = value.slice(2, -1);\n      changed = true;\n    }\n  }\n\n  if (!isPlainBranch(value)) {\n    return;\n  }\n\n  return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n  const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n  for (let i = 0; i < values.length; i++) {\n    for (let j = i + 1; j < values.length; j++) {\n      const a = values[i];\n      const b = values[j];\n      const char = a[0];\n\n      if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n        continue;\n      }\n\n      if (a === b || a.startsWith(b) || b.startsWith(a)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n  if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n    return;\n  }\n\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let escaped = false;\n\n  for (let i = 1; i < pattern.length; i++) {\n    const ch = pattern[i];\n\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      continue;\n    }\n\n    if (quote === 1) {\n      continue;\n    }\n\n    if (ch === '[') {\n      bracket++;\n      continue;\n    }\n\n    if (ch === ']' && bracket > 0) {\n      bracket--;\n      continue;\n    }\n\n    if (bracket > 0) {\n      continue;\n    }\n\n    if (ch === '(') {\n      paren++;\n      continue;\n    }\n\n    if (ch === ')') {\n      paren--;\n\n      if (paren === 0) {\n        if (requireEnd === true && i !== pattern.length - 1) {\n          return;\n        }\n\n        return {\n          type: pattern[0],\n          body: pattern.slice(2, i),\n          end: i\n        };\n      }\n    }\n  }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n  let index = 0;\n  const chars = [];\n\n  while (index < pattern.length) {\n    const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n    if (!match || match.type !== '*') {\n      return;\n    }\n\n    const branches = splitTopLevel(match.body).map(branch => branch.trim());\n    if (branches.length !== 1) {\n      return;\n    }\n\n    const branch = normalizeSimpleBranch(branches[0]);\n    if (!branch || branch.length !== 1) {\n      return;\n    }\n\n    chars.push(branch);\n    index += match.end + 1;\n  }\n\n  if (chars.length < 1) {\n    return;\n  }\n\n  const source = chars.length === 1\n    ? utils.escapeRegex(chars[0])\n    : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n  return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n  let depth = 0;\n  let value = pattern.trim();\n  let match = parseRepeatedExtglob(value);\n\n  while (match) {\n    depth++;\n    value = match.body.trim();\n    match = parseRepeatedExtglob(value);\n  }\n\n  return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n  if (options.maxExtglobRecursion === false) {\n    return { risky: false };\n  }\n\n  const max =\n    typeof options.maxExtglobRecursion === 'number'\n      ? options.maxExtglobRecursion\n      : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n  const branches = splitTopLevel(body).map(branch => branch.trim());\n\n  if (branches.length > 1) {\n    if (\n      branches.some(branch => branch === '') ||\n      branches.some(branch => /^[*?]+$/.test(branch)) ||\n      hasRepeatedCharPrefixOverlap(branches)\n    ) {\n      return { risky: true };\n    }\n  }\n\n  for (const branch of branches) {\n    const safeOutput = getStarExtglobSequenceOutput(branch);\n    if (safeOutput) {\n      return { risky: true, safeOutput };\n    }\n\n    if (repeatedExtglobRecursion(branch) > max) {\n      return { risky: true };\n    }\n  }\n\n  return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    token.startIndex = state.index;\n    token.tokensIndex = tokens.length;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    const literal = input.slice(token.startIndex, state.index + 1);\n    const body = input.slice(token.startIndex + 2, state.index);\n    const analysis = analyzeRepeatedExtglob(body, opts);\n\n    if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n      const safeOutput = analysis.safeOutput\n        ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n        : undefined;\n      const open = tokens[token.tokensIndex];\n\n      open.type = 'text';\n      open.value = literal;\n      open.output = safeOutput || utils.escapeRegex(literal);\n\n      for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n        tokens[i].value = '';\n        tokens[i].output = '';\n        delete tokens[i].suffix;\n      }\n\n      state.output = token.output + open.output;\n      state.backtrack = true;\n\n      push({ type: 'paren', extglob: true, value, output: '' });\n      decrement('parens');\n      return;\n    }\n\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n    return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n    /**\n     * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n     * An empty string cannot be a dynamic pattern.\n     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n     */\n    if (pattern === '') {\n        return false;\n    }\n    /**\n     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n     * filepath directly (without read directory).\n     */\n    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n        return true;\n    }\n    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n        return true;\n    }\n    return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n    const openingBraceIndex = pattern.indexOf('{');\n    if (openingBraceIndex === -1) {\n        return false;\n    }\n    const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n    if (closingBraceIndex === -1) {\n        return false;\n    }\n    const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n    return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n    return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n    return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n    return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n    return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n    return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n    return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n    return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n    return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n    return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n    return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n    return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n    const basename = path.basename(pattern);\n    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n    return patterns.reduce((collection, pattern) => {\n        return collection.concat(expandBraceExpansion(pattern));\n    }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n    const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n    /**\n     * Sort the patterns by length so that the same depth patterns are processed side by side.\n     * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n     */\n    patterns.sort((a, b) => a.length - b.length);\n    /**\n     * Micromatch can return an empty string in the case of patterns like `{a,}`.\n     */\n    return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n    let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n    /**\n     * The scan method returns an empty array in some cases.\n     * See micromatch/picomatch#58 for more details.\n     */\n    if (parts.length === 0) {\n        parts = [pattern];\n    }\n    /**\n     * The scan method does not return an empty part for the pattern with a forward slash.\n     * This is another part of micromatch/picomatch#58.\n     */\n    if (parts[0].startsWith('/')) {\n        parts[0] = parts[0].slice(1);\n        parts.unshift('');\n    }\n    return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n    return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n    return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n    return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n    return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n    const absolute = [];\n    const relative = [];\n    for (const pattern of patterns) {\n        if (isAbsolute(pattern)) {\n            absolute.push(pattern);\n        }\n        else {\n            relative.push(pattern);\n        }\n    }\n    return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n    return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n    const mergedStream = merge2(streams);\n    streams.forEach((stream) => {\n        stream.once('error', (error) => mergedStream.emit('error', error));\n    });\n    mergedStream.once('close', () => propagateCloseEventToSources(streams));\n    mergedStream.once('end', () => propagateCloseEventToSources(streams));\n    return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n    streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n    return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n    return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n    const patterns = processPatterns(input, settings);\n    const ignore = processPatterns(settings.ignore, settings);\n    const positivePatterns = getPositivePatterns(patterns);\n    const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n    return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n    let patterns = input;\n    /**\n     * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n     * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n     *\n     * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n     * in matching in the case of a large set of patterns after expansion.\n     */\n    if (settings.braceExpansion) {\n        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n    }\n    /**\n     * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n     * at any nesting level.\n     *\n     * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n     * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n     * in the application. Only on the input.\n     */\n    if (settings.baseNameMatch) {\n        patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n    }\n    /**\n     * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n     */\n    return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n    const tasks = [];\n    const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n    const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n    const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n    const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n    tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n    /*\n     * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n     * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n     */\n    if ('.' in insideCurrentDirectoryGroup) {\n        tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n    }\n    else {\n        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n    }\n    return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n    return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n    const positive = negative.map(utils.pattern.convertToPositivePattern);\n    return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n    const group = {};\n    return patterns.reduce((collection, pattern) => {\n        const base = utils.pattern.getBaseDirectory(pattern);\n        if (base in collection) {\n            collection[base].push(pattern);\n        }\n        else {\n            collection[base] = [pattern];\n        }\n        return collection;\n    }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n    return Object.keys(positive).map((base) => {\n        return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n    });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n    return {\n        dynamic,\n        positive,\n        negative,\n        base,\n        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n    };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        readdirWithFileTypes(directory, settings, callback);\n        return;\n    }\n    readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const entries = dirents.map((dirent) => ({\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        }));\n        if (!settings.followSymbolicLinks) {\n            callSuccessCallback(callback, entries);\n            return;\n        }\n        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n        rpl(tasks, (rplError, rplEntries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, rplEntries);\n        });\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n    return (done) => {\n        if (!entry.dirent.isSymbolicLink()) {\n            done(null, entry);\n            return;\n        }\n        settings.fs.stat(entry.path, (statError, stats) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    done(statError);\n                    return;\n                }\n                done(null, entry);\n                return;\n            }\n            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            done(null, entry);\n        });\n    };\n}\nfunction readdir(directory, settings, callback) {\n    settings.fs.readdir(directory, (readdirError, names) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const tasks = names.map((name) => {\n            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n            return (done) => {\n                fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n                    if (error !== null) {\n                        done(error);\n                        return;\n                    }\n                    const entry = {\n                        name,\n                        path,\n                        dirent: utils.fs.createDirentFromStats(name, stats)\n                    };\n                    if (settings.stats) {\n                        entry.stats = stats;\n                    }\n                    done(null, entry);\n                });\n            };\n        });\n        rpl(tasks, (rplError, entries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, entries);\n        });\n    });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        return readdirWithFileTypes(directory, settings);\n    }\n    return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n    return dirents.map((dirent) => {\n        const entry = {\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        };\n        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n            try {\n                const stats = settings.fs.statSync(entry.path);\n                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            }\n            catch (error) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    throw error;\n                }\n            }\n        }\n        return entry;\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n    const names = settings.fs.readdirSync(directory);\n    return names.map((name) => {\n        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n        const entry = {\n            name,\n            path: entryPath,\n            dirent: utils.fs.createDirentFromStats(name, stats)\n        };\n        if (settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.stats = this._getValue(this._options.stats, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n        this.fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this.followSymbolicLinks,\n            fs: this.fs,\n            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  if (!(_concurrency >= 1)) {\n    throw new Error('fastqueue concurrency must be equal to or greater than 1')\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n\n    get concurrency () {\n      return _concurrency\n    },\n    set concurrency (value) {\n      if (!(value >= 1)) {\n        throw new Error('fastqueue concurrency must be equal to or greater than 1')\n      }\n      _concurrency = value\n\n      if (self.paused) return\n      for (; queueHead && _running < _concurrency;) {\n        _running++\n        release()\n      }\n    },\n\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error,\n    abort: abort\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    if (queueHead === null) {\n      _running++\n      release()\n      return\n    }\n    for (; queueHead && _running < _concurrency;) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next && _running <= _concurrency) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function abort () {\n    var current = queueHead\n    queueHead = null\n    queueTail = null\n\n    while (current) {\n      var next = current.next\n      var callback = current.callback\n      var errorHandler = current.errorHandler\n      var val = current.value\n      var context = current.context\n\n      // Reset the task state\n      current.value = null\n      current.callback = noop\n      current.errorHandler = null\n\n      // Call error handler if present\n      if (errorHandler) {\n        errorHandler(new Error('abort'), val)\n      }\n\n      // Call callback with error\n      callback.call(context, new Error('abort'))\n\n      // Release the task back to the pool\n      current.release(current)\n\n      current = next\n    }\n\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  function asyncWrapper (arg, cb) {\n    worker.call(this, arg)\n      .then(function (res) {\n        cb(null, res)\n      }, cb)\n  }\n\n  var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n  var pushCb = queue.push\n  var unshiftCb = queue.unshift\n\n  queue.push = push\n  queue.unshift = unshift\n  queue.drained = drained\n\n  return queue\n\n  function push (value) {\n    var p = new Promise(function (resolve, reject) {\n      pushCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function unshift (value) {\n    var p = new Promise(function (resolve, reject) {\n      unshiftCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function drained () {\n    var p = new Promise(function (resolve) {\n      process.nextTick(function () {\n        if (queue.idle()) {\n          resolve()\n        } else {\n          var previousDrain = queue.drain\n          queue.drain = function () {\n            if (typeof previousDrain === 'function') previousDrain()\n            resolve()\n            queue.drain = previousDrain\n          }\n        }\n      })\n    })\n\n    return p\n  }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n    if (settings.errorFilter === null) {\n        return true;\n    }\n    return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n    return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n    return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n    if (a === '') {\n        return b;\n    }\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n    constructor(_root, _settings) {\n        super(_root, _settings);\n        this._settings = _settings;\n        this._scandir = fsScandir.scandir;\n        this._emitter = new events_1.EventEmitter();\n        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        this._queue.drain = () => {\n            if (!this._isFatalError) {\n                this._emitter.emit('end');\n            }\n        };\n    }\n    read() {\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        setImmediate(() => {\n            this._pushToQueue(this._root, this._settings.basePath);\n        });\n        return this._emitter;\n    }\n    get isDestroyed() {\n        return this._isDestroyed;\n    }\n    destroy() {\n        if (this._isDestroyed) {\n            throw new Error('The reader is already destroyed');\n        }\n        this._isDestroyed = true;\n        this._queue.killAndDrain();\n    }\n    onEntry(callback) {\n        this._emitter.on('entry', callback);\n    }\n    onError(callback) {\n        this._emitter.once('error', callback);\n    }\n    onEnd(callback) {\n        this._emitter.once('end', callback);\n    }\n    _pushToQueue(directory, base) {\n        const queueItem = { directory, base };\n        this._queue.push(queueItem, (error) => {\n            if (error !== null) {\n                this._handleError(error);\n            }\n        });\n    }\n    _worker(item, done) {\n        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n            if (error !== null) {\n                done(error, undefined);\n                return;\n            }\n            for (const entry of entries) {\n                this._handleEntry(entry, item.base);\n            }\n            done(null, undefined);\n        });\n    }\n    _handleError(error) {\n        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n            return;\n        }\n        this._isFatalError = true;\n        this._isDestroyed = true;\n        this._emitter.emit('error', error);\n    }\n    _handleEntry(entry, base) {\n        if (this._isDestroyed || this._isFatalError) {\n            return;\n        }\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._emitEntry(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _emitEntry(entry) {\n        this._emitter.emit('entry', entry);\n    }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._storage = [];\n    }\n    read(callback) {\n        this._reader.onError((error) => {\n            callFailureCallback(callback, error);\n        });\n        this._reader.onEntry((entry) => {\n            this._storage.push(entry);\n        });\n        this._reader.onEnd(() => {\n            callSuccessCallback(callback, this._storage);\n        });\n        this._reader.read();\n    }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n    callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._stream = new stream_1.Readable({\n            objectMode: true,\n            read: () => { },\n            destroy: () => {\n                if (!this._reader.isDestroyed) {\n                    this._reader.destroy();\n                }\n            }\n        });\n    }\n    read() {\n        this._reader.onError((error) => {\n            this._stream.emit('error', error);\n        });\n        this._reader.onEntry((entry) => {\n            this._stream.push(entry);\n        });\n        this._reader.onEnd(() => {\n            this._stream.push(null);\n        });\n        this._reader.read();\n        return this._stream;\n    }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._scandir = fsScandir.scandirSync;\n        this._storage = [];\n        this._queue = new Set();\n    }\n    read() {\n        this._pushToQueue(this._root, this._settings.basePath);\n        this._handleQueue();\n        return this._storage;\n    }\n    _pushToQueue(directory, base) {\n        this._queue.add({ directory, base });\n    }\n    _handleQueue() {\n        for (const item of this._queue.values()) {\n            this._handleDirectory(item.directory, item.base);\n        }\n    }\n    _handleDirectory(directory, base) {\n        try {\n            const entries = this._scandir(directory, this._settings.fsScandirSettings);\n            for (const entry of entries) {\n                this._handleEntry(entry, base);\n            }\n        }\n        catch (error) {\n            this._handleError(error);\n        }\n    }\n    _handleError(error) {\n        if (!common.isFatalError(this._settings, error)) {\n            return;\n        }\n        throw error;\n    }\n    _handleEntry(entry, base) {\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._pushToStorage(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _pushToStorage(entry) {\n        this._storage.push(entry);\n    }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new sync_1.default(this._root, this._settings);\n    }\n    read() {\n        return this._reader.read();\n    }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.basePath = this._getValue(this._options.basePath, undefined);\n        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n        this.deepFilter = this._getValue(this._options.deepFilter, null);\n        this.entryFilter = this._getValue(this._options.entryFilter, null);\n        this.errorFilter = this._getValue(this._options.errorFilter, null);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.fsScandirSettings = new fsScandir.Settings({\n            followSymbolicLinks: this._options.followSymbolicLinks,\n            fs: this._options.fs,\n            pathSegmentSeparator: this._options.pathSegmentSeparator,\n            stats: this._options.stats,\n            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n        return;\n    }\n    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new sync_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new stream_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n    constructor(_settings) {\n        this._settings = _settings;\n        this._fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n        });\n    }\n    _getFullEntryPath(filepath) {\n        return path.resolve(this._settings.cwd, filepath);\n    }\n    _makeEntry(stats, pattern) {\n        const entry = {\n            name: pattern,\n            path: pattern,\n            dirent: utils.fs.createDirentFromStats(pattern, stats)\n        };\n        if (this._settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    }\n    _isFatalError(error) {\n        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkStream = fsWalk.walkStream;\n        this._stat = fsStat.stat;\n    }\n    dynamic(root, options) {\n        return this._walkStream(root, options);\n    }\n    static(patterns, options) {\n        const filepaths = patterns.map(this._getFullEntryPath, this);\n        const stream = new stream_1.PassThrough({ objectMode: true });\n        stream._write = (index, _enc, done) => {\n            return this._getEntry(filepaths[index], patterns[index], options)\n                .then((entry) => {\n                if (entry !== null && options.entryFilter(entry)) {\n                    stream.push(entry);\n                }\n                if (index === filepaths.length - 1) {\n                    stream.end();\n                }\n                done();\n            })\n                .catch(done);\n        };\n        for (let i = 0; i < filepaths.length; i++) {\n            stream.write(i);\n        }\n        return stream;\n    }\n    _getEntry(filepath, pattern, options) {\n        return this._getStat(filepath)\n            .then((stats) => this._makeEntry(stats, pattern))\n            .catch((error) => {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        });\n    }\n    _getStat(filepath) {\n        return new Promise((resolve, reject) => {\n            this._stat(filepath, this._fsStatSettings, (error, stats) => {\n                return error === null ? resolve(stats) : reject(error);\n            });\n        });\n    }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkAsync = fsWalk.walk;\n        this._readerStream = new stream_1.default(this._settings);\n    }\n    dynamic(root, options) {\n        return new Promise((resolve, reject) => {\n            this._walkAsync(root, options, (error, entries) => {\n                if (error === null) {\n                    resolve(entries);\n                }\n                else {\n                    reject(error);\n                }\n            });\n        });\n    }\n    async static(patterns, options) {\n        const entries = [];\n        const stream = this._readerStream.static(patterns, options);\n        // After #235, replace it with an asynchronous iterator.\n        return new Promise((resolve, reject) => {\n            stream.once('error', reject);\n            stream.on('data', (entry) => entries.push(entry));\n            stream.once('end', () => resolve(entries));\n        });\n    }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n    constructor(_patterns, _settings, _micromatchOptions) {\n        this._patterns = _patterns;\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this._storage = [];\n        this._fillStorage();\n    }\n    _fillStorage() {\n        for (const pattern of this._patterns) {\n            const segments = this._getPatternSegments(pattern);\n            const sections = this._splitSegmentsIntoSections(segments);\n            this._storage.push({\n                complete: sections.length <= 1,\n                pattern,\n                segments,\n                sections\n            });\n        }\n    }\n    _getPatternSegments(pattern) {\n        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n        return parts.map((part) => {\n            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n            if (!dynamic) {\n                return {\n                    dynamic: false,\n                    pattern: part\n                };\n            }\n            return {\n                dynamic: true,\n                pattern: part,\n                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n            };\n        });\n    }\n    _splitSegmentsIntoSections(segments) {\n        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n    }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n    match(filepath) {\n        const parts = filepath.split('/');\n        const levels = parts.length;\n        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n        for (const pattern of patterns) {\n            const section = pattern.sections[0];\n            /**\n             * In this case, the pattern has a globstar and we must read all directories unconditionally,\n             * but only if the level has reached the end of the first group.\n             *\n             * fixtures/{a,b}/**\n             *  ^ true/false  ^ always true\n            */\n            if (!pattern.complete && levels > section.length) {\n                return true;\n            }\n            const match = parts.every((part, index) => {\n                const segment = pattern.segments[index];\n                if (segment.dynamic && segment.patternRe.test(part)) {\n                    return true;\n                }\n                if (!segment.dynamic && segment.pattern === part) {\n                    return true;\n                }\n                return false;\n            });\n            if (match) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n    }\n    getFilter(basePath, positive, negative) {\n        const matcher = this._getMatcher(positive);\n        const negativeRe = this._getNegativePatternsRe(negative);\n        return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n    }\n    _getMatcher(patterns) {\n        return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n    }\n    _getNegativePatternsRe(patterns) {\n        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n    }\n    _filter(basePath, entry, matcher, negativeRe) {\n        if (this._isSkippedByDeep(basePath, entry.path)) {\n            return false;\n        }\n        if (this._isSkippedSymbolicLink(entry)) {\n            return false;\n        }\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n            return false;\n        }\n        return this._isSkippedByNegativePatterns(filepath, negativeRe);\n    }\n    _isSkippedByDeep(basePath, entryPath) {\n        /**\n         * Avoid unnecessary depth calculations when it doesn't matter.\n         */\n        if (this._settings.deep === Infinity) {\n            return false;\n        }\n        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n    }\n    _getEntryLevel(basePath, entryPath) {\n        const entryPathDepth = entryPath.split('/').length;\n        if (basePath === '') {\n            return entryPathDepth;\n        }\n        const basePathDepth = basePath.split('/').length;\n        return entryPathDepth - basePathDepth;\n    }\n    _isSkippedSymbolicLink(entry) {\n        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n    }\n    _isSkippedByPositivePatterns(entryPath, matcher) {\n        return !this._settings.baseNameMatch && !matcher.match(entryPath);\n    }\n    _isSkippedByNegativePatterns(entryPath, patternsRe) {\n        return !utils.pattern.matchAny(entryPath, patternsRe);\n    }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this.index = new Map();\n    }\n    getFilter(positive, negative) {\n        const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n        const patterns = {\n            positive: {\n                all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n            },\n            negative: {\n                absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n                relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n            }\n        };\n        return (entry) => this._filter(entry, patterns);\n    }\n    _filter(entry, patterns) {\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n            return false;\n        }\n        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n            return false;\n        }\n        const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n        if (this._settings.unique && isMatched) {\n            this._createIndexRecord(filepath);\n        }\n        return isMatched;\n    }\n    _isDuplicateEntry(filepath) {\n        return this.index.has(filepath);\n    }\n    _createIndexRecord(filepath) {\n        this.index.set(filepath, undefined);\n    }\n    _onlyFileFilter(entry) {\n        return this._settings.onlyFiles && !entry.dirent.isFile();\n    }\n    _onlyDirectoryFilter(entry) {\n        return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n    }\n    _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n        const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n        if (!isMatched) {\n            return false;\n        }\n        const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n        if (isMatchedByRelativeNegative) {\n            return false;\n        }\n        const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n        if (isMatchedByAbsoluteNegative) {\n            return false;\n        }\n        return true;\n    }\n    _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n        return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n    }\n    _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        // Trying to match files and directories by patterns.\n        const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n        // A pattern with a trailling slash can be used for directory matching.\n        // To apply such pattern, we need to add a tralling slash to the path.\n        if (!isMatched && isDirectory) {\n            return utils.pattern.matchAny(filepath + '/', patternsRe);\n        }\n        return isMatched;\n    }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getFilter() {\n        return (error) => this._isNonFatalError(error);\n    }\n    _isNonFatalError(error) {\n        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n    }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getTransformer() {\n        return (entry) => this._transform(entry);\n    }\n    _transform(entry) {\n        let filepath = entry.path;\n        if (this._settings.absolute) {\n            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n            filepath = utils.path.unixify(filepath);\n        }\n        if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n            filepath += '/';\n        }\n        if (!this._settings.objectMode) {\n            return filepath;\n        }\n        return Object.assign(Object.assign({}, entry), { path: filepath });\n    }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n    constructor(_settings) {\n        this._settings = _settings;\n        this.errorFilter = new error_1.default(this._settings);\n        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n        this.entryTransformer = new entry_2.default(this._settings);\n    }\n    _getRootDirectory(task) {\n        return path.resolve(this._settings.cwd, task.base);\n    }\n    _getReaderOptions(task) {\n        const basePath = task.base === '.' ? '' : task.base;\n        return {\n            basePath,\n            pathSegmentSeparator: '/',\n            concurrency: this._settings.concurrency,\n            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n            errorFilter: this.errorFilter.getFilter(),\n            followSymbolicLinks: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            stats: this._settings.stats,\n            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n            transform: this.entryTransformer.getTransformer()\n        };\n    }\n    _getMicromatchOptions() {\n        return {\n            dot: this._settings.dot,\n            matchBase: this._settings.baseNameMatch,\n            nobrace: !this._settings.braceExpansion,\n            nocase: !this._settings.caseSensitiveMatch,\n            noext: !this._settings.extglob,\n            noglobstar: !this._settings.globstar,\n            posix: true,\n            strictSlashes: false\n        };\n    }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new async_1.default(this._settings);\n    }\n    async read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = await this.api(root, task, options);\n        return entries.map((entry) => options.transform(entry));\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new stream_2.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const source = this.api(root, task, options);\n        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n        source\n            .once('error', (error) => destination.emit('error', error))\n            .on('data', (entry) => destination.emit('data', options.transform(entry)))\n            .once('end', () => destination.emit('end'));\n        destination\n            .once('close', () => source.destroy());\n        return destination;\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkSync = fsWalk.walkSync;\n        this._statSync = fsStat.statSync;\n    }\n    dynamic(root, options) {\n        return this._walkSync(root, options);\n    }\n    static(patterns, options) {\n        const entries = [];\n        for (const pattern of patterns) {\n            const filepath = this._getFullEntryPath(pattern);\n            const entry = this._getEntry(filepath, pattern, options);\n            if (entry === null || !options.entryFilter(entry)) {\n                continue;\n            }\n            entries.push(entry);\n        }\n        return entries;\n    }\n    _getEntry(filepath, pattern, options) {\n        try {\n            const stats = this._getStat(filepath);\n            return this._makeEntry(stats, pattern);\n        }\n        catch (error) {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        }\n    }\n    _getStat(filepath) {\n        return this._statSync(filepath, this._fsStatSettings);\n    }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new sync_1.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = this.api(root, task, options);\n        return entries.map(options.transform);\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    lstatSync: fs.lstatSync,\n    stat: fs.stat,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.absolute = this._getValue(this._options.absolute, false);\n        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n        this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n        this.cwd = this._getValue(this._options.cwd, process.cwd());\n        this.deep = this._getValue(this._options.deep, Infinity);\n        this.dot = this._getValue(this._options.dot, false);\n        this.extglob = this._getValue(this._options.extglob, true);\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n        this.fs = this._getFileSystemMethods(this._options.fs);\n        this.globstar = this._getValue(this._options.globstar, true);\n        this.ignore = this._getValue(this._options.ignore, []);\n        this.markDirectories = this._getValue(this._options.markDirectories, false);\n        this.objectMode = this._getValue(this._options.objectMode, false);\n        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n        this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n        this.stats = this._getValue(this._options.stats, false);\n        this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n        this.unique = this._getValue(this._options.unique, true);\n        if (this.onlyDirectories) {\n            this.onlyFiles = false;\n        }\n        if (this.stats) {\n            this.objectMode = true;\n        }\n        // Remove the cast to the array in the next major (#404).\n        this.ignore = [].concat(this.ignore);\n    }\n    _getValue(option, value) {\n        return option === undefined ? value : option;\n    }\n    _getFileSystemMethods(methods = {}) {\n        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n    assertPatternsInput(source);\n    const works = getWorks(source, async_1.default, options);\n    const result = await Promise.all(works);\n    return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n    FastGlob.glob = FastGlob;\n    FastGlob.globSync = sync;\n    FastGlob.globStream = stream;\n    FastGlob.async = FastGlob;\n    function sync(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, sync_1.default, options);\n        return utils.array.flatten(works);\n    }\n    FastGlob.sync = sync;\n    function stream(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, stream_1.default, options);\n        /**\n         * The stream returned by the provider cannot work with an asynchronous iterator.\n         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n         * This affects performance (+25%). I don't see best solution right now.\n         */\n        return utils.stream.merge(works);\n    }\n    FastGlob.stream = stream;\n    function generateTasks(source, options) {\n        assertPatternsInput(source);\n        const patterns = [].concat(source);\n        const settings = new settings_1.default(options);\n        return taskManager.generate(patterns, settings);\n    }\n    FastGlob.generateTasks = generateTasks;\n    function isDynamicPattern(source, options) {\n        assertPatternsInput(source);\n        const settings = new settings_1.default(options);\n        return utils.pattern.isDynamicPattern(source, settings);\n    }\n    FastGlob.isDynamicPattern = isDynamicPattern;\n    function escapePath(source) {\n        assertPatternsInput(source);\n        return utils.path.escape(source);\n    }\n    FastGlob.escapePath = escapePath;\n    function convertPathToPattern(source) {\n        assertPatternsInput(source);\n        return utils.path.convertPathToPattern(source);\n    }\n    FastGlob.convertPathToPattern = convertPathToPattern;\n    let posix;\n    (function (posix) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapePosixPath(source);\n        }\n        posix.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertPosixPathToPattern(source);\n        }\n        posix.convertPathToPattern = convertPathToPattern;\n    })(posix = FastGlob.posix || (FastGlob.posix = {}));\n    let win32;\n    (function (win32) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapeWindowsPath(source);\n        }\n        win32.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertWindowsPathToPattern(source);\n        }\n        win32.convertPathToPattern = convertPathToPattern;\n    })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n    const patterns = [].concat(source);\n    const settings = new settings_1.default(options);\n    const tasks = taskManager.generate(patterns, settings);\n    const provider = new _Provider(settings);\n    return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n    const source = [].concat(input);\n    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n    if (!isValidSource) {\n        throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n    }\n}\nmodule.exports = FastGlob;\n","'use strict';\n\nexports.getBooleanOption = (options, key) => {\n\tlet value = false;\n\tif (key in options && typeof (value = options[key]) !== 'boolean') {\n\t\tthrow new TypeError(`Expected the \"${key}\" option to be a boolean`);\n\t}\n\treturn value;\n};\n\nexports.cppdb = Symbol();\nexports.inspect = Symbol.for('nodejs.util.inspect.custom');\n","'use strict';\nconst descriptor = { value: 'SqliteError', writable: true, enumerable: false, configurable: true };\n\nfunction SqliteError(message, code) {\n\tif (new.target !== SqliteError) {\n\t\treturn new SqliteError(message, code);\n\t}\n\tif (typeof code !== 'string') {\n\t\tthrow new TypeError('Expected second argument to be a string');\n\t}\n\tError.call(this, message);\n\tdescriptor.value = '' + message;\n\tObject.defineProperty(this, 'message', descriptor);\n\tError.captureStackTrace(this, SqliteError);\n\tthis.code = code;\n}\nObject.setPrototypeOf(SqliteError, Error);\nObject.setPrototypeOf(SqliteError.prototype, Error.prototype);\nObject.defineProperty(SqliteError.prototype, 'name', descriptor);\nmodule.exports = SqliteError;\n","\n/**\n * Module dependencies.\n */\n\nvar sep = require('path').sep || '/';\n\n/**\n * Module exports.\n */\n\nmodule.exports = fileUriToPath;\n\n/**\n * File URI to Path function.\n *\n * @param {String} uri\n * @return {String} path\n * @api public\n */\n\nfunction fileUriToPath (uri) {\n  if ('string' != typeof uri ||\n      uri.length <= 7 ||\n      'file://' != uri.substring(0, 7)) {\n    throw new TypeError('must pass in a file:// URI to convert to a file path');\n  }\n\n  var rest = decodeURI(uri.substring(7));\n  var firstSlash = rest.indexOf('/');\n  var host = rest.substring(0, firstSlash);\n  var path = rest.substring(firstSlash + 1);\n\n  // 2.  Scheme Definition\n  // As a special case, <host> can be the string \"localhost\" or the empty\n  // string; this is interpreted as \"the machine from which the URL is\n  // being interpreted\".\n  if ('localhost' == host) host = '';\n\n  if (host) {\n    host = sep + sep + host;\n  }\n\n  // 3.2  Drives, drive letters, mount points, file system root\n  // Drive letters are mapped into the top of a file URI in various ways,\n  // depending on the implementation; some applications substitute\n  // vertical bar (\"|\") for the colon after the drive letter, yielding\n  // \"file:///c|/tmp/test.txt\".  In some cases, the colon is left\n  // unchanged, as in \"file:///c:/tmp/test.txt\".  In other cases, the\n  // colon is simply omitted, as in \"file:///c/tmp/test.txt\".\n  path = path.replace(/^(.+)\\|/, '$1:');\n\n  // for Windows, we need to invert the path separators from what a URI uses\n  if (sep == '\\\\') {\n    path = path.replace(/\\//g, '\\\\');\n  }\n\n  if (/^.+\\:/.test(path)) {\n    // has Windows drive at beginning of path\n  } else {\n    // unix path…\n    path = sep + path;\n  }\n\n  return host + path;\n}\n","/**\n * Module dependencies.\n */\n\nvar fs = require('fs'),\n  path = require('path'),\n  fileURLToPath = require('file-uri-to-path'),\n  join = path.join,\n  dirname = path.dirname,\n  exists =\n    (fs.accessSync &&\n      function(path) {\n        try {\n          fs.accessSync(path);\n        } catch (e) {\n          return false;\n        }\n        return true;\n      }) ||\n    fs.existsSync ||\n    path.existsSync,\n  defaults = {\n    arrow: process.env.NODE_BINDINGS_ARROW || ' → ',\n    compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',\n    platform: process.platform,\n    arch: process.arch,\n    nodePreGyp:\n      'node-v' +\n      process.versions.modules +\n      '-' +\n      process.platform +\n      '-' +\n      process.arch,\n    version: process.versions.node,\n    bindings: 'bindings.node',\n    try: [\n      // node-gyp's linked version in the \"build\" dir\n      ['module_root', 'build', 'bindings'],\n      // node-waf and gyp_addon (a.k.a node-gyp)\n      ['module_root', 'build', 'Debug', 'bindings'],\n      ['module_root', 'build', 'Release', 'bindings'],\n      // Debug files, for development (legacy behavior, remove for node v0.9)\n      ['module_root', 'out', 'Debug', 'bindings'],\n      ['module_root', 'Debug', 'bindings'],\n      // Release files, but manually compiled (legacy behavior, remove for node v0.9)\n      ['module_root', 'out', 'Release', 'bindings'],\n      ['module_root', 'Release', 'bindings'],\n      // Legacy from node-waf, node <= 0.4.x\n      ['module_root', 'build', 'default', 'bindings'],\n      // Production \"Release\" buildtype binary (meh...)\n      ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],\n      // node-qbs builds\n      ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],\n      ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],\n      ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],\n      // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}\n      ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']\n    ]\n  };\n\n/**\n * The main `bindings()` function loads the compiled bindings for a given module.\n * It uses V8's Error API to determine the parent filename that this function is\n * being invoked from, which is then used to find the root directory.\n */\n\nfunction bindings(opts) {\n  // Argument surgery\n  if (typeof opts == 'string') {\n    opts = { bindings: opts };\n  } else if (!opts) {\n    opts = {};\n  }\n\n  // maps `defaults` onto `opts` object\n  Object.keys(defaults).map(function(i) {\n    if (!(i in opts)) opts[i] = defaults[i];\n  });\n\n  // Get the module root\n  if (!opts.module_root) {\n    opts.module_root = exports.getRoot(exports.getFileName());\n  }\n\n  // Ensure the given bindings name ends with .node\n  if (path.extname(opts.bindings) != '.node') {\n    opts.bindings += '.node';\n  }\n\n  // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035\n  var requireFunc =\n    typeof __webpack_require__ === 'function'\n      ? __non_webpack_require__\n      : require;\n\n  var tries = [],\n    i = 0,\n    l = opts.try.length,\n    n,\n    b,\n    err;\n\n  for (; i < l; i++) {\n    n = join.apply(\n      null,\n      opts.try[i].map(function(p) {\n        return opts[p] || p;\n      })\n    );\n    tries.push(n);\n    try {\n      b = opts.path ? requireFunc.resolve(n) : requireFunc(n);\n      if (!opts.path) {\n        b.path = n;\n      }\n      return b;\n    } catch (e) {\n      if (e.code !== 'MODULE_NOT_FOUND' &&\n          e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&\n          !/not find/i.test(e.message)) {\n        throw e;\n      }\n    }\n  }\n\n  err = new Error(\n    'Could not locate the bindings file. Tried:\\n' +\n      tries\n        .map(function(a) {\n          return opts.arrow + a;\n        })\n        .join('\\n')\n  );\n  err.tries = tries;\n  throw err;\n}\nmodule.exports = exports = bindings;\n\n/**\n * Gets the filename of the JavaScript file that invokes this function.\n * Used to help find the root directory of a module.\n * Optionally accepts an filename argument to skip when searching for the invoking filename\n */\n\nexports.getFileName = function getFileName(calling_file) {\n  var origPST = Error.prepareStackTrace,\n    origSTL = Error.stackTraceLimit,\n    dummy = {},\n    fileName;\n\n  Error.stackTraceLimit = 10;\n\n  Error.prepareStackTrace = function(e, st) {\n    for (var i = 0, l = st.length; i < l; i++) {\n      fileName = st[i].getFileName();\n      if (fileName !== __filename) {\n        if (calling_file) {\n          if (fileName !== calling_file) {\n            return;\n          }\n        } else {\n          return;\n        }\n      }\n    }\n  };\n\n  // run the 'prepareStackTrace' function above\n  Error.captureStackTrace(dummy);\n  dummy.stack;\n\n  // cleanup\n  Error.prepareStackTrace = origPST;\n  Error.stackTraceLimit = origSTL;\n\n  // handle filename that starts with \"file://\"\n  var fileSchema = 'file://';\n  if (fileName.indexOf(fileSchema) === 0) {\n    fileName = fileURLToPath(fileName);\n  }\n\n  return fileName;\n};\n\n/**\n * Gets the root directory of a module, given an arbitrary filename\n * somewhere in the module tree. The \"root directory\" is the directory\n * containing the `package.json` file.\n *\n *   In:  /home/nate/node-native-module/lib/index.js\n *   Out: /home/nate/node-native-module\n */\n\nexports.getRoot = function getRoot(file) {\n  var dir = dirname(file),\n    prev;\n  while (true) {\n    if (dir === '.') {\n      // Avoids an infinite loop in rare cases, like the REPL\n      dir = process.cwd();\n    }\n    if (\n      exists(join(dir, 'package.json')) ||\n      exists(join(dir, 'node_modules'))\n    ) {\n      // Found the 'package.json' file or 'node_modules' dir; we're done\n      return dir;\n    }\n    if (prev === dir) {\n      // Got to the top\n      throw new Error(\n        'Could not find module root given file: \"' +\n          file +\n          '\". Do you have a `package.json` file? '\n      );\n    }\n    // Try the parent dir next\n    prev = dir;\n    dir = join(dir, '..');\n  }\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nexports.prepare = function prepare(sql) {\n\treturn this[cppdb].prepare(sql, this, false);\n};\n\nexports.exec = function exec(sql) {\n\tthis[cppdb].exec(sql);\n\treturn this;\n};\n\nexports.close = function close() {\n\tthis[cppdb].close();\n\treturn this;\n};\n\nexports.loadExtension = function loadExtension(...args) {\n\tthis[cppdb].loadExtension(...args);\n\treturn this;\n};\n\nexports.defaultSafeIntegers = function defaultSafeIntegers(...args) {\n\tthis[cppdb].defaultSafeIntegers(...args);\n\treturn this;\n};\n\nexports.unsafeMode = function unsafeMode(...args) {\n\tthis[cppdb].unsafeMode(...args);\n\treturn this;\n};\n\nexports.getters = {\n\tname: {\n\t\tget: function name() { return this[cppdb].name; },\n\t\tenumerable: true,\n\t},\n\topen: {\n\t\tget: function open() { return this[cppdb].open; },\n\t\tenumerable: true,\n\t},\n\tinTransaction: {\n\t\tget: function inTransaction() { return this[cppdb].inTransaction; },\n\t\tenumerable: true,\n\t},\n\treadonly: {\n\t\tget: function readonly() { return this[cppdb].readonly; },\n\t\tenumerable: true,\n\t},\n\tmemory: {\n\t\tget: function memory() { return this[cppdb].memory; },\n\t\tenumerable: true,\n\t},\n};\n","'use strict';\nconst { cppdb } = require('../util');\nconst controllers = new WeakMap();\n\nmodule.exports = function transaction(fn) {\n\tif (typeof fn !== 'function') throw new TypeError('Expected first argument to be a function');\n\n\tconst db = this[cppdb];\n\tconst controller = getController(db, this);\n\tconst { apply } = Function.prototype;\n\n\t// Each version of the transaction function has these same properties\n\tconst properties = {\n\t\tdefault: { value: wrapTransaction(apply, fn, db, controller.default) },\n\t\tdeferred: { value: wrapTransaction(apply, fn, db, controller.deferred) },\n\t\timmediate: { value: wrapTransaction(apply, fn, db, controller.immediate) },\n\t\texclusive: { value: wrapTransaction(apply, fn, db, controller.exclusive) },\n\t\tdatabase: { value: this, enumerable: true },\n\t};\n\n\tObject.defineProperties(properties.default.value, properties);\n\tObject.defineProperties(properties.deferred.value, properties);\n\tObject.defineProperties(properties.immediate.value, properties);\n\tObject.defineProperties(properties.exclusive.value, properties);\n\n\t// Return the default version of the transaction function\n\treturn properties.default.value;\n};\n\n// Return the database's cached transaction controller, or create a new one\nconst getController = (db, self) => {\n\tlet controller = controllers.get(db);\n\tif (!controller) {\n\t\tconst shared = {\n\t\t\tcommit: db.prepare('COMMIT', self, false),\n\t\t\trollback: db.prepare('ROLLBACK', self, false),\n\t\t\tsavepoint: db.prepare('SAVEPOINT `\\t_bs3.\\t`', self, false),\n\t\t\trelease: db.prepare('RELEASE `\\t_bs3.\\t`', self, false),\n\t\t\trollbackTo: db.prepare('ROLLBACK TO `\\t_bs3.\\t`', self, false),\n\t\t};\n\t\tcontrollers.set(db, controller = {\n\t\t\tdefault: Object.assign({ begin: db.prepare('BEGIN', self, false) }, shared),\n\t\t\tdeferred: Object.assign({ begin: db.prepare('BEGIN DEFERRED', self, false) }, shared),\n\t\t\timmediate: Object.assign({ begin: db.prepare('BEGIN IMMEDIATE', self, false) }, shared),\n\t\t\texclusive: Object.assign({ begin: db.prepare('BEGIN EXCLUSIVE', self, false) }, shared),\n\t\t});\n\t}\n\treturn controller;\n};\n\n// Return a new transaction function by wrapping the given function\nconst wrapTransaction = (apply, fn, db, { begin, commit, rollback, savepoint, release, rollbackTo }) => function sqliteTransaction() {\n\tlet before, after, undo;\n\tif (db.inTransaction) {\n\t\tbefore = savepoint;\n\t\tafter = release;\n\t\tundo = rollbackTo;\n\t} else {\n\t\tbefore = begin;\n\t\tafter = commit;\n\t\tundo = rollback;\n\t}\n\tbefore.run();\n\ttry {\n\t\tconst result = apply.call(fn, this, arguments);\n\t\tif (result && typeof result.then === 'function') {\n\t\t\tthrow new TypeError('Transaction function cannot return a promise');\n\t\t}\n\t\tafter.run();\n\t\treturn result;\n\t} catch (ex) {\n\t\tif (db.inTransaction) {\n\t\t\tundo.run();\n\t\t\tif (undo !== rollback) after.run();\n\t\t}\n\t\tthrow ex;\n\t}\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function pragma(source, options) {\n\tif (options == null) options = {};\n\tif (typeof source !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tconst simple = getBooleanOption(options, 'simple');\n\n\tconst stmt = this[cppdb].prepare(`PRAGMA ${source}`, this, true);\n\treturn simple ? stmt.pluck().get() : stmt.all();\n};\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst { promisify } = require('util');\nconst { cppdb } = require('../util');\nconst fsAccess = promisify(fs.access);\n\nmodule.exports = async function backup(filename, options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filename !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\n\t// Interpret options\n\tfilename = filename.trim();\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tconst handler = 'progress' in options ? options.progress : null;\n\n\t// Validate interpreted options\n\tif (!filename) throw new TypeError('Backup filename cannot be an empty string');\n\tif (filename === ':memory:') throw new TypeError('Invalid backup filename \":memory:\"');\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\tif (handler != null && typeof handler !== 'function') throw new TypeError('Expected the \"progress\" option to be a function');\n\n\t// Make sure the specified directory exists\n\tawait fsAccess(path.dirname(filename)).catch(() => {\n\t\tthrow new TypeError('Cannot save backup because the directory does not exist');\n\t});\n\n\tconst isNewFile = await fsAccess(filename).then(() => false, () => true);\n\treturn runBackup(this[cppdb].backup(this, attachedName, filename, isNewFile), handler || null);\n};\n\nconst runBackup = (backup, handler) => {\n\tlet rate = 0;\n\tlet useDefault = true;\n\n\treturn new Promise((resolve, reject) => {\n\t\tsetImmediate(function step() {\n\t\t\ttry {\n\t\t\t\tconst progress = backup.transfer(rate);\n\t\t\t\tif (!progress.remainingPages) {\n\t\t\t\t\tbackup.close();\n\t\t\t\t\tresolve(progress);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (useDefault) {\n\t\t\t\t\tuseDefault = false;\n\t\t\t\t\trate = 100;\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\tconst ret = handler(progress);\n\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\tif (typeof ret === 'number' && ret === ret) rate = Math.max(0, Math.min(0x7fffffff, Math.round(ret)));\n\t\t\t\t\t\telse throw new TypeError('Expected progress callback to return a number or undefined');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetImmediate(step);\n\t\t\t} catch (err) {\n\t\t\t\tbackup.close();\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t});\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function serialize(options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof options !== 'object') throw new TypeError('Expected first argument to be an options object');\n\n\t// Interpret and validate options\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\n\treturn this[cppdb].serialize(attachedName);\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineFunction(name, options, fn) {\n\t// Apply defaults\n\tif (options == null) options = {};\n\tif (typeof options === 'function') { fn = options; options = {}; }\n\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof fn !== 'function') throw new TypeError('Expected last argument to be a function');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = fn.length;\n\t\tif (!Number.isInteger(argCount) || argCount < 0) throw new TypeError('Expected function.length to be a positive integer');\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].function(fn, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineAggregate(name, options) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object' || options === null) throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst start = 'start' in options ? options.start : null;\n\tconst step = getFunctionOption(options, 'step', true);\n\tconst inverse = getFunctionOption(options, 'inverse', false);\n\tconst result = getFunctionOption(options, 'result', false);\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = Math.max(getLength(step), inverse ? getLength(inverse) : 0);\n\t\tif (argCount > 0) argCount -= 1;\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].aggregate(start, step, inverse, result, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n\nconst getFunctionOption = (options, key, required) => {\n\tconst value = key in options ? options[key] : null;\n\tif (typeof value === 'function') return value;\n\tif (value != null) throw new TypeError(`Expected the \"${key}\" option to be a function`);\n\tif (required) throw new TypeError(`Missing required option \"${key}\"`);\n\treturn null;\n};\n\nconst getLength = ({ length }) => {\n\tif (Number.isInteger(length) && length >= 0) return length;\n\tthrow new TypeError('Expected function.length to be a positive integer');\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function defineTable(name, factory) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (!name) throw new TypeError('Virtual table module name cannot be an empty string');\n\n\t// Determine whether the module is eponymous-only or not\n\tlet eponymous = false;\n\tif (typeof factory === 'object' && factory !== null) {\n\t\teponymous = true;\n\t\tfactory = defer(parseTableDefinition(factory, 'used', name));\n\t} else {\n\t\tif (typeof factory !== 'function') throw new TypeError('Expected second argument to be a function or a table definition object');\n\t\tfactory = wrapFactory(factory);\n\t}\n\n\tthis[cppdb].table(factory, name, eponymous);\n\treturn this;\n};\n\nfunction wrapFactory(factory) {\n\treturn function virtualTableFactory(moduleName, databaseName, tableName, ...args) {\n\t\tconst thisObject = {\n\t\t\tmodule: moduleName,\n\t\t\tdatabase: databaseName,\n\t\t\ttable: tableName,\n\t\t};\n\n\t\t// Generate a new table definition by invoking the factory\n\t\tconst def = apply.call(factory, thisObject, args);\n\t\tif (typeof def !== 'object' || def === null) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" did not return a table definition object`);\n\t\t}\n\n\t\treturn parseTableDefinition(def, 'returned', moduleName);\n\t};\n}\n\nfunction parseTableDefinition(def, verb, moduleName) {\n\t// Validate required properties\n\tif (!hasOwnProperty.call(def, 'rows')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"rows\" property`);\n\t}\n\tif (!hasOwnProperty.call(def, 'columns')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"columns\" property`);\n\t}\n\n\t// Validate \"rows\" property\n\tconst rows = def.rows;\n\tif (typeof rows !== 'function' || Object.getPrototypeOf(rows) !== GeneratorFunctionPrototype) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"rows\" property (should be a generator function)`);\n\t}\n\n\t// Validate \"columns\" property\n\tlet columns = def.columns;\n\tif (!Array.isArray(columns) || !(columns = [...columns]).every(x => typeof x === 'string')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"columns\" property (should be an array of strings)`);\n\t}\n\tif (columns.length !== new Set(columns).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate column names`);\n\t}\n\tif (!columns.length) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with zero columns`);\n\t}\n\n\t// Validate \"parameters\" property\n\tlet parameters;\n\tif (hasOwnProperty.call(def, 'parameters')) {\n\t\tparameters = def.parameters;\n\t\tif (!Array.isArray(parameters) || !(parameters = [...parameters]).every(x => typeof x === 'string')) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"parameters\" property (should be an array of strings)`);\n\t\t}\n\t} else {\n\t\tparameters = inferParameters(rows);\n\t}\n\tif (parameters.length !== new Set(parameters).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate parameter names`);\n\t}\n\tif (parameters.length > 32) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with more than the maximum number of 32 parameters`);\n\t}\n\tfor (const parameter of parameters) {\n\t\tif (columns.includes(parameter)) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with column \"${parameter}\" which was ambiguously defined as both a column and parameter`);\n\t\t}\n\t}\n\n\t// Validate \"safeIntegers\" option\n\tlet safeIntegers = 2;\n\tif (hasOwnProperty.call(def, 'safeIntegers')) {\n\t\tconst bool = def.safeIntegers;\n\t\tif (typeof bool !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"safeIntegers\" property (should be a boolean)`);\n\t\t}\n\t\tsafeIntegers = +bool;\n\t}\n\n\t// Validate \"directOnly\" option\n\tlet directOnly = false;\n\tif (hasOwnProperty.call(def, 'directOnly')) {\n\t\tdirectOnly = def.directOnly;\n\t\tif (typeof directOnly !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"directOnly\" property (should be a boolean)`);\n\t\t}\n\t}\n\n\t// Generate SQL for the virtual table definition\n\tconst columnDefinitions = [\n\t\t...parameters.map(identifier).map(str => `${str} HIDDEN`),\n\t\t...columns.map(identifier),\n\t];\n\treturn [\n\t\t`CREATE TABLE x(${columnDefinitions.join(', ')});`,\n\t\twrapGenerator(rows, new Map(columns.map((x, i) => [x, parameters.length + i])), moduleName),\n\t\tparameters,\n\t\tsafeIntegers,\n\t\tdirectOnly,\n\t];\n}\n\nfunction wrapGenerator(generator, columnMap, moduleName) {\n\treturn function* virtualTable(...args) {\n\t\t/*\n\t\t\tWe must defensively clone any buffers in the arguments, because\n\t\t\totherwise the generator could mutate one of them, which would cause\n\t\t\tus to return incorrect values for hidden columns, potentially\n\t\t\tcorrupting the database.\n\t\t */\n\t\tconst output = args.map(x => Buffer.isBuffer(x) ? Buffer.from(x) : x);\n\t\tfor (let i = 0; i < columnMap.size; ++i) {\n\t\t\toutput.push(null); // Fill with nulls to prevent gaps in array (v8 optimization)\n\t\t}\n\t\tfor (const row of generator(...args)) {\n\t\t\tif (Array.isArray(row)) {\n\t\t\t\textractRowArray(row, output, columnMap.size, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else if (typeof row === 'object' && row !== null) {\n\t\t\t\textractRowObject(row, output, columnMap, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded something that isn't a valid row object`);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction extractRowArray(row, output, columnCount, moduleName) {\n\tif (row.length !== columnCount) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an incorrect number of columns`);\n\t}\n\tconst offset = output.length - columnCount;\n\tfor (let i = 0; i < columnCount; ++i) {\n\t\toutput[i + offset] = row[i];\n\t}\n}\n\nfunction extractRowObject(row, output, columnMap, moduleName) {\n\tlet count = 0;\n\tfor (const key of Object.keys(row)) {\n\t\tconst index = columnMap.get(key);\n\t\tif (index === undefined) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an undeclared column \"${key}\"`);\n\t\t}\n\t\toutput[index] = row[key];\n\t\tcount += 1;\n\t}\n\tif (count !== columnMap.size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with missing columns`);\n\t}\n}\n\nfunction inferParameters({ length }) {\n\tif (!Number.isInteger(length) || length < 0) {\n\t\tthrow new TypeError('Expected function.length to be a positive integer');\n\t}\n\tconst params = [];\n\tfor (let i = 0; i < length; ++i) {\n\t\tparams.push(`$${i + 1}`);\n\t}\n\treturn params;\n}\n\nconst { hasOwnProperty } = Object.prototype;\nconst { apply } = Function.prototype;\nconst GeneratorFunctionPrototype = Object.getPrototypeOf(function*(){});\nconst identifier = str => `\"${str.replace(/\"/g, '\"\"')}\"`;\nconst defer = x => () => x;\n","'use strict';\nconst DatabaseInspection = function Database() {};\n\nmodule.exports = function inspect(depth, opts) {\n\treturn Object.assign(new DatabaseInspection(), this);\n};\n\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst util = require('./util');\nconst SqliteError = require('./sqlite-error');\n\nlet DEFAULT_ADDON;\n\nfunction Database(filenameGiven, options) {\n\tif (new.target == null) {\n\t\treturn new Database(filenameGiven, options);\n\t}\n\n\t// Apply defaults\n\tlet buffer;\n\tif (Buffer.isBuffer(filenameGiven)) {\n\t\tbuffer = filenameGiven;\n\t\tfilenameGiven = ':memory:';\n\t}\n\tif (filenameGiven == null) filenameGiven = '';\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filenameGiven !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif ('readOnly' in options) throw new TypeError('Misspelled option \"readOnly\" should be \"readonly\"');\n\tif ('memory' in options) throw new TypeError('Option \"memory\" was removed in v7.0.0 (use \":memory:\" filename instead)');\n\n\t// Interpret options\n\tconst filename = filenameGiven.trim();\n\tconst anonymous = filename === '' || filename === ':memory:';\n\tconst readonly = util.getBooleanOption(options, 'readonly');\n\tconst fileMustExist = util.getBooleanOption(options, 'fileMustExist');\n\tconst timeout = 'timeout' in options ? options.timeout : 5000;\n\tconst verbose = 'verbose' in options ? options.verbose : null;\n\tconst nativeBinding = 'nativeBinding' in options ? options.nativeBinding : null;\n\n\t// Validate interpreted options\n\tif (readonly && anonymous && !buffer) throw new TypeError('In-memory/temporary databases cannot be readonly');\n\tif (!Number.isInteger(timeout) || timeout < 0) throw new TypeError('Expected the \"timeout\" option to be a positive integer');\n\tif (timeout > 0x7fffffff) throw new RangeError('Option \"timeout\" cannot be greater than 2147483647');\n\tif (verbose != null && typeof verbose !== 'function') throw new TypeError('Expected the \"verbose\" option to be a function');\n\tif (nativeBinding != null && typeof nativeBinding !== 'string' && typeof nativeBinding !== 'object') throw new TypeError('Expected the \"nativeBinding\" option to be a string or addon object');\n\n\t// Load the native addon\n\tlet addon;\n\tif (nativeBinding == null) {\n\t\taddon = DEFAULT_ADDON || (DEFAULT_ADDON = require('bindings')('better_sqlite3.node'));\n\t} else if (typeof nativeBinding === 'string') {\n\t\t// See <https://webpack.js.org/api/module-variables/#__non_webpack_require__-webpack-specific>\n\t\tconst requireFunc = typeof __non_webpack_require__ === 'function' ? __non_webpack_require__ : require;\n\t\taddon = requireFunc(path.resolve(nativeBinding).replace(/(\\.node)?$/, '.node'));\n\t} else {\n\t\t// See <https://github.com/WiseLibs/better-sqlite3/issues/972>\n\t\taddon = nativeBinding;\n\t}\n\n\tif (!addon.isInitialized) {\n\t\taddon.setErrorConstructor(SqliteError);\n\t\taddon.isInitialized = true;\n\t}\n\n\t// Make sure the specified directory exists\n\tif (!anonymous && !fs.existsSync(path.dirname(filename))) {\n\t\tthrow new TypeError('Cannot open database because the directory does not exist');\n\t}\n\n\tObject.defineProperties(this, {\n\t\t[util.cppdb]: { value: new addon.Database(filename, filenameGiven, anonymous, readonly, fileMustExist, timeout, verbose || null, buffer || null) },\n\t\t...wrappers.getters,\n\t});\n}\n\nconst wrappers = require('./methods/wrappers');\nDatabase.prototype.prepare = wrappers.prepare;\nDatabase.prototype.transaction = require('./methods/transaction');\nDatabase.prototype.pragma = require('./methods/pragma');\nDatabase.prototype.backup = require('./methods/backup');\nDatabase.prototype.serialize = require('./methods/serialize');\nDatabase.prototype.function = require('./methods/function');\nDatabase.prototype.aggregate = require('./methods/aggregate');\nDatabase.prototype.table = require('./methods/table');\nDatabase.prototype.loadExtension = wrappers.loadExtension;\nDatabase.prototype.exec = wrappers.exec;\nDatabase.prototype.close = wrappers.close;\nDatabase.prototype.defaultSafeIntegers = wrappers.defaultSafeIntegers;\nDatabase.prototype.unsafeMode = wrappers.unsafeMode;\nDatabase.prototype[util.inspect] = require('./methods/inspect');\n\nmodule.exports = Database;\n","'use strict';\nmodule.exports = require('./database');\nmodule.exports.SqliteError = require('./sqlite-error');\n","import { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nimport packageJson from \"../package.json\";\nimport { registerLoginCommand } from \"./commands/login.js\";\nimport { registerLogoutCommand } from \"./commands/logout.js\";\nimport { registerWhoamiCommand } from \"./commands/whoami.js\";\nimport { registerMobileCommands } from \"./commands/mobile.js\";\nimport { registerSetupCommand } from \"./commands/setup.js\";\nimport { registerCollabCommands } from \"./commands/collab.js\";\nimport { registerDirectoryCommands } from \"./commands/directory.js\";\nimport { registerAccessCommands } from \"./commands/access.js\";\nimport { registerAgentCommands } from \"./commands/agent.js\";\nimport { registerOpsCommands } from \"./commands/ops.js\";\nimport { registerClaudeCommands } from \"./commands/claude.js\";\nimport { registerCursorCommands } from \"./commands/cursor.js\";\nimport { registerCodexCommands } from \"./commands/codex.js\";\nimport { registerHistoryCommands } from \"./commands/history.js\";\nimport { registerPreviewCommand } from \"./commands/preview.js\";\nimport { registerShareLinkCommand } from \"./commands/shareLink.js\";\nimport { registerGithubCommands } from \"./commands/github.js\";\nimport { CliError } from \"./errors/cliError.js\";\nimport { flushTelemetry, initTelemetry, trackEvent } from \"./services/telemetry.js\";\n\n// Injected at build time by tsup's `define` config (see tsup.config.ts).\n// Avoids any runtime filesystem/module-graph lookup of package.json,\n// which is fragile under bundling: ESM `import.meta.url` is undefined\n// in CJS output, and `__dirname` points inside the bundle in dev but\n// inside `Contents/Resources/cli/` once the desktop app stages it,\n// where no `package.json` lives next to the binary.\ndeclare const __REMIX_CLI_VERSION__: string;\ndeclare const require: NodeJS.Require | undefined;\ndeclare const module: NodeJS.Module | undefined;\nconst version = typeof __REMIX_CLI_VERSION__ === \"string\" ? __REMIX_CLI_VERSION__ : packageJson.version;\n\nexport function createProgram(): Command {\n  const program = new Command();\n  program\n    .name(\"remix\")\n    .description(\"Remix CLI\")\n    .version(version);\n\n  registerLoginCommand(program);\n  registerWhoamiCommand(program);\n  registerLogoutCommand(program);\n  registerMobileCommands(program);\n  registerSetupCommand(program);\n  registerCollabCommands(program);\n  registerDirectoryCommands(program);\n  registerAccessCommands(program);\n  registerAgentCommands(program);\n  registerOpsCommands(program);\n  registerClaudeCommands(program);\n  registerCursorCommands(program);\n  registerCodexCommands(program);\n  registerHistoryCommands(program);\n  registerPreviewCommand(program);\n  registerShareLinkCommand(program);\n  registerGithubCommands(program);\n\n  program.configureOutput({\n    outputError: (str, write) => write(pc.red(str)),\n  });\n\n  return program;\n}\n\n// Derive the user-facing command path from argv. We ignore option flags\n// and stop at the first non-flag token sequence so e.g. `remix collab\n// invites accept --id X` becomes \"collab invites accept\". This is best-\n// effort — we only need it as an event property, not for routing.\nfunction inferCommandPath(argv: string[]): string {\n  const tokens: string[] = [];\n  for (let i = 2; i < argv.length; i++) {\n    const t = argv[i];\n    if (!t) break;\n    if (t.startsWith(\"-\")) break;\n    tokens.push(t);\n    if (tokens.length >= 4) break;\n  }\n  return tokens.join(\" \") || \"(none)\";\n}\n\nexport async function main(argv: string[]) {\n  // Init is fire-and-forget; we don't await it so unrelated commands\n  // never feel a startup penalty. Telemetry's `trackEvent` no-ops until\n  // init resolves, which is fine — early events would just be dropped,\n  // and we explicitly emit the lifecycle events at end-of-process.\n  void initTelemetry();\n\n  const program = createProgram();\n  const startedAt = Date.now();\n  const command = inferCommandPath(argv);\n  let outcome: \"success\" | \"user_error\" | \"error\" = \"success\";\n  let errorMessage: string | undefined;\n\n  try {\n    await program.parseAsync(argv);\n  } catch (err) {\n    const e = err as unknown;\n    if (e instanceof CliError) {\n      outcome = \"user_error\";\n      errorMessage = e.message;\n      console.error(pc.red(`Error: ${e.message}`));\n      if (e.hint) console.error(pc.dim(e.hint));\n      process.exitCode = e.exitCode;\n    } else {\n      outcome = \"error\";\n      errorMessage = (e as Error)?.message ?? String(e);\n      console.error(pc.red(`Unexpected error: ${errorMessage}`));\n      process.exitCode = 1;\n    }\n  } finally {\n    // Ensure init has had a chance to resolve before we emit + flush.\n    await initTelemetry();\n    trackEvent(\"CLI Command Run\", {\n      command,\n      outcome,\n      exit_code: process.exitCode ?? 0,\n      duration_ms: Date.now() - startedAt,\n      error_message: errorMessage,\n      cli_version: version,\n      node_version: process.versions.node,\n      platform: process.platform,\n      arch: process.arch,\n    });\n    await flushTelemetry();\n  }\n}\n\nexport function isCliEntrypoint(argvPath: string | undefined, moduleUrl: string): boolean {\n  if (!argvPath) return false;\n  try {\n    return realpathSync(argvPath) === realpathSync(fileURLToPath(moduleUrl));\n  } catch {\n    return false;\n  }\n}\n\nfunction isCommonJsEntrypoint(): boolean {\n  return typeof require === \"function\" && typeof module !== \"undefined\" && require.main === module;\n}\n\nfunction isSourceEntrypoint(argvPath: string | undefined): boolean {\n  if (!argvPath) return false;\n  const normalized = argvPath.replace(/\\\\/g, \"/\");\n  return normalized.endsWith(\"/src/cli.ts\") || normalized.endsWith(\"/src/cli.js\");\n}\n\nif (isCommonJsEntrypoint() || isSourceEntrypoint(process.argv[1])) {\n  void main(process.argv);\n}\n\n\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n  program,\n  createCommand,\n  createArgument,\n  createOption,\n  CommanderError,\n  InvalidArgumentError,\n  InvalidOptionArgumentError, // deprecated old name\n  Command,\n  Argument,\n  Option,\n  Help,\n} = commander;\n","import type { Command } from \"commander\";\nimport pc from \"picocolors\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { startOAuthCallbackServer } from \"../services/oauthCallbackServer.js\";\nimport { openBrowser } from \"../utils/browser.js\";\nimport { createRemixAuthHelpers } from \"../clients/auth.js\";\nimport { clearSession, setSession } from \"../services/sessionStore.js\";\nimport { setTelemetryUser, trackEvent } from \"../services/telemetry.js\";\nimport { createApiClient } from \"../clients/api.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport { exchangeCodeWithContinuations } from \"../services/authContinuation.js\";\n\ntype LoginProvider = \"email\" | \"google\" | \"github\";\n\nexport function parseLoginProvider(value: unknown): LoginProvider {\n  const providerRaw = typeof value === \"string\" ? value.trim().toLowerCase() : \"email\";\n  if (providerRaw !== \"email\" && providerRaw !== \"google\" && providerRaw !== \"github\") {\n    throw new CliError(\"Invalid --provider value\", {\n      exitCode: 2,\n      hint: \"Use --provider email, --provider google, or --provider github.\",\n    });\n  }\n  return providerRaw;\n}\n\nexport function registerLoginCommand(program: Command) {\n  program\n    .command(\"login\")\n    .description(\"Sign in to Remix\")\n    .option(\"--no-browser\", \"Do not open a browser; print the URL\")\n    .option(\"--port <port>\", \"Local callback port (default: random available port)\")\n    .option(\"--provider <provider>\", \"Auth provider: email, google, or github\", \"email\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const config = await resolveConfig({\n        yes: Boolean(opts.yes),\n      });\n      const portRaw = typeof opts.port === \"string\" ? opts.port.trim() : \"\";\n      let port: number | null = null;\n      if (portRaw) {\n        const parsed = Number(portRaw);\n        if (!Number.isFinite(parsed) || parsed <= 0 || !Number.isInteger(parsed)) {\n          throw new CliError(\"Invalid --port value\", { exitCode: 2, hint: \"Example: --port 8085\" });\n        }\n        port = parsed;\n      }\n      const provider = parseLoginProvider(opts.provider);\n\n      const server = await startOAuthCallbackServer({ port });\n      try {\n        const auth = createRemixAuthHelpers(config);\n        const authProvider = provider === \"email\" ? \"authkit\" : provider;\n        const { url, codeVerifier } = await auth.startLogin({\n          redirectTo: server.redirectTo,\n          state: server.state,\n          provider: authProvider,\n        });\n\n        const shouldOpenBrowser = Boolean((opts as any).browser ?? true);\n        if (shouldOpenBrowser) {\n          try {\n            await openBrowser(url);\n            console.log(pc.dim(\"Opened a browser for sign-in.\"));\n          } catch (err) {\n            console.error(pc.yellow(\"Could not open a browser automatically.\"));\n            console.error(pc.dim((err as Error)?.message ?? String(err)));\n            console.log(`Open this URL in a browser:\\n${url}`);\n          }\n        } else {\n          console.log(`Open this URL to sign in:\\n${url}`);\n        }\n\n        const code = await server.waitForCode();\n        const session = await exchangeCodeWithContinuations({\n          auth,\n          code,\n          codeVerifier,\n          interactive: isInteractive(),\n          json: Boolean(opts.json),\n          yes: Boolean(opts.yes),\n        });\n        await setSession(session);\n\n        let me: unknown = null;\n        try {\n          const api = createApiClient(config);\n          me = await api.getMe();\n        } catch (err) {\n          await clearSession().catch(() => {});\n          throw err;\n        }\n\n        const profile = (me as any)?.responseObject as { id?: string; email?: string | null } | undefined;\n        if (profile?.id) setTelemetryUser(profile.id);\n        else if (session?.user?.id) setTelemetryUser(session.user.id);\n        trackEvent(\"CLI Logged In\", {\n          method: provider,\n          has_email: Boolean(profile?.email),\n        });\n\n        if (opts.json) {\n          console.log(JSON.stringify({ success: true, me }, null, 2));\n        } else {\n          const label = profile?.email ? `${profile.email}` : profile?.id ? `user ${profile.id}` : \"user\";\n          console.log(pc.green(`Signed in as ${label}.`));\n        }\n      } finally {\n        await server.close();\n      }\n    });\n}\n\n\n","import {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/config/model.ts\nimport { z } from \"zod\";\nvar DEFAULT_API_URL = \"https://api.remix.one\";\nvar DEFAULT_SUPABASE_URL = \"https://iheivdccexqigeoiekvc.supabase.co\";\nvar DEFAULT_SUPABASE_ANON_KEY = \"sb_publishable_YipyrVON-lwzW3ugjE3T1g_cE2do_JW\";\nfunction createDefaultConfigRaw() {\n  return {\n    apiUrl: process.env.REMIX_API_URL ?? DEFAULT_API_URL,\n    supabaseUrl: DEFAULT_SUPABASE_URL,\n    supabaseAnonKey: DEFAULT_SUPABASE_ANON_KEY\n  };\n}\nvar defaultConfigRaw = createDefaultConfigRaw();\nfunction isValidUrl(value) {\n  try {\n    new URL(value);\n    return true;\n  } catch {\n    return false;\n  }\n}\nvar urlSchema = z.string().min(1).transform((s) => s.trim()).refine((s) => isValidUrl(s), \"Invalid URL.\").transform((s) => s.replace(/\\/+$/, \"\"));\nvar configSchema = z.object({\n  apiUrl: urlSchema,\n  supabaseUrl: urlSchema,\n  supabaseAnonKey: z.string().min(1)\n});\nvar cachedConfig = null;\nasync function resolveConfig(_opts) {\n  if (cachedConfig) return cachedConfig;\n  const parsedCfg = configSchema.safeParse(defaultConfigRaw);\n  if (!parsedCfg.success) {\n    throw new RemixError(\"Invalid core configuration.\", {\n      exitCode: 1,\n      hint: parsedCfg.error.issues.map((i) => `${i.path.join(\".\") || \"config\"}: ${i.message}`).join(\"; \")\n    });\n  }\n  cachedConfig = parsedCfg.data;\n  return parsedCfg.data;\n}\n\nexport {\n  configSchema,\n  resolveConfig\n};\n","import {\n  configSchema,\n  resolveConfig\n} from \"./chunk-62JBEMJH.js\";\nimport \"./chunk-7XJGOKEO.js\";\nexport {\n  configSchema,\n  resolveConfig\n};\n","import http from \"node:http\";\nimport crypto from \"node:crypto\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport type OAuthCallbackServer = {\n  redirectTo: string;\n  state: string;\n  waitForCode(): Promise<string>;\n  close(): Promise<void>;\n};\n\nexport async function startOAuthCallbackServer(params?: {\n  port?: number | null;\n  timeoutMs?: number;\n}): Promise<OAuthCallbackServer> {\n  const timeoutMs = params?.timeoutMs ?? 3 * 60_000;\n  const requestedPort = params?.port ?? null;\n  const state = crypto.randomBytes(16).toString(\"base64url\");\n\n  let resolveCode: ((code: string) => void) | null = null;\n  let rejectCode: ((err: unknown) => void) | null = null;\n  const codePromise = new Promise<string>((resolve, reject) => {\n    resolveCode = resolve;\n    rejectCode = reject;\n  });\n\n  const server = http.createServer((req, res) => {\n    try {\n      const base = `http://127.0.0.1`;\n      const u = new URL(req.url ?? \"/\", base);\n      const errorDescription = u.searchParams.get(\"error_description\");\n      const error = u.searchParams.get(\"error\");\n      const code = u.searchParams.get(\"code\");\n      const returnedState = u.searchParams.get(\"state\");\n\n      if (errorDescription || error) {\n        res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n        res.end(\n          renderSignInPage({\n            kind: \"error\",\n            title: \"Sign-in failed\",\n            message: errorDescription ?? error ?? \"Unknown error\",\n          }),\n        );\n        rejectCode?.(new CliError(\"Sign-in failed.\", { exitCode: 1, hint: errorDescription ?? error ?? undefined }));\n        return;\n      }\n\n      if (!code) {\n        res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n        res.end(\n          renderSignInPage({\n            kind: \"error\",\n            title: \"Missing authorization code\",\n            message: \"Your browser didn't return an authorization code. Please try signing in again from your terminal.\",\n          }),\n        );\n        return;\n      }\n      if (returnedState !== state) {\n        res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n        res.end(\n          renderSignInPage({\n            kind: \"error\",\n            title: \"Invalid sign-in state\",\n            message: \"The sign-in response did not match this terminal session. Please try signing in again.\",\n          }),\n        );\n        rejectCode?.(\n          new CliError(\"Invalid sign-in state.\", {\n            exitCode: 1,\n            hint: \"Run `remix login` again.\",\n          }),\n        );\n        return;\n      }\n\n      res.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n      res.end(renderSignInPage({ kind: \"success\" }));\n      resolveCode?.(code);\n    } catch (err) {\n      rejectCode?.(err);\n      res.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n      res.end(\"Internal error.\");\n    } finally {\n      try {\n        server.close();\n      } catch {}\n    }\n  });\n\n  const listenPort = typeof requestedPort === \"number\" ? requestedPort : 0;\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(listenPort, \"127.0.0.1\", () => resolve());\n  });\n\n  const addr = server.address();\n  if (!addr || typeof addr === \"string\") {\n    server.close();\n    throw new CliError(\"Failed to start the local callback server.\", { exitCode: 1 });\n  }\n\n  const redirectTo = `http://127.0.0.1:${addr.port}/callback`;\n\n  const timeout = setTimeout(() => {\n    rejectCode?.(\n      new CliError(\"Sign-in timed out.\", {\n        exitCode: 1,\n        hint: \"Try running `remix login` again.\",\n      }),\n    );\n    try {\n      server.close();\n    } catch {}\n  }, timeoutMs).unref();\n\n  const waitForCode = async () => {\n    try {\n      return await codePromise;\n    } finally {\n      clearTimeout(timeout);\n    }\n  };\n\n  const close = async () => {\n    clearTimeout(timeout);\n    await new Promise<void>((resolve) => server.close(() => resolve())).catch(() => {});\n  };\n\n  return { redirectTo, state, waitForCode, close };\n}\n\nfunction escapeHtml(input: string): string {\n  return input\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\\\"/g, \"&quot;\")\n    .replace(/'/g, \"&#039;\");\n}\n\n// Inlined Remix wordmarks (sourced from remix-dashboard/src/assets/images).\n// Inlining means the page renders even though the local callback server has\n// no static-asset routes, and it survives going offline.\nconst REMIX_LOGO_DARK_SVG =\n  '<svg viewBox=\"0 0 326 94\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">' +\n  '<path d=\"M72.762 36.046C72.762 45.828 67.536 58.826 53.734 63.65L72.494 93.398H49.044L30.82 65.66C27.202 65.66 23.852 65.66 20.904 65.66V93.398H0V6.298H20.904C23.45 6.298 29.212 6.298 41.674 6.298C63.114 6.298 72.762 22.646 72.762 36.046ZM20.904 25.058V46.9H41.54C44.22 46.9 46.632 46.498 48.374 45.694C49.58 45.024 50.652 44.354 51.456 43.416C53.332 41.138 54.002 38.056 54.002 36.046C54.002 33.902 53.332 30.82 51.188 28.542C49.178 26.13 46.096 25.058 41.674 25.058H20.904Z\" fill=\"currentColor\"/>' +\n  '<path d=\"M145.544 58.692C145.544 59.63 145.678 64.32 145.544 65.258L95.1602 65.124C96.0982 67.804 97.0362 69.01 99.0462 71.02C102.396 74.236 106.684 75.978 111.106 75.978C115.662 75.844 119.95 74.102 123.166 70.886C123.3 70.752 123.568 70.484 123.702 70.35L141.122 75.844C133.886 86.966 126.248 93.264 111.24 93.398C92.2122 93.532 76.6682 78.122 76.5342 59.094C76.4002 40.066 91.8102 24.522 110.838 24.388C129.866 24.254 145.41 39.664 145.544 58.692ZM110.972 41.942C106.416 41.942 102.128 43.684 98.9122 46.9C97.4382 48.508 96.0982 50.384 95.2942 52.528H126.784C125.98 50.384 124.64 48.508 123.032 46.766C119.816 43.684 115.528 41.942 110.972 41.942Z\" fill=\"currentColor\"/>' +\n  '<path d=\"M188.179 48.072L225.013 24.4005V93.398H208.454V54.7594L187.967 67.8158L168.117 54.8656V93.398H151.557V24.4005L188.179 48.072Z\" fill=\"currentColor\"/>' +\n  '<path d=\"M249.9 0V15.812H231.274V0H249.9ZM250.034 24.522V93.398H231.274V24.522H250.034Z\" fill=\"currentColor\"/>' +\n  '<path d=\"M291.146 71.958L269.706 93.398L256.44 80.132L277.88 58.692L256.44 37.118L269.706 23.852L291.146 45.426L277.88 58.692L291.146 71.958Z\" fill=\"#00CBC0\"/>' +\n  '<path d=\"M325.986 80.1321L312.72 93.3981L291.146 71.958L304.412 58.6921L291.146 45.426L312.72 23.8521L325.986 37.1181L304.412 58.6921L325.986 80.1321Z\" fill=\"#FF1820\"/>' +\n  '<path d=\"M291.206 71.9581L277.88 58.692L291.146 45.426L304.412 58.6921L291.206 71.9581Z\" fill=\"#FF8C90\"/>' +\n  \"</svg>\";\n\ntype SignInPageInput =\n  | { kind: \"success\" }\n  | { kind: \"error\"; title: string; message: string };\n\nfunction renderSignInPage(input: SignInPageInput): string {\n  const isError = input.kind === \"error\";\n  // The CLI is spawned by the desktop app with REMIX_DESKTOP=1 in its\n  // env, and by a real terminal without it. We use that to swap the\n  // success copy so a desktop-triggered login points the user back to\n  // the desktop app instead of \"your terminal\" (which doesn't exist\n  // for those users — they never opened one).\n  const isDesktop = process.env.REMIX_DESKTOP === \"1\";\n  const surfaceLabel = isDesktop ? \"the Remix app\" : \"your terminal\";\n  const title = isError ? input.title : \"You're signed in\";\n  const docTitle = isError ? `${input.title} · Remix` : \"Signed in · Remix\";\n  const subtitle = isError\n    ? input.message\n    : `You can close this tab and return to ${surfaceLabel}.`;\n  const returnLabel = isError\n    ? \"\"\n    : isDesktop\n      ? \"You can safely close this tab — Remix is ready.\"\n      : \"You can safely close this tab — your terminal is ready.\";\n\n  // Tips slot intentionally left empty — user wants to populate later.\n  // Drop string content into `tipsHtml` (e.g. an unordered list of tips) and\n  // it will render below the subtitle inside the same card.\n  const tipsHtml = \"\";\n\n  return `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"color-scheme\" content=\"light dark\" />\n    <title>${escapeHtml(docTitle)}</title>\n    <style>\n      :root {\n        --bg-base: #fafaf7;\n        --bg-card: #ffffff;\n        --bg-elev: #f4f4ef;\n        --border: rgba(15, 15, 15, 0.08);\n        --border-strong: rgba(15, 15, 15, 0.14);\n        --text: #0d0d0c;\n        --text-muted: #5b5b56;\n        --accent: #00cbc0;\n        --accent-soft: rgba(0, 203, 192, 0.12);\n        --danger: #ff1820;\n        --danger-soft: rgba(255, 24, 32, 0.10);\n        --logo: #0d0d0c;\n        --shadow: 0 1px 0 rgba(15,15,15,0.04), 0 24px 60px -28px rgba(15,15,15,0.18);\n      }\n      @media (prefers-color-scheme: dark) {\n        :root {\n          --bg-base: #0a0a0a;\n          --bg-card: #131313;\n          --bg-elev: #1b1b1b;\n          --border: rgba(255, 255, 255, 0.08);\n          --border-strong: rgba(255, 255, 255, 0.14);\n          --text: #f4f4f1;\n          --text-muted: #a1a19b;\n          --accent: #00cbc0;\n          --accent-soft: rgba(0, 203, 192, 0.16);\n          --danger: #ff5a60;\n          --danger-soft: rgba(255, 24, 32, 0.16);\n          --logo: #f4f4f1;\n          --shadow: 0 1px 0 rgba(0,0,0,0.6), 0 28px 80px -28px rgba(0,0,0,0.7);\n        }\n      }\n      * { box-sizing: border-box; }\n      html, body { height: 100%; }\n      body {\n        margin: 0;\n        font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Inter\", \"Helvetica Neue\", Arial, sans-serif;\n        font-size: 15px;\n        line-height: 1.55;\n        color: var(--text);\n        background: var(--bg-base);\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n        position: relative;\n        overflow: hidden;\n      }\n      /* Soft brand accent glow in the background */\n      body::before,\n      body::after {\n        content: \"\";\n        position: fixed;\n        inset: auto;\n        width: 480px;\n        height: 480px;\n        border-radius: 50%;\n        filter: blur(120px);\n        opacity: 0.22;\n        pointer-events: none;\n        z-index: 0;\n      }\n      body::before {\n        background: radial-gradient(circle, var(--accent), transparent 60%);\n        top: -160px;\n        left: -120px;\n      }\n      body::after {\n        background: radial-gradient(circle, #ff1820, transparent 60%);\n        bottom: -200px;\n        right: -160px;\n        opacity: 0.10;\n      }\n      main {\n        position: relative;\n        z-index: 1;\n        min-height: 100dvh;\n        display: grid;\n        place-items: center;\n        padding: 32px 20px;\n      }\n      .card {\n        width: 100%;\n        max-width: 460px;\n        background: var(--bg-card);\n        border: 1px solid var(--border);\n        border-radius: 18px;\n        padding: 40px 36px 32px;\n        box-shadow: var(--shadow);\n        text-align: center;\n      }\n      .brand {\n        display: flex;\n        justify-content: center;\n        margin-bottom: 28px;\n        color: var(--logo);\n      }\n      .brand svg {\n        height: 28px;\n        width: auto;\n        display: block;\n      }\n      .status {\n        display: inline-flex;\n        align-items: center;\n        gap: 8px;\n        padding: 6px 12px 6px 10px;\n        border-radius: 999px;\n        font-size: 12.5px;\n        font-weight: 500;\n        letter-spacing: 0.01em;\n        background: ${isError ? \"var(--danger-soft)\" : \"var(--accent-soft)\"};\n        color: ${isError ? \"var(--danger)\" : \"var(--accent)\"};\n        margin-bottom: 18px;\n      }\n      .status .dot {\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        background: currentColor;\n        box-shadow: 0 0 0 4px ${isError ? \"var(--danger-soft)\" : \"var(--accent-soft)\"};\n      }\n      h1 {\n        font-size: 24px;\n        font-weight: 600;\n        line-height: 1.2;\n        letter-spacing: -0.01em;\n        margin: 0 0 10px;\n      }\n      p.lede {\n        margin: 0;\n        color: var(--text-muted);\n        font-size: 15px;\n      }\n      .return {\n        margin-top: 28px;\n        padding: 14px 16px;\n        border-radius: 12px;\n        background: var(--bg-elev);\n        border: 1px solid var(--border);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 10px;\n        color: var(--text-muted);\n        font-size: 13.5px;\n      }\n      .return svg {\n        flex: 0 0 auto;\n        color: var(--accent);\n      }\n      .open-app {\n        margin-top: 14px;\n        width: 100%;\n        padding: 12px 16px;\n        border-radius: 12px;\n        background: var(--accent);\n        color: #fff;\n        border: none;\n        font: inherit;\n        font-size: 14px;\n        font-weight: 600;\n        cursor: pointer;\n        transition: filter 120ms ease;\n      }\n      .open-app:hover {\n        filter: brightness(1.08);\n      }\n      .return kbd {\n        font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n        font-size: 12px;\n        padding: 2px 6px;\n        border-radius: 5px;\n        background: var(--bg-card);\n        border: 1px solid var(--border-strong);\n        color: var(--text);\n      }\n      .tips {\n        margin-top: 24px;\n        padding-top: 20px;\n        border-top: 1px solid var(--border);\n        text-align: left;\n      }\n      .tips h2 {\n        font-size: 11px;\n        font-weight: 600;\n        text-transform: uppercase;\n        letter-spacing: 0.08em;\n        color: var(--text-muted);\n        margin: 0 0 10px;\n      }\n      .tips :is(ul, ol) {\n        margin: 0;\n        padding-left: 18px;\n      }\n      .tips li + li { margin-top: 6px; }\n      @media (max-width: 420px) {\n        .card { padding: 32px 24px 24px; border-radius: 14px; }\n        h1 { font-size: 22px; }\n      }\n    </style>\n  </head>\n  <body>\n    <main>\n      <section class=\"card\" role=\"status\" aria-live=\"polite\">\n        <div class=\"brand\">${REMIX_LOGO_DARK_SVG}</div>\n        <span class=\"status\">\n          <span class=\"dot\" aria-hidden=\"true\"></span>\n          ${isError ? \"Sign-in failed\" : \"Sign-in complete\"}\n        </span>\n        <h1>${escapeHtml(title)}</h1>\n        <p class=\"lede\">${escapeHtml(subtitle)}</p>\n        ${\n          isError\n            ? \"\"\n            : `<div class=\"return\" aria-label=\"Return to ${escapeHtml(surfaceLabel)}\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <polyline points=\"4 17 10 11 4 5\"></polyline>\n                  <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>\n                </svg>\n                <span>${escapeHtml(returnLabel)}</span>\n              </div>\n              ${\n                isDesktop\n                  ? `<button id=\"open-app\" type=\"button\" class=\"open-app\">Open Remix</button>`\n                  : \"\"\n              }`\n        }\n        ${tipsHtml ? `<div class=\"tips\"><h2>Tips</h2>${tipsHtml}</div>` : \"\"}\n      </section>\n    </main>\n    ${\n      isError || !isDesktop\n        ? \"\"\n        : `<script>\n            // Auto-redirect into the desktop app via the remixapp://\n            // URL scheme it registers at install time. Short delay so\n            // the user sees the \"signed in\" confirmation first; the\n            // \"Open Remix\" button is a manual fallback for when the\n            // scheme isn't yet registered (fresh dev build, OS lost\n            // registration) or the browser prompt was dismissed.\n            (function () {\n              var url = \"remixapp://signed-in\";\n              var btn = document.getElementById(\"open-app\");\n              if (btn) btn.addEventListener(\"click\", function () { window.location.href = url; });\n              setTimeout(function () { window.location.href = url; }, 800);\n            })();\n          </script>`\n    }\n  </body>\n</html>`;\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","import {fileURLToPath} from 'node:url';\n\n// Allow some arguments/options to be either a file path string or a file URL\nexport const safeNormalizeFileUrl = (file, name) => {\n\tconst fileString = normalizeFileUrl(normalizeDenoExecPath(file));\n\n\tif (typeof fileString !== 'string') {\n\t\tthrow new TypeError(`${name} must be a string or a file URL: ${fileString}.`);\n\t}\n\n\treturn fileString;\n};\n\n// In Deno node:process execPath is a special object, not just a string:\n// https://github.com/denoland/deno/blob/f460188e583f00144000aa0d8ade08218d47c3c1/ext/node/polyfills/process.ts#L344\nconst normalizeDenoExecPath = file => isDenoExecPath(file)\n\t? file.toString()\n\t: file;\n\nexport const isDenoExecPath = file => typeof file !== 'string'\n\t&& file\n\t&& Object.getPrototypeOf(file) === String.prototype;\n\n// Same but also allows other values, e.g. `boolean` for the `shell` option\nexport const normalizeFileUrl = file => file instanceof URL ? fileURLToPath(file) : file;\n","import isPlainObject from 'is-plain-obj';\nimport {safeNormalizeFileUrl} from '../arguments/file-url.js';\n\n// The command `arguments` and `options` are both optional.\n// This also does basic validation on them and on the command file.\nexport const normalizeParameters = (rawFile, rawArguments = [], rawOptions = {}) => {\n\tconst filePath = safeNormalizeFileUrl(rawFile, 'First argument');\n\tconst [commandArguments, options] = isPlainObject(rawArguments)\n\t\t? [[], rawArguments]\n\t\t: [rawArguments, rawOptions];\n\n\tif (!Array.isArray(commandArguments)) {\n\t\tthrow new TypeError(`Second argument must be either an array of arguments or an options object: ${commandArguments}`);\n\t}\n\n\tif (commandArguments.some(commandArgument => typeof commandArgument === 'object' && commandArgument !== null)) {\n\t\tthrow new TypeError(`Second argument must be an array of strings: ${commandArguments}`);\n\t}\n\n\tconst normalizedArguments = commandArguments.map(String);\n\tconst nullByteArgument = normalizedArguments.find(normalizedArgument => normalizedArgument.includes('\\0'));\n\tif (nullByteArgument !== undefined) {\n\t\tthrow new TypeError(`Arguments cannot contain null bytes (\"\\\\0\"): ${nullByteArgument}`);\n\t}\n\n\tif (!isPlainObject(options)) {\n\t\tthrow new TypeError(`Last argument must be an options object: ${options}`);\n\t}\n\n\treturn [filePath, normalizedArguments, options];\n};\n","import {ChildProcess} from 'node:child_process';\nimport isPlainObject from 'is-plain-obj';\nimport {isUint8Array, uint8ArrayToString} from '../utils/uint-array.js';\n\n// Check whether the template string syntax is being used\nexport const isTemplateString = templates => Array.isArray(templates) && Array.isArray(templates.raw);\n\n// Convert execa`file ...commandArguments` to execa(file, commandArguments)\nexport const parseTemplates = (templates, expressions) => {\n\tlet tokens = [];\n\n\tfor (const [index, template] of templates.entries()) {\n\t\ttokens = parseTemplate({\n\t\t\ttemplates,\n\t\t\texpressions,\n\t\t\ttokens,\n\t\t\tindex,\n\t\t\ttemplate,\n\t\t});\n\t}\n\n\tif (tokens.length === 0) {\n\t\tthrow new TypeError('Template script must not be empty');\n\t}\n\n\tconst [file, ...commandArguments] = tokens;\n\treturn [file, commandArguments, {}];\n};\n\nconst parseTemplate = ({templates, expressions, tokens, index, template}) => {\n\tif (template === undefined) {\n\t\tthrow new TypeError(`Invalid backslash sequence: ${templates.raw[index]}`);\n\t}\n\n\tconst {nextTokens, leadingWhitespaces, trailingWhitespaces} = splitByWhitespaces(template, templates.raw[index]);\n\tconst newTokens = concatTokens(tokens, nextTokens, leadingWhitespaces);\n\n\tif (index === expressions.length) {\n\t\treturn newTokens;\n\t}\n\n\tconst expression = expressions[index];\n\tconst expressionTokens = Array.isArray(expression)\n\t\t? expression.map(expression => parseExpression(expression))\n\t\t: [parseExpression(expression)];\n\treturn concatTokens(newTokens, expressionTokens, trailingWhitespaces);\n};\n\n// Like `string.split(/[ \\t\\r\\n]+/)` except newlines and tabs are:\n//  - ignored when input as a backslash sequence like: `echo foo\\n bar`\n//  - not ignored when input directly\n// The only way to distinguish those in JavaScript is to use a tagged template and compare:\n//  - the first array argument, which does not escape backslash sequences\n//  - its `raw` property, which escapes them\nconst splitByWhitespaces = (template, rawTemplate) => {\n\tif (rawTemplate.length === 0) {\n\t\treturn {nextTokens: [], leadingWhitespaces: false, trailingWhitespaces: false};\n\t}\n\n\tconst nextTokens = [];\n\tlet templateStart = 0;\n\tconst leadingWhitespaces = DELIMITERS.has(rawTemplate[0]);\n\n\tfor (\n\t\tlet templateIndex = 0, rawIndex = 0;\n\t\ttemplateIndex < template.length;\n\t\ttemplateIndex += 1, rawIndex += 1\n\t) {\n\t\tconst rawCharacter = rawTemplate[rawIndex];\n\t\tif (DELIMITERS.has(rawCharacter)) {\n\t\t\tif (templateStart !== templateIndex) {\n\t\t\t\tnextTokens.push(template.slice(templateStart, templateIndex));\n\t\t\t}\n\n\t\t\ttemplateStart = templateIndex + 1;\n\t\t} else if (rawCharacter === '\\\\') {\n\t\t\tconst nextRawCharacter = rawTemplate[rawIndex + 1];\n\t\t\tif (nextRawCharacter === '\\n') {\n\t\t\t\t// Handles escaped newlines in templates\n\t\t\t\ttemplateIndex -= 1;\n\t\t\t\trawIndex += 1;\n\t\t\t} else if (nextRawCharacter === 'u' && rawTemplate[rawIndex + 2] === '{') {\n\t\t\t\trawIndex = rawTemplate.indexOf('}', rawIndex + 3);\n\t\t\t} else {\n\t\t\t\trawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst trailingWhitespaces = templateStart === template.length;\n\tif (!trailingWhitespaces) {\n\t\tnextTokens.push(template.slice(templateStart));\n\t}\n\n\treturn {nextTokens, leadingWhitespaces, trailingWhitespaces};\n};\n\nconst DELIMITERS = new Set([' ', '\\t', '\\r', '\\n']);\n\n// Number of characters in backslash escape sequences: \\0 \\xXX or \\uXXXX\n// \\cX is allowed in RegExps but not in strings\n// Octal sequences are not allowed in strict mode\nconst ESCAPE_LENGTH = {x: 3, u: 5};\n\nconst concatTokens = (tokens, nextTokens, isSeparated) => isSeparated\n\t|| tokens.length === 0\n\t|| nextTokens.length === 0\n\t? [...tokens, ...nextTokens]\n\t: [\n\t\t...tokens.slice(0, -1),\n\t\t`${tokens.at(-1)}${nextTokens[0]}`,\n\t\t...nextTokens.slice(1),\n\t];\n\n// Handle `${expression}` inside the template string syntax\nconst parseExpression = expression => {\n\tconst typeOfExpression = typeof expression;\n\n\tif (typeOfExpression === 'string') {\n\t\treturn expression;\n\t}\n\n\tif (typeOfExpression === 'number') {\n\t\treturn String(expression);\n\t}\n\n\tif (isPlainObject(expression) && ('stdout' in expression || 'isMaxBuffer' in expression)) {\n\t\treturn getSubprocessResult(expression);\n\t}\n\n\tif (expression instanceof ChildProcess || Object.prototype.toString.call(expression) === '[object Promise]') {\n\t\t// eslint-disable-next-line no-template-curly-in-string\n\t\tthrow new TypeError('Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.');\n\t}\n\n\tthrow new TypeError(`Unexpected \"${typeOfExpression}\" in template expression`);\n};\n\nconst getSubprocessResult = ({stdout}) => {\n\tif (typeof stdout === 'string') {\n\t\treturn stdout;\n\t}\n\n\tif (isUint8Array(stdout)) {\n\t\treturn uint8ArrayToString(stdout);\n\t}\n\n\tif (stdout === undefined) {\n\t\tthrow new TypeError('Missing result.stdout in template expression. This is probably due to the previous subprocess\\' \"stdout\" option.');\n\t}\n\n\tthrow new TypeError(`Unexpected \"${typeof stdout}\" stdout in template expression`);\n};\n","import {StringDecoder} from 'node:string_decoder';\n\nconst {toString: objectToString} = Object.prototype;\n\nexport const isArrayBuffer = value => objectToString.call(value) === '[object ArrayBuffer]';\n\n// Is either Uint8Array or Buffer\nexport const isUint8Array = value => objectToString.call(value) === '[object Uint8Array]';\n\nexport const bufferToUint8Array = buffer => new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\nconst textEncoder = new TextEncoder();\nconst stringToUint8Array = string => textEncoder.encode(string);\n\nconst textDecoder = new TextDecoder();\nexport const uint8ArrayToString = uint8Array => textDecoder.decode(uint8Array);\n\nexport const joinToString = (uint8ArraysOrStrings, encoding) => {\n\tconst strings = uint8ArraysToStrings(uint8ArraysOrStrings, encoding);\n\treturn strings.join('');\n};\n\nconst uint8ArraysToStrings = (uint8ArraysOrStrings, encoding) => {\n\tif (encoding === 'utf8' && uint8ArraysOrStrings.every(uint8ArrayOrString => typeof uint8ArrayOrString === 'string')) {\n\t\treturn uint8ArraysOrStrings;\n\t}\n\n\tconst decoder = new StringDecoder(encoding);\n\tconst strings = uint8ArraysOrStrings\n\t\t.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'\n\t\t\t? stringToUint8Array(uint8ArrayOrString)\n\t\t\t: uint8ArrayOrString)\n\t\t.map(uint8Array => decoder.write(uint8Array));\n\tconst finalString = decoder.end();\n\treturn finalString === '' ? strings : [...strings, finalString];\n};\n\nexport const joinToUint8Array = uint8ArraysOrStrings => {\n\tif (uint8ArraysOrStrings.length === 1 && isUint8Array(uint8ArraysOrStrings[0])) {\n\t\treturn uint8ArraysOrStrings[0];\n\t}\n\n\treturn concatUint8Arrays(stringsToUint8Arrays(uint8ArraysOrStrings));\n};\n\nconst stringsToUint8Arrays = uint8ArraysOrStrings => uint8ArraysOrStrings.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'\n\t? stringToUint8Array(uint8ArrayOrString)\n\t: uint8ArrayOrString);\n\nexport const concatUint8Arrays = uint8Arrays => {\n\tconst result = new Uint8Array(getJoinLength(uint8Arrays));\n\n\tlet index = 0;\n\tfor (const uint8Array of uint8Arrays) {\n\t\tresult.set(uint8Array, index);\n\t\tindex += uint8Array.length;\n\t}\n\n\treturn result;\n};\n\nconst getJoinLength = uint8Arrays => {\n\tlet joinLength = 0;\n\tfor (const uint8Array of uint8Arrays) {\n\t\tjoinLength += uint8Array.length;\n\t}\n\n\treturn joinLength;\n};\n","import {spawnSync} from 'node:child_process';\nimport {handleCommand} from '../arguments/command.js';\nimport {normalizeOptions} from '../arguments/options.js';\nimport {concatenateShell} from '../arguments/shell.js';\nimport {makeError, makeEarlyError, makeSuccessResult} from '../return/result.js';\nimport {handleResult} from '../return/reject.js';\nimport {handleStdioSync} from '../stdio/handle-sync.js';\nimport {stripNewline} from '../io/strip-newline.js';\nimport {addInputOptionsSync} from '../io/input-sync.js';\nimport {transformOutputSync} from '../io/output-sync.js';\nimport {getMaxBufferSync} from '../io/max-buffer.js';\nimport {getAllSync} from '../resolve/all-sync.js';\nimport {getExitResultSync} from '../resolve/exit-sync.js';\n\n// Main shared logic for all sync methods: `execaSync()`, `$.sync()`\nexport const execaCoreSync = (rawFile, rawArguments, rawOptions) => {\n\tconst {file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors} = handleSyncArguments(rawFile, rawArguments, rawOptions);\n\tconst result = spawnSubprocessSync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t});\n\treturn handleResult(result, verboseInfo, options);\n};\n\n// Compute arguments to pass to `child_process.spawnSync()`\nconst handleSyncArguments = (rawFile, rawArguments, rawOptions) => {\n\tconst {command, escapedCommand, startTime, verboseInfo} = handleCommand(rawFile, rawArguments, rawOptions);\n\tconst syncOptions = normalizeSyncOptions(rawOptions);\n\tconst {file, commandArguments, options} = normalizeOptions(rawFile, rawArguments, syncOptions);\n\tvalidateSyncOptions(options);\n\tconst fileDescriptors = handleStdioSync(options, verboseInfo);\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\toptions,\n\t\tfileDescriptors,\n\t};\n};\n\n// Options normalization logic specific to sync methods\nconst normalizeSyncOptions = options => options.node && !options.ipc ? {...options, ipc: false} : options;\n\n// Options validation logic specific to sync methods\nconst validateSyncOptions = ({ipc, ipcInput, detached, cancelSignal}) => {\n\tif (ipcInput) {\n\t\tthrowInvalidSyncOption('ipcInput');\n\t}\n\n\tif (ipc) {\n\t\tthrowInvalidSyncOption('ipc: true');\n\t}\n\n\tif (detached) {\n\t\tthrowInvalidSyncOption('detached: true');\n\t}\n\n\tif (cancelSignal) {\n\t\tthrowInvalidSyncOption('cancelSignal');\n\t}\n};\n\nconst throwInvalidSyncOption = value => {\n\tthrow new TypeError(`The \"${value}\" option cannot be used with synchronous methods.`);\n};\n\nconst spawnSubprocessSync = ({file, commandArguments, options, command, escapedCommand, verboseInfo, fileDescriptors, startTime}) => {\n\tconst syncResult = runSubprocessSync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t});\n\tif (syncResult.failed) {\n\t\treturn syncResult;\n\t}\n\n\tconst {resultError, exitCode, signal, timedOut, isMaxBuffer} = getExitResultSync(syncResult, options);\n\tconst {output, error = resultError} = transformOutputSync({\n\t\tfileDescriptors,\n\t\tsyncResult,\n\t\toptions,\n\t\tisMaxBuffer,\n\t\tverboseInfo,\n\t});\n\tconst stdio = output.map((stdioOutput, fdNumber) => stripNewline(stdioOutput, options, fdNumber));\n\tconst all = stripNewline(getAllSync(output, options), options, 'all');\n\treturn getSyncResult({\n\t\terror,\n\t\texitCode,\n\t\tsignal,\n\t\ttimedOut,\n\t\tisMaxBuffer,\n\t\tstdio,\n\t\tall,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t});\n};\n\nconst runSubprocessSync = ({file, commandArguments, options, command, escapedCommand, fileDescriptors, startTime}) => {\n\ttry {\n\t\taddInputOptionsSync(fileDescriptors, options);\n\t\tconst normalizedOptions = normalizeSpawnSyncOptions(options);\n\t\treturn spawnSync(...concatenateShell(file, commandArguments, normalizedOptions));\n\t} catch (error) {\n\t\treturn makeEarlyError({\n\t\t\terror,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tfileDescriptors,\n\t\t\toptions,\n\t\t\tstartTime,\n\t\t\tisSync: true,\n\t\t});\n\t}\n};\n\n// The `encoding` option is handled by Execa, not by `child_process.spawnSync()`\nconst normalizeSpawnSyncOptions = ({encoding, maxBuffer, ...options}) => ({...options, encoding: 'buffer', maxBuffer: getMaxBufferSync(maxBuffer)});\n\nconst getSyncResult = ({error, exitCode, signal, timedOut, isMaxBuffer, stdio, all, options, command, escapedCommand, startTime}) => error === undefined\n\t? makeSuccessResult({\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput: [],\n\t\toptions,\n\t\tstartTime,\n\t})\n\t: makeError({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\ttimedOut,\n\t\tisCanceled: false,\n\t\tisGracefullyCanceled: false,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated: false,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput: [],\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: true,\n\t});\n","import {debuglog} from 'node:util';\nimport isPlainObject from 'is-plain-obj';\nimport {STANDARD_STREAMS_ALIASES} from '../utils/standard-stream.js';\n\n// Some options can have different values for `stdout`/`stderr`/`fd3`.\n// This normalizes those to array of values.\n// For example, `{verbose: {stdout: 'none', stderr: 'full'}}` becomes `{verbose: ['none', 'none', 'full']}`\nexport const normalizeFdSpecificOptions = options => {\n\tconst optionsCopy = {...options};\n\n\tfor (const optionName of FD_SPECIFIC_OPTIONS) {\n\t\toptionsCopy[optionName] = normalizeFdSpecificOption(options, optionName);\n\t}\n\n\treturn optionsCopy;\n};\n\nexport const normalizeFdSpecificOption = (options, optionName) => {\n\tconst optionBaseArray = Array.from({length: getStdioLength(options) + 1});\n\tconst optionArray = normalizeFdSpecificValue(options[optionName], optionBaseArray, optionName);\n\treturn addDefaultValue(optionArray, optionName);\n};\n\nconst getStdioLength = ({stdio}) => Array.isArray(stdio)\n\t? Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length)\n\t: STANDARD_STREAMS_ALIASES.length;\n\nconst normalizeFdSpecificValue = (optionValue, optionArray, optionName) => isPlainObject(optionValue)\n\t? normalizeOptionObject(optionValue, optionArray, optionName)\n\t: optionArray.fill(optionValue);\n\nconst normalizeOptionObject = (optionValue, optionArray, optionName) => {\n\tfor (const fdName of Object.keys(optionValue).sort(compareFdName)) {\n\t\tfor (const fdNumber of parseFdName(fdName, optionName, optionArray)) {\n\t\t\toptionArray[fdNumber] = optionValue[fdName];\n\t\t}\n\t}\n\n\treturn optionArray;\n};\n\n// Ensure priority order when setting both `stdout`/`stderr`, `fd1`/`fd2`, and `all`\nconst compareFdName = (fdNameA, fdNameB) => getFdNameOrder(fdNameA) < getFdNameOrder(fdNameB) ? 1 : -1;\n\nconst getFdNameOrder = fdName => {\n\tif (fdName === 'stdout' || fdName === 'stderr') {\n\t\treturn 0;\n\t}\n\n\treturn fdName === 'all' ? 2 : 1;\n};\n\nconst parseFdName = (fdName, optionName, optionArray) => {\n\tif (fdName === 'ipc') {\n\t\treturn [optionArray.length - 1];\n\t}\n\n\tconst fdNumber = parseFd(fdName);\n\tif (fdNumber === undefined || fdNumber === 0) {\n\t\tthrow new TypeError(`\"${optionName}.${fdName}\" is invalid.\nIt must be \"${optionName}.stdout\", \"${optionName}.stderr\", \"${optionName}.all\", \"${optionName}.ipc\", or \"${optionName}.fd3\", \"${optionName}.fd4\" (and so on).`);\n\t}\n\n\tif (fdNumber >= optionArray.length) {\n\t\tthrow new TypeError(`\"${optionName}.${fdName}\" is invalid: that file descriptor does not exist.\nPlease set the \"stdio\" option to ensure that file descriptor exists.`);\n\t}\n\n\treturn fdNumber === 'all' ? [1, 2] : [fdNumber];\n};\n\n// Use the same syntax for fd-specific options and the `from`/`to` options\nexport const parseFd = fdName => {\n\tif (fdName === 'all') {\n\t\treturn fdName;\n\t}\n\n\tif (STANDARD_STREAMS_ALIASES.includes(fdName)) {\n\t\treturn STANDARD_STREAMS_ALIASES.indexOf(fdName);\n\t}\n\n\tconst regexpResult = FD_REGEXP.exec(fdName);\n\tif (regexpResult !== null) {\n\t\treturn Number(regexpResult[1]);\n\t}\n};\n\nconst FD_REGEXP = /^fd(\\d+)$/;\n\nconst addDefaultValue = (optionArray, optionName) => optionArray.map(optionValue => optionValue === undefined\n\t? DEFAULT_OPTIONS[optionName]\n\t: optionValue);\n\n// Default value for the `verbose` option\nconst verboseDefault = debuglog('execa').enabled ? 'full' : 'none';\n\nconst DEFAULT_OPTIONS = {\n\tlines: false,\n\tbuffer: true,\n\tmaxBuffer: 1000 * 1000 * 100,\n\tverbose: verboseDefault,\n\tstripFinalNewline: true,\n};\n\n// List of options which can have different values for `stdout`/`stderr`\nexport const FD_SPECIFIC_OPTIONS = ['lines', 'buffer', 'maxBuffer', 'verbose', 'stripFinalNewline'];\n\n// Retrieve fd-specific option\nexport const getFdSpecificValue = (optionArray, fdNumber) => fdNumber === 'ipc'\n\t? optionArray.at(-1)\n\t: optionArray[fdNumber];\n","import process from 'node:process';\n\nexport const isStandardStream = stream => STANDARD_STREAMS.includes(stream);\nexport const STANDARD_STREAMS = [process.stdin, process.stdout, process.stderr];\nexport const STANDARD_STREAMS_ALIASES = ['stdin', 'stdout', 'stderr'];\nexport const getStreamName = fdNumber => STANDARD_STREAMS_ALIASES[fdNumber] ?? `stdio[${fdNumber}]`;\n","import {getFdSpecificValue} from '../arguments/specific.js';\n\n// The `verbose` option can have different values for `stdout`/`stderr`\nexport const isVerbose = ({verbose}, fdNumber) => getFdVerbose(verbose, fdNumber) !== 'none';\n\n// Whether IPC and output and logged\nexport const isFullVerbose = ({verbose}, fdNumber) => !['none', 'short'].includes(getFdVerbose(verbose, fdNumber));\n\n// The `verbose` option can be a function to customize logging\nexport const getVerboseFunction = ({verbose}, fdNumber) => {\n\tconst fdVerbose = getFdVerbose(verbose, fdNumber);\n\treturn isVerboseFunction(fdVerbose) ? fdVerbose : undefined;\n};\n\n// When using `verbose: {stdout, stderr, fd3, ipc}`:\n//  - `verbose.stdout|stderr|fd3` is used for 'output'\n//  - `verbose.ipc` is only used for 'ipc'\n//  - highest `verbose.*` value is used for 'command', 'error' and 'duration'\nconst getFdVerbose = (verbose, fdNumber) => fdNumber === undefined\n\t? getFdGenericVerbose(verbose)\n\t: getFdSpecificValue(verbose, fdNumber);\n\n// When using `verbose: {stdout, stderr, fd3, ipc}` and logging is not specific to a file descriptor.\n// We then use the highest `verbose.*` value, using the following order:\n//  - function > 'full' > 'short' > 'none'\n//  - if several functions are defined: stdout > stderr > fd3 > ipc\nconst getFdGenericVerbose = verbose => verbose.find(fdVerbose => isVerboseFunction(fdVerbose))\n\t?? VERBOSE_VALUES.findLast(fdVerbose => verbose.includes(fdVerbose));\n\n// Whether the `verbose` option is customized using a function\nexport const isVerboseFunction = fdVerbose => typeof fdVerbose === 'function';\n\nexport const VERBOSE_VALUES = ['none', 'short', 'full'];\n","import {inspect} from 'node:util';\nimport {escapeLines} from '../arguments/escape.js';\nimport {defaultVerboseFunction} from './default.js';\nimport {applyVerboseOnLines} from './custom.js';\n\n// This prints on stderr.\n// If the subprocess prints on stdout and is using `stdout: 'inherit'`,\n// there is a chance both writes will compete (introducing a race condition).\n// This means their respective order is not deterministic.\n// In particular, this means the verbose command lines might be after the start of the subprocess output.\n// Using synchronous I/O does not solve this problem.\n// However, this only seems to happen when the stdout/stderr target\n// (e.g. a terminal) is being written to by many subprocesses at once, which is unlikely in real scenarios.\nexport const verboseLog = ({type, verboseMessage, fdNumber, verboseInfo, result}) => {\n\tconst verboseObject = getVerboseObject({type, result, verboseInfo});\n\tconst printedLines = getPrintedLines(verboseMessage, verboseObject);\n\tconst finalLines = applyVerboseOnLines(printedLines, verboseInfo, fdNumber);\n\tif (finalLines !== '') {\n\t\tconsole.warn(finalLines.slice(0, -1));\n\t}\n};\n\nconst getVerboseObject = ({\n\ttype,\n\tresult,\n\tverboseInfo: {escapedCommand, commandId, rawOptions: {piped = false, ...options}},\n}) => ({\n\ttype,\n\tescapedCommand,\n\tcommandId: `${commandId}`,\n\ttimestamp: new Date(),\n\tpiped,\n\tresult,\n\toptions,\n});\n\nconst getPrintedLines = (verboseMessage, verboseObject) => verboseMessage\n\t.split('\\n')\n\t.map(message => getPrintedLine({...verboseObject, message}));\n\nconst getPrintedLine = verboseObject => {\n\tconst verboseLine = defaultVerboseFunction(verboseObject);\n\treturn {verboseLine, verboseObject};\n};\n\n// Serialize any type to a line string, for logging\nexport const serializeVerboseMessage = message => {\n\tconst messageString = typeof message === 'string' ? message : inspect(message);\n\tconst escapedMessage = escapeLines(messageString);\n\treturn escapedMessage.replaceAll('\\t', ' '.repeat(TAB_SIZE));\n};\n\n// Same as `util.inspect()`\nconst TAB_SIZE = 2;\n","import {platform} from 'node:process';\nimport {stripVTControlCharacters} from 'node:util';\n\n// Compute `result.command` and `result.escapedCommand`\nexport const joinCommand = (filePath, rawArguments) => {\n\tconst fileAndArguments = [filePath, ...rawArguments];\n\tconst command = fileAndArguments.join(' ');\n\tconst escapedCommand = fileAndArguments\n\t\t.map(fileAndArgument => quoteString(escapeControlCharacters(fileAndArgument)))\n\t\t.join(' ');\n\treturn {command, escapedCommand};\n};\n\n// Remove ANSI sequences and escape control characters and newlines\nexport const escapeLines = lines => stripVTControlCharacters(lines)\n\t.split('\\n')\n\t.map(line => escapeControlCharacters(line))\n\t.join('\\n');\n\nconst escapeControlCharacters = line => line.replaceAll(SPECIAL_CHAR_REGEXP, character => escapeControlCharacter(character));\n\nconst escapeControlCharacter = character => {\n\tconst commonEscape = COMMON_ESCAPES[character];\n\tif (commonEscape !== undefined) {\n\t\treturn commonEscape;\n\t}\n\n\tconst codepoint = character.codePointAt(0);\n\tconst codepointHex = codepoint.toString(16);\n\treturn codepoint <= ASTRAL_START\n\t\t? `\\\\u${codepointHex.padStart(4, '0')}`\n\t\t: `\\\\U${codepointHex}`;\n};\n\n// Characters that would create issues when printed are escaped using the \\u or \\U notation.\n// Those include control characters and newlines.\n// The \\u and \\U notation is Bash specific, but there is no way to do this in a shell-agnostic way.\n// Some shells do not even have a way to print those characters in an escaped fashion.\n// Therefore, we prioritize printing those safely, instead of allowing those to be copy-pasted.\n// List of Unicode character categories: https://www.fileformat.info/info/unicode/category/index.htm\nconst getSpecialCharRegExp = () => {\n\ttry {\n\t\t// This throws when using Node.js without ICU support.\n\t\t// When using a RegExp literal, this would throw at parsing-time, instead of runtime.\n\t\t// eslint-disable-next-line prefer-regex-literals\n\t\treturn new RegExp('\\\\p{Separator}|\\\\p{Other}', 'gu');\n\t} catch {\n\t\t// Similar to the above RegExp, but works even when Node.js has been built without ICU support.\n\t\t// Unlike the above RegExp, it only covers whitespaces and C0/C1 control characters.\n\t\t// It does not cover some edge cases, such as Unicode reserved characters.\n\t\t// See https://github.com/sindresorhus/execa/issues/1143\n\t\t// eslint-disable-next-line no-control-regex\n\t\treturn /[\\s\\u0000-\\u001F\\u007F-\\u009F\\u00AD]/g;\n\t}\n};\n\nconst SPECIAL_CHAR_REGEXP = getSpecialCharRegExp();\n\n// Accepted by $'...' in Bash.\n// Exclude \\a \\e \\v which are accepted in Bash but not in JavaScript (except \\v) and JSON.\nconst COMMON_ESCAPES = {\n\t' ': ' ',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t',\n};\n\n// Up until that codepoint, \\u notation can be used instead of \\U\nconst ASTRAL_START = 65_535;\n\n// Some characters are shell-specific, i.e. need to be escaped when the command is copy-pasted then run.\n// Escaping is shell-specific. We cannot know which shell is used: `process.platform` detection is not enough.\n// For example, Windows users could be using `cmd.exe`, Powershell or Bash for Windows which all use different escaping.\n// We use '...' on Unix, which is POSIX shell compliant and escape all characters but ' so this is fairly safe.\n// On Windows, we assume cmd.exe is used and escape with \"...\", which also works with Powershell.\nconst quoteString = escapedArgument => {\n\tif (NO_ESCAPE_REGEXP.test(escapedArgument)) {\n\t\treturn escapedArgument;\n\t}\n\n\treturn platform === 'win32'\n\t\t? `\"${escapedArgument.replaceAll('\"', '\"\"')}\"`\n\t\t: `'${escapedArgument.replaceAll('\\'', '\\'\\\\\\'\\'')}'`;\n};\n\nconst NO_ESCAPE_REGEXP = /^[\\w./-]+$/;\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import isUnicodeSupported from 'is-unicode-supported';\n\nconst common = {\n\tcircleQuestionMark: '(?)',\n\tquestionMarkPrefix: '(?)',\n\tsquare: '█',\n\tsquareDarkShade: '▓',\n\tsquareMediumShade: '▒',\n\tsquareLightShade: '░',\n\tsquareTop: '▀',\n\tsquareBottom: '▄',\n\tsquareLeft: '▌',\n\tsquareRight: '▐',\n\tsquareCenter: '■',\n\tbullet: '●',\n\tdot: '․',\n\tellipsis: '…',\n\tpointerSmall: '›',\n\ttriangleUp: '▲',\n\ttriangleUpSmall: '▴',\n\ttriangleDown: '▼',\n\ttriangleDownSmall: '▾',\n\ttriangleLeftSmall: '◂',\n\ttriangleRightSmall: '▸',\n\thome: '⌂',\n\theart: '♥',\n\tmusicNote: '♪',\n\tmusicNoteBeamed: '♫',\n\tarrowUp: '↑',\n\tarrowDown: '↓',\n\tarrowLeft: '←',\n\tarrowRight: '→',\n\tarrowLeftRight: '↔',\n\tarrowUpDown: '↕',\n\talmostEqual: '≈',\n\tnotEqual: '≠',\n\tlessOrEqual: '≤',\n\tgreaterOrEqual: '≥',\n\tidentical: '≡',\n\tinfinity: '∞',\n\tsubscriptZero: '₀',\n\tsubscriptOne: '₁',\n\tsubscriptTwo: '₂',\n\tsubscriptThree: '₃',\n\tsubscriptFour: '₄',\n\tsubscriptFive: '₅',\n\tsubscriptSix: '₆',\n\tsubscriptSeven: '₇',\n\tsubscriptEight: '₈',\n\tsubscriptNine: '₉',\n\toneHalf: '½',\n\toneThird: '⅓',\n\toneQuarter: '¼',\n\toneFifth: '⅕',\n\toneSixth: '⅙',\n\toneEighth: '⅛',\n\ttwoThirds: '⅔',\n\ttwoFifths: '⅖',\n\tthreeQuarters: '¾',\n\tthreeFifths: '⅗',\n\tthreeEighths: '⅜',\n\tfourFifths: '⅘',\n\tfiveSixths: '⅚',\n\tfiveEighths: '⅝',\n\tsevenEighths: '⅞',\n\tline: '─',\n\tlineBold: '━',\n\tlineDouble: '═',\n\tlineDashed0: '┄',\n\tlineDashed1: '┅',\n\tlineDashed2: '┈',\n\tlineDashed3: '┉',\n\tlineDashed4: '╌',\n\tlineDashed5: '╍',\n\tlineDashed6: '╴',\n\tlineDashed7: '╶',\n\tlineDashed8: '╸',\n\tlineDashed9: '╺',\n\tlineDashed10: '╼',\n\tlineDashed11: '╾',\n\tlineDashed12: '−',\n\tlineDashed13: '–',\n\tlineDashed14: '‐',\n\tlineDashed15: '⁃',\n\tlineVertical: '│',\n\tlineVerticalBold: '┃',\n\tlineVerticalDouble: '║',\n\tlineVerticalDashed0: '┆',\n\tlineVerticalDashed1: '┇',\n\tlineVerticalDashed2: '┊',\n\tlineVerticalDashed3: '┋',\n\tlineVerticalDashed4: '╎',\n\tlineVerticalDashed5: '╏',\n\tlineVerticalDashed6: '╵',\n\tlineVerticalDashed7: '╷',\n\tlineVerticalDashed8: '╹',\n\tlineVerticalDashed9: '╻',\n\tlineVerticalDashed10: '╽',\n\tlineVerticalDashed11: '╿',\n\tlineDownLeft: '┐',\n\tlineDownLeftArc: '╮',\n\tlineDownBoldLeftBold: '┓',\n\tlineDownBoldLeft: '┒',\n\tlineDownLeftBold: '┑',\n\tlineDownDoubleLeftDouble: '╗',\n\tlineDownDoubleLeft: '╖',\n\tlineDownLeftDouble: '╕',\n\tlineDownRight: '┌',\n\tlineDownRightArc: '╭',\n\tlineDownBoldRightBold: '┏',\n\tlineDownBoldRight: '┎',\n\tlineDownRightBold: '┍',\n\tlineDownDoubleRightDouble: '╔',\n\tlineDownDoubleRight: '╓',\n\tlineDownRightDouble: '╒',\n\tlineUpLeft: '┘',\n\tlineUpLeftArc: '╯',\n\tlineUpBoldLeftBold: '┛',\n\tlineUpBoldLeft: '┚',\n\tlineUpLeftBold: '┙',\n\tlineUpDoubleLeftDouble: '╝',\n\tlineUpDoubleLeft: '╜',\n\tlineUpLeftDouble: '╛',\n\tlineUpRight: '└',\n\tlineUpRightArc: '╰',\n\tlineUpBoldRightBold: '┗',\n\tlineUpBoldRight: '┖',\n\tlineUpRightBold: '┕',\n\tlineUpDoubleRightDouble: '╚',\n\tlineUpDoubleRight: '╙',\n\tlineUpRightDouble: '╘',\n\tlineUpDownLeft: '┤',\n\tlineUpBoldDownBoldLeftBold: '┫',\n\tlineUpBoldDownBoldLeft: '┨',\n\tlineUpDownLeftBold: '┥',\n\tlineUpBoldDownLeftBold: '┩',\n\tlineUpDownBoldLeftBold: '┪',\n\tlineUpDownBoldLeft: '┧',\n\tlineUpBoldDownLeft: '┦',\n\tlineUpDoubleDownDoubleLeftDouble: '╣',\n\tlineUpDoubleDownDoubleLeft: '╢',\n\tlineUpDownLeftDouble: '╡',\n\tlineUpDownRight: '├',\n\tlineUpBoldDownBoldRightBold: '┣',\n\tlineUpBoldDownBoldRight: '┠',\n\tlineUpDownRightBold: '┝',\n\tlineUpBoldDownRightBold: '┡',\n\tlineUpDownBoldRightBold: '┢',\n\tlineUpDownBoldRight: '┟',\n\tlineUpBoldDownRight: '┞',\n\tlineUpDoubleDownDoubleRightDouble: '╠',\n\tlineUpDoubleDownDoubleRight: '╟',\n\tlineUpDownRightDouble: '╞',\n\tlineDownLeftRight: '┬',\n\tlineDownBoldLeftBoldRightBold: '┳',\n\tlineDownLeftBoldRightBold: '┯',\n\tlineDownBoldLeftRight: '┰',\n\tlineDownBoldLeftBoldRight: '┱',\n\tlineDownBoldLeftRightBold: '┲',\n\tlineDownLeftRightBold: '┮',\n\tlineDownLeftBoldRight: '┭',\n\tlineDownDoubleLeftDoubleRightDouble: '╦',\n\tlineDownDoubleLeftRight: '╥',\n\tlineDownLeftDoubleRightDouble: '╤',\n\tlineUpLeftRight: '┴',\n\tlineUpBoldLeftBoldRightBold: '┻',\n\tlineUpLeftBoldRightBold: '┷',\n\tlineUpBoldLeftRight: '┸',\n\tlineUpBoldLeftBoldRight: '┹',\n\tlineUpBoldLeftRightBold: '┺',\n\tlineUpLeftRightBold: '┶',\n\tlineUpLeftBoldRight: '┵',\n\tlineUpDoubleLeftDoubleRightDouble: '╩',\n\tlineUpDoubleLeftRight: '╨',\n\tlineUpLeftDoubleRightDouble: '╧',\n\tlineUpDownLeftRight: '┼',\n\tlineUpBoldDownBoldLeftBoldRightBold: '╋',\n\tlineUpDownBoldLeftBoldRightBold: '╈',\n\tlineUpBoldDownLeftBoldRightBold: '╇',\n\tlineUpBoldDownBoldLeftRightBold: '╊',\n\tlineUpBoldDownBoldLeftBoldRight: '╉',\n\tlineUpBoldDownLeftRight: '╀',\n\tlineUpDownBoldLeftRight: '╁',\n\tlineUpDownLeftBoldRight: '┽',\n\tlineUpDownLeftRightBold: '┾',\n\tlineUpBoldDownBoldLeftRight: '╂',\n\tlineUpDownLeftBoldRightBold: '┿',\n\tlineUpBoldDownLeftBoldRight: '╃',\n\tlineUpBoldDownLeftRightBold: '╄',\n\tlineUpDownBoldLeftBoldRight: '╅',\n\tlineUpDownBoldLeftRightBold: '╆',\n\tlineUpDoubleDownDoubleLeftDoubleRightDouble: '╬',\n\tlineUpDoubleDownDoubleLeftRight: '╫',\n\tlineUpDownLeftDoubleRightDouble: '╪',\n\tlineCross: '╳',\n\tlineBackslash: '╲',\n\tlineSlash: '╱',\n};\n\nconst specialMainSymbols = {\n\ttick: '✔',\n\tinfo: 'ℹ',\n\twarning: '⚠',\n\tcross: '✘',\n\tsquareSmall: '◻',\n\tsquareSmallFilled: '◼',\n\tcircle: '◯',\n\tcircleFilled: '◉',\n\tcircleDotted: '◌',\n\tcircleDouble: '◎',\n\tcircleCircle: 'ⓞ',\n\tcircleCross: 'ⓧ',\n\tcirclePipe: 'Ⓘ',\n\tradioOn: '◉',\n\tradioOff: '◯',\n\tcheckboxOn: '☒',\n\tcheckboxOff: '☐',\n\tcheckboxCircleOn: 'ⓧ',\n\tcheckboxCircleOff: 'Ⓘ',\n\tpointer: '❯',\n\ttriangleUpOutline: '△',\n\ttriangleLeft: '◀',\n\ttriangleRight: '▶',\n\tlozenge: '◆',\n\tlozengeOutline: '◇',\n\thamburger: '☰',\n\tsmiley: '㋡',\n\tmustache: '෴',\n\tstar: '★',\n\tplay: '▶',\n\tnodejs: '⬢',\n\toneSeventh: '⅐',\n\toneNinth: '⅑',\n\toneTenth: '⅒',\n};\n\nconst specialFallbackSymbols = {\n\ttick: '√',\n\tinfo: 'i',\n\twarning: '‼',\n\tcross: '×',\n\tsquareSmall: '□',\n\tsquareSmallFilled: '■',\n\tcircle: '( )',\n\tcircleFilled: '(*)',\n\tcircleDotted: '( )',\n\tcircleDouble: '( )',\n\tcircleCircle: '(○)',\n\tcircleCross: '(×)',\n\tcirclePipe: '(│)',\n\tradioOn: '(*)',\n\tradioOff: '( )',\n\tcheckboxOn: '[×]',\n\tcheckboxOff: '[ ]',\n\tcheckboxCircleOn: '(×)',\n\tcheckboxCircleOff: '( )',\n\tpointer: '>',\n\ttriangleUpOutline: '∆',\n\ttriangleLeft: '◄',\n\ttriangleRight: '►',\n\tlozenge: '♦',\n\tlozengeOutline: '◊',\n\thamburger: '≡',\n\tsmiley: '☺',\n\tmustache: '┌─┐',\n\tstar: '✶',\n\tplay: '►',\n\tnodejs: '♦',\n\toneSeventh: '1/7',\n\toneNinth: '1/9',\n\toneTenth: '1/10',\n};\n\nexport const mainSymbols = {...common, ...specialMainSymbols};\nexport const fallbackSymbols = {...common, ...specialFallbackSymbols};\n\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain ? mainSymbols : fallbackSymbols;\nexport default figures;\n\nconst replacements = Object.entries(specialMainSymbols);\n\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, {useFallback = !shouldUseMain} = {}) => {\n\tif (useFallback) {\n\t\tfor (const [key, mainSymbol] of replacements) {\n\t\t\tstring = string.replaceAll(mainSymbol, fallbackSymbols[key]);\n\t\t}\n\t}\n\n\treturn string;\n};\n","import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\t// SGR 22 resets both bold (1) and dim (2). When we encounter a nested\n\t\t// close for styles that use 22, we need to re-open the outer style.\n\t\tconst reopenOnNestedClose = close === 22;\n\t\tconst replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + replaceCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\n","import figures from 'figures';\nimport {\n\tgray,\n\tbold,\n\tredBright,\n\tyellowBright,\n} from 'yoctocolors';\n\n// Default when `verbose` is not a function\nexport const defaultVerboseFunction = ({\n\ttype,\n\tmessage,\n\ttimestamp,\n\tpiped,\n\tcommandId,\n\tresult: {failed = false} = {},\n\toptions: {reject = true},\n}) => {\n\tconst timestampString = serializeTimestamp(timestamp);\n\tconst icon = ICONS[type]({failed, reject, piped});\n\tconst color = COLORS[type]({reject});\n\treturn `${gray(`[${timestampString}]`)} ${gray(`[${commandId}]`)} ${color(icon)} ${color(message)}`;\n};\n\n// Prepending the timestamp allows debugging the slow paths of a subprocess\nconst serializeTimestamp = timestamp => `${padField(timestamp.getHours(), 2)}:${padField(timestamp.getMinutes(), 2)}:${padField(timestamp.getSeconds(), 2)}.${padField(timestamp.getMilliseconds(), 3)}`;\n\nconst padField = (field, padding) => String(field).padStart(padding, '0');\n\nconst getFinalIcon = ({failed, reject}) => {\n\tif (!failed) {\n\t\treturn figures.tick;\n\t}\n\n\treturn reject ? figures.cross : figures.warning;\n};\n\nconst ICONS = {\n\tcommand: ({piped}) => piped ? '|' : '$',\n\toutput: () => ' ',\n\tipc: () => '*',\n\terror: getFinalIcon,\n\tduration: getFinalIcon,\n};\n\nconst identity = string => string;\n\nconst COLORS = {\n\tcommand: () => bold,\n\toutput: () => identity,\n\tipc: () => identity,\n\terror: ({reject}) => reject ? redBright : yellowBright,\n\tduration: () => gray,\n};\n","import {getVerboseFunction} from './values.js';\n\n// Apply the `verbose` function on each line\nexport const applyVerboseOnLines = (printedLines, verboseInfo, fdNumber) => {\n\tconst verboseFunction = getVerboseFunction(verboseInfo, fdNumber);\n\treturn printedLines\n\t\t.map(({verboseLine, verboseObject}) => applyVerboseFunction(verboseLine, verboseObject, verboseFunction))\n\t\t.filter(printedLine => printedLine !== undefined)\n\t\t.map(printedLine => appendNewline(printedLine))\n\t\t.join('');\n};\n\nconst applyVerboseFunction = (verboseLine, verboseObject, verboseFunction) => {\n\tif (verboseFunction === undefined) {\n\t\treturn verboseLine;\n\t}\n\n\tconst printedLine = verboseFunction(verboseLine, verboseObject);\n\tif (typeof printedLine === 'string') {\n\t\treturn printedLine;\n\t}\n};\n\nconst appendNewline = printedLine => printedLine.endsWith('\\n')\n\t? printedLine\n\t: `${printedLine}\\n`;\n","import {isVerbose} from './values.js';\nimport {verboseLog} from './log.js';\n\n// When `verbose` is `short|full|custom`, print each command\nexport const logCommand = (escapedCommand, verboseInfo) => {\n\tif (!isVerbose(verboseInfo)) {\n\t\treturn;\n\t}\n\n\tverboseLog({\n\t\ttype: 'command',\n\t\tverboseMessage: escapedCommand,\n\t\tverboseInfo,\n\t});\n};\n","import {isVerbose, VERBOSE_VALUES, isVerboseFunction} from './values.js';\n\n// Information computed before spawning, used by the `verbose` option\nexport const getVerboseInfo = (verbose, escapedCommand, rawOptions) => {\n\tvalidateVerbose(verbose);\n\tconst commandId = getCommandId(verbose);\n\treturn {\n\t\tverbose,\n\t\tescapedCommand,\n\t\tcommandId,\n\t\trawOptions,\n\t};\n};\n\nconst getCommandId = verbose => isVerbose({verbose}) ? COMMAND_ID++ : undefined;\n\n// Prepending the `pid` is useful when multiple commands print their output at the same time.\n// However, we cannot use the real PID since this is not available with `child_process.spawnSync()`.\n// Also, we cannot use the real PID if we want to print it before `child_process.spawn()` is run.\n// As a pro, it is shorter than a normal PID and never re-uses the same id.\n// As a con, it cannot be used to send signals.\nlet COMMAND_ID = 0n;\n\nconst validateVerbose = verbose => {\n\tfor (const fdVerbose of verbose) {\n\t\tif (fdVerbose === false) {\n\t\t\tthrow new TypeError('The \"verbose: false\" option was renamed to \"verbose: \\'none\\'\".');\n\t\t}\n\n\t\tif (fdVerbose === true) {\n\t\t\tthrow new TypeError('The \"verbose: true\" option was renamed to \"verbose: \\'short\\'\".');\n\t\t}\n\n\t\tif (!VERBOSE_VALUES.includes(fdVerbose) && !isVerboseFunction(fdVerbose)) {\n\t\t\tconst allowedValues = VERBOSE_VALUES.map(allowedValue => `'${allowedValue}'`).join(', ');\n\t\t\tthrow new TypeError(`The \"verbose\" option must not be ${fdVerbose}. Allowed values are: ${allowedValues} or a function.`);\n\t\t}\n\t}\n};\n","import {hrtime} from 'node:process';\n\n// Start counting time before spawning the subprocess\nexport const getStartTime = () => hrtime.bigint();\n\n// Compute duration after the subprocess ended.\n// Printed by the `verbose` option.\nexport const getDurationMs = startTime => Number(hrtime.bigint() - startTime) / 1e6;\n","import {logCommand} from '../verbose/start.js';\nimport {getVerboseInfo} from '../verbose/info.js';\nimport {getStartTime} from '../return/duration.js';\nimport {joinCommand} from './escape.js';\nimport {normalizeFdSpecificOption} from './specific.js';\n\n// Compute `result.command`, `result.escapedCommand` and `verbose`-related information\nexport const handleCommand = (filePath, rawArguments, rawOptions) => {\n\tconst startTime = getStartTime();\n\tconst {command, escapedCommand} = joinCommand(filePath, rawArguments);\n\tconst verbose = normalizeFdSpecificOption(rawOptions, 'verbose');\n\tconst verboseInfo = getVerboseInfo(verbose, escapedCommand, {...rawOptions});\n\tlogCommand(escapedCommand, verboseInfo);\n\treturn {\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t};\n};\n","import path from 'node:path';\nimport process from 'node:process';\nimport crossSpawn from 'cross-spawn';\nimport {npmRunPathEnv} from 'npm-run-path';\nimport {normalizeForceKillAfterDelay} from '../terminate/kill.js';\nimport {normalizeKillSignal} from '../terminate/signal.js';\nimport {validateCancelSignal} from '../terminate/cancel.js';\nimport {validateGracefulCancel} from '../terminate/graceful.js';\nimport {validateTimeout} from '../terminate/timeout.js';\nimport {handleNodeOption} from '../methods/node.js';\nimport {validateIpcInputOption} from '../ipc/ipc-input.js';\nimport {validateEncoding, BINARY_ENCODINGS} from './encoding-option.js';\nimport {normalizeCwd} from './cwd.js';\nimport {normalizeFileUrl} from './file-url.js';\nimport {normalizeFdSpecificOptions} from './specific.js';\n\n// Normalize the options object, and sometimes also the file paths and arguments.\n// Applies default values, validate allowed options, normalize them.\nexport const normalizeOptions = (filePath, rawArguments, rawOptions) => {\n\trawOptions.cwd = normalizeCwd(rawOptions.cwd);\n\tconst [processedFile, processedArguments, processedOptions] = handleNodeOption(filePath, rawArguments, rawOptions);\n\n\tconst {command: file, args: commandArguments, options: initialOptions} = crossSpawn._parse(processedFile, processedArguments, processedOptions);\n\n\tconst fdOptions = normalizeFdSpecificOptions(initialOptions);\n\tconst options = addDefaultOptions(fdOptions);\n\tvalidateTimeout(options);\n\tvalidateEncoding(options);\n\tvalidateIpcInputOption(options);\n\tvalidateCancelSignal(options);\n\tvalidateGracefulCancel(options);\n\toptions.shell = normalizeFileUrl(options.shell);\n\toptions.env = getEnv(options);\n\toptions.killSignal = normalizeKillSignal(options.killSignal);\n\toptions.forceKillAfterDelay = normalizeForceKillAfterDelay(options.forceKillAfterDelay);\n\toptions.lines = options.lines.map((lines, fdNumber) => lines && !BINARY_ENCODINGS.has(options.encoding) && options.buffer[fdNumber]);\n\n\tif (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {\n\t\t// #116\n\t\tcommandArguments.unshift('/q');\n\t}\n\n\treturn {file, commandArguments, options};\n};\n\nconst addDefaultOptions = ({\n\textendEnv = true,\n\tpreferLocal = false,\n\tcwd,\n\tlocalDir: localDirectory = cwd,\n\tencoding = 'utf8',\n\treject = true,\n\tcleanup = true,\n\tall = false,\n\twindowsHide = true,\n\tkillSignal = 'SIGTERM',\n\tforceKillAfterDelay = true,\n\tgracefulCancel = false,\n\tipcInput,\n\tipc = ipcInput !== undefined || gracefulCancel,\n\tserialization = 'advanced',\n\t...options\n}) => ({\n\t...options,\n\textendEnv,\n\tpreferLocal,\n\tcwd,\n\tlocalDirectory,\n\tencoding,\n\treject,\n\tcleanup,\n\tall,\n\twindowsHide,\n\tkillSignal,\n\tforceKillAfterDelay,\n\tgracefulCancel,\n\tipcInput,\n\tipc,\n\tserialization,\n});\n\nconst getEnv = ({env: envOption, extendEnv, preferLocal, node, localDirectory, nodePath}) => {\n\tconst env = extendEnv ? {...process.env, ...envOption} : envOption;\n\n\tif (preferLocal || node) {\n\t\treturn npmRunPathEnv({\n\t\t\tenv,\n\t\t\tcwd: localDirectory,\n\t\t\texecPath: nodePath,\n\t\t\tpreferLocal,\n\t\t\taddExecPath: node,\n\t\t});\n\t}\n\n\treturn env;\n};\n","import process from 'node:process';\nimport path from 'node:path';\nimport pathKey from 'path-key';\nimport {toPath, traversePathUp} from 'unicorn-magic';\n\nexport const npmRunPath = ({\n\tcwd = process.cwd(),\n\tpath: pathOption = process.env[pathKey()],\n\tpreferLocal = true,\n\texecPath = process.execPath,\n\taddExecPath = true,\n} = {}) => {\n\tconst cwdPath = path.resolve(toPath(cwd));\n\tconst result = [];\n\tconst pathParts = pathOption.split(path.delimiter);\n\n\tif (preferLocal) {\n\t\tapplyPreferLocal(result, pathParts, cwdPath);\n\t}\n\n\tif (addExecPath) {\n\t\tapplyExecPath(result, pathParts, execPath, cwdPath);\n\t}\n\n\treturn pathOption === '' || pathOption === path.delimiter\n\t\t? `${result.join(path.delimiter)}${pathOption}`\n\t\t: [...result, pathOption].join(path.delimiter);\n};\n\nconst applyPreferLocal = (result, pathParts, cwdPath) => {\n\tfor (const directory of traversePathUp(cwdPath)) {\n\t\tconst pathPart = path.join(directory, 'node_modules/.bin');\n\t\tif (!pathParts.includes(pathPart)) {\n\t\t\tresult.push(pathPart);\n\t\t}\n\t}\n};\n\n// Ensure the running `node` binary is used\nconst applyExecPath = (result, pathParts, execPath, cwdPath) => {\n\tconst pathPart = path.resolve(cwdPath, toPath(execPath), '..');\n\tif (!pathParts.includes(pathPart)) {\n\t\tresult.push(pathPart);\n\t}\n};\n\nexport const npmRunPathEnv = ({env = process.env, ...options} = {}) => {\n\tenv = {...env};\n\n\tconst pathName = pathKey({env});\n\toptions.path = env[pathName];\n\tenv[pathName] = npmRunPath(options);\n\n\treturn env;\n};\n","export default function pathKey(options = {}) {\n\tconst {\n\t\tenv = process.env,\n\t\tplatform = process.platform\n\t} = options;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n}\n","import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n","import {setTimeout} from 'node:timers/promises';\nimport {isErrorInstance} from '../return/final-error.js';\nimport {normalizeSignalArgument} from './signal.js';\n\n// Normalize the `forceKillAfterDelay` option\nexport const normalizeForceKillAfterDelay = forceKillAfterDelay => {\n\tif (forceKillAfterDelay === false) {\n\t\treturn forceKillAfterDelay;\n\t}\n\n\tif (forceKillAfterDelay === true) {\n\t\treturn DEFAULT_FORCE_KILL_TIMEOUT;\n\t}\n\n\tif (!Number.isFinite(forceKillAfterDelay) || forceKillAfterDelay < 0) {\n\t\tthrow new TypeError(`Expected the \\`forceKillAfterDelay\\` option to be a non-negative integer, got \\`${forceKillAfterDelay}\\` (${typeof forceKillAfterDelay})`);\n\t}\n\n\treturn forceKillAfterDelay;\n};\n\nconst DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;\n\n// Monkey-patches `subprocess.kill()` to add `forceKillAfterDelay` behavior and `.kill(error)`\nexport const subprocessKill = (\n\t{kill, options: {forceKillAfterDelay, killSignal}, onInternalError, context, controller},\n\tsignalOrError,\n\terrorArgument,\n) => {\n\tconst {signal, error} = parseKillArguments(signalOrError, errorArgument, killSignal);\n\temitKillError(error, onInternalError);\n\tconst killResult = kill(signal);\n\tsetKillTimeout({\n\t\tkill,\n\t\tsignal,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tkillResult,\n\t\tcontext,\n\t\tcontroller,\n\t});\n\treturn killResult;\n};\n\nconst parseKillArguments = (signalOrError, errorArgument, killSignal) => {\n\tconst [signal = killSignal, error] = isErrorInstance(signalOrError)\n\t\t? [undefined, signalOrError]\n\t\t: [signalOrError, errorArgument];\n\n\tif (typeof signal !== 'string' && !Number.isInteger(signal)) {\n\t\tthrow new TypeError(`The first argument must be an error instance or a signal name string/integer: ${String(signal)}`);\n\t}\n\n\tif (error !== undefined && !isErrorInstance(error)) {\n\t\tthrow new TypeError(`The second argument is optional. If specified, it must be an error instance: ${error}`);\n\t}\n\n\treturn {signal: normalizeSignalArgument(signal), error};\n};\n\n// Fails right away when calling `subprocess.kill(error)`.\n// Does not wait for actual signal termination.\n// Uses a deferred promise instead of the `error` event on the subprocess, as this is less intrusive.\nconst emitKillError = (error, onInternalError) => {\n\tif (error !== undefined) {\n\t\tonInternalError.reject(error);\n\t}\n};\n\nconst setKillTimeout = async ({kill, signal, forceKillAfterDelay, killSignal, killResult, context, controller}) => {\n\tif (signal === killSignal && killResult) {\n\t\tkillOnTimeout({\n\t\t\tkill,\n\t\t\tforceKillAfterDelay,\n\t\t\tcontext,\n\t\t\tcontrollerSignal: controller.signal,\n\t\t});\n\t}\n};\n\n// Forcefully terminate a subprocess after a timeout\nexport const killOnTimeout = async ({kill, forceKillAfterDelay, context, controllerSignal}) => {\n\tif (forceKillAfterDelay === false) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait setTimeout(forceKillAfterDelay, undefined, {signal: controllerSignal});\n\t\tif (kill('SIGKILL')) {\n\t\t\tcontext.isForcefullyTerminated ??= true;\n\t\t}\n\t} catch {}\n};\n","// When the subprocess fails, this is the error instance being returned.\n// If another error instance is being thrown, it is kept as `error.cause`.\nexport const getFinalError = (originalError, message, isSync) => {\n\tconst ErrorClass = isSync ? ExecaSyncError : ExecaError;\n\tconst options = originalError instanceof DiscardedError ? {} : {cause: originalError};\n\treturn new ErrorClass(message, options);\n};\n\n// Indicates that the error is used only to interrupt control flow, but not in the return value\nexport class DiscardedError extends Error {}\n\n// Proper way to set `error.name`: it should be inherited and non-enumerable\nconst setErrorName = (ErrorClass, value) => {\n\tObject.defineProperty(ErrorClass.prototype, 'name', {\n\t\tvalue,\n\t\twritable: true,\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t});\n\tObject.defineProperty(ErrorClass.prototype, execaErrorSymbol, {\n\t\tvalue: true,\n\t\twritable: false,\n\t\tenumerable: false,\n\t\tconfigurable: false,\n\t});\n};\n\n// Unlike `instanceof`, this works across realms\nexport const isExecaError = error => isErrorInstance(error) && execaErrorSymbol in error;\n\nconst execaErrorSymbol = Symbol('isExecaError');\n\nexport const isErrorInstance = value => Object.prototype.toString.call(value) === '[object Error]';\n\n// We use two different Error classes for async/sync methods since they have slightly different shape and types\nexport class ExecaError extends Error {}\nsetErrorName(ExecaError, ExecaError.name);\n\nexport class ExecaSyncError extends Error {}\nsetErrorName(ExecaSyncError, ExecaSyncError.name);\n","import {constants} from 'node:os';\nimport {signalsByName} from 'human-signals';\n\n// Normalize signals for comparison purpose.\n// Also validate the signal exists.\nexport const normalizeKillSignal = killSignal => {\n\tconst optionName = 'option `killSignal`';\n\tif (killSignal === 0) {\n\t\tthrow new TypeError(`Invalid ${optionName}: 0 cannot be used.`);\n\t}\n\n\treturn normalizeSignal(killSignal, optionName);\n};\n\nexport const normalizeSignalArgument = signal => signal === 0\n\t? signal\n\t: normalizeSignal(signal, '`subprocess.kill()`\\'s argument');\n\nconst normalizeSignal = (signalNameOrInteger, optionName) => {\n\tif (Number.isInteger(signalNameOrInteger)) {\n\t\treturn normalizeSignalInteger(signalNameOrInteger, optionName);\n\t}\n\n\tif (typeof signalNameOrInteger === 'string') {\n\t\treturn normalizeSignalName(signalNameOrInteger, optionName);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} ${String(signalNameOrInteger)}: it must be a string or an integer.\\n${getAvailableSignals()}`);\n};\n\nconst normalizeSignalInteger = (signalInteger, optionName) => {\n\tif (signalsIntegerToName.has(signalInteger)) {\n\t\treturn signalsIntegerToName.get(signalInteger);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} ${signalInteger}: this signal integer does not exist.\\n${getAvailableSignals()}`);\n};\n\nconst getSignalsIntegerToName = () => new Map(Object.entries(constants.signals)\n\t.reverse()\n\t.map(([signalName, signalInteger]) => [signalInteger, signalName]));\n\nconst signalsIntegerToName = getSignalsIntegerToName();\n\nconst normalizeSignalName = (signalName, optionName) => {\n\tif (signalName in constants.signals) {\n\t\treturn signalName;\n\t}\n\n\tif (signalName.toUpperCase() in constants.signals) {\n\t\tthrow new TypeError(`Invalid ${optionName} '${signalName}': please rename it to '${signalName.toUpperCase()}'.`);\n\t}\n\n\tthrow new TypeError(`Invalid ${optionName} '${signalName}': this signal name does not exist.\\n${getAvailableSignals()}`);\n};\n\nconst getAvailableSignals = () => `Available signal names: ${getAvailableSignalNames()}.\nAvailable signal numbers: ${getAvailableSignalIntegers()}.`;\n\nconst getAvailableSignalNames = () => Object.keys(constants.signals)\n\t.sort()\n\t.map(signalName => `'${signalName}'`)\n\t.join(', ');\n\nconst getAvailableSignalIntegers = () => [...new Set(Object.values(constants.signals)\n\t.sort((signalInteger, signalIntegerTwo) => signalInteger - signalIntegerTwo))]\n\t.join(', ');\n\n// Human-friendly description of a signal\nexport const getSignalDescription = signal => signalsByName[signal].description;\n","import{constants}from\"node:os\";\n\nimport{SIGRTMAX}from\"./realtime.js\";\nimport{getSignals}from\"./signals.js\";\n\n\n\nconst getSignalsByName=()=>{\nconst signals=getSignals();\nreturn Object.fromEntries(signals.map(getSignalByName))\n};\n\nconst getSignalByName=({\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard\n})=>[name,{name,number,description,supported,action,forced,standard}];\n\nexport const signalsByName=getSignalsByName();\n\n\n\n\nconst getSignalsByNumber=()=>{\nconst signals=getSignals();\nconst length=SIGRTMAX+1;\nconst signalsA=Array.from({length},(value,number)=>\ngetSignalByNumber(number,signals)\n);\nreturn Object.assign({},...signalsA)\n};\n\nconst getSignalByNumber=(number,signals)=>{\nconst signal=findSignalByNumber(number,signals);\n\nif(signal===undefined){\nreturn{}\n}\n\nconst{name,description,supported,action,forced,standard}=signal;\nreturn{\n[number]:{\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard\n}\n}\n};\n\n\n\nconst findSignalByNumber=(number,signals)=>{\nconst signal=signals.find(({name})=>constants.signals[name]===number);\n\nif(signal!==undefined){\nreturn signal\n}\n\nreturn signals.find((signalA)=>signalA.number===number)\n};\n\nexport const signalsByNumber=getSignalsByNumber();","\nexport const getRealtimeSignals=()=>{\nconst length=SIGRTMAX-SIGRTMIN+1;\nreturn Array.from({length},getRealtimeSignal)\n};\n\nconst getRealtimeSignal=(value,index)=>({\nname:`SIGRT${index+1}`,\nnumber:SIGRTMIN+index,\naction:\"terminate\",\ndescription:\"Application-specific signal (realtime)\",\nstandard:\"posix\"\n});\n\nconst SIGRTMIN=34;\nexport const SIGRTMAX=64;","import{constants}from\"node:os\";\n\nimport{SIGNALS}from\"./core.js\";\nimport{getRealtimeSignals}from\"./realtime.js\";\n\n\n\nexport const getSignals=()=>{\nconst realtimeSignals=getRealtimeSignals();\nconst signals=[...SIGNALS,...realtimeSignals].map(normalizeSignal);\nreturn signals\n};\n\n\n\n\n\n\n\nconst normalizeSignal=({\nname,\nnumber:defaultNumber,\ndescription,\naction,\nforced=false,\nstandard\n})=>{\nconst{\nsignals:{[name]:constantSignal}\n}=constants;\nconst supported=constantSignal!==undefined;\nconst number=supported?constantSignal:defaultNumber;\nreturn{name,number,description,supported,action,forced,standard}\n};","\n\nexport const SIGNALS=[\n{\nname:\"SIGHUP\",\nnumber:1,\naction:\"terminate\",\ndescription:\"Terminal closed\",\nstandard:\"posix\"\n},\n{\nname:\"SIGINT\",\nnumber:2,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-C\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGQUIT\",\nnumber:3,\naction:\"core\",\ndescription:\"User interruption with CTRL-\\\\\",\nstandard:\"posix\"\n},\n{\nname:\"SIGILL\",\nnumber:4,\naction:\"core\",\ndescription:\"Invalid machine instruction\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGTRAP\",\nnumber:5,\naction:\"core\",\ndescription:\"Debugger breakpoint\",\nstandard:\"posix\"\n},\n{\nname:\"SIGABRT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGIOT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGBUS\",\nnumber:7,\naction:\"core\",\ndescription:\n\"Bus error due to misaligned, non-existing address or paging error\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGEMT\",\nnumber:7,\naction:\"terminate\",\ndescription:\"Command should be emulated but is not implemented\",\nstandard:\"other\"\n},\n{\nname:\"SIGFPE\",\nnumber:8,\naction:\"core\",\ndescription:\"Floating point arithmetic error\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGKILL\",\nnumber:9,\naction:\"terminate\",\ndescription:\"Forced termination\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGUSR1\",\nnumber:10,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"\n},\n{\nname:\"SIGSEGV\",\nnumber:11,\naction:\"core\",\ndescription:\"Segmentation fault\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGUSR2\",\nnumber:12,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"\n},\n{\nname:\"SIGPIPE\",\nnumber:13,\naction:\"terminate\",\ndescription:\"Broken pipe or socket\",\nstandard:\"posix\"\n},\n{\nname:\"SIGALRM\",\nnumber:14,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"posix\"\n},\n{\nname:\"SIGTERM\",\nnumber:15,\naction:\"terminate\",\ndescription:\"Termination\",\nstandard:\"ansi\"\n},\n{\nname:\"SIGSTKFLT\",\nnumber:16,\naction:\"terminate\",\ndescription:\"Stack is empty or overflowed\",\nstandard:\"other\"\n},\n{\nname:\"SIGCHLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"posix\"\n},\n{\nname:\"SIGCLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"other\"\n},\n{\nname:\"SIGCONT\",\nnumber:18,\naction:\"unpause\",\ndescription:\"Unpaused\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGSTOP\",\nnumber:19,\naction:\"pause\",\ndescription:\"Paused\",\nstandard:\"posix\",\nforced:true\n},\n{\nname:\"SIGTSTP\",\nnumber:20,\naction:\"pause\",\ndescription:\"Paused using CTRL-Z or \\\"suspend\\\"\",\nstandard:\"posix\"\n},\n{\nname:\"SIGTTIN\",\nnumber:21,\naction:\"pause\",\ndescription:\"Background process cannot read terminal input\",\nstandard:\"posix\"\n},\n{\nname:\"SIGBREAK\",\nnumber:21,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-BREAK\",\nstandard:\"other\"\n},\n{\nname:\"SIGTTOU\",\nnumber:22,\naction:\"pause\",\ndescription:\"Background process cannot write to terminal output\",\nstandard:\"posix\"\n},\n{\nname:\"SIGURG\",\nnumber:23,\naction:\"ignore\",\ndescription:\"Socket received out-of-band data\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGXCPU\",\nnumber:24,\naction:\"core\",\ndescription:\"Process timed out\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGXFSZ\",\nnumber:25,\naction:\"core\",\ndescription:\"File too big\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGVTALRM\",\nnumber:26,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGPROF\",\nnumber:27,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGWINCH\",\nnumber:28,\naction:\"ignore\",\ndescription:\"Terminal window size changed\",\nstandard:\"bsd\"\n},\n{\nname:\"SIGIO\",\nnumber:29,\naction:\"terminate\",\ndescription:\"I/O is available\",\nstandard:\"other\"\n},\n{\nname:\"SIGPOLL\",\nnumber:29,\naction:\"terminate\",\ndescription:\"Watched event\",\nstandard:\"other\"\n},\n{\nname:\"SIGINFO\",\nnumber:29,\naction:\"ignore\",\ndescription:\"Request for process information\",\nstandard:\"other\"\n},\n{\nname:\"SIGPWR\",\nnumber:30,\naction:\"terminate\",\ndescription:\"Device running out of power\",\nstandard:\"systemv\"\n},\n{\nname:\"SIGSYS\",\nnumber:31,\naction:\"core\",\ndescription:\"Invalid system call\",\nstandard:\"other\"\n},\n{\nname:\"SIGUNUSED\",\nnumber:31,\naction:\"terminate\",\ndescription:\"Invalid system call\",\nstandard:\"other\"\n}];","import {once} from 'node:events';\n\n// Combines `util.aborted()` and `events.addAbortListener()`: promise-based and cleaned up with a stop signal\nexport const onAbortedSignal = async (mainSignal, stopSignal) => {\n\tif (!mainSignal.aborted) {\n\t\tawait once(mainSignal, 'abort', {signal: stopSignal});\n\t}\n};\n","import {onAbortedSignal} from '../utils/abort-signal.js';\n\n// Validate the `cancelSignal` option\nexport const validateCancelSignal = ({cancelSignal}) => {\n\tif (cancelSignal !== undefined && Object.prototype.toString.call(cancelSignal) !== '[object AbortSignal]') {\n\t\tthrow new Error(`The \\`cancelSignal\\` option must be an AbortSignal: ${String(cancelSignal)}`);\n\t}\n};\n\n// Terminate the subprocess when aborting the `cancelSignal` option and `gracefulSignal` is `false`\nexport const throwOnCancel = ({subprocess, cancelSignal, gracefulCancel, context, controller}) => cancelSignal === undefined || gracefulCancel\n\t? []\n\t: [terminateOnCancel(subprocess, cancelSignal, context, controller)];\n\nconst terminateOnCancel = async (subprocess, cancelSignal, context, {signal}) => {\n\tawait onAbortedSignal(cancelSignal, signal);\n\tcontext.terminationReason ??= 'cancel';\n\tsubprocess.kill();\n\tthrow cancelSignal.reason;\n};\n","import {scheduler} from 'node:timers/promises';\nimport {sendOneMessage} from './send.js';\nimport {getIpcEmitter} from './forward.js';\nimport {validateConnection, getAbortDisconnectError, throwOnMissingParent} from './validation.js';\n\n// Send an IPC message so the subprocess performs a graceful termination\nexport const sendAbort = (subprocess, message) => {\n\tconst methodName = 'cancelSignal';\n\tvalidateConnection(methodName, false, subprocess.connected);\n\treturn sendOneMessage({\n\t\tanyProcess: subprocess,\n\t\tmethodName,\n\t\tisSubprocess: false,\n\t\twrappedMessage: {type: GRACEFUL_CANCEL_TYPE, message},\n\t\tmessage,\n\t});\n};\n\n// When the signal is being used, start listening for incoming messages.\n// Unbuffering messages takes one microtask to complete, so this must be async.\nexport const getCancelSignal = async ({anyProcess, channel, isSubprocess, ipc}) => {\n\tawait startIpc({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipc,\n\t});\n\treturn cancelController.signal;\n};\n\nconst startIpc = async ({anyProcess, channel, isSubprocess, ipc}) => {\n\tif (cancelListening) {\n\t\treturn;\n\t}\n\n\tcancelListening = true;\n\n\tif (!ipc) {\n\t\tthrowOnMissingParent();\n\t\treturn;\n\t}\n\n\tif (channel === null) {\n\t\tabortOnDisconnect();\n\t\treturn;\n\t}\n\n\tgetIpcEmitter(anyProcess, channel, isSubprocess);\n\tawait scheduler.yield();\n};\n\nlet cancelListening = false;\n\n// Reception of IPC message to perform a graceful termination\nexport const handleAbort = wrappedMessage => {\n\tif (wrappedMessage?.type !== GRACEFUL_CANCEL_TYPE) {\n\t\treturn false;\n\t}\n\n\tcancelController.abort(wrappedMessage.message);\n\treturn true;\n};\n\nconst GRACEFUL_CANCEL_TYPE = 'execa:ipc:cancel';\n\n// When the current process disconnects early, the subprocess `cancelSignal` is aborted.\n// Otherwise, the signal would never be able to be aborted later on.\nexport const abortOnDisconnect = () => {\n\tcancelController.abort(getAbortDisconnectError());\n};\n\nconst cancelController = new AbortController();\n","import {promisify} from 'node:util';\nimport {\n\tvalidateIpcMethod,\n\thandleEpipeError,\n\thandleSerializationError,\n\tdisconnect,\n} from './validation.js';\nimport {startSendMessage, endSendMessage} from './outgoing.js';\nimport {handleSendStrict, waitForStrictResponse} from './strict.js';\n\n// Like `[sub]process.send()` but promise-based.\n// We do not `await subprocess` during `.sendMessage()` nor `.getOneMessage()` since those methods are transient.\n// Users would still need to `await subprocess` after the method is done.\n// Also, this would prevent `unhandledRejection` event from being emitted, making it silent.\nexport const sendMessage = ({anyProcess, channel, isSubprocess, ipc}, message, {strict = false} = {}) => {\n\tconst methodName = 'sendMessage';\n\tvalidateIpcMethod({\n\t\tmethodName,\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: anyProcess.connected,\n\t});\n\n\treturn sendMessageAsync({\n\t\tanyProcess,\n\t\tchannel,\n\t\tmethodName,\n\t\tisSubprocess,\n\t\tmessage,\n\t\tstrict,\n\t});\n};\n\nconst sendMessageAsync = async ({anyProcess, channel, methodName, isSubprocess, message, strict}) => {\n\tconst wrappedMessage = handleSendStrict({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tmessage,\n\t\tstrict,\n\t});\n\tconst outgoingMessagesState = startSendMessage(anyProcess, wrappedMessage, strict);\n\ttry {\n\t\tawait sendOneMessage({\n\t\t\tanyProcess,\n\t\t\tmethodName,\n\t\t\tisSubprocess,\n\t\t\twrappedMessage,\n\t\t\tmessage,\n\t\t});\n\t} catch (error) {\n\t\tdisconnect(anyProcess);\n\t\tthrow error;\n\t} finally {\n\t\tendSendMessage(outgoingMessagesState);\n\t}\n};\n\n// Used internally by `cancelSignal`\nexport const sendOneMessage = async ({anyProcess, methodName, isSubprocess, wrappedMessage, message}) => {\n\tconst sendMethod = getSendMethod(anyProcess);\n\n\ttry {\n\t\tawait Promise.all([\n\t\t\twaitForStrictResponse(wrappedMessage, anyProcess, isSubprocess),\n\t\t\tsendMethod(wrappedMessage),\n\t\t]);\n\t} catch (error) {\n\t\thandleEpipeError({error, methodName, isSubprocess});\n\t\thandleSerializationError({\n\t\t\terror,\n\t\t\tmethodName,\n\t\t\tisSubprocess,\n\t\t\tmessage,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n// [sub]process.send() promisified, memoized\nconst getSendMethod = anyProcess => {\n\tif (PROCESS_SEND_METHODS.has(anyProcess)) {\n\t\treturn PROCESS_SEND_METHODS.get(anyProcess);\n\t}\n\n\tconst sendMethod = promisify(anyProcess.send.bind(anyProcess));\n\tPROCESS_SEND_METHODS.set(anyProcess, sendMethod);\n\treturn sendMethod;\n};\n\nconst PROCESS_SEND_METHODS = new WeakMap();\n","// Validate the IPC channel is connected before receiving/sending messages\nexport const validateIpcMethod = ({methodName, isSubprocess, ipc, isConnected}) => {\n\tvalidateIpcOption(methodName, isSubprocess, ipc);\n\tvalidateConnection(methodName, isSubprocess, isConnected);\n};\n\n// Better error message when forgetting to set `ipc: true` and using the IPC methods\nconst validateIpcOption = (methodName, isSubprocess, ipc) => {\n\tif (!ipc) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} can only be used if the \\`ipc\\` option is \\`true\\`.`);\n\t}\n};\n\n// Better error message when one process does not send/receive messages once the other process has disconnected.\n// This also makes it clear that any buffered messages are lost once either process has disconnected.\n// Also when aborting `cancelSignal` after disconnecting the IPC.\nexport const validateConnection = (methodName, isSubprocess, isConnected) => {\n\tif (!isConnected) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} has already exited or disconnected.`);\n\t}\n};\n\n// When `getOneMessage()` could not complete due to an early disconnection\nexport const throwOnEarlyDisconnect = isSubprocess => {\n\tthrow new Error(`${getMethodName('getOneMessage', isSubprocess)} could not complete: the ${getOtherProcessName(isSubprocess)} exited or disconnected.`);\n};\n\n// When both processes use `sendMessage()` with `strict` at the same time\nexport const throwOnStrictDeadlockError = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is sending a message too, instead of listening to incoming messages.\nThis can be fixed by both sending a message and listening to incoming messages at the same time:\n\nconst [receivedMessage] = await Promise.all([\n\t${getMethodName('getOneMessage', isSubprocess)},\n\t${getMethodName('sendMessage', isSubprocess, 'message, {strict: true}')},\n]);`);\n};\n\n// When the other process used `strict` but the current process had I/O error calling `sendMessage()` for the response\nexport const getStrictResponseError = (error, isSubprocess) => new Error(`${getMethodName('sendMessage', isSubprocess)} failed when sending an acknowledgment response to the ${getOtherProcessName(isSubprocess)}.`, {cause: error});\n\n// When using `strict` but the other process was not listening for messages\nexport const throwOnMissingStrict = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is not listening to incoming messages.`);\n};\n\n// When using `strict` but the other process disconnected before receiving the message\nexport const throwOnStrictDisconnect = isSubprocess => {\n\tthrow new Error(`${getMethodName('sendMessage', isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} exited without listening to incoming messages.`);\n};\n\n// When the current process disconnects while the subprocess is listening to `cancelSignal`\nexport const getAbortDisconnectError = () => new Error(`\\`cancelSignal\\` aborted: the ${getOtherProcessName(true)} disconnected.`);\n\n// When the subprocess uses `cancelSignal` but not the current process\nexport const throwOnMissingParent = () => {\n\tthrow new Error('`getCancelSignal()` cannot be used without setting the `cancelSignal` subprocess option.');\n};\n\n// EPIPE can happen when sending a message to a subprocess that is closing but has not disconnected yet\nexport const handleEpipeError = ({error, methodName, isSubprocess}) => {\n\tif (error.code === 'EPIPE') {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} is disconnecting.`, {cause: error});\n\t}\n};\n\n// Better error message when sending messages which cannot be serialized.\n// Works with both `serialization: 'advanced'` and `serialization: 'json'`.\nexport const handleSerializationError = ({error, methodName, isSubprocess, message}) => {\n\tif (isSerializationError(error)) {\n\t\tthrow new Error(`${getMethodName(methodName, isSubprocess)}'s argument type is invalid: the message cannot be serialized: ${String(message)}.`, {cause: error});\n\t}\n};\n\nconst isSerializationError = ({code, message}) => SERIALIZATION_ERROR_CODES.has(code)\n\t|| SERIALIZATION_ERROR_MESSAGES.some(serializationErrorMessage => message.includes(serializationErrorMessage));\n\n// `error.code` set by Node.js when it failed to serialize the message\nconst SERIALIZATION_ERROR_CODES = new Set([\n\t// Message is `undefined`\n\t'ERR_MISSING_ARGS',\n\t// Message is a function, a bigint, a symbol\n\t'ERR_INVALID_ARG_TYPE',\n]);\n\n// `error.message` set by Node.js when it failed to serialize the message\nconst SERIALIZATION_ERROR_MESSAGES = [\n\t// Message is a promise or a proxy, with `serialization: 'advanced'`\n\t'could not be cloned',\n\t// Message has cycles, with `serialization: 'json'`\n\t'circular structure',\n\t// Message has cycles inside toJSON(), with `serialization: 'json'`\n\t'call stack size exceeded',\n];\n\nconst getMethodName = (methodName, isSubprocess, parameters = '') => methodName === 'cancelSignal'\n\t? '`cancelSignal`\\'s `controller.abort()`'\n\t: `${getNamespaceName(isSubprocess)}${methodName}(${parameters})`;\n\nconst getNamespaceName = isSubprocess => isSubprocess ? '' : 'subprocess.';\n\nconst getOtherProcessName = isSubprocess => isSubprocess ? 'parent process' : 'subprocess';\n\n// When any error arises, we disconnect the IPC.\n// Otherwise, it is likely that one of the processes will stop sending/receiving messages.\n// This would leave the other process hanging.\nexport const disconnect = anyProcess => {\n\tif (anyProcess.connected) {\n\t\tanyProcess.disconnect();\n\t}\n};\n","export const createDeferred = () => {\n\tconst methods = {};\n\tconst promise = new Promise((resolve, reject) => {\n\t\tObject.assign(methods, {resolve, reject});\n\t});\n\treturn Object.assign(promise, methods);\n};\n","import {parseFd} from './specific.js';\n\n// Retrieve stream targeted by the `to` option\nexport const getToStream = (destination, to = 'stdin') => {\n\tconst isWritable = true;\n\tconst {options, fileDescriptors} = SUBPROCESS_OPTIONS.get(destination);\n\tconst fdNumber = getFdNumber(fileDescriptors, to, isWritable);\n\tconst destinationStream = destination.stdio[fdNumber];\n\n\tif (destinationStream === null) {\n\t\tthrow new TypeError(getInvalidStdioOptionMessage(fdNumber, to, options, isWritable));\n\t}\n\n\treturn destinationStream;\n};\n\n// Retrieve stream targeted by the `from` option\nexport const getFromStream = (source, from = 'stdout') => {\n\tconst isWritable = false;\n\tconst {options, fileDescriptors} = SUBPROCESS_OPTIONS.get(source);\n\tconst fdNumber = getFdNumber(fileDescriptors, from, isWritable);\n\tconst sourceStream = fdNumber === 'all' ? source.all : source.stdio[fdNumber];\n\n\tif (sourceStream === null || sourceStream === undefined) {\n\t\tthrow new TypeError(getInvalidStdioOptionMessage(fdNumber, from, options, isWritable));\n\t}\n\n\treturn sourceStream;\n};\n\n// Keeps track of the options passed to each Execa call\nexport const SUBPROCESS_OPTIONS = new WeakMap();\n\nconst getFdNumber = (fileDescriptors, fdName, isWritable) => {\n\tconst fdNumber = parseFdNumber(fdName, isWritable);\n\tvalidateFdNumber(fdNumber, fdName, isWritable, fileDescriptors);\n\treturn fdNumber;\n};\n\nconst parseFdNumber = (fdName, isWritable) => {\n\tconst fdNumber = parseFd(fdName);\n\tif (fdNumber !== undefined) {\n\t\treturn fdNumber;\n\t}\n\n\tconst {validOptions, defaultValue} = isWritable\n\t\t? {validOptions: '\"stdin\"', defaultValue: 'stdin'}\n\t\t: {validOptions: '\"stdout\", \"stderr\", \"all\"', defaultValue: 'stdout'};\n\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be \"${fdName}\".\nIt must be ${validOptions} or \"fd3\", \"fd4\" (and so on).\nIt is optional and defaults to \"${defaultValue}\".`);\n};\n\nconst validateFdNumber = (fdNumber, fdName, isWritable, fileDescriptors) => {\n\tconst fileDescriptor = fileDescriptors[getUsedDescriptor(fdNumber)];\n\tif (fileDescriptor === undefined) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. That file descriptor does not exist.\nPlease set the \"stdio\" option to ensure that file descriptor exists.`);\n\t}\n\n\tif (fileDescriptor.direction === 'input' && !isWritable) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. It must be a readable stream, not writable.`);\n\t}\n\n\tif (fileDescriptor.direction !== 'input' && isWritable) {\n\t\tthrow new TypeError(`\"${getOptionName(isWritable)}\" must not be ${fdName}. It must be a writable stream, not readable.`);\n\t}\n};\n\nconst getInvalidStdioOptionMessage = (fdNumber, fdName, options, isWritable) => {\n\tif (fdNumber === 'all' && !options.all) {\n\t\treturn 'The \"all\" option must be true to use \"from: \\'all\\'\".';\n\t}\n\n\tconst {optionName, optionValue} = getInvalidStdioOption(fdNumber, options);\n\treturn `The \"${optionName}: ${serializeOptionValue(optionValue)}\" option is incompatible with using \"${getOptionName(isWritable)}: ${serializeOptionValue(fdName)}\".\nPlease set this option with \"pipe\" instead.`;\n};\n\nconst getInvalidStdioOption = (fdNumber, {stdin, stdout, stderr, stdio}) => {\n\tconst usedDescriptor = getUsedDescriptor(fdNumber);\n\n\tif (usedDescriptor === 0 && stdin !== undefined) {\n\t\treturn {optionName: 'stdin', optionValue: stdin};\n\t}\n\n\tif (usedDescriptor === 1 && stdout !== undefined) {\n\t\treturn {optionName: 'stdout', optionValue: stdout};\n\t}\n\n\tif (usedDescriptor === 2 && stderr !== undefined) {\n\t\treturn {optionName: 'stderr', optionValue: stderr};\n\t}\n\n\treturn {optionName: `stdio[${usedDescriptor}]`, optionValue: stdio[usedDescriptor]};\n};\n\nconst getUsedDescriptor = fdNumber => fdNumber === 'all' ? 1 : fdNumber;\n\nconst getOptionName = isWritable => isWritable ? 'to' : 'from';\n\nexport const serializeOptionValue = value => {\n\tif (typeof value === 'string') {\n\t\treturn `'${value}'`;\n\t}\n\n\treturn typeof value === 'number' ? `${value}` : 'Stream';\n};\n","import {once} from 'node:events';\nimport {createDeferred} from '../utils/deferred.js';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {sendMessage} from './send.js';\nimport {throwOnMissingStrict, throwOnStrictDisconnect, throwOnStrictDeadlockError} from './validation.js';\nimport {getIpcEmitter} from './forward.js';\nimport {hasMessageListeners} from './outgoing.js';\n\n// When using the `strict` option, wrap the message with metadata during `sendMessage()`\nexport const handleSendStrict = ({anyProcess, channel, isSubprocess, message, strict}) => {\n\tif (!strict) {\n\t\treturn message;\n\t}\n\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst hasListeners = hasMessageListeners(anyProcess, ipcEmitter);\n\treturn {\n\t\tid: count++,\n\t\ttype: REQUEST_TYPE,\n\t\tmessage,\n\t\thasListeners,\n\t};\n};\n\nlet count = 0n;\n\n// Handles when both processes are calling `sendMessage()` with `strict` at the same time.\n// If neither process is listening, this would create a deadlock. We detect it and throw.\nexport const validateStrictDeadlock = (outgoingMessages, wrappedMessage) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE || wrappedMessage.hasListeners) {\n\t\treturn;\n\t}\n\n\tfor (const {id} of outgoingMessages) {\n\t\tif (id !== undefined) {\n\t\t\tSTRICT_RESPONSES[id].resolve({isDeadlock: true, hasListeners: false});\n\t\t}\n\t}\n};\n\n// The other process then sends the acknowledgment back as a response\nexport const handleStrictRequest = async ({wrappedMessage, anyProcess, channel, isSubprocess, ipcEmitter}) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE || !anyProcess.connected) {\n\t\treturn wrappedMessage;\n\t}\n\n\tconst {id, message} = wrappedMessage;\n\tconst response = {id, type: RESPONSE_TYPE, message: hasMessageListeners(anyProcess, ipcEmitter)};\n\n\ttry {\n\t\tawait sendMessage({\n\t\t\tanyProcess,\n\t\t\tchannel,\n\t\t\tisSubprocess,\n\t\t\tipc: true,\n\t\t}, response);\n\t} catch (error) {\n\t\tipcEmitter.emit('strict:error', error);\n\t}\n\n\treturn message;\n};\n\n// Reception of the acknowledgment response\nexport const handleStrictResponse = wrappedMessage => {\n\tif (wrappedMessage?.type !== RESPONSE_TYPE) {\n\t\treturn false;\n\t}\n\n\tconst {id, message: hasListeners} = wrappedMessage;\n\tSTRICT_RESPONSES[id]?.resolve({isDeadlock: false, hasListeners});\n\treturn true;\n};\n\n// Wait for the other process to receive the message from `sendMessage()`\nexport const waitForStrictResponse = async (wrappedMessage, anyProcess, isSubprocess) => {\n\tif (wrappedMessage?.type !== REQUEST_TYPE) {\n\t\treturn;\n\t}\n\n\tconst deferred = createDeferred();\n\tSTRICT_RESPONSES[wrappedMessage.id] = deferred;\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tconst {isDeadlock, hasListeners} = await Promise.race([\n\t\t\tdeferred,\n\t\t\tthrowOnDisconnect(anyProcess, isSubprocess, controller),\n\t\t]);\n\n\t\tif (isDeadlock) {\n\t\t\tthrowOnStrictDeadlockError(isSubprocess);\n\t\t}\n\n\t\tif (!hasListeners) {\n\t\t\tthrowOnMissingStrict(isSubprocess);\n\t\t}\n\t} finally {\n\t\tcontroller.abort();\n\t\tdelete STRICT_RESPONSES[wrappedMessage.id];\n\t}\n};\n\nconst STRICT_RESPONSES = {};\n\nconst throwOnDisconnect = async (anyProcess, isSubprocess, {signal}) => {\n\tincrementMaxListeners(anyProcess, 1, signal);\n\tawait once(anyProcess, 'disconnect', {signal});\n\tthrowOnStrictDisconnect(isSubprocess);\n};\n\nconst REQUEST_TYPE = 'execa:ipc:request';\nconst RESPONSE_TYPE = 'execa:ipc:response';\n","import {addAbortListener} from 'node:events';\n\n// Temporarily increase the maximum number of listeners on an eventEmitter\nexport const incrementMaxListeners = (eventEmitter, maxListenersIncrement, signal) => {\n\tconst maxListeners = eventEmitter.getMaxListeners();\n\tif (maxListeners === 0 || maxListeners === Number.POSITIVE_INFINITY) {\n\t\treturn;\n\t}\n\n\teventEmitter.setMaxListeners(maxListeners + maxListenersIncrement);\n\taddAbortListener(signal, () => {\n\t\teventEmitter.setMaxListeners(eventEmitter.getMaxListeners() - maxListenersIncrement);\n\t});\n};\n","import {EventEmitter} from 'node:events';\nimport {onMessage, onDisconnect} from './incoming.js';\nimport {undoAddedReferences} from './reference.js';\n\n// Forward the `message` and `disconnect` events from the process and subprocess to a proxy emitter.\n// This prevents the `error` event from stopping IPC.\n// This also allows debouncing the `message` event.\nexport const getIpcEmitter = (anyProcess, channel, isSubprocess) => {\n\tif (IPC_EMITTERS.has(anyProcess)) {\n\t\treturn IPC_EMITTERS.get(anyProcess);\n\t}\n\n\t// Use an `EventEmitter`, like the `process` that is being proxied\n\t// eslint-disable-next-line unicorn/prefer-event-target\n\tconst ipcEmitter = new EventEmitter();\n\tipcEmitter.connected = true;\n\tIPC_EMITTERS.set(anyProcess, ipcEmitter);\n\tforwardEvents({\n\t\tipcEmitter,\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t});\n\treturn ipcEmitter;\n};\n\nconst IPC_EMITTERS = new WeakMap();\n\n// The `message` and `disconnect` events are buffered in the subprocess until the first listener is setup.\n// However, unbuffering happens after one tick, so this give enough time for the caller to setup the listener on the proxy emitter first.\n// See https://github.com/nodejs/node/blob/2aaeaa863c35befa2ebaa98fb7737ec84df4d8e9/lib/internal/child_process.js#L721\nconst forwardEvents = ({ipcEmitter, anyProcess, channel, isSubprocess}) => {\n\tconst boundOnMessage = onMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipcEmitter,\n\t});\n\tanyProcess.on('message', boundOnMessage);\n\tanyProcess.once('disconnect', onDisconnect.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tipcEmitter,\n\t\tboundOnMessage,\n\t}));\n\tundoAddedReferences(channel, isSubprocess);\n};\n\n// Check whether there might still be some `message` events to receive\nexport const isConnected = anyProcess => {\n\tconst ipcEmitter = IPC_EMITTERS.get(anyProcess);\n\treturn ipcEmitter === undefined\n\t\t? anyProcess.channel !== null\n\t\t: ipcEmitter.connected;\n};\n","import {once} from 'node:events';\nimport {scheduler} from 'node:timers/promises';\nimport {waitForOutgoingMessages} from './outgoing.js';\nimport {redoAddedReferences} from './reference.js';\nimport {handleStrictRequest, handleStrictResponse} from './strict.js';\nimport {handleAbort, abortOnDisconnect} from './graceful.js';\n\n// By default, Node.js buffers `message` events.\n//  - Buffering happens when there is a `message` event is emitted but there is no handler.\n//  - As soon as a `message` event handler is set, all buffered `message` events are emitted, emptying the buffer.\n//  - This happens both in the current process and the subprocess.\n//  - See https://github.com/nodejs/node/blob/501546e8f37059cd577041e23941b640d0d4d406/lib/internal/child_process.js#L719\n// This is helpful. Notably, this allows sending messages to a subprocess that's still initializing.\n// However, it has several problems.\n//  - This works with `events.on()` but not `events.once()` since all buffered messages are emitted at once.\n//    For example, users cannot call `await getOneMessage()`/`getEachMessage()` multiple times in a row.\n//  - When a user intentionally starts listening to `message` at a specific point in time, past `message` events are replayed, which might be unexpected.\n//  - Buffering is unlimited, which might lead to an out-of-memory crash.\n//  - This does not work well with multiple consumers.\n//    For example, Execa consumes events with both `result.ipcOutput` and manual IPC calls like `getOneMessage()`.\n//    Since `result.ipcOutput` reads all incoming messages, no buffering happens for manual IPC calls.\n//  - Forgetting to setup a `message` listener, or setting it up too late, is a programming mistake.\n//    The default behavior does not allow users to realize they made that mistake.\n// To solve those problems, instead of buffering messages, we debounce them.\n// The `message` event so it is emitted at most once per macrotask.\nexport const onMessage = async ({anyProcess, channel, isSubprocess, ipcEmitter}, wrappedMessage) => {\n\tif (handleStrictResponse(wrappedMessage) || handleAbort(wrappedMessage)) {\n\t\treturn;\n\t}\n\n\tif (!INCOMING_MESSAGES.has(anyProcess)) {\n\t\tINCOMING_MESSAGES.set(anyProcess, []);\n\t}\n\n\tconst incomingMessages = INCOMING_MESSAGES.get(anyProcess);\n\tincomingMessages.push(wrappedMessage);\n\n\tif (incomingMessages.length > 1) {\n\t\treturn;\n\t}\n\n\twhile (incomingMessages.length > 0) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait waitForOutgoingMessages(anyProcess, ipcEmitter, wrappedMessage);\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait scheduler.yield();\n\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst message = await handleStrictRequest({\n\t\t\twrappedMessage: incomingMessages[0],\n\t\t\tanyProcess,\n\t\t\tchannel,\n\t\t\tisSubprocess,\n\t\t\tipcEmitter,\n\t\t});\n\n\t\tincomingMessages.shift();\n\t\tipcEmitter.emit('message', message);\n\t\tipcEmitter.emit('message:done');\n\t}\n};\n\n// If the `message` event is currently debounced, the `disconnect` event must wait for it\nexport const onDisconnect = async ({anyProcess, channel, isSubprocess, ipcEmitter, boundOnMessage}) => {\n\tabortOnDisconnect();\n\n\tconst incomingMessages = INCOMING_MESSAGES.get(anyProcess);\n\twhile (incomingMessages?.length > 0) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait once(ipcEmitter, 'message:done');\n\t}\n\n\tanyProcess.removeListener('message', boundOnMessage);\n\tredoAddedReferences(channel, isSubprocess);\n\tipcEmitter.connected = false;\n\tipcEmitter.emit('disconnect');\n};\n\nconst INCOMING_MESSAGES = new WeakMap();\n","// By default, Node.js keeps the subprocess alive while it has a `message` or `disconnect` listener.\n// We replicate the same logic for the events that we proxy.\n// This ensures the subprocess is kept alive while `getOneMessage()` and `getEachMessage()` are ongoing.\n// This is not a problem with `sendMessage()` since Node.js handles that method automatically.\n// We do not use `anyProcess.channel.ref()` since this would prevent the automatic `.channel.refCounted()` Node.js is doing.\n// We keep a reference to `anyProcess.channel` since it might be `null` while `getOneMessage()` or `getEachMessage()` is still processing debounced messages.\n// See https://github.com/nodejs/node/blob/2aaeaa863c35befa2ebaa98fb7737ec84df4d8e9/lib/internal/child_process.js#L547\nexport const addReference = (channel, reference) => {\n\tif (reference) {\n\t\taddReferenceCount(channel);\n\t}\n};\n\nconst addReferenceCount = channel => {\n\tchannel.refCounted();\n};\n\nexport const removeReference = (channel, reference) => {\n\tif (reference) {\n\t\tremoveReferenceCount(channel);\n\t}\n};\n\nconst removeReferenceCount = channel => {\n\tchannel.unrefCounted();\n};\n\n// To proxy events, we setup some global listeners on the `message` and `disconnect` events.\n// Those should not keep the subprocess alive, so we remove the automatic counting that Node.js is doing.\n// See https://github.com/nodejs/node/blob/1b965270a9c273d4cf70e8808e9d28b9ada7844f/lib/child_process.js#L180\nexport const undoAddedReferences = (channel, isSubprocess) => {\n\tif (isSubprocess) {\n\t\tremoveReferenceCount(channel);\n\t\tremoveReferenceCount(channel);\n\t}\n};\n\n// Reverse it during `disconnect`\nexport const redoAddedReferences = (channel, isSubprocess) => {\n\tif (isSubprocess) {\n\t\taddReferenceCount(channel);\n\t\taddReferenceCount(channel);\n\t}\n};\n","import {createDeferred} from '../utils/deferred.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\nimport {SUBPROCESS_OPTIONS} from '../arguments/fd-options.js';\nimport {validateStrictDeadlock} from './strict.js';\n\n// When `sendMessage()` is ongoing, any `message` being received waits before being emitted.\n// This allows calling one or multiple `await sendMessage()` followed by `await getOneMessage()`/`await getEachMessage()`.\n// Without running into a race condition when the other process sends a response too fast, before the current process set up a listener.\nexport const startSendMessage = (anyProcess, wrappedMessage, strict) => {\n\tif (!OUTGOING_MESSAGES.has(anyProcess)) {\n\t\tOUTGOING_MESSAGES.set(anyProcess, new Set());\n\t}\n\n\tconst outgoingMessages = OUTGOING_MESSAGES.get(anyProcess);\n\tconst onMessageSent = createDeferred();\n\tconst id = strict ? wrappedMessage.id : undefined;\n\tconst outgoingMessage = {onMessageSent, id};\n\toutgoingMessages.add(outgoingMessage);\n\treturn {outgoingMessages, outgoingMessage};\n};\n\nexport const endSendMessage = ({outgoingMessages, outgoingMessage}) => {\n\toutgoingMessages.delete(outgoingMessage);\n\toutgoingMessage.onMessageSent.resolve();\n};\n\n// Await while `sendMessage()` is ongoing, unless there is already a `message` listener\nexport const waitForOutgoingMessages = async (anyProcess, ipcEmitter, wrappedMessage) => {\n\twhile (!hasMessageListeners(anyProcess, ipcEmitter) && OUTGOING_MESSAGES.get(anyProcess)?.size > 0) {\n\t\tconst outgoingMessages = [...OUTGOING_MESSAGES.get(anyProcess)];\n\t\tvalidateStrictDeadlock(outgoingMessages, wrappedMessage);\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tawait Promise.all(outgoingMessages.map(({onMessageSent}) => onMessageSent));\n\t}\n};\n\nconst OUTGOING_MESSAGES = new WeakMap();\n\n// Whether any `message` listener is setup\nexport const hasMessageListeners = (anyProcess, ipcEmitter) => ipcEmitter.listenerCount('message') > getMinListenerCount(anyProcess);\n\n// When `buffer` is `false`, we set up a `message` listener that should be ignored.\n// That listener is only meant to intercept `strict` acknowledgement responses.\nconst getMinListenerCount = anyProcess => SUBPROCESS_OPTIONS.has(anyProcess)\n\t&& !getFdSpecificValue(SUBPROCESS_OPTIONS.get(anyProcess).options.buffer, 'ipc')\n\t? 1\n\t: 0;\n","import {onAbortedSignal} from '../utils/abort-signal.js';\nimport {sendAbort} from '../ipc/graceful.js';\nimport {killOnTimeout} from './kill.js';\n\n// Validate the `gracefulCancel` option\nexport const validateGracefulCancel = ({gracefulCancel, cancelSignal, ipc, serialization}) => {\n\tif (!gracefulCancel) {\n\t\treturn;\n\t}\n\n\tif (cancelSignal === undefined) {\n\t\tthrow new Error('The `cancelSignal` option must be defined when setting the `gracefulCancel` option.');\n\t}\n\n\tif (!ipc) {\n\t\tthrow new Error('The `ipc` option cannot be false when setting the `gracefulCancel` option.');\n\t}\n\n\tif (serialization === 'json') {\n\t\tthrow new Error('The `serialization` option cannot be \\'json\\' when setting the `gracefulCancel` option.');\n\t}\n};\n\n// Send abort reason to the subprocess when aborting the `cancelSignal` option and `gracefulCancel` is `true`\nexport const throwOnGracefulCancel = ({\n\tsubprocess,\n\tcancelSignal,\n\tgracefulCancel,\n\tforceKillAfterDelay,\n\tcontext,\n\tcontroller,\n}) => gracefulCancel\n\t? [sendOnAbort({\n\t\tsubprocess,\n\t\tcancelSignal,\n\t\tforceKillAfterDelay,\n\t\tcontext,\n\t\tcontroller,\n\t})]\n\t: [];\n\nconst sendOnAbort = async ({subprocess, cancelSignal, forceKillAfterDelay, context, controller: {signal}}) => {\n\tawait onAbortedSignal(cancelSignal, signal);\n\tconst reason = getReason(cancelSignal);\n\tawait sendAbort(subprocess, reason);\n\tkillOnTimeout({\n\t\tkill: subprocess.kill,\n\t\tforceKillAfterDelay,\n\t\tcontext,\n\t\tcontrollerSignal: signal,\n\t});\n\tcontext.terminationReason ??= 'gracefulCancel';\n\tthrow cancelSignal.reason;\n};\n\n// The default `reason` is a DOMException, which is not serializable with V8\n// See https://github.com/nodejs/node/issues/53225\nconst getReason = ({reason}) => {\n\tif (!(reason instanceof DOMException)) {\n\t\treturn reason;\n\t}\n\n\tconst error = new Error(reason.message);\n\tObject.defineProperty(error, 'stack', {\n\t\tvalue: reason.stack,\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\twritable: true,\n\t});\n\treturn error;\n};\n","import {setTimeout} from 'node:timers/promises';\nimport {DiscardedError} from '../return/final-error.js';\n\n// Validate `timeout` option\nexport const 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// Fails when the `timeout` option is exceeded\nexport const throwOnTimeout = (subprocess, timeout, context, controller) => timeout === 0 || timeout === undefined\n\t? []\n\t: [killAfterTimeout(subprocess, timeout, context, controller)];\n\nconst killAfterTimeout = async (subprocess, timeout, context, {signal}) => {\n\tawait setTimeout(timeout, undefined, {signal});\n\tcontext.terminationReason ??= 'timeout';\n\tsubprocess.kill();\n\tthrow new DiscardedError();\n};\n","import {execPath, execArgv} from 'node:process';\nimport path from 'node:path';\nimport {safeNormalizeFileUrl} from '../arguments/file-url.js';\n\n// `execaNode()` is a shortcut for `execa(..., {node: true})`\nexport const mapNode = ({options}) => {\n\tif (options.node === false) {\n\t\tthrow new TypeError('The \"node\" option cannot be false with `execaNode()`.');\n\t}\n\n\treturn {options: {...options, node: true}};\n};\n\n// Applies the `node: true` option, and the related `nodePath`/`nodeOptions` options.\n// Modifies the file commands/arguments to ensure the same Node binary and flags are re-used.\n// Also adds `ipc: true` and `shell: false`.\nexport const handleNodeOption = (file, commandArguments, {\n\tnode: shouldHandleNode = false,\n\tnodePath = execPath,\n\tnodeOptions = execArgv.filter(nodeOption => !nodeOption.startsWith('--inspect')),\n\tcwd,\n\texecPath: formerNodePath,\n\t...options\n}) => {\n\tif (formerNodePath !== undefined) {\n\t\tthrow new TypeError('The \"execPath\" option has been removed. Please use the \"nodePath\" option instead.');\n\t}\n\n\tconst normalizedNodePath = safeNormalizeFileUrl(nodePath, 'The \"nodePath\" option');\n\tconst resolvedNodePath = path.resolve(cwd, normalizedNodePath);\n\tconst newOptions = {\n\t\t...options,\n\t\tnodePath: resolvedNodePath,\n\t\tnode: shouldHandleNode,\n\t\tcwd,\n\t};\n\n\tif (!shouldHandleNode) {\n\t\treturn [file, commandArguments, newOptions];\n\t}\n\n\tif (path.basename(file, '.exe') === 'node') {\n\t\tthrow new TypeError('When the \"node\" option is true, the first argument does not need to be \"node\".');\n\t}\n\n\treturn [\n\t\tresolvedNodePath,\n\t\t[...nodeOptions, file, ...commandArguments],\n\t\t{ipc: true, ...newOptions, shell: false},\n\t];\n};\n","import {serialize} from 'node:v8';\n\n// Validate the `ipcInput` option\nexport const validateIpcInputOption = ({ipcInput, ipc, serialization}) => {\n\tif (ipcInput === undefined) {\n\t\treturn;\n\t}\n\n\tif (!ipc) {\n\t\tthrow new Error('The `ipcInput` option cannot be set unless the `ipc` option is `true`.');\n\t}\n\n\tvalidateIpcInput[serialization](ipcInput);\n};\n\nconst validateAdvancedInput = ipcInput => {\n\ttry {\n\t\tserialize(ipcInput);\n\t} catch (error) {\n\t\tthrow new Error('The `ipcInput` option is not serializable with a structured clone.', {cause: error});\n\t}\n};\n\nconst validateJsonInput = ipcInput => {\n\ttry {\n\t\tJSON.stringify(ipcInput);\n\t} catch (error) {\n\t\tthrow new Error('The `ipcInput` option is not serializable with JSON.', {cause: error});\n\t}\n};\n\nconst validateIpcInput = {\n\tadvanced: validateAdvancedInput,\n\tjson: validateJsonInput,\n};\n\n// When the `ipcInput` option is set, it is sent as an initial IPC message to the subprocess\nexport const sendIpcInput = async (subprocess, ipcInput) => {\n\tif (ipcInput === undefined) {\n\t\treturn;\n\t}\n\n\tawait subprocess.sendMessage(ipcInput);\n};\n","// Validate `encoding` option\nexport const validateEncoding = ({encoding}) => {\n\tif (ENCODINGS.has(encoding)) {\n\t\treturn;\n\t}\n\n\tconst correctEncoding = getCorrectEncoding(encoding);\n\tif (correctEncoding !== undefined) {\n\t\tthrow new TypeError(`Invalid option \\`encoding: ${serializeEncoding(encoding)}\\`.\nPlease rename it to ${serializeEncoding(correctEncoding)}.`);\n\t}\n\n\tconst correctEncodings = [...ENCODINGS].map(correctEncoding => serializeEncoding(correctEncoding)).join(', ');\n\tthrow new TypeError(`Invalid option \\`encoding: ${serializeEncoding(encoding)}\\`.\nPlease rename it to one of: ${correctEncodings}.`);\n};\n\nconst TEXT_ENCODINGS = new Set(['utf8', 'utf16le']);\nexport const BINARY_ENCODINGS = new Set(['buffer', 'hex', 'base64', 'base64url', 'latin1', 'ascii']);\nconst ENCODINGS = new Set([...TEXT_ENCODINGS, ...BINARY_ENCODINGS]);\n\nconst getCorrectEncoding = encoding => {\n\tif (encoding === null) {\n\t\treturn 'buffer';\n\t}\n\n\tif (typeof encoding !== 'string') {\n\t\treturn;\n\t}\n\n\tconst lowerEncoding = encoding.toLowerCase();\n\tif (lowerEncoding in ENCODING_ALIASES) {\n\t\treturn ENCODING_ALIASES[lowerEncoding];\n\t}\n\n\tif (ENCODINGS.has(lowerEncoding)) {\n\t\treturn lowerEncoding;\n\t}\n};\n\nconst ENCODING_ALIASES = {\n\t// eslint-disable-next-line unicorn/text-encoding-identifier-case\n\t'utf-8': 'utf8',\n\t'utf-16le': 'utf16le',\n\t'ucs-2': 'utf16le',\n\tucs2: 'utf16le',\n\tbinary: 'latin1',\n};\n\nconst serializeEncoding = encoding => typeof encoding === 'string' ? `\"${encoding}\"` : String(encoding);\n","import {statSync} from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport {safeNormalizeFileUrl} from './file-url.js';\n\n// Normalize `cwd` option\nexport const normalizeCwd = (cwd = getDefaultCwd()) => {\n\tconst cwdString = safeNormalizeFileUrl(cwd, 'The \"cwd\" option');\n\treturn path.resolve(cwdString);\n};\n\nconst getDefaultCwd = () => {\n\ttry {\n\t\treturn process.cwd();\n\t} catch (error) {\n\t\terror.message = `The current directory does not exist.\\n${error.message}`;\n\t\tthrow error;\n\t}\n};\n\n// When `cwd` option has an invalid value, provide with a better error message\nexport const fixCwdError = (originalMessage, cwd) => {\n\tif (cwd === getDefaultCwd()) {\n\t\treturn originalMessage;\n\t}\n\n\tlet cwdStat;\n\ttry {\n\t\tcwdStat = statSync(cwd);\n\t} catch (error) {\n\t\treturn `The \"cwd\" option is invalid: ${cwd}.\\n${error.message}\\n${originalMessage}`;\n\t}\n\n\tif (!cwdStat.isDirectory()) {\n\t\treturn `The \"cwd\" option is not a directory: ${cwd}.\\n${originalMessage}`;\n\t}\n\n\treturn originalMessage;\n};\n","// When the `shell` option is set, any command argument is concatenated as a single string by Node.js:\n// https://github.com/nodejs/node/blob/e38ce27f3ca0a65f68a31cedd984cddb927d4002/lib/child_process.js#L614-L624\n// However, since Node 24, it also prints a deprecation warning.\n// To avoid this warning, we perform that same operation before calling `node:child_process`.\n// Shells only understand strings, which is why Node.js performs that concatenation.\n// However, we rely on users splitting command arguments as an array.\n// For example, this allows us to easily detect which arguments are passed.\n// So we do want users to pass array of arguments even with `shell: true`, but we also want to avoid any warning.\nexport const concatenateShell = (file, commandArguments, options) => options.shell && commandArguments.length > 0\n\t? [[file, ...commandArguments].join(' '), [], options]\n\t: [file, commandArguments, options];\n","import {inspect} from 'node:util';\nimport stripFinalNewline from 'strip-final-newline';\nimport {isUint8Array, uint8ArrayToString} from '../utils/uint-array.js';\nimport {fixCwdError} from '../arguments/cwd.js';\nimport {escapeLines} from '../arguments/escape.js';\nimport {getMaxBufferMessage} from '../io/max-buffer.js';\nimport {getSignalDescription} from '../terminate/signal.js';\nimport {DiscardedError, isExecaError} from './final-error.js';\n\n// Computes `error.message`, `error.shortMessage` and `error.originalMessage`\nexport const createMessages = ({\n\tstdio,\n\tall,\n\tipcOutput,\n\toriginalError,\n\tsignal,\n\tsignalDescription,\n\texitCode,\n\tescapedCommand,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\tforceKillAfterDelay,\n\tkillSignal,\n\tmaxBuffer,\n\ttimeout,\n\tcwd,\n}) => {\n\tconst errorCode = originalError?.code;\n\tconst prefix = getErrorPrefix({\n\t\toriginalError,\n\t\ttimedOut,\n\t\ttimeout,\n\t\tisMaxBuffer,\n\t\tmaxBuffer,\n\t\terrorCode,\n\t\tsignal,\n\t\tsignalDescription,\n\t\texitCode,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisForcefullyTerminated,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t});\n\tconst originalMessage = getOriginalMessage(originalError, cwd);\n\tconst suffix = originalMessage === undefined ? '' : `\\n${originalMessage}`;\n\tconst shortMessage = `${prefix}: ${escapedCommand}${suffix}`;\n\tconst messageStdio = all === undefined ? [stdio[2], stdio[1]] : [all];\n\tconst message = [\n\t\tshortMessage,\n\t\t...messageStdio,\n\t\t...stdio.slice(3),\n\t\tipcOutput.map(ipcMessage => serializeIpcMessage(ipcMessage)).join('\\n'),\n\t]\n\t\t.map(messagePart => escapeLines(stripFinalNewline(serializeMessagePart(messagePart))))\n\t\t.filter(Boolean)\n\t\t.join('\\n\\n');\n\treturn {originalMessage, shortMessage, message};\n};\n\nconst getErrorPrefix = ({\n\toriginalError,\n\ttimedOut,\n\ttimeout,\n\tisMaxBuffer,\n\tmaxBuffer,\n\terrorCode,\n\tsignal,\n\tsignalDescription,\n\texitCode,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisForcefullyTerminated,\n\tforceKillAfterDelay,\n\tkillSignal,\n}) => {\n\tconst forcefulSuffix = getForcefulSuffix(isForcefullyTerminated, forceKillAfterDelay);\n\n\tif (timedOut) {\n\t\treturn `Command timed out after ${timeout} milliseconds${forcefulSuffix}`;\n\t}\n\n\tif (isGracefullyCanceled) {\n\t\tif (signal === undefined) {\n\t\t\treturn `Command was gracefully canceled with exit code ${exitCode}`;\n\t\t}\n\n\t\treturn isForcefullyTerminated\n\t\t\t? `Command was gracefully canceled${forcefulSuffix}`\n\t\t\t: `Command was gracefully canceled with ${signal} (${signalDescription})`;\n\t}\n\n\tif (isCanceled) {\n\t\treturn `Command was canceled${forcefulSuffix}`;\n\t}\n\n\tif (isMaxBuffer) {\n\t\treturn `${getMaxBufferMessage(originalError, maxBuffer)}${forcefulSuffix}`;\n\t}\n\n\tif (errorCode !== undefined) {\n\t\treturn `Command failed with ${errorCode}${forcefulSuffix}`;\n\t}\n\n\tif (isForcefullyTerminated) {\n\t\treturn `Command was killed with ${killSignal} (${getSignalDescription(killSignal)})${forcefulSuffix}`;\n\t}\n\n\tif (signal !== undefined) {\n\t\treturn `Command was killed with ${signal} (${signalDescription})`;\n\t}\n\n\tif (exitCode !== undefined) {\n\t\treturn `Command failed with exit code ${exitCode}`;\n\t}\n\n\treturn 'Command failed';\n};\n\nconst getForcefulSuffix = (isForcefullyTerminated, forceKillAfterDelay) => isForcefullyTerminated\n\t? ` and was forcefully terminated after ${forceKillAfterDelay} milliseconds`\n\t: '';\n\nconst getOriginalMessage = (originalError, cwd) => {\n\tif (originalError instanceof DiscardedError) {\n\t\treturn;\n\t}\n\n\tconst originalMessage = isExecaError(originalError)\n\t\t? originalError.originalMessage\n\t\t: String(originalError?.message ?? originalError);\n\tconst escapedOriginalMessage = escapeLines(fixCwdError(originalMessage, cwd));\n\treturn escapedOriginalMessage === '' ? undefined : escapedOriginalMessage;\n};\n\nconst serializeIpcMessage = ipcMessage => typeof ipcMessage === 'string'\n\t? ipcMessage\n\t: inspect(ipcMessage);\n\nconst serializeMessagePart = messagePart => Array.isArray(messagePart)\n\t? messagePart.map(messageItem => stripFinalNewline(serializeMessageItem(messageItem))).filter(Boolean).join('\\n')\n\t: serializeMessageItem(messagePart);\n\nconst serializeMessageItem = messageItem => {\n\tif (typeof messageItem === 'string') {\n\t\treturn messageItem;\n\t}\n\n\tif (isUint8Array(messageItem)) {\n\t\treturn uint8ArrayToString(messageItem);\n\t}\n\n\treturn '';\n};\n","export default function stripFinalNewline(input) {\n\tif (typeof input === 'string') {\n\t\treturn stripFinalNewlineString(input);\n\t}\n\n\tif (!(ArrayBuffer.isView(input) && input.BYTES_PER_ELEMENT === 1)) {\n\t\tthrow new Error('Input must be a string or a Uint8Array');\n\t}\n\n\treturn stripFinalNewlineBinary(input);\n}\n\nconst stripFinalNewlineString = input =>\n\tinput.at(-1) === LF\n\t\t? input.slice(0, input.at(-2) === CR ? -2 : -1)\n\t\t: input;\n\nconst stripFinalNewlineBinary = input =>\n\tinput.at(-1) === LF_BINARY\n\t\t? input.subarray(0, input.at(-2) === CR_BINARY ? -2 : -1)\n\t\t: input;\n\nconst LF = '\\n';\nconst LF_BINARY = LF.codePointAt(0);\nconst CR = '\\r';\nconst CR_BINARY = CR.codePointAt(0);\n","import {on} from 'node:events';\nimport {finished} from 'node:stream/promises';\nimport {nodeImports} from './stream.js';\n\nObject.assign(nodeImports, {on, finished});\n\nexport {\n\tdefault,\n\tgetStreamAsArray,\n\tgetStreamAsArrayBuffer,\n\tgetStreamAsBuffer,\n\tMaxBufferError,\n} from './exports.js';\n","export function isStream(stream, {checkOpen = true} = {}) {\n\treturn stream !== null\n\t\t&& typeof stream === 'object'\n\t\t&& (stream.writable || stream.readable || !checkOpen || (stream.writable === undefined && stream.readable === undefined))\n\t\t&& typeof stream.pipe === 'function';\n}\n\nexport function isWritableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.writable || !checkOpen)\n\t\t&& typeof stream.write === 'function'\n\t\t&& typeof stream.end === 'function'\n\t\t&& typeof stream.writable === 'boolean'\n\t\t&& typeof stream.writableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isReadableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.readable || !checkOpen)\n\t\t&& typeof stream.read === 'function'\n\t\t&& typeof stream.readable === 'boolean'\n\t\t&& typeof stream.readableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isDuplexStream(stream, options) {\n\treturn isWritableStream(stream, options)\n\t\t&& isReadableStream(stream, options);\n}\n\nexport function isTransformStream(stream, options) {\n\treturn isDuplexStream(stream, options)\n\t\t&& typeof stream._transform === 'function';\n}\n","const a = Object.getPrototypeOf(\n  Object.getPrototypeOf(\n    /* istanbul ignore next */\n    async function* () {\n    }\n  ).prototype\n);\nclass c {\n  #t;\n  #n;\n  #r = !1;\n  #e = void 0;\n  constructor(e, t) {\n    this.#t = e, this.#n = t;\n  }\n  next() {\n    const e = () => this.#s();\n    return this.#e = this.#e ? this.#e.then(e, e) : e(), this.#e;\n  }\n  return(e) {\n    const t = () => this.#i(e);\n    return this.#e ? this.#e.then(t, t) : t();\n  }\n  async #s() {\n    if (this.#r)\n      return {\n        done: !0,\n        value: void 0\n      };\n    let e;\n    try {\n      e = await this.#t.read();\n    } catch (t) {\n      throw this.#e = void 0, this.#r = !0, this.#t.releaseLock(), t;\n    }\n    return e.done && (this.#e = void 0, this.#r = !0, this.#t.releaseLock()), e;\n  }\n  async #i(e) {\n    if (this.#r)\n      return {\n        done: !0,\n        value: e\n      };\n    if (this.#r = !0, !this.#n) {\n      const t = this.#t.cancel(e);\n      return this.#t.releaseLock(), await t, {\n        done: !0,\n        value: e\n      };\n    }\n    return this.#t.releaseLock(), {\n      done: !0,\n      value: e\n    };\n  }\n}\nconst n = Symbol();\nfunction i() {\n  return this[n].next();\n}\nObject.defineProperty(i, \"name\", { value: \"next\" });\nfunction o(r) {\n  return this[n].return(r);\n}\nObject.defineProperty(o, \"name\", { value: \"return\" });\nconst u = Object.create(a, {\n  next: {\n    enumerable: !0,\n    configurable: !0,\n    writable: !0,\n    value: i\n  },\n  return: {\n    enumerable: !0,\n    configurable: !0,\n    writable: !0,\n    value: o\n  }\n});\nfunction h({ preventCancel: r = !1 } = {}) {\n  const e = this.getReader(), t = new c(\n    e,\n    r\n  ), s = Object.create(u);\n  return s[n] = t, s;\n}\nexport {\n  h as asyncIterator\n};\n","import {isReadableStream} from 'is-stream';\nimport {asyncIterator} from '@sec-ant/readable-stream/ponyfill';\n\nexport const getAsyncIterable = stream => {\n\tif (isReadableStream(stream, {checkOpen: false}) && nodeImports.on !== undefined) {\n\t\treturn getStreamIterable(stream);\n\t}\n\n\tif (typeof stream?.[Symbol.asyncIterator] === 'function') {\n\t\treturn stream;\n\t}\n\n\t// `ReadableStream[Symbol.asyncIterator]` support is missing in multiple browsers, so we ponyfill it\n\tif (toString.call(stream) === '[object ReadableStream]') {\n\t\treturn asyncIterator.call(stream);\n\t}\n\n\tthrow new TypeError('The first argument must be a Readable, a ReadableStream, or an async iterable.');\n};\n\nconst {toString} = Object.prototype;\n\n// The default iterable for Node.js streams does not allow for multiple readers at once, so we re-implement it\nconst getStreamIterable = async function * (stream) {\n\tconst controller = new AbortController();\n\tconst state = {};\n\thandleStreamEnd(stream, controller, state);\n\n\ttry {\n\t\tfor await (const [chunk] of nodeImports.on(stream, 'data', {signal: controller.signal})) {\n\t\t\tyield chunk;\n\t\t}\n\t} catch (error) {\n\t\t// Stream failure, for example due to `stream.destroy(error)`\n\t\tif (state.error !== undefined) {\n\t\t\tthrow state.error;\n\t\t// `error` event directly emitted on stream\n\t\t} else if (!controller.signal.aborted) {\n\t\t\tthrow error;\n\t\t// Otherwise, stream completed successfully\n\t\t}\n\t\t// The `finally` block also runs when the caller throws, for example due to the `maxBuffer` option\n\t} finally {\n\t\tstream.destroy();\n\t}\n};\n\nconst handleStreamEnd = async (stream, controller, state) => {\n\ttry {\n\t\tawait nodeImports.finished(stream, {\n\t\t\tcleanup: true,\n\t\t\treadable: true,\n\t\t\twritable: false,\n\t\t\terror: false,\n\t\t});\n\t} catch (error) {\n\t\tstate.error = error;\n\t} finally {\n\t\tcontroller.abort();\n\t}\n};\n\n// Loaded by the Node entrypoint, but not by the browser one.\n// This prevents using dynamic imports.\nexport const nodeImports = {};\n","import {getAsyncIterable} from './stream.js';\n\nexport const getStreamContents = async (stream, {init, convertChunk, getSize, truncateChunk, addChunk, getFinalChunk, finalize}, {maxBuffer = Number.POSITIVE_INFINITY} = {}) => {\n\tconst asyncIterable = getAsyncIterable(stream);\n\n\tconst state = init();\n\tstate.length = 0;\n\n\ttry {\n\t\tfor await (const chunk of asyncIterable) {\n\t\t\tconst chunkType = getChunkType(chunk);\n\t\t\tconst convertedChunk = convertChunk[chunkType](chunk, state);\n\t\t\tappendChunk({\n\t\t\t\tconvertedChunk,\n\t\t\t\tstate,\n\t\t\t\tgetSize,\n\t\t\t\ttruncateChunk,\n\t\t\t\taddChunk,\n\t\t\t\tmaxBuffer,\n\t\t\t});\n\t\t}\n\n\t\tappendFinalChunk({\n\t\t\tstate,\n\t\t\tconvertChunk,\n\t\t\tgetSize,\n\t\t\ttruncateChunk,\n\t\t\taddChunk,\n\t\t\tgetFinalChunk,\n\t\t\tmaxBuffer,\n\t\t});\n\t\treturn finalize(state);\n\t} catch (error) {\n\t\tconst normalizedError = typeof error === 'object' && error !== null ? error : new Error(error);\n\t\tnormalizedError.bufferedData = finalize(state);\n\t\tthrow normalizedError;\n\t}\n};\n\nconst appendFinalChunk = ({state, getSize, truncateChunk, addChunk, getFinalChunk, maxBuffer}) => {\n\tconst convertedChunk = getFinalChunk(state);\n\tif (convertedChunk !== undefined) {\n\t\tappendChunk({\n\t\t\tconvertedChunk,\n\t\t\tstate,\n\t\t\tgetSize,\n\t\t\ttruncateChunk,\n\t\t\taddChunk,\n\t\t\tmaxBuffer,\n\t\t});\n\t}\n};\n\nconst appendChunk = ({convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer}) => {\n\tconst chunkSize = getSize(convertedChunk);\n\tconst newLength = state.length + chunkSize;\n\n\tif (newLength <= maxBuffer) {\n\t\taddNewChunk(convertedChunk, state, addChunk, newLength);\n\t\treturn;\n\t}\n\n\tconst truncatedChunk = truncateChunk(convertedChunk, maxBuffer - state.length);\n\n\tif (truncatedChunk !== undefined) {\n\t\taddNewChunk(truncatedChunk, state, addChunk, maxBuffer);\n\t}\n\n\tthrow new MaxBufferError();\n};\n\nconst addNewChunk = (convertedChunk, state, addChunk, newLength) => {\n\tstate.contents = addChunk(convertedChunk, state, newLength);\n\tstate.length = newLength;\n};\n\nconst getChunkType = chunk => {\n\tconst typeOfChunk = typeof chunk;\n\n\tif (typeOfChunk === 'string') {\n\t\treturn 'string';\n\t}\n\n\tif (typeOfChunk !== 'object' || chunk === null) {\n\t\treturn 'others';\n\t}\n\n\tif (globalThis.Buffer?.isBuffer(chunk)) {\n\t\treturn 'buffer';\n\t}\n\n\tconst prototypeName = objectToString.call(chunk);\n\n\tif (prototypeName === '[object ArrayBuffer]') {\n\t\treturn 'arrayBuffer';\n\t}\n\n\tif (prototypeName === '[object DataView]') {\n\t\treturn 'dataView';\n\t}\n\n\tif (\n\t\tNumber.isInteger(chunk.byteLength)\n\t\t&& Number.isInteger(chunk.byteOffset)\n\t\t&& objectToString.call(chunk.buffer) === '[object ArrayBuffer]'\n\t) {\n\t\treturn 'typedArray';\n\t}\n\n\treturn 'others';\n};\n\nconst {toString: objectToString} = Object.prototype;\n\nexport class MaxBufferError extends Error {\n\tname = 'MaxBufferError';\n\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t}\n}\n","export const identity = value => value;\n\nexport const noop = () => undefined;\n\nexport const getContentsProperty = ({contents}) => contents;\n\nexport const throwObjectStream = chunk => {\n\tthrow new Error(`Streams in object mode are not supported: ${String(chunk)}`);\n};\n\nexport const getLengthProperty = convertedChunk => convertedChunk.length;\n","import {getStreamContents} from './contents.js';\nimport {identity, noop, getContentsProperty} from './utils.js';\n\nexport async function getStreamAsArray(stream, options) {\n\treturn getStreamContents(stream, arrayMethods, options);\n}\n\nconst initArray = () => ({contents: []});\n\nconst increment = () => 1;\n\nconst addArrayChunk = (convertedChunk, {contents}) => {\n\tcontents.push(convertedChunk);\n\treturn contents;\n};\n\nconst arrayMethods = {\n\tinit: initArray,\n\tconvertChunk: {\n\t\tstring: identity,\n\t\tbuffer: identity,\n\t\tarrayBuffer: identity,\n\t\tdataView: identity,\n\t\ttypedArray: identity,\n\t\tothers: identity,\n\t},\n\tgetSize: increment,\n\ttruncateChunk: noop,\n\taddChunk: addArrayChunk,\n\tgetFinalChunk: noop,\n\tfinalize: getContentsProperty,\n};\n","import {getStreamContents} from './contents.js';\nimport {noop, throwObjectStream, getLengthProperty} from './utils.js';\n\nexport async function getStreamAsArrayBuffer(stream, options) {\n\treturn getStreamContents(stream, arrayBufferMethods, options);\n}\n\nconst initArrayBuffer = () => ({contents: new ArrayBuffer(0)});\n\nconst useTextEncoder = chunk => textEncoder.encode(chunk);\nconst textEncoder = new TextEncoder();\n\nconst useUint8Array = chunk => new Uint8Array(chunk);\n\nconst useUint8ArrayWithOffset = chunk => new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n\nconst truncateArrayBufferChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);\n\n// `contents` is an increasingly growing `Uint8Array`.\nconst addArrayBufferChunk = (convertedChunk, {contents, length: previousLength}, length) => {\n\tconst newContents = hasArrayBufferResize() ? resizeArrayBuffer(contents, length) : resizeArrayBufferSlow(contents, length);\n\tnew Uint8Array(newContents).set(convertedChunk, previousLength);\n\treturn newContents;\n};\n\n// Without `ArrayBuffer.resize()`, `contents` size is always a power of 2.\n// This means its last bytes are zeroes (not stream data), which need to be\n// trimmed at the end with `ArrayBuffer.slice()`.\nconst resizeArrayBufferSlow = (contents, length) => {\n\tif (length <= contents.byteLength) {\n\t\treturn contents;\n\t}\n\n\tconst arrayBuffer = new ArrayBuffer(getNewContentsLength(length));\n\tnew Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);\n\treturn arrayBuffer;\n};\n\n// With `ArrayBuffer.resize()`, `contents` size matches exactly the size of\n// the stream data. It does not include extraneous zeroes to trim at the end.\n// The underlying `ArrayBuffer` does allocate a number of bytes that is a power\n// of 2, but those bytes are only visible after calling `ArrayBuffer.resize()`.\nconst resizeArrayBuffer = (contents, length) => {\n\tif (length <= contents.maxByteLength) {\n\t\tcontents.resize(length);\n\t\treturn contents;\n\t}\n\n\tconst arrayBuffer = new ArrayBuffer(length, {maxByteLength: getNewContentsLength(length)});\n\tnew Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);\n\treturn arrayBuffer;\n};\n\n// Retrieve the closest `length` that is both >= and a power of 2\nconst getNewContentsLength = length => SCALE_FACTOR ** Math.ceil(Math.log(length) / Math.log(SCALE_FACTOR));\n\nconst SCALE_FACTOR = 2;\n\nconst finalizeArrayBuffer = ({contents, length}) => hasArrayBufferResize() ? contents : contents.slice(0, length);\n\n// `ArrayBuffer.slice()` is slow. When `ArrayBuffer.resize()` is available\n// (Node >=20.0.0, Safari >=16.4 and Chrome), we can use it instead.\n// eslint-disable-next-line no-warning-comments\n// TODO: remove after dropping support for Node 20.\n// eslint-disable-next-line no-warning-comments\n// TODO: use `ArrayBuffer.transferToFixedLength()` instead once it is available\nconst hasArrayBufferResize = () => 'resize' in ArrayBuffer.prototype;\n\nconst arrayBufferMethods = {\n\tinit: initArrayBuffer,\n\tconvertChunk: {\n\t\tstring: useTextEncoder,\n\t\tbuffer: useUint8Array,\n\t\tarrayBuffer: useUint8Array,\n\t\tdataView: useUint8ArrayWithOffset,\n\t\ttypedArray: useUint8ArrayWithOffset,\n\t\tothers: throwObjectStream,\n\t},\n\tgetSize: getLengthProperty,\n\ttruncateChunk: truncateArrayBufferChunk,\n\taddChunk: addArrayBufferChunk,\n\tgetFinalChunk: noop,\n\tfinalize: finalizeArrayBuffer,\n};\n","import {getStreamContents} from './contents.js';\nimport {\n\tidentity,\n\tgetContentsProperty,\n\tthrowObjectStream,\n\tgetLengthProperty,\n} from './utils.js';\n\nexport async function getStreamAsString(stream, options) {\n\treturn getStreamContents(stream, stringMethods, options);\n}\n\nconst initString = () => ({contents: '', textDecoder: new TextDecoder()});\n\nconst useTextDecoder = (chunk, {textDecoder}) => textDecoder.decode(chunk, {stream: true});\n\nconst addStringChunk = (convertedChunk, {contents}) => contents + convertedChunk;\n\nconst truncateStringChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);\n\nconst getFinalStringChunk = ({textDecoder}) => {\n\tconst finalChunk = textDecoder.decode();\n\treturn finalChunk === '' ? undefined : finalChunk;\n};\n\nconst stringMethods = {\n\tinit: initString,\n\tconvertChunk: {\n\t\tstring: identity,\n\t\tbuffer: useTextDecoder,\n\t\tarrayBuffer: useTextDecoder,\n\t\tdataView: useTextDecoder,\n\t\ttypedArray: useTextDecoder,\n\t\tothers: throwObjectStream,\n\t},\n\tgetSize: getLengthProperty,\n\ttruncateChunk: truncateStringChunk,\n\taddChunk: addStringChunk,\n\tgetFinalChunk: getFinalStringChunk,\n\tfinalize: getContentsProperty,\n};\n","import {MaxBufferError} from 'get-stream';\nimport {getStreamName} from '../utils/standard-stream.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\n\n// When the `maxBuffer` option is hit, a MaxBufferError is thrown.\n// The stream is aborted, then specific information is kept for the error message.\nexport const handleMaxBuffer = ({error, stream, readableObjectMode, lines, encoding, fdNumber}) => {\n\tif (!(error instanceof MaxBufferError)) {\n\t\tthrow error;\n\t}\n\n\tif (fdNumber === 'all') {\n\t\treturn error;\n\t}\n\n\tconst unit = getMaxBufferUnit(readableObjectMode, lines, encoding);\n\terror.maxBufferInfo = {fdNumber, unit};\n\tstream.destroy();\n\tthrow error;\n};\n\nconst getMaxBufferUnit = (readableObjectMode, lines, encoding) => {\n\tif (readableObjectMode) {\n\t\treturn 'objects';\n\t}\n\n\tif (lines) {\n\t\treturn 'lines';\n\t}\n\n\tif (encoding === 'buffer') {\n\t\treturn 'bytes';\n\t}\n\n\treturn 'characters';\n};\n\n// Check the `maxBuffer` option with `result.ipcOutput`\nexport const checkIpcMaxBuffer = (subprocess, ipcOutput, maxBuffer) => {\n\tif (ipcOutput.length !== maxBuffer) {\n\t\treturn;\n\t}\n\n\tconst error = new MaxBufferError();\n\terror.maxBufferInfo = {fdNumber: 'ipc'};\n\tthrow error;\n};\n\n// Error message when `maxBuffer` is hit\nexport const getMaxBufferMessage = (error, maxBuffer) => {\n\tconst {streamName, threshold, unit} = getMaxBufferInfo(error, maxBuffer);\n\treturn `Command's ${streamName} was larger than ${threshold} ${unit}`;\n};\n\nconst getMaxBufferInfo = (error, maxBuffer) => {\n\tif (error?.maxBufferInfo === undefined) {\n\t\treturn {streamName: 'output', threshold: maxBuffer[1], unit: 'bytes'};\n\t}\n\n\tconst {maxBufferInfo: {fdNumber, unit}} = error;\n\tdelete error.maxBufferInfo;\n\n\tconst threshold = getFdSpecificValue(maxBuffer, fdNumber);\n\tif (fdNumber === 'ipc') {\n\t\treturn {streamName: 'IPC output', threshold, unit: 'messages'};\n\t}\n\n\treturn {streamName: getStreamName(fdNumber), threshold, unit};\n};\n\n// The only way to apply `maxBuffer` with `spawnSync()` is to use the native `maxBuffer` option Node.js provides.\n// However, this has multiple limitations, and cannot behave the exact same way as the async behavior.\n// When the `maxBuffer` is hit, a `ENOBUFS` error is thrown.\nexport const isMaxBufferSync = (resultError, output, maxBuffer) => resultError?.code === 'ENOBUFS'\n\t&& output !== null\n\t&& output.some(result => result !== null && result.length > getMaxBufferSync(maxBuffer));\n\n// When `maxBuffer` is hit, ensure the result is truncated\nexport const truncateMaxBufferSync = (result, isMaxBuffer, maxBuffer) => {\n\tif (!isMaxBuffer) {\n\t\treturn result;\n\t}\n\n\tconst maxBufferValue = getMaxBufferSync(maxBuffer);\n\treturn result.length > maxBufferValue ? result.slice(0, maxBufferValue) : result;\n};\n\n// `spawnSync()` does not allow differentiating `maxBuffer` per file descriptor, so we always use `stdout`\nexport const getMaxBufferSync = ([, stdoutMaxBuffer]) => stdoutMaxBuffer;\n","import {getSignalDescription} from '../terminate/signal.js';\nimport {getDurationMs} from './duration.js';\nimport {getFinalError} from './final-error.js';\nimport {createMessages} from './message.js';\n\n// Object returned on subprocess success\nexport const makeSuccessResult = ({\n\tcommand,\n\tescapedCommand,\n\tstdio,\n\tall,\n\tipcOutput,\n\toptions: {cwd},\n\tstartTime,\n}) => omitUndefinedProperties({\n\tcommand,\n\tescapedCommand,\n\tcwd,\n\tdurationMs: getDurationMs(startTime),\n\tfailed: false,\n\ttimedOut: false,\n\tisCanceled: false,\n\tisGracefullyCanceled: false,\n\tisTerminated: false,\n\tisMaxBuffer: false,\n\tisForcefullyTerminated: false,\n\texitCode: 0,\n\tstdout: stdio[1],\n\tstderr: stdio[2],\n\tall,\n\tstdio,\n\tipcOutput,\n\tpipedFrom: [],\n});\n\n// Object returned on subprocess failure before spawning\nexport const makeEarlyError = ({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tfileDescriptors,\n\toptions,\n\tstartTime,\n\tisSync,\n}) => makeError({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut: false,\n\tisCanceled: false,\n\tisGracefullyCanceled: false,\n\tisMaxBuffer: false,\n\tisForcefullyTerminated: false,\n\tstdio: Array.from({length: fileDescriptors.length}),\n\tipcOutput: [],\n\toptions,\n\tisSync,\n});\n\n// Object returned on subprocess failure\nexport const makeError = ({\n\terror: originalError,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode: rawExitCode,\n\tsignal: rawSignal,\n\tstdio,\n\tall,\n\tipcOutput,\n\toptions: {\n\t\ttimeoutDuration,\n\t\ttimeout = timeoutDuration,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tcwd,\n\t\tmaxBuffer,\n\t},\n\tisSync,\n}) => {\n\tconst {exitCode, signal, signalDescription} = normalizeExitPayload(rawExitCode, rawSignal);\n\tconst {originalMessage, shortMessage, message} = createMessages({\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toriginalError,\n\t\tsignal,\n\t\tsignalDescription,\n\t\texitCode,\n\t\tescapedCommand,\n\t\ttimedOut,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated,\n\t\tforceKillAfterDelay,\n\t\tkillSignal,\n\t\tmaxBuffer,\n\t\ttimeout,\n\t\tcwd,\n\t});\n\tconst error = getFinalError(originalError, message, isSync);\n\tObject.assign(error, getErrorProperties({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\ttimedOut,\n\t\tisCanceled,\n\t\tisGracefullyCanceled,\n\t\tisMaxBuffer,\n\t\tisForcefullyTerminated,\n\t\texitCode,\n\t\tsignal,\n\t\tsignalDescription,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\tcwd,\n\t\toriginalMessage,\n\t\tshortMessage,\n\t}));\n\treturn error;\n};\n\nconst getErrorProperties = ({\n\terror,\n\tcommand,\n\tescapedCommand,\n\tstartTime,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode,\n\tsignal,\n\tsignalDescription,\n\tstdio,\n\tall,\n\tipcOutput,\n\tcwd,\n\toriginalMessage,\n\tshortMessage,\n}) => omitUndefinedProperties({\n\tshortMessage,\n\toriginalMessage,\n\tcommand,\n\tescapedCommand,\n\tcwd,\n\tdurationMs: getDurationMs(startTime),\n\tfailed: true,\n\ttimedOut,\n\tisCanceled,\n\tisGracefullyCanceled,\n\tisTerminated: signal !== undefined,\n\tisMaxBuffer,\n\tisForcefullyTerminated,\n\texitCode,\n\tsignal,\n\tsignalDescription,\n\tcode: error.cause?.code,\n\tstdout: stdio[1],\n\tstderr: stdio[2],\n\tall,\n\tstdio,\n\tipcOutput,\n\tpipedFrom: [],\n});\n\nconst omitUndefinedProperties = result => Object.fromEntries(Object.entries(result).filter(([, value]) => value !== undefined));\n\n// `signal` and `exitCode` emitted on `subprocess.on('exit')` event can be `null`.\n// We normalize them to `undefined`\nconst normalizeExitPayload = (rawExitCode, rawSignal) => {\n\tconst exitCode = rawExitCode === null ? undefined : rawExitCode;\n\tconst signal = rawSignal === null ? undefined : rawSignal;\n\tconst signalDescription = signal === undefined ? undefined : getSignalDescription(rawSignal);\n\treturn {exitCode, signal, signalDescription};\n};\n","const toZeroIfInfinity = value => Number.isFinite(value) ? value : 0;\n\nfunction parseNumber(milliseconds) {\n\treturn {\n\t\tdays: Math.trunc(milliseconds / 86_400_000),\n\t\thours: Math.trunc(milliseconds / 3_600_000 % 24),\n\t\tminutes: Math.trunc(milliseconds / 60_000 % 60),\n\t\tseconds: Math.trunc(milliseconds / 1000 % 60),\n\t\tmilliseconds: Math.trunc(milliseconds % 1000),\n\t\tmicroseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1000) % 1000),\n\t\tnanoseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e6) % 1000),\n\t};\n}\n\nfunction parseBigint(milliseconds) {\n\treturn {\n\t\tdays: milliseconds / 86_400_000n,\n\t\thours: milliseconds / 3_600_000n % 24n,\n\t\tminutes: milliseconds / 60_000n % 60n,\n\t\tseconds: milliseconds / 1000n % 60n,\n\t\tmilliseconds: milliseconds % 1000n,\n\t\tmicroseconds: 0n,\n\t\tnanoseconds: 0n,\n\t};\n}\n\nexport default function parseMilliseconds(milliseconds) {\n\tswitch (typeof milliseconds) {\n\t\tcase 'number': {\n\t\t\tif (Number.isFinite(milliseconds)) {\n\t\t\t\treturn parseNumber(milliseconds);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'bigint': {\n\t\t\treturn parseBigint(milliseconds);\n\t\t}\n\n\t\t// No default\n\t}\n\n\tthrow new TypeError('Expected a finite number or bigint');\n}\n","import parseMilliseconds from 'parse-ms';\n\nconst isZero = value => value === 0 || value === 0n;\nconst pluralize = (word, count) => (count === 1 || count === 1n) ? word : `${word}s`;\n\nconst SECOND_ROUNDING_EPSILON = 0.000_000_1;\nconst ONE_DAY_IN_MILLISECONDS = 24n * 60n * 60n * 1000n;\n\nexport default function prettyMilliseconds(milliseconds, options) {\n\tconst isBigInt = typeof milliseconds === 'bigint';\n\tif (!isBigInt && !Number.isFinite(milliseconds)) {\n\t\tthrow new TypeError('Expected a finite number or bigint');\n\t}\n\n\toptions = {...options};\n\n\tconst sign = milliseconds < 0 ? '-' : '';\n\tmilliseconds = milliseconds < 0 ? -milliseconds : milliseconds; // Cannot use `Math.abs()` because of BigInt support.\n\n\tif (options.colonNotation) {\n\t\toptions.compact = false;\n\t\toptions.formatSubMilliseconds = false;\n\t\toptions.separateMilliseconds = false;\n\t\toptions.verbose = false;\n\t}\n\n\tif (options.compact) {\n\t\toptions.unitCount = 1;\n\t\toptions.secondsDecimalDigits = 0;\n\t\toptions.millisecondsDecimalDigits = 0;\n\t}\n\n\tlet result = [];\n\n\tconst floorDecimals = (value, decimalDigits) => {\n\t\tconst flooredInterimValue = Math.floor((value * (10 ** decimalDigits)) + SECOND_ROUNDING_EPSILON);\n\t\tconst flooredValue = Math.round(flooredInterimValue) / (10 ** decimalDigits);\n\t\treturn flooredValue.toFixed(decimalDigits);\n\t};\n\n\tconst add = (value, long, short, valueString) => {\n\t\tif (\n\t\t\t(result.length === 0 || !options.colonNotation)\n\t\t\t&& isZero(value)\n\t\t\t&& !(options.colonNotation && short === 'm')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvalueString ??= String(value);\n\t\tif (options.colonNotation) {\n\t\t\tconst wholeDigits = valueString.includes('.') ? valueString.split('.')[0].length : valueString.length;\n\t\t\tconst minLength = result.length > 0 ? 2 : 1;\n\t\t\tvalueString = '0'.repeat(Math.max(0, minLength - wholeDigits)) + valueString;\n\t\t} else {\n\t\t\tvalueString += options.verbose ? ' ' + pluralize(long, value) : short;\n\t\t}\n\n\t\tresult.push(valueString);\n\t};\n\n\tconst parsed = parseMilliseconds(milliseconds);\n\tconst days = BigInt(parsed.days);\n\n\tif (options.hideYearAndDays) {\n\t\tadd((BigInt(days) * 24n) + BigInt(parsed.hours), 'hour', 'h');\n\t} else {\n\t\tif (options.hideYear) {\n\t\t\tadd(days, 'day', 'd');\n\t\t} else {\n\t\t\tadd(days / 365n, 'year', 'y');\n\t\t\tadd(days % 365n, 'day', 'd');\n\t\t}\n\n\t\tadd(Number(parsed.hours), 'hour', 'h');\n\t}\n\n\tadd(Number(parsed.minutes), 'minute', 'm');\n\n\tif (!options.hideSeconds) {\n\t\tif (\n\t\t\toptions.separateMilliseconds\n\t\t\t|| options.formatSubMilliseconds\n\t\t\t|| (!options.colonNotation && milliseconds < 1000 && !options.subSecondsAsDecimals)\n\t\t) {\n\t\t\tconst seconds = Number(parsed.seconds);\n\t\t\tconst milliseconds = Number(parsed.milliseconds);\n\t\t\tconst microseconds = Number(parsed.microseconds);\n\t\t\tconst nanoseconds = Number(parsed.nanoseconds);\n\n\t\t\tadd(seconds, 'second', 's');\n\n\t\t\tif (options.formatSubMilliseconds) {\n\t\t\t\tadd(milliseconds, 'millisecond', 'ms');\n\t\t\t\tadd(microseconds, 'microsecond', 'µs');\n\t\t\t\tadd(nanoseconds, 'nanosecond', 'ns');\n\t\t\t} else {\n\t\t\t\tconst millisecondsAndBelow\n\t\t\t\t\t= milliseconds\n\t\t\t\t\t+ (microseconds / 1000)\n\t\t\t\t\t+ (nanoseconds / 1e6);\n\n\t\t\t\tconst millisecondsDecimalDigits\n\t\t\t\t\t= typeof options.millisecondsDecimalDigits === 'number'\n\t\t\t\t\t\t? options.millisecondsDecimalDigits\n\t\t\t\t\t\t: 0;\n\n\t\t\t\tconst roundedMilliseconds = millisecondsAndBelow >= 1\n\t\t\t\t\t? Math.round(millisecondsAndBelow)\n\t\t\t\t\t: Math.ceil(millisecondsAndBelow);\n\n\t\t\t\tconst millisecondsString = millisecondsDecimalDigits\n\t\t\t\t\t? millisecondsAndBelow.toFixed(millisecondsDecimalDigits)\n\t\t\t\t\t: roundedMilliseconds;\n\n\t\t\t\tadd(\n\t\t\t\t\tNumber.parseFloat(millisecondsString),\n\t\t\t\t\t'millisecond',\n\t\t\t\t\t'ms',\n\t\t\t\t\tmillisecondsString,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tconst seconds = (\n\t\t\t\t(isBigInt ? Number(milliseconds % ONE_DAY_IN_MILLISECONDS) : milliseconds)\n\t\t\t\t/ 1000\n\t\t\t) % 60;\n\t\t\tconst secondsDecimalDigits\n\t\t\t\t= typeof options.secondsDecimalDigits === 'number'\n\t\t\t\t\t? options.secondsDecimalDigits\n\t\t\t\t\t: 1;\n\t\t\tconst secondsFixed = floorDecimals(seconds, secondsDecimalDigits);\n\t\t\tconst secondsString = options.keepDecimalsOnWholeSeconds\n\t\t\t\t? secondsFixed\n\t\t\t\t: secondsFixed.replace(/\\.0+$/, '');\n\t\t\tadd(Number.parseFloat(secondsString), 'second', 's', secondsString);\n\t\t}\n\t}\n\n\tif (result.length === 0) {\n\t\treturn sign + '0' + (options.verbose ? ' milliseconds' : 'ms');\n\t}\n\n\tconst separator = options.colonNotation ? ':' : ' ';\n\tif (typeof options.unitCount === 'number') {\n\t\tresult = result.slice(0, Math.max(options.unitCount, 1));\n\t}\n\n\treturn sign + result.join(separator);\n}\n","import {verboseLog} from './log.js';\n\n// When `verbose` is `short|full|custom`, print each command's error when it fails\nexport const logError = (result, verboseInfo) => {\n\tif (result.failed) {\n\t\tverboseLog({\n\t\t\ttype: 'error',\n\t\t\tverboseMessage: result.shortMessage,\n\t\t\tverboseInfo,\n\t\t\tresult,\n\t\t});\n\t}\n};\n","import prettyMs from 'pretty-ms';\nimport {isVerbose} from './values.js';\nimport {verboseLog} from './log.js';\nimport {logError} from './error.js';\n\n// When `verbose` is `short|full|custom`, print each command's completion, duration and error\nexport const logResult = (result, verboseInfo) => {\n\tif (!isVerbose(verboseInfo)) {\n\t\treturn;\n\t}\n\n\tlogError(result, verboseInfo);\n\tlogDuration(result, verboseInfo);\n};\n\nconst logDuration = (result, verboseInfo) => {\n\tconst verboseMessage = `(done in ${prettyMs(result.durationMs)})`;\n\tverboseLog({\n\t\ttype: 'duration',\n\t\tverboseMessage,\n\t\tverboseInfo,\n\t\tresult,\n\t});\n};\n","import {logResult} from '../verbose/complete.js';\n\n// Applies the `reject` option.\n// Also print the final log line with `verbose`.\nexport const handleResult = (result, verboseInfo, {reject}) => {\n\tlogResult(result, verboseInfo);\n\n\tif (result.failed && reject) {\n\t\tthrow result;\n\t}\n\n\treturn result;\n};\n","import {readFileSync} from 'node:fs';\nimport {bufferToUint8Array} from '../utils/uint-array.js';\nimport {handleStdio} from './handle.js';\nimport {TYPE_TO_MESSAGE} from './type.js';\n\n// Normalize `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in sync mode\nexport const handleStdioSync = (options, verboseInfo) => handleStdio(addPropertiesSync, options, verboseInfo, true);\n\nconst forbiddenIfSync = ({type, optionName}) => {\n\tthrowInvalidSyncValue(optionName, TYPE_TO_MESSAGE[type]);\n};\n\nconst forbiddenNativeIfSync = ({optionName, value}) => {\n\tif (value === 'ipc' || value === 'overlapped') {\n\t\tthrowInvalidSyncValue(optionName, `\"${value}\"`);\n\t}\n\n\treturn {};\n};\n\nconst throwInvalidSyncValue = (optionName, value) => {\n\tthrow new TypeError(`The \\`${optionName}\\` option cannot be ${value} with synchronous methods.`);\n};\n\n// Create streams used internally for redirecting when using specific values for the `std*` options, in sync mode.\n// For example, `stdin: {file}` reads the file synchronously, then passes it as the `input` option.\nconst addProperties = {\n\tgenerator() {},\n\tasyncGenerator: forbiddenIfSync,\n\twebStream: forbiddenIfSync,\n\tnodeStream: forbiddenIfSync,\n\twebTransform: forbiddenIfSync,\n\tduplex: forbiddenIfSync,\n\tasyncIterable: forbiddenIfSync,\n\tnative: forbiddenNativeIfSync,\n};\n\nconst addPropertiesSync = {\n\tinput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({contents: [bufferToUint8Array(readFileSync(value))]}),\n\t\tfilePath: ({value: {file}}) => ({contents: [bufferToUint8Array(readFileSync(file))]}),\n\t\tfileNumber: forbiddenIfSync,\n\t\titerable: ({value}) => ({contents: [...value]}),\n\t\tstring: ({value}) => ({contents: [value]}),\n\t\tuint8Array: ({value}) => ({contents: [value]}),\n\t},\n\toutput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({path: value}),\n\t\tfilePath: ({value: {file, append}}) => ({path: file, append}),\n\t\tfileNumber: ({value}) => ({path: value}),\n\t\titerable: forbiddenIfSync,\n\t\tstring: forbiddenIfSync,\n\t\tuint8Array: forbiddenIfSync,\n\t},\n};\n","export function isStream(stream, {checkOpen = true} = {}) {\n\treturn stream !== null\n\t\t&& typeof stream === 'object'\n\t\t&& (stream.writable || stream.readable || !checkOpen || (stream.writable === undefined && stream.readable === undefined))\n\t\t&& typeof stream.pipe === 'function';\n}\n\nexport function isWritableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.writable || !checkOpen)\n\t\t&& typeof stream.write === 'function'\n\t\t&& typeof stream.end === 'function'\n\t\t&& typeof stream.writable === 'boolean'\n\t\t&& typeof stream.writableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isReadableStream(stream, {checkOpen = true} = {}) {\n\treturn isStream(stream, {checkOpen})\n\t\t&& (stream.readable || !checkOpen)\n\t\t&& typeof stream.read === 'function'\n\t\t&& typeof stream.readable === 'boolean'\n\t\t&& typeof stream.readableObjectMode === 'boolean'\n\t\t&& typeof stream.destroy === 'function'\n\t\t&& typeof stream.destroyed === 'boolean';\n}\n\nexport function isDuplexStream(stream, options) {\n\treturn isWritableStream(stream, options)\n\t\t&& isReadableStream(stream, options);\n}\n\nexport function isTransformStream(stream, options) {\n\treturn isDuplexStream(stream, options)\n\t\t&& typeof stream._transform === 'function';\n}\n","import {isStream as isNodeStream, isDuplexStream} from 'is-stream';\nimport isPlainObj from 'is-plain-obj';\nimport {isUint8Array} from '../utils/uint-array.js';\n\n// The `stdin`/`stdout`/`stderr` option can be of many types. This detects it.\nexport const getStdioItemType = (value, optionName) => {\n\tif (isAsyncGenerator(value)) {\n\t\treturn 'asyncGenerator';\n\t}\n\n\tif (isSyncGenerator(value)) {\n\t\treturn 'generator';\n\t}\n\n\tif (isUrl(value)) {\n\t\treturn 'fileUrl';\n\t}\n\n\tif (isFilePathObject(value)) {\n\t\treturn 'filePath';\n\t}\n\n\tif (isWebStream(value)) {\n\t\treturn 'webStream';\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\treturn 'native';\n\t}\n\n\tif (isUint8Array(value)) {\n\t\treturn 'uint8Array';\n\t}\n\n\tif (isAsyncIterableObject(value)) {\n\t\treturn 'asyncIterable';\n\t}\n\n\tif (isIterableObject(value)) {\n\t\treturn 'iterable';\n\t}\n\n\tif (isTransformStream(value)) {\n\t\treturn getTransformStreamType({transform: value}, optionName);\n\t}\n\n\tif (isTransformOptions(value)) {\n\t\treturn getTransformObjectType(value, optionName);\n\t}\n\n\treturn 'native';\n};\n\nconst getTransformObjectType = (value, optionName) => {\n\tif (isDuplexStream(value.transform, {checkOpen: false})) {\n\t\treturn getDuplexType(value, optionName);\n\t}\n\n\tif (isTransformStream(value.transform)) {\n\t\treturn getTransformStreamType(value, optionName);\n\t}\n\n\treturn getGeneratorObjectType(value, optionName);\n};\n\nconst getDuplexType = (value, optionName) => {\n\tvalidateNonGeneratorType(value, optionName, 'Duplex stream');\n\treturn 'duplex';\n};\n\nconst getTransformStreamType = (value, optionName) => {\n\tvalidateNonGeneratorType(value, optionName, 'web TransformStream');\n\treturn 'webTransform';\n};\n\nconst validateNonGeneratorType = ({final, binary, objectMode}, optionName, typeName) => {\n\tcheckUndefinedOption(final, `${optionName}.final`, typeName);\n\tcheckUndefinedOption(binary, `${optionName}.binary`, typeName);\n\tcheckBooleanOption(objectMode, `${optionName}.objectMode`);\n};\n\nconst checkUndefinedOption = (value, optionName, typeName) => {\n\tif (value !== undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option can only be defined when using a generator, not a ${typeName}.`);\n\t}\n};\n\nconst getGeneratorObjectType = ({transform, final, binary, objectMode}, optionName) => {\n\tif (transform !== undefined && !isGenerator(transform)) {\n\t\tthrow new TypeError(`The \\`${optionName}.transform\\` option must be a generator, a Duplex stream or a web TransformStream.`);\n\t}\n\n\tif (isDuplexStream(final, {checkOpen: false})) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must not be a Duplex stream.`);\n\t}\n\n\tif (isTransformStream(final)) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must not be a web TransformStream.`);\n\t}\n\n\tif (final !== undefined && !isGenerator(final)) {\n\t\tthrow new TypeError(`The \\`${optionName}.final\\` option must be a generator.`);\n\t}\n\n\tcheckBooleanOption(binary, `${optionName}.binary`);\n\tcheckBooleanOption(objectMode, `${optionName}.objectMode`);\n\n\treturn isAsyncGenerator(transform) || isAsyncGenerator(final) ? 'asyncGenerator' : 'generator';\n};\n\nconst checkBooleanOption = (value, optionName) => {\n\tif (value !== undefined && typeof value !== 'boolean') {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must use a boolean.`);\n\t}\n};\n\nconst isGenerator = value => isAsyncGenerator(value) || isSyncGenerator(value);\nexport const isAsyncGenerator = value => Object.prototype.toString.call(value) === '[object AsyncGeneratorFunction]';\nconst isSyncGenerator = value => Object.prototype.toString.call(value) === '[object GeneratorFunction]';\nconst isTransformOptions = value => isPlainObj(value)\n\t&& (value.transform !== undefined || value.final !== undefined);\n\nexport const isUrl = value => Object.prototype.toString.call(value) === '[object URL]';\nexport const isRegularUrl = value => isUrl(value) && value.protocol !== 'file:';\n\nconst isFilePathObject = value => isPlainObj(value)\n\t&& Object.keys(value).length > 0\n\t&& Object.keys(value).every(key => FILE_PATH_KEYS.has(key))\n\t&& isFilePathString(value.file);\nconst FILE_PATH_KEYS = new Set(['file', 'append']);\nexport const isFilePathString = file => typeof file === 'string';\n\nexport const isUnknownStdioString = (type, value) => type === 'native'\n\t&& typeof value === 'string'\n\t&& !KNOWN_STDIO_STRINGS.has(value);\nconst KNOWN_STDIO_STRINGS = new Set(['ipc', 'ignore', 'inherit', 'overlapped', 'pipe']);\n\nconst isReadableStream = value => Object.prototype.toString.call(value) === '[object ReadableStream]';\nexport const isWritableStream = value => Object.prototype.toString.call(value) === '[object WritableStream]';\nconst isWebStream = value => isReadableStream(value) || isWritableStream(value);\nconst isTransformStream = value => isReadableStream(value?.readable) && isWritableStream(value?.writable);\n\nconst isAsyncIterableObject = value => isObject(value) && typeof value[Symbol.asyncIterator] === 'function';\nconst isIterableObject = value => isObject(value) && typeof value[Symbol.iterator] === 'function';\nconst isObject = value => typeof value === 'object' && value !== null;\n\n// Types which modify `subprocess.std*`\nexport const TRANSFORM_TYPES = new Set(['generator', 'asyncGenerator', 'duplex', 'webTransform']);\n// Types which write to a file or a file descriptor\nexport const FILE_TYPES = new Set(['fileUrl', 'filePath', 'fileNumber']);\n// When two file descriptors of this type share the same target, we need to do some special logic\nexport const SPECIAL_DUPLICATE_TYPES_SYNC = new Set(['fileUrl', 'filePath']);\nexport const SPECIAL_DUPLICATE_TYPES = new Set([...SPECIAL_DUPLICATE_TYPES_SYNC, 'webStream', 'nodeStream']);\n// Do not allow two file descriptors of this type sharing the same target\nexport const FORBID_DUPLICATE_TYPES = new Set(['webTransform', 'duplex']);\n\n// Convert types to human-friendly strings for error messages\nexport const TYPE_TO_MESSAGE = {\n\tgenerator: 'a generator',\n\tasyncGenerator: 'an async generator',\n\tfileUrl: 'a file URL',\n\tfilePath: 'a file path string',\n\tfileNumber: 'a file descriptor number',\n\twebStream: 'a web stream',\n\tnodeStream: 'a Node.js stream',\n\twebTransform: 'a web TransformStream',\n\tduplex: 'a Duplex stream',\n\tnative: 'any value',\n\titerable: 'an iterable',\n\tasyncIterable: 'an async iterable',\n\tstring: 'a string',\n\tuint8Array: 'a Uint8Array',\n};\n","import {TRANSFORM_TYPES} from '../stdio/type.js';\n\n/*\nRetrieve the `objectMode`s of a single transform.\n`objectMode` determines the return value's type, i.e. the `readableObjectMode`.\nThe chunk argument's type is based on the previous generator's return value, i.e. the `writableObjectMode` is based on the previous `readableObjectMode`.\nThe last input's generator is read by `subprocess.stdin` which:\n- should not be in `objectMode` for performance reasons.\n- can only be strings, Buffers and Uint8Arrays.\nTherefore its `readableObjectMode` must be `false`.\nThe same applies to the first output's generator's `writableObjectMode`.\n*/\nexport const getTransformObjectModes = (objectMode, index, newTransforms, direction) => direction === 'output'\n\t? getOutputObjectModes(objectMode, index, newTransforms)\n\t: getInputObjectModes(objectMode, index, newTransforms);\n\nconst getOutputObjectModes = (objectMode, index, newTransforms) => {\n\tconst writableObjectMode = index !== 0 && newTransforms[index - 1].value.readableObjectMode;\n\tconst readableObjectMode = objectMode ?? writableObjectMode;\n\treturn {writableObjectMode, readableObjectMode};\n};\n\nconst getInputObjectModes = (objectMode, index, newTransforms) => {\n\tconst writableObjectMode = index === 0\n\t\t? objectMode === true\n\t\t: newTransforms[index - 1].value.readableObjectMode;\n\tconst readableObjectMode = index !== newTransforms.length - 1 && (objectMode ?? writableObjectMode);\n\treturn {writableObjectMode, readableObjectMode};\n};\n\n// Retrieve the `objectMode` of a file descriptor, e.g. `stdout` or `stderr`\nexport const getFdObjectMode = (stdioItems, direction) => {\n\tconst lastTransform = stdioItems.findLast(({type}) => TRANSFORM_TYPES.has(type));\n\tif (lastTransform === undefined) {\n\t\treturn false;\n\t}\n\n\treturn direction === 'input'\n\t\t? lastTransform.value.writableObjectMode\n\t\t: lastTransform.value.readableObjectMode;\n};\n","import isPlainObj from 'is-plain-obj';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {getTransformObjectModes} from './object-mode.js';\n\n// Transforms generators/duplex/TransformStream can have multiple shapes.\n// This normalizes it and applies default values.\nexport const normalizeTransforms = (stdioItems, optionName, direction, options) => [\n\t...stdioItems.filter(({type}) => !TRANSFORM_TYPES.has(type)),\n\t...getTransforms(stdioItems, optionName, direction, options),\n];\n\nconst getTransforms = (stdioItems, optionName, direction, {encoding}) => {\n\tconst transforms = stdioItems.filter(({type}) => TRANSFORM_TYPES.has(type));\n\tconst newTransforms = Array.from({length: transforms.length});\n\n\tfor (const [index, stdioItem] of Object.entries(transforms)) {\n\t\tnewTransforms[index] = normalizeTransform({\n\t\t\tstdioItem,\n\t\t\tindex: Number(index),\n\t\t\tnewTransforms,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t\tencoding,\n\t\t});\n\t}\n\n\treturn sortTransforms(newTransforms, direction);\n};\n\nconst normalizeTransform = ({stdioItem, stdioItem: {type}, index, newTransforms, optionName, direction, encoding}) => {\n\tif (type === 'duplex') {\n\t\treturn normalizeDuplex({stdioItem, optionName});\n\t}\n\n\tif (type === 'webTransform') {\n\t\treturn normalizeTransformStream({\n\t\t\tstdioItem,\n\t\t\tindex,\n\t\t\tnewTransforms,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\treturn normalizeGenerator({\n\t\tstdioItem,\n\t\tindex,\n\t\tnewTransforms,\n\t\tdirection,\n\t\tencoding,\n\t});\n};\n\nconst normalizeDuplex = ({\n\tstdioItem,\n\tstdioItem: {\n\t\tvalue: {\n\t\t\ttransform,\n\t\t\ttransform: {writableObjectMode, readableObjectMode},\n\t\t\tobjectMode = readableObjectMode,\n\t\t},\n\t},\n\toptionName,\n}) => {\n\tif (objectMode && !readableObjectMode) {\n\t\tthrow new TypeError(`The \\`${optionName}.objectMode\\` option can only be \\`true\\` if \\`new Duplex({objectMode: true})\\` is used.`);\n\t}\n\n\tif (!objectMode && readableObjectMode) {\n\t\tthrow new TypeError(`The \\`${optionName}.objectMode\\` option cannot be \\`false\\` if \\`new Duplex({objectMode: true})\\` is used.`);\n\t}\n\n\treturn {\n\t\t...stdioItem,\n\t\tvalue: {transform, writableObjectMode, readableObjectMode},\n\t};\n};\n\nconst normalizeTransformStream = ({stdioItem, stdioItem: {value}, index, newTransforms, direction}) => {\n\tconst {transform, objectMode} = isPlainObj(value) ? value : {transform: value};\n\tconst {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);\n\treturn ({\n\t\t...stdioItem,\n\t\tvalue: {transform, writableObjectMode, readableObjectMode},\n\t});\n};\n\nconst normalizeGenerator = ({stdioItem, stdioItem: {value}, index, newTransforms, direction, encoding}) => {\n\tconst {\n\t\ttransform,\n\t\tfinal,\n\t\tbinary: binaryOption = false,\n\t\tpreserveNewlines = false,\n\t\tobjectMode,\n\t} = isPlainObj(value) ? value : {transform: value};\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);\n\treturn {\n\t\t...stdioItem,\n\t\tvalue: {\n\t\t\ttransform,\n\t\t\tfinal,\n\t\t\tbinary,\n\t\t\tpreserveNewlines,\n\t\t\twritableObjectMode,\n\t\t\treadableObjectMode,\n\t\t},\n\t};\n};\n\nconst sortTransforms = (newTransforms, direction) => direction === 'input' ? newTransforms.reverse() : newTransforms;\n","import process from 'node:process';\nimport {\n\tisStream as isNodeStream,\n\tisReadableStream as isNodeReadableStream,\n\tisWritableStream as isNodeWritableStream,\n} from 'is-stream';\nimport {isWritableStream} from './type.js';\n\n// For `stdio[fdNumber]` beyond stdin/stdout/stderr, we need to guess whether the value passed is intended for inputs or outputs.\n// This allows us to know whether to pipe _into_ or _from_ the stream.\n// When `stdio[fdNumber]` is a single value, this guess is fairly straightforward.\n// However, when it is an array instead, we also need to make sure the different values are not incompatible with each other.\nexport const getStreamDirection = (stdioItems, fdNumber, optionName) => {\n\tconst directions = stdioItems.map(stdioItem => getStdioItemDirection(stdioItem, fdNumber));\n\n\tif (directions.includes('input') && directions.includes('output')) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must not be an array of both readable and writable values.`);\n\t}\n\n\treturn directions.find(Boolean) ?? DEFAULT_DIRECTION;\n};\n\nconst getStdioItemDirection = ({type, value}, fdNumber) => KNOWN_DIRECTIONS[fdNumber] ?? guessStreamDirection[type](value);\n\n// `stdin`/`stdout`/`stderr` have a known direction\nconst KNOWN_DIRECTIONS = ['input', 'output', 'output'];\n\nconst anyDirection = () => undefined;\nconst alwaysInput = () => 'input';\n\n// `string` can only be added through the `input` option, i.e. does not need to be handled here\nconst guessStreamDirection = {\n\tgenerator: anyDirection,\n\tasyncGenerator: anyDirection,\n\tfileUrl: anyDirection,\n\tfilePath: anyDirection,\n\titerable: alwaysInput,\n\tasyncIterable: alwaysInput,\n\tuint8Array: alwaysInput,\n\twebStream: value => isWritableStream(value) ? 'output' : 'input',\n\tnodeStream(value) {\n\t\tif (!isNodeReadableStream(value, {checkOpen: false})) {\n\t\t\treturn 'output';\n\t\t}\n\n\t\treturn isNodeWritableStream(value, {checkOpen: false}) ? undefined : 'input';\n\t},\n\twebTransform: anyDirection,\n\tduplex: anyDirection,\n\tnative(value) {\n\t\tconst standardStreamDirection = getStandardStreamDirection(value);\n\t\tif (standardStreamDirection !== undefined) {\n\t\t\treturn standardStreamDirection;\n\t\t}\n\n\t\tif (isNodeStream(value, {checkOpen: false})) {\n\t\t\treturn guessStreamDirection.nodeStream(value);\n\t\t}\n\t},\n};\n\nconst getStandardStreamDirection = value => {\n\tif ([0, process.stdin].includes(value)) {\n\t\treturn 'input';\n\t}\n\n\tif ([1, 2, process.stdout, process.stderr].includes(value)) {\n\t\treturn 'output';\n\t}\n};\n\n// When ambiguous, we initially keep the direction as `undefined`.\n// This allows arrays of `stdio` values to resolve the ambiguity.\n// For example, `stdio[3]: DuplexStream` is ambiguous, but `stdio[3]: [DuplexStream, WritableStream]` is not.\n// When the ambiguity remains, we default to `output` since it is the most common use case for additional file descriptors.\nconst DEFAULT_DIRECTION = 'output';\n","// The `ipc` option adds an `ipc` item to the `stdio` option\nexport const normalizeIpcStdioArray = (stdioArray, ipc) => ipc && !stdioArray.includes('ipc')\n\t? [...stdioArray, 'ipc']\n\t: stdioArray;\n","import {STANDARD_STREAMS_ALIASES} from '../utils/standard-stream.js';\nimport {normalizeIpcStdioArray} from '../ipc/array.js';\nimport {isFullVerbose} from '../verbose/values.js';\n\n// Add support for `stdin`/`stdout`/`stderr` as an alias for `stdio`.\n// Also normalize the `stdio` option.\nexport const normalizeStdioOption = ({stdio, ipc, buffer, ...options}, verboseInfo, isSync) => {\n\tconst stdioArray = getStdioArray(stdio, options).map((stdioOption, fdNumber) => addDefaultValue(stdioOption, fdNumber));\n\treturn isSync\n\t\t? normalizeStdioSync(stdioArray, buffer, verboseInfo)\n\t\t: normalizeIpcStdioArray(stdioArray, ipc);\n};\n\nconst getStdioArray = (stdio, options) => {\n\tif (stdio === undefined) {\n\t\treturn STANDARD_STREAMS_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 ${STANDARD_STREAMS_ALIASES.map(alias => `\\`${alias}\\``).join(', ')}`);\n\t}\n\n\tif (typeof stdio === 'string') {\n\t\treturn [stdio, stdio, 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, STANDARD_STREAMS_ALIASES.length);\n\treturn Array.from({length}, (_, fdNumber) => stdio[fdNumber]);\n};\n\nconst hasAlias = options => STANDARD_STREAMS_ALIASES.some(alias => options[alias] !== undefined);\n\nconst addDefaultValue = (stdioOption, fdNumber) => {\n\tif (Array.isArray(stdioOption)) {\n\t\treturn stdioOption.map(item => addDefaultValue(item, fdNumber));\n\t}\n\n\tif (stdioOption === null || stdioOption === undefined) {\n\t\treturn fdNumber >= STANDARD_STREAMS_ALIASES.length ? 'ignore' : 'pipe';\n\t}\n\n\treturn stdioOption;\n};\n\n// Using `buffer: false` with synchronous methods implies `stdout`/`stderr`: `ignore`.\n// Unless the output is needed, e.g. due to `verbose: 'full'` or to redirecting to a file.\nconst normalizeStdioSync = (stdioArray, buffer, verboseInfo) => stdioArray.map((stdioOption, fdNumber) =>\n\t!buffer[fdNumber]\n\t&& fdNumber !== 0\n\t&& !isFullVerbose(verboseInfo, fdNumber)\n\t&& isOutputPipeOnly(stdioOption)\n\t\t? 'ignore'\n\t\t: stdioOption);\n\nconst isOutputPipeOnly = stdioOption => stdioOption === 'pipe'\n\t|| (Array.isArray(stdioOption) && stdioOption.every(item => item === 'pipe'));\n","import {readFileSync} from 'node:fs';\nimport tty from 'node:tty';\nimport {isStream as isNodeStream} from 'is-stream';\nimport {STANDARD_STREAMS} from '../utils/standard-stream.js';\nimport {bufferToUint8Array} from '../utils/uint-array.js';\nimport {serializeOptionValue} from '../arguments/fd-options.js';\n\n// When we use multiple `stdio` values for the same streams, we pass 'pipe' to `child_process.spawn()`.\n// We then emulate the piping done by core Node.js.\n// To do so, we transform the following values:\n//  - Node.js streams are marked as `type: nodeStream`\n//  - 'inherit' becomes `process.stdin|stdout|stderr`\n//  - any file descriptor integer becomes `process.stdio[fdNumber]`\n// All of the above transformations tell Execa to perform manual piping.\nexport const handleNativeStream = ({stdioItem, stdioItem: {type}, isStdioArray, fdNumber, direction, isSync}) => {\n\tif (!isStdioArray || type !== 'native') {\n\t\treturn stdioItem;\n\t}\n\n\treturn isSync\n\t\t? handleNativeStreamSync({stdioItem, fdNumber, direction})\n\t\t: handleNativeStreamAsync({stdioItem, fdNumber});\n};\n\n// Synchronous methods use a different logic.\n// 'inherit', file descriptors and process.std* are handled by readFileSync()/writeFileSync().\nconst handleNativeStreamSync = ({stdioItem, stdioItem: {value, optionName}, fdNumber, direction}) => {\n\tconst targetFd = getTargetFd({\n\t\tvalue,\n\t\toptionName,\n\t\tfdNumber,\n\t\tdirection,\n\t});\n\tif (targetFd !== undefined) {\n\t\treturn targetFd;\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\tthrow new TypeError(`The \\`${optionName}: Stream\\` option cannot both be an array and include a stream with synchronous methods.`);\n\t}\n\n\treturn stdioItem;\n};\n\nconst getTargetFd = ({value, optionName, fdNumber, direction}) => {\n\tconst targetFdNumber = getTargetFdNumber(value, fdNumber);\n\tif (targetFdNumber === undefined) {\n\t\treturn;\n\t}\n\n\tif (direction === 'output') {\n\t\treturn {type: 'fileNumber', value: targetFdNumber, optionName};\n\t}\n\n\tif (tty.isatty(targetFdNumber)) {\n\t\tthrow new TypeError(`The \\`${optionName}: ${serializeOptionValue(value)}\\` option is invalid: it cannot be a TTY with synchronous methods.`);\n\t}\n\n\treturn {type: 'uint8Array', value: bufferToUint8Array(readFileSync(targetFdNumber)), optionName};\n};\n\nconst getTargetFdNumber = (value, fdNumber) => {\n\tif (value === 'inherit') {\n\t\treturn fdNumber;\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn value;\n\t}\n\n\tconst standardStreamIndex = STANDARD_STREAMS.indexOf(value);\n\tif (standardStreamIndex !== -1) {\n\t\treturn standardStreamIndex;\n\t}\n};\n\nconst handleNativeStreamAsync = ({stdioItem, stdioItem: {value, optionName}, fdNumber}) => {\n\tif (value === 'inherit') {\n\t\treturn {type: 'nodeStream', value: getStandardStream(fdNumber, value, optionName), optionName};\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn {type: 'nodeStream', value: getStandardStream(value, value, optionName), optionName};\n\t}\n\n\tif (isNodeStream(value, {checkOpen: false})) {\n\t\treturn {type: 'nodeStream', value, optionName};\n\t}\n\n\treturn stdioItem;\n};\n\n// Node.js does not allow to easily retrieve file descriptors beyond stdin/stdout/stderr as streams.\n//  - `fs.createReadStream()`/`fs.createWriteStream()` with the `fd` option do not work with character devices that use blocking reads/writes (such as interactive TTYs).\n//  - Using a TCP `Socket` would work but be rather complex to implement.\n// Since this is an edge case, we simply throw an error message.\n// See https://github.com/sindresorhus/execa/pull/643#discussion_r1435905707\nconst getStandardStream = (fdNumber, value, optionName) => {\n\tconst standardStream = STANDARD_STREAMS[fdNumber];\n\n\tif (standardStream === undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}: ${value}\\` option is invalid: no such standard stream.`);\n\t}\n\n\treturn standardStream;\n};\n","import {isReadableStream} from 'is-stream';\nimport {isUint8Array} from '../utils/uint-array.js';\nimport {isUrl, isFilePathString} from './type.js';\n\n// Append the `stdin` option with the `input` and `inputFile` options\nexport const handleInputOptions = ({input, inputFile}, fdNumber) => fdNumber === 0\n\t? [\n\t\t...handleInputOption(input),\n\t\t...handleInputFileOption(inputFile),\n\t]\n\t: [];\n\nconst handleInputOption = input => input === undefined ? [] : [{\n\ttype: getInputType(input),\n\tvalue: input,\n\toptionName: 'input',\n}];\n\nconst getInputType = input => {\n\tif (isReadableStream(input, {checkOpen: false})) {\n\t\treturn 'nodeStream';\n\t}\n\n\tif (typeof input === 'string') {\n\t\treturn 'string';\n\t}\n\n\tif (isUint8Array(input)) {\n\t\treturn 'uint8Array';\n\t}\n\n\tthrow new Error('The `input` option must be a string, a Uint8Array or a Node.js Readable stream.');\n};\n\nconst handleInputFileOption = inputFile => inputFile === undefined ? [] : [{\n\t...getInputFileType(inputFile),\n\toptionName: 'inputFile',\n}];\n\nconst getInputFileType = inputFile => {\n\tif (isUrl(inputFile)) {\n\t\treturn {type: 'fileUrl', value: inputFile};\n\t}\n\n\tif (isFilePathString(inputFile)) {\n\t\treturn {type: 'filePath', value: {file: inputFile}};\n\t}\n\n\tthrow new Error('The `inputFile` option must be a file path string or a file URL.');\n};\n","import {\n\tSPECIAL_DUPLICATE_TYPES_SYNC,\n\tSPECIAL_DUPLICATE_TYPES,\n\tFORBID_DUPLICATE_TYPES,\n\tTYPE_TO_MESSAGE,\n} from './type.js';\n\n// Duplicates in the same file descriptor is most likely an error.\n// However, this can be useful with generators.\nexport const filterDuplicates = stdioItems => stdioItems.filter((stdioItemOne, indexOne) =>\n\tstdioItems.every((stdioItemTwo, indexTwo) => stdioItemOne.value !== stdioItemTwo.value\n\t\t|| indexOne >= indexTwo\n\t\t|| stdioItemOne.type === 'generator'\n\t\t|| stdioItemOne.type === 'asyncGenerator'));\n\n// Check if two file descriptors are sharing the same target.\n// For example `{stdout: {file: './output.txt'}, stderr: {file: './output.txt'}}`.\nexport const getDuplicateStream = ({stdioItem: {type, value, optionName}, direction, fileDescriptors, isSync}) => {\n\tconst otherStdioItems = getOtherStdioItems(fileDescriptors, type);\n\tif (otherStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tif (isSync) {\n\t\tvalidateDuplicateStreamSync({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t\treturn;\n\t}\n\n\tif (SPECIAL_DUPLICATE_TYPES.has(type)) {\n\t\treturn getDuplicateStreamInstance({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t}\n\n\tif (FORBID_DUPLICATE_TYPES.has(type)) {\n\t\tvalidateDuplicateTransform({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t});\n\t}\n};\n\n// Values shared by multiple file descriptors\nconst getOtherStdioItems = (fileDescriptors, type) => fileDescriptors\n\t.flatMap(({direction, stdioItems}) => stdioItems\n\t\t.filter(stdioItem => stdioItem.type === type)\n\t\t.map((stdioItem => ({...stdioItem, direction}))));\n\n// With `execaSync()`, do not allow setting a file path both in input and output\nconst validateDuplicateStreamSync = ({otherStdioItems, type, value, optionName, direction}) => {\n\tif (SPECIAL_DUPLICATE_TYPES_SYNC.has(type)) {\n\t\tgetDuplicateStreamInstance({\n\t\t\totherStdioItems,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\toptionName,\n\t\t\tdirection,\n\t\t});\n\t}\n};\n\n// When two file descriptors share the file or stream, we need to re-use the same underlying stream.\n// Otherwise, the stream would be closed twice when piping ends.\n// This is only an issue with output file descriptors.\n// This is not a problem with generator functions since those create a new instance for each file descriptor.\n// We also forbid input and output file descriptors sharing the same file or stream, since that does not make sense.\nconst getDuplicateStreamInstance = ({otherStdioItems, type, value, optionName, direction}) => {\n\tconst duplicateStdioItems = otherStdioItems.filter(stdioItem => hasSameValue(stdioItem, value));\n\tif (duplicateStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tconst differentStdioItem = duplicateStdioItems.find(stdioItem => stdioItem.direction !== direction);\n\tthrowOnDuplicateStream(differentStdioItem, optionName, type);\n\n\treturn direction === 'output' ? duplicateStdioItems[0].stream : undefined;\n};\n\nconst hasSameValue = ({type, value}, secondValue) => {\n\tif (type === 'filePath') {\n\t\treturn value.file === secondValue.file;\n\t}\n\n\tif (type === 'fileUrl') {\n\t\treturn value.href === secondValue.href;\n\t}\n\n\treturn value === secondValue;\n};\n\n// We do not allow two file descriptors to share the same Duplex or TransformStream.\n// This is because those are set directly to `subprocess.std*`.\n// For example, this could result in `subprocess.stdout` and `subprocess.stderr` being the same value.\n// This means reading from either would get data from both stdout and stderr.\nconst validateDuplicateTransform = ({otherStdioItems, type, value, optionName}) => {\n\tconst duplicateStdioItem = otherStdioItems.find(({value: {transform}}) => transform === value.transform);\n\tthrowOnDuplicateStream(duplicateStdioItem, optionName, type);\n};\n\nconst throwOnDuplicateStream = (stdioItem, optionName, type) => {\n\tif (stdioItem !== undefined) {\n\t\tthrow new TypeError(`The \\`${stdioItem.optionName}\\` and \\`${optionName}\\` options must not target ${TYPE_TO_MESSAGE[type]} that is the same.`);\n\t}\n};\n","import {getStreamName, isStandardStream} from '../utils/standard-stream.js';\nimport {normalizeTransforms} from '../transform/normalize.js';\nimport {getFdObjectMode} from '../transform/object-mode.js';\nimport {\n\tgetStdioItemType,\n\tisRegularUrl,\n\tisUnknownStdioString,\n\tFILE_TYPES,\n} from './type.js';\nimport {getStreamDirection} from './direction.js';\nimport {normalizeStdioOption} from './stdio-option.js';\nimport {handleNativeStream} from './native.js';\nimport {handleInputOptions} from './input-option.js';\nimport {filterDuplicates, getDuplicateStream} from './duplicate.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in async/sync mode\n// They are converted into an array of `fileDescriptors`.\n// Each `fileDescriptor` is normalized, validated and contains all information necessary for further handling.\nexport const handleStdio = (addProperties, options, verboseInfo, isSync) => {\n\tconst stdio = normalizeStdioOption(options, verboseInfo, isSync);\n\tconst initialFileDescriptors = stdio.map((stdioOption, fdNumber) => getFileDescriptor({\n\t\tstdioOption,\n\t\tfdNumber,\n\t\toptions,\n\t\tisSync,\n\t}));\n\tconst fileDescriptors = getFinalFileDescriptors({\n\t\tinitialFileDescriptors,\n\t\taddProperties,\n\t\toptions,\n\t\tisSync,\n\t});\n\toptions.stdio = fileDescriptors.map(({stdioItems}) => forwardStdio(stdioItems));\n\treturn fileDescriptors;\n};\n\nconst getFileDescriptor = ({stdioOption, fdNumber, options, isSync}) => {\n\tconst optionName = getStreamName(fdNumber);\n\tconst {stdioItems: initialStdioItems, isStdioArray} = initializeStdioItems({\n\t\tstdioOption,\n\t\tfdNumber,\n\t\toptions,\n\t\toptionName,\n\t});\n\tconst direction = getStreamDirection(initialStdioItems, fdNumber, optionName);\n\tconst stdioItems = initialStdioItems.map(stdioItem => handleNativeStream({\n\t\tstdioItem,\n\t\tisStdioArray,\n\t\tfdNumber,\n\t\tdirection,\n\t\tisSync,\n\t}));\n\tconst normalizedStdioItems = normalizeTransforms(stdioItems, optionName, direction, options);\n\tconst objectMode = getFdObjectMode(normalizedStdioItems, direction);\n\tvalidateFileObjectMode(normalizedStdioItems, objectMode);\n\treturn {direction, objectMode, stdioItems: normalizedStdioItems};\n};\n\n// We make sure passing an array with a single item behaves the same as passing that item without an array.\n// This is what users would expect.\n// For example, `stdout: ['ignore']` behaves the same as `stdout: 'ignore'`.\nconst initializeStdioItems = ({stdioOption, fdNumber, options, optionName}) => {\n\tconst values = Array.isArray(stdioOption) ? stdioOption : [stdioOption];\n\tconst initialStdioItems = [\n\t\t...values.map(value => initializeStdioItem(value, optionName)),\n\t\t...handleInputOptions(options, fdNumber),\n\t];\n\n\tconst stdioItems = filterDuplicates(initialStdioItems);\n\tconst isStdioArray = stdioItems.length > 1;\n\tvalidateStdioArray(stdioItems, isStdioArray, optionName);\n\tvalidateStreams(stdioItems);\n\treturn {stdioItems, isStdioArray};\n};\n\nconst initializeStdioItem = (value, optionName) => ({\n\ttype: getStdioItemType(value, optionName),\n\tvalue,\n\toptionName,\n});\n\nconst validateStdioArray = (stdioItems, isStdioArray, optionName) => {\n\tif (stdioItems.length === 0) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option must not be an empty array.`);\n\t}\n\n\tif (!isStdioArray) {\n\t\treturn;\n\t}\n\n\tfor (const {value, optionName} of stdioItems) {\n\t\tif (INVALID_STDIO_ARRAY_OPTIONS.has(value)) {\n\t\t\tthrow new Error(`The \\`${optionName}\\` option must not include \\`${value}\\`.`);\n\t\t}\n\t}\n};\n\n// Using those `stdio` values together with others for the same stream does not make sense, so we make it fail.\n// However, we do allow it if the array has a single item.\nconst INVALID_STDIO_ARRAY_OPTIONS = new Set(['ignore', 'ipc']);\n\nconst validateStreams = stdioItems => {\n\tfor (const stdioItem of stdioItems) {\n\t\tvalidateFileStdio(stdioItem);\n\t}\n};\n\nconst validateFileStdio = ({type, value, optionName}) => {\n\tif (isRegularUrl(value)) {\n\t\tthrow new TypeError(`The \\`${optionName}: URL\\` option must use the \\`file:\\` scheme.\nFor example, you can use the \\`pathToFileURL()\\` method of the \\`url\\` core module.`);\n\t}\n\n\tif (isUnknownStdioString(type, value)) {\n\t\tthrow new TypeError(`The \\`${optionName}: { file: '...' }\\` option must be used instead of \\`${optionName}: '...'\\`.`);\n\t}\n};\n\nconst validateFileObjectMode = (stdioItems, objectMode) => {\n\tif (!objectMode) {\n\t\treturn;\n\t}\n\n\tconst fileStdioItem = stdioItems.find(({type}) => FILE_TYPES.has(type));\n\tif (fileStdioItem !== undefined) {\n\t\tthrow new TypeError(`The \\`${fileStdioItem.optionName}\\` option cannot use both files and transforms in objectMode.`);\n\t}\n};\n\n// Some `stdio` values require Execa to create streams.\n// For example, file paths create file read/write streams.\n// Those transformations are specified in `addProperties`, which is both direction-specific and type-specific.\nconst getFinalFileDescriptors = ({initialFileDescriptors, addProperties, options, isSync}) => {\n\tconst fileDescriptors = [];\n\n\ttry {\n\t\tfor (const fileDescriptor of initialFileDescriptors) {\n\t\t\tfileDescriptors.push(getFinalFileDescriptor({\n\t\t\t\tfileDescriptor,\n\t\t\t\tfileDescriptors,\n\t\t\t\taddProperties,\n\t\t\t\toptions,\n\t\t\t\tisSync,\n\t\t\t}));\n\t\t}\n\n\t\treturn fileDescriptors;\n\t} catch (error) {\n\t\tcleanupCustomStreams(fileDescriptors);\n\t\tthrow error;\n\t}\n};\n\nconst getFinalFileDescriptor = ({\n\tfileDescriptor: {direction, objectMode, stdioItems},\n\tfileDescriptors,\n\taddProperties,\n\toptions,\n\tisSync,\n}) => {\n\tconst finalStdioItems = stdioItems.map(stdioItem => addStreamProperties({\n\t\tstdioItem,\n\t\taddProperties,\n\t\tdirection,\n\t\toptions,\n\t\tfileDescriptors,\n\t\tisSync,\n\t}));\n\treturn {direction, objectMode, stdioItems: finalStdioItems};\n};\n\nconst addStreamProperties = ({stdioItem, addProperties, direction, options, fileDescriptors, isSync}) => {\n\tconst duplicateStream = getDuplicateStream({\n\t\tstdioItem,\n\t\tdirection,\n\t\tfileDescriptors,\n\t\tisSync,\n\t});\n\n\tif (duplicateStream !== undefined) {\n\t\treturn {...stdioItem, stream: duplicateStream};\n\t}\n\n\treturn {\n\t\t...stdioItem,\n\t\t...addProperties[direction][stdioItem.type](stdioItem, options),\n\t};\n};\n\n// The stream error handling is performed by the piping logic above, which cannot be performed before subprocess spawning.\n// If the subprocess spawning fails (e.g. due to an invalid command), the streams need to be manually destroyed.\n// We need to create those streams before subprocess spawning, in case their creation fails, e.g. when passing an invalid generator as argument.\n// Like this, an exception would be thrown, which would prevent spawning a subprocess.\nexport const cleanupCustomStreams = fileDescriptors => {\n\tfor (const {stdioItems} of fileDescriptors) {\n\t\tfor (const {stream} of stdioItems) {\n\t\t\tif (stream !== undefined && !isStandardStream(stream)) {\n\t\t\t\tstream.destroy();\n\t\t\t}\n\t\t}\n\t}\n};\n\n// When the `std*: Iterable | WebStream | URL | filePath`, `input` or `inputFile` option is used, we pipe to `subprocess.std*`.\n// When the `std*: Array` option is used, we emulate some of the native values ('inherit', Node.js stream and file descriptor integer). To do so, we also need to pipe to `subprocess.std*`.\n// Therefore the `std*` options must be either `pipe` or `overlapped`. Other values do not set `subprocess.std*`.\nconst forwardStdio = stdioItems => {\n\tif (stdioItems.length > 1) {\n\t\treturn stdioItems.some(({value}) => value === 'overlapped') ? 'overlapped' : 'pipe';\n\t}\n\n\tconst [{type, value}] = stdioItems;\n\treturn type === 'native' ? value : 'pipe';\n};\n","import stripFinalNewlineFunction from 'strip-final-newline';\n\n// Apply `stripFinalNewline` option, which applies to `result.stdout|stderr|all|stdio[*]`.\n// If the `lines` option is used, it is applied on each line, but using a different function.\nexport const stripNewline = (value, {stripFinalNewline}, fdNumber) => getStripFinalNewline(stripFinalNewline, fdNumber) && value !== undefined && !Array.isArray(value)\n\t? stripFinalNewlineFunction(value)\n\t: value;\n\n// Retrieve `stripFinalNewline` option value, including with `subprocess.all`\nexport const getStripFinalNewline = (stripFinalNewline, fdNumber) => fdNumber === 'all'\n\t? stripFinalNewline[1] || stripFinalNewline[2]\n\t: stripFinalNewline[fdNumber];\n","import {Transform, getDefaultHighWaterMark} from 'node:stream';\nimport {isAsyncGenerator} from '../stdio/type.js';\nimport {getSplitLinesGenerator, getAppendNewlineGenerator} from './split.js';\nimport {getValidateTransformInput, getValidateTransformReturn} from './validate.js';\nimport {getEncodingTransformGenerator} from './encoding-transform.js';\nimport {\n\tpushChunks,\n\ttransformChunk,\n\tfinalChunks,\n\tdestroyTransform,\n} from './run-async.js';\nimport {\n\tpushChunksSync,\n\ttransformChunkSync,\n\tfinalChunksSync,\n\trunTransformSync,\n} from './run-sync.js';\n\n/*\nGenerators can be used to transform/filter standard streams.\n\nGenerators have a simple syntax, yet allows all of the following:\n- Sharing `state` between chunks\n- Flushing logic, by using a `final` function\n- Asynchronous logic\n- Emitting multiple chunks from a single source chunk, even if spaced in time, by using multiple `yield`\n- Filtering, by using no `yield`\n\nTherefore, there is no need to allow Node.js or web transform streams.\n\nThe `highWaterMark` is kept as the default value, since this is what `subprocess.std*` uses.\n\nChunks are currently processed serially. We could add a `concurrency` option to parallelize in the future.\n\nTransform an array of generator functions into a `Transform` stream.\n`Duplex.from(generator)` cannot be used because it does not allow setting the `objectMode` and `highWaterMark`.\n*/\nexport const generatorToStream = ({\n\tvalue,\n\tvalue: {transform, final, writableObjectMode, readableObjectMode},\n\toptionName,\n}, {encoding}) => {\n\tconst state = {};\n\tconst generators = addInternalGenerators(value, encoding, optionName);\n\n\tconst transformAsync = isAsyncGenerator(transform);\n\tconst finalAsync = isAsyncGenerator(final);\n\tconst transformMethod = transformAsync\n\t\t? pushChunks.bind(undefined, transformChunk, state)\n\t\t: pushChunksSync.bind(undefined, transformChunkSync);\n\tconst finalMethod = transformAsync || finalAsync\n\t\t? pushChunks.bind(undefined, finalChunks, state)\n\t\t: pushChunksSync.bind(undefined, finalChunksSync);\n\tconst destroyMethod = transformAsync || finalAsync\n\t\t? destroyTransform.bind(undefined, state)\n\t\t: undefined;\n\n\tconst stream = new Transform({\n\t\twritableObjectMode,\n\t\twritableHighWaterMark: getDefaultHighWaterMark(writableObjectMode),\n\t\treadableObjectMode,\n\t\treadableHighWaterMark: getDefaultHighWaterMark(readableObjectMode),\n\t\ttransform(chunk, encoding, done) {\n\t\t\ttransformMethod([chunk, generators, 0], this, done);\n\t\t},\n\t\tflush(done) {\n\t\t\tfinalMethod([generators], this, done);\n\t\t},\n\t\tdestroy: destroyMethod,\n\t});\n\treturn {stream};\n};\n\n// Applies transform generators in sync mode\nexport const runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => {\n\tconst generators = stdioItems.filter(({type}) => type === 'generator');\n\tconst reversedGenerators = isInput ? generators.reverse() : generators;\n\n\tfor (const {value, optionName} of reversedGenerators) {\n\t\tconst generators = addInternalGenerators(value, encoding, optionName);\n\t\tchunks = runTransformSync(generators, chunks);\n\t}\n\n\treturn chunks;\n};\n\n// Generators used internally to convert the chunk type, validate it, and split into lines\nconst addInternalGenerators = (\n\t{transform, final, binary, writableObjectMode, readableObjectMode, preserveNewlines},\n\tencoding,\n\toptionName,\n) => {\n\tconst state = {};\n\treturn [\n\t\t{transform: getValidateTransformInput(writableObjectMode, optionName)},\n\t\tgetEncodingTransformGenerator(binary, encoding, writableObjectMode),\n\t\tgetSplitLinesGenerator(binary, preserveNewlines, writableObjectMode, state),\n\t\t{transform, final},\n\t\t{transform: getValidateTransformReturn(readableObjectMode, optionName)},\n\t\tgetAppendNewlineGenerator({\n\t\t\tbinary,\n\t\t\tpreserveNewlines,\n\t\t\treadableObjectMode,\n\t\t\tstate,\n\t\t}),\n\t].filter(Boolean);\n};\n","// Split chunks line-wise for generators passed to the `std*` options\nexport const getSplitLinesGenerator = (binary, preserveNewlines, skipped, state) => binary || skipped\n\t? undefined\n\t: initializeSplitLines(preserveNewlines, state);\n\n// Same but for synchronous methods\nexport const splitLinesSync = (chunk, preserveNewlines, objectMode) => objectMode\n\t? chunk.flatMap(item => splitLinesItemSync(item, preserveNewlines))\n\t: splitLinesItemSync(chunk, preserveNewlines);\n\nconst splitLinesItemSync = (chunk, preserveNewlines) => {\n\tconst {transform, final} = initializeSplitLines(preserveNewlines, {});\n\treturn [...transform(chunk), ...final()];\n};\n\nconst initializeSplitLines = (preserveNewlines, state) => {\n\tstate.previousChunks = '';\n\treturn {\n\t\ttransform: splitGenerator.bind(undefined, state, preserveNewlines),\n\t\tfinal: linesFinal.bind(undefined, state),\n\t};\n};\n\n// This imperative logic is much faster than using `String.split()` and uses very low memory.\nconst splitGenerator = function * (state, preserveNewlines, chunk) {\n\tif (typeof chunk !== 'string') {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tlet {previousChunks} = state;\n\tlet start = -1;\n\n\tfor (let end = 0; end < chunk.length; end += 1) {\n\t\tif (chunk[end] === '\\n') {\n\t\t\tconst newlineLength = getNewlineLength(chunk, end, preserveNewlines, state);\n\t\t\tlet line = chunk.slice(start + 1, end + 1 - newlineLength);\n\n\t\t\tif (previousChunks.length > 0) {\n\t\t\t\tline = concatString(previousChunks, line);\n\t\t\t\tpreviousChunks = '';\n\t\t\t}\n\n\t\t\tyield line;\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tif (start !== chunk.length - 1) {\n\t\tpreviousChunks = concatString(previousChunks, chunk.slice(start + 1));\n\t}\n\n\tstate.previousChunks = previousChunks;\n};\n\nconst getNewlineLength = (chunk, end, preserveNewlines, state) => {\n\tif (preserveNewlines) {\n\t\treturn 0;\n\t}\n\n\tstate.isWindowsNewline = end !== 0 && chunk[end - 1] === '\\r';\n\treturn state.isWindowsNewline ? 2 : 1;\n};\n\nconst linesFinal = function * ({previousChunks}) {\n\tif (previousChunks.length > 0) {\n\t\tyield previousChunks;\n\t}\n};\n\n// Unless `preserveNewlines: true` is used, we strip the newline of each line.\n// This re-adds them after the user `transform` code has run.\nexport const getAppendNewlineGenerator = ({binary, preserveNewlines, readableObjectMode, state}) => binary || preserveNewlines || readableObjectMode\n\t? undefined\n\t: {transform: appendNewlineGenerator.bind(undefined, state)};\n\nconst appendNewlineGenerator = function * ({isWindowsNewline = false}, chunk) {\n\tconst {unixNewline, windowsNewline, LF, concatBytes} = typeof chunk === 'string' ? linesStringInfo : linesUint8ArrayInfo;\n\n\tif (chunk.at(-1) === LF) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst newline = isWindowsNewline ? windowsNewline : unixNewline;\n\tyield concatBytes(chunk, newline);\n};\n\nconst concatString = (firstChunk, secondChunk) => `${firstChunk}${secondChunk}`;\n\nconst linesStringInfo = {\n\twindowsNewline: '\\r\\n',\n\tunixNewline: '\\n',\n\tLF: '\\n',\n\tconcatBytes: concatString,\n};\n\nconst concatUint8Array = (firstChunk, secondChunk) => {\n\tconst chunk = new Uint8Array(firstChunk.length + secondChunk.length);\n\tchunk.set(firstChunk, 0);\n\tchunk.set(secondChunk, firstChunk.length);\n\treturn chunk;\n};\n\nconst linesUint8ArrayInfo = {\n\twindowsNewline: new Uint8Array([0x0D, 0x0A]),\n\tunixNewline: new Uint8Array([0x0A]),\n\tLF: 0x0A,\n\tconcatBytes: concatUint8Array,\n};\n","import {Buffer} from 'node:buffer';\nimport {isUint8Array} from '../utils/uint-array.js';\n\n// Validate the type of chunk argument passed to transform generators\nexport const getValidateTransformInput = (writableObjectMode, optionName) => writableObjectMode\n\t? undefined\n\t: validateStringTransformInput.bind(undefined, optionName);\n\nconst validateStringTransformInput = function * (optionName, chunk) {\n\tif (typeof chunk !== 'string' && !isUint8Array(chunk) && !Buffer.isBuffer(chunk)) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's transform must use \"objectMode: true\" to receive as input: ${typeof chunk}.`);\n\t}\n\n\tyield chunk;\n};\n\n// Validate the type of the value returned by transform generators\nexport const getValidateTransformReturn = (readableObjectMode, optionName) => readableObjectMode\n\t? validateObjectTransformReturn.bind(undefined, optionName)\n\t: validateStringTransformReturn.bind(undefined, optionName);\n\nconst validateObjectTransformReturn = function * (optionName, chunk) {\n\tvalidateEmptyReturn(optionName, chunk);\n\tyield chunk;\n};\n\nconst validateStringTransformReturn = function * (optionName, chunk) {\n\tvalidateEmptyReturn(optionName, chunk);\n\n\tif (typeof chunk !== 'string' && !isUint8Array(chunk)) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's function must yield a string or an Uint8Array, not ${typeof chunk}.`);\n\t}\n\n\tyield chunk;\n};\n\nconst validateEmptyReturn = (optionName, chunk) => {\n\tif (chunk === null || chunk === undefined) {\n\t\tthrow new TypeError(`The \\`${optionName}\\` option's function must not call \\`yield ${chunk}\\`.\nInstead, \\`yield\\` should either be called with a value, or not be called at all. For example:\n  if (condition) { yield value; }`);\n\t}\n};\n","import {Buffer} from 'node:buffer';\nimport {StringDecoder} from 'node:string_decoder';\nimport {isUint8Array, bufferToUint8Array} from '../utils/uint-array.js';\n\n/*\nWhen using binary encodings, add an internal generator that converts chunks from `Buffer` to `string` or `Uint8Array`.\nChunks might be Buffer, Uint8Array or strings since:\n- `subprocess.stdout|stderr` emits Buffers\n- `subprocess.stdin.write()` accepts Buffer, Uint8Array or string\n- Previous generators might return Uint8Array or string\n\nHowever, those are converted to Buffer:\n- on writes: `Duplex.writable` `decodeStrings: true` default option\n- on reads: `Duplex.readable` `readableEncoding: null` default option\n*/\nexport const getEncodingTransformGenerator = (binary, encoding, skipped) => {\n\tif (skipped) {\n\t\treturn;\n\t}\n\n\tif (binary) {\n\t\treturn {transform: encodingUint8ArrayGenerator.bind(undefined, new TextEncoder())};\n\t}\n\n\tconst stringDecoder = new StringDecoder(encoding);\n\treturn {\n\t\ttransform: encodingStringGenerator.bind(undefined, stringDecoder),\n\t\tfinal: encodingStringFinal.bind(undefined, stringDecoder),\n\t};\n};\n\nconst encodingUint8ArrayGenerator = function * (textEncoder, chunk) {\n\tif (Buffer.isBuffer(chunk)) {\n\t\tyield bufferToUint8Array(chunk);\n\t} else if (typeof chunk === 'string') {\n\t\tyield textEncoder.encode(chunk);\n\t} else {\n\t\tyield chunk;\n\t}\n};\n\nconst encodingStringGenerator = function * (stringDecoder, chunk) {\n\tyield isUint8Array(chunk) ? stringDecoder.write(chunk) : chunk;\n};\n\nconst encodingStringFinal = function * (stringDecoder) {\n\tconst lastChunk = stringDecoder.end();\n\tif (lastChunk !== '') {\n\t\tyield lastChunk;\n\t}\n};\n","import {callbackify} from 'node:util';\n\n// Applies a series of generator functions asynchronously\nexport const pushChunks = callbackify(async (getChunks, state, getChunksArguments, transformStream) => {\n\tstate.currentIterable = getChunks(...getChunksArguments);\n\n\ttry {\n\t\tfor await (const chunk of state.currentIterable) {\n\t\t\ttransformStream.push(chunk);\n\t\t}\n\t} finally {\n\t\tdelete state.currentIterable;\n\t}\n});\n\n// For each new chunk, apply each `transform()` method\nexport const transformChunk = async function * (chunk, generators, index) {\n\tif (index === generators.length) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst {transform = identityGenerator} = generators[index];\n\tfor await (const transformedChunk of transform(chunk)) {\n\t\tyield * transformChunk(transformedChunk, generators, index + 1);\n\t}\n};\n\n// At the end, apply each `final()` method, followed by the `transform()` method of the next transforms\nexport const finalChunks = async function * (generators) {\n\tfor (const [index, {final}] of Object.entries(generators)) {\n\t\tyield * generatorFinalChunks(final, Number(index), generators);\n\t}\n};\n\nconst generatorFinalChunks = async function * (final, index, generators) {\n\tif (final === undefined) {\n\t\treturn;\n\t}\n\n\tfor await (const finalChunk of final()) {\n\t\tyield * transformChunk(finalChunk, generators, index + 1);\n\t}\n};\n\n// Cancel any ongoing async generator when the Transform is destroyed, e.g. when the subprocess errors\nexport const destroyTransform = callbackify(async ({currentIterable}, error) => {\n\tif (currentIterable !== undefined) {\n\t\tawait (error ? currentIterable.throw(error) : currentIterable.return());\n\t\treturn;\n\t}\n\n\tif (error) {\n\t\tthrow error;\n\t}\n});\n\nconst identityGenerator = function * (chunk) {\n\tyield chunk;\n};\n","// Duplicate the code from `run-async.js` but as synchronous functions\nexport const pushChunksSync = (getChunksSync, getChunksArguments, transformStream, done) => {\n\ttry {\n\t\tfor (const chunk of getChunksSync(...getChunksArguments)) {\n\t\t\ttransformStream.push(chunk);\n\t\t}\n\n\t\tdone();\n\t} catch (error) {\n\t\tdone(error);\n\t}\n};\n\n// Run synchronous generators with `execaSync()`\nexport const runTransformSync = (generators, chunks) => [\n\t...chunks.flatMap(chunk => [...transformChunkSync(chunk, generators, 0)]),\n\t...finalChunksSync(generators),\n];\n\nexport const transformChunkSync = function * (chunk, generators, index) {\n\tif (index === generators.length) {\n\t\tyield chunk;\n\t\treturn;\n\t}\n\n\tconst {transform = identityGenerator} = generators[index];\n\tfor (const transformedChunk of transform(chunk)) {\n\t\tyield * transformChunkSync(transformedChunk, generators, index + 1);\n\t}\n};\n\nexport const finalChunksSync = function * (generators) {\n\tfor (const [index, {final}] of Object.entries(generators)) {\n\t\tyield * generatorFinalChunksSync(final, Number(index), generators);\n\t}\n};\n\nconst generatorFinalChunksSync = function * (final, index, generators) {\n\tif (final === undefined) {\n\t\treturn;\n\t}\n\n\tfor (const finalChunk of final()) {\n\t\tyield * transformChunkSync(finalChunk, generators, index + 1);\n\t}\n};\n\nconst identityGenerator = function * (chunk) {\n\tyield chunk;\n};\n","import {runGeneratorsSync} from '../transform/generator.js';\nimport {joinToUint8Array, isUint8Array} from '../utils/uint-array.js';\nimport {TYPE_TO_MESSAGE} from '../stdio/type.js';\n\n// Apply `stdin`/`input`/`inputFile` options, before spawning, in sync mode, by converting it to the `input` option\nexport const addInputOptionsSync = (fileDescriptors, options) => {\n\tfor (const fdNumber of getInputFdNumbers(fileDescriptors)) {\n\t\taddInputOptionSync(fileDescriptors, fdNumber, options);\n\t}\n};\n\nconst getInputFdNumbers = fileDescriptors => new Set(Object.entries(fileDescriptors)\n\t.filter(([, {direction}]) => direction === 'input')\n\t.map(([fdNumber]) => Number(fdNumber)));\n\nconst addInputOptionSync = (fileDescriptors, fdNumber, options) => {\n\tconst {stdioItems} = fileDescriptors[fdNumber];\n\tconst allStdioItems = stdioItems.filter(({contents}) => contents !== undefined);\n\tif (allStdioItems.length === 0) {\n\t\treturn;\n\t}\n\n\tif (fdNumber !== 0) {\n\t\tconst [{type, optionName}] = allStdioItems;\n\t\tthrow new TypeError(`Only the \\`stdin\\` option, not \\`${optionName}\\`, can be ${TYPE_TO_MESSAGE[type]} with synchronous methods.`);\n\t}\n\n\tconst allContents = allStdioItems.map(({contents}) => contents);\n\tconst transformedContents = allContents.map(contents => applySingleInputGeneratorsSync(contents, stdioItems));\n\toptions.input = joinToUint8Array(transformedContents);\n};\n\nconst applySingleInputGeneratorsSync = (contents, stdioItems) => {\n\tconst newContents = runGeneratorsSync(contents, stdioItems, 'utf8', true);\n\tvalidateSerializable(newContents);\n\treturn joinToUint8Array(newContents);\n};\n\nconst validateSerializable = newContents => {\n\tconst invalidItem = newContents.find(item => typeof item !== 'string' && !isUint8Array(item));\n\tif (invalidItem !== undefined) {\n\t\tthrow new TypeError(`The \\`stdin\\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${invalidItem}.`);\n\t}\n};\n","import {writeFileSync, appendFileSync} from 'node:fs';\nimport {shouldLogOutput, logLinesSync} from '../verbose/output.js';\nimport {runGeneratorsSync} from '../transform/generator.js';\nimport {splitLinesSync} from '../transform/split.js';\nimport {joinToString, joinToUint8Array, bufferToUint8Array} from '../utils/uint-array.js';\nimport {FILE_TYPES} from '../stdio/type.js';\nimport {truncateMaxBufferSync} from './max-buffer.js';\n\n// Apply `stdout`/`stderr` options, after spawning, in sync mode\nexport const transformOutputSync = ({fileDescriptors, syncResult: {output}, options, isMaxBuffer, verboseInfo}) => {\n\tif (output === null) {\n\t\treturn {output: Array.from({length: 3})};\n\t}\n\n\tconst state = {};\n\tconst outputFiles = new Set([]);\n\tconst transformedOutput = output.map((result, fdNumber) =>\n\t\ttransformOutputResultSync({\n\t\t\tresult,\n\t\t\tfileDescriptors,\n\t\t\tfdNumber,\n\t\t\tstate,\n\t\t\toutputFiles,\n\t\t\tisMaxBuffer,\n\t\t\tverboseInfo,\n\t\t}, options));\n\treturn {output: transformedOutput, ...state};\n};\n\nconst transformOutputResultSync = (\n\t{result, fileDescriptors, fdNumber, state, outputFiles, isMaxBuffer, verboseInfo},\n\t{buffer, encoding, lines, stripFinalNewline, maxBuffer},\n) => {\n\tif (result === null) {\n\t\treturn;\n\t}\n\n\tconst truncatedResult = truncateMaxBufferSync(result, isMaxBuffer, maxBuffer);\n\tconst uint8ArrayResult = bufferToUint8Array(truncatedResult);\n\tconst {stdioItems, objectMode} = fileDescriptors[fdNumber];\n\tconst chunks = runOutputGeneratorsSync([uint8ArrayResult], stdioItems, encoding, state);\n\tconst {serializedResult, finalResult = serializedResult} = serializeChunks({\n\t\tchunks,\n\t\tobjectMode,\n\t\tencoding,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tfdNumber,\n\t});\n\n\tlogOutputSync({\n\t\tserializedResult,\n\t\tfdNumber,\n\t\tstate,\n\t\tverboseInfo,\n\t\tencoding,\n\t\tstdioItems,\n\t\tobjectMode,\n\t});\n\n\tconst returnedResult = buffer[fdNumber] ? finalResult : undefined;\n\n\ttry {\n\t\tif (state.error === undefined) {\n\t\t\twriteToFiles(serializedResult, stdioItems, outputFiles);\n\t\t}\n\n\t\treturn returnedResult;\n\t} catch (error) {\n\t\tstate.error = error;\n\t\treturn returnedResult;\n\t}\n};\n\n// Applies transform generators to `stdout`/`stderr`\nconst runOutputGeneratorsSync = (chunks, stdioItems, encoding, state) => {\n\ttry {\n\t\treturn runGeneratorsSync(chunks, stdioItems, encoding, false);\n\t} catch (error) {\n\t\tstate.error = error;\n\t\treturn chunks;\n\t}\n};\n\n// The contents is converted to three stages:\n//  - serializedResult: used when the target is a file path/URL or a file descriptor (including 'inherit')\n//  - finalResult/returnedResult: returned as `result.std*`\nconst serializeChunks = ({chunks, objectMode, encoding, lines, stripFinalNewline, fdNumber}) => {\n\tif (objectMode) {\n\t\treturn {serializedResult: chunks};\n\t}\n\n\tif (encoding === 'buffer') {\n\t\treturn {serializedResult: joinToUint8Array(chunks)};\n\t}\n\n\tconst serializedResult = joinToString(chunks, encoding);\n\tif (lines[fdNumber]) {\n\t\treturn {serializedResult, finalResult: splitLinesSync(serializedResult, !stripFinalNewline[fdNumber], objectMode)};\n\t}\n\n\treturn {serializedResult};\n};\n\nconst logOutputSync = ({serializedResult, fdNumber, state, verboseInfo, encoding, stdioItems, objectMode}) => {\n\tif (!shouldLogOutput({\n\t\tstdioItems,\n\t\tencoding,\n\t\tverboseInfo,\n\t\tfdNumber,\n\t})) {\n\t\treturn;\n\t}\n\n\tconst linesArray = splitLinesSync(serializedResult, false, objectMode);\n\n\ttry {\n\t\tlogLinesSync(linesArray, fdNumber, verboseInfo);\n\t} catch (error) {\n\t\tstate.error ??= error;\n\t}\n};\n\n// When the `std*` target is a file path/URL or a file descriptor\nconst writeToFiles = (serializedResult, stdioItems, outputFiles) => {\n\tfor (const {path, append} of stdioItems.filter(({type}) => FILE_TYPES.has(type))) {\n\t\tconst pathString = typeof path === 'string' ? path : path.toString();\n\t\tif (append || outputFiles.has(pathString)) {\n\t\t\tappendFileSync(path, serializedResult);\n\t\t} else {\n\t\t\toutputFiles.add(pathString);\n\t\t\twriteFileSync(path, serializedResult);\n\t\t}\n\t}\n};\n","import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {verboseLog, serializeVerboseMessage} from './log.js';\nimport {isFullVerbose} from './values.js';\n\n// `ignore` opts-out of `verbose` for a specific stream.\n// `ipc` cannot use piping.\n// `inherit` would result in double printing.\n// They can also lead to double printing when passing file descriptor integers or `process.std*`.\n// This only leaves with `pipe` and `overlapped`.\nexport const shouldLogOutput = ({stdioItems, encoding, verboseInfo, fdNumber}) => fdNumber !== 'all'\n\t&& isFullVerbose(verboseInfo, fdNumber)\n\t&& !BINARY_ENCODINGS.has(encoding)\n\t&& fdUsesVerbose(fdNumber)\n\t&& (stdioItems.some(({type, value}) => type === 'native' && PIPED_STDIO_VALUES.has(value))\n\t|| stdioItems.every(({type}) => TRANSFORM_TYPES.has(type)));\n\n// Printing input streams would be confusing.\n// Files and streams can produce big outputs, which we don't want to print.\n// We could print `stdio[3+]` but it often is redirected to files and streams, with the same issue.\n// So we only print stdout and stderr.\nconst fdUsesVerbose = fdNumber => fdNumber === 1 || fdNumber === 2;\n\nconst PIPED_STDIO_VALUES = new Set(['pipe', 'overlapped']);\n\n// `verbose: 'full'` printing logic with async methods\nexport const logLines = async (linesIterable, stream, fdNumber, verboseInfo) => {\n\tfor await (const line of linesIterable) {\n\t\tif (!isPipingStream(stream)) {\n\t\t\tlogLine(line, fdNumber, verboseInfo);\n\t\t}\n\t}\n};\n\n// `verbose: 'full'` printing logic with sync methods\nexport const logLinesSync = (linesArray, fdNumber, verboseInfo) => {\n\tfor (const line of linesArray) {\n\t\tlogLine(line, fdNumber, verboseInfo);\n\t}\n};\n\n// When `subprocess.stdout|stderr.pipe()` is called, `verbose` becomes a noop.\n// This prevents the following problems:\n//  - `.pipe()` achieves the same result as using `stdout: 'inherit'`, `stdout: stream`, etc. which also make `verbose` a noop.\n//    For example, `subprocess.stdout.pipe(process.stdin)` would print each line twice.\n//  - When chaining subprocesses with `subprocess.pipe(otherSubprocess)`, only the last one should print its output.\n// Detecting whether `.pipe()` is impossible without monkey-patching it, so we use the following undocumented property.\n// This is not a critical behavior since changes of the following property would only make `verbose` more verbose.\nconst isPipingStream = stream => stream._readableState.pipes.length > 0;\n\n// When `verbose` is `full`, print stdout|stderr\nconst logLine = (line, fdNumber, verboseInfo) => {\n\tconst verboseMessage = serializeVerboseMessage(line);\n\tverboseLog({\n\t\ttype: 'output',\n\t\tverboseMessage,\n\t\tfdNumber,\n\t\tverboseInfo,\n\t});\n};\n","import {isUint8Array, concatUint8Arrays} from '../utils/uint-array.js';\nimport {stripNewline} from '../io/strip-newline.js';\n\n// Retrieve `result.all` with synchronous methods\nexport const getAllSync = ([, stdout, stderr], options) => {\n\tif (!options.all) {\n\t\treturn;\n\t}\n\n\tif (stdout === undefined) {\n\t\treturn stderr;\n\t}\n\n\tif (stderr === undefined) {\n\t\treturn stdout;\n\t}\n\n\tif (Array.isArray(stdout)) {\n\t\treturn Array.isArray(stderr)\n\t\t\t? [...stdout, ...stderr]\n\t\t\t: [...stdout, stripNewline(stderr, options, 'all')];\n\t}\n\n\tif (Array.isArray(stderr)) {\n\t\treturn [stripNewline(stdout, options, 'all'), ...stderr];\n\t}\n\n\tif (isUint8Array(stdout) && isUint8Array(stderr)) {\n\t\treturn concatUint8Arrays([stdout, stderr]);\n\t}\n\n\treturn `${stdout}${stderr}`;\n};\n","import {once} from 'node:events';\nimport {DiscardedError} from '../return/final-error.js';\n\n// If `error` is emitted before `spawn`, `exit` will never be emitted.\n// However, `error` might be emitted after `spawn`.\n// In that case, `exit` will still be emitted.\n// Since the `exit` event contains the signal name, we want to make sure we are listening for it.\n// This function also takes into account the following unlikely cases:\n//  - `exit` being emitted in the same microtask as `spawn`\n//  - `error` being emitted multiple times\nexport const waitForExit = async (subprocess, context) => {\n\tconst [exitCode, signal] = await waitForExitOrError(subprocess);\n\tcontext.isForcefullyTerminated ??= false;\n\treturn [exitCode, signal];\n};\n\nconst waitForExitOrError = async subprocess => {\n\tconst [spawnPayload, exitPayload] = await Promise.allSettled([\n\t\tonce(subprocess, 'spawn'),\n\t\tonce(subprocess, 'exit'),\n\t]);\n\n\tif (spawnPayload.status === 'rejected') {\n\t\treturn [];\n\t}\n\n\treturn exitPayload.status === 'rejected'\n\t\t? waitForSubprocessExit(subprocess)\n\t\t: exitPayload.value;\n};\n\nconst waitForSubprocessExit = async subprocess => {\n\ttry {\n\t\treturn await once(subprocess, 'exit');\n\t} catch {\n\t\treturn waitForSubprocessExit(subprocess);\n\t}\n};\n\n// Retrieve the final exit code and|or signal name\nexport const waitForSuccessfulExit = async exitPromise => {\n\tconst [exitCode, signal] = await exitPromise;\n\n\tif (!isSubprocessErrorExit(exitCode, signal) && isFailedExit(exitCode, signal)) {\n\t\tthrow new DiscardedError();\n\t}\n\n\treturn [exitCode, signal];\n};\n\n// When the subprocess fails due to an `error` event\nconst isSubprocessErrorExit = (exitCode, signal) => exitCode === undefined && signal === undefined;\n// When the subprocess fails due to a non-0 exit code or to a signal termination\nexport const isFailedExit = (exitCode, signal) => exitCode !== 0 || signal !== null;\n","import {DiscardedError} from '../return/final-error.js';\nimport {isMaxBufferSync} from '../io/max-buffer.js';\nimport {isFailedExit} from './exit-async.js';\n\n// Retrieve exit code, signal name and error information, with synchronous methods\nexport const getExitResultSync = ({error, status: exitCode, signal, output}, {maxBuffer}) => {\n\tconst resultError = getResultError(error, exitCode, signal);\n\tconst timedOut = resultError?.code === 'ETIMEDOUT';\n\tconst isMaxBuffer = isMaxBufferSync(resultError, output, maxBuffer);\n\treturn {\n\t\tresultError,\n\t\texitCode,\n\t\tsignal,\n\t\ttimedOut,\n\t\tisMaxBuffer,\n\t};\n};\n\nconst getResultError = (error, exitCode, signal) => {\n\tif (error !== undefined) {\n\t\treturn error;\n\t}\n\n\treturn isFailedExit(exitCode, signal) ? new DiscardedError() : undefined;\n};\n","import {setMaxListeners} from 'node:events';\nimport {spawn} from 'node:child_process';\nimport {MaxBufferError} from 'get-stream';\nimport {handleCommand} from '../arguments/command.js';\nimport {normalizeOptions} from '../arguments/options.js';\nimport {SUBPROCESS_OPTIONS} from '../arguments/fd-options.js';\nimport {concatenateShell} from '../arguments/shell.js';\nimport {addIpcMethods} from '../ipc/methods.js';\nimport {makeError, makeSuccessResult} from '../return/result.js';\nimport {handleResult} from '../return/reject.js';\nimport {handleEarlyError} from '../return/early-error.js';\nimport {handleStdioAsync} from '../stdio/handle-async.js';\nimport {stripNewline} from '../io/strip-newline.js';\nimport {pipeOutputAsync} from '../io/output-async.js';\nimport {subprocessKill} from '../terminate/kill.js';\nimport {cleanupOnExit} from '../terminate/cleanup.js';\nimport {pipeToSubprocess} from '../pipe/setup.js';\nimport {makeAllStream} from '../resolve/all-async.js';\nimport {waitForSubprocessResult} from '../resolve/wait-subprocess.js';\nimport {addConvertedStreams} from '../convert/add.js';\nimport {createDeferred} from '../utils/deferred.js';\nimport {mergePromise} from './promise.js';\n\n// Main shared logic for all async methods: `execa()`, `$`, `execaNode()`\nexport const execaCoreAsync = (rawFile, rawArguments, rawOptions, createNested) => {\n\tconst {file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors} = handleAsyncArguments(rawFile, rawArguments, rawOptions);\n\tconst {subprocess, promise} = spawnSubprocessAsync({\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t});\n\tsubprocess.pipe = pipeToSubprocess.bind(undefined, {\n\t\tsource: subprocess,\n\t\tsourcePromise: promise,\n\t\tboundOptions: {},\n\t\tcreateNested,\n\t});\n\tmergePromise(subprocess, promise);\n\tSUBPROCESS_OPTIONS.set(subprocess, {options, fileDescriptors});\n\treturn subprocess;\n};\n\n// Compute arguments to pass to `child_process.spawn()`\nconst handleAsyncArguments = (rawFile, rawArguments, rawOptions) => {\n\tconst {command, escapedCommand, startTime, verboseInfo} = handleCommand(rawFile, rawArguments, rawOptions);\n\tconst {file, commandArguments, options: normalizedOptions} = normalizeOptions(rawFile, rawArguments, rawOptions);\n\tconst options = handleAsyncOptions(normalizedOptions);\n\tconst fileDescriptors = handleStdioAsync(options, verboseInfo);\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\toptions,\n\t\tfileDescriptors,\n\t};\n};\n\n// Options normalization logic specific to async methods.\n// Prevent passing the `timeout` option directly to `child_process.spawn()`.\nconst handleAsyncOptions = ({timeout, signal, ...options}) => {\n\tif (signal !== undefined) {\n\t\tthrow new TypeError('The \"signal\" option has been renamed to \"cancelSignal\" instead.');\n\t}\n\n\treturn {...options, timeoutDuration: timeout};\n};\n\nconst spawnSubprocessAsync = ({file, commandArguments, options, startTime, verboseInfo, command, escapedCommand, fileDescriptors}) => {\n\tlet subprocess;\n\ttry {\n\t\tsubprocess = spawn(...concatenateShell(file, commandArguments, options));\n\t} catch (error) {\n\t\treturn handleEarlyError({\n\t\t\terror,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tfileDescriptors,\n\t\t\toptions,\n\t\t\tstartTime,\n\t\t\tverboseInfo,\n\t\t});\n\t}\n\n\tconst controller = new AbortController();\n\tsetMaxListeners(Number.POSITIVE_INFINITY, controller.signal);\n\n\tconst originalStreams = [...subprocess.stdio];\n\tpipeOutputAsync(subprocess, fileDescriptors, controller);\n\tcleanupOnExit(subprocess, options, controller);\n\n\tconst context = {};\n\tconst onInternalError = createDeferred();\n\tsubprocess.kill = subprocessKill.bind(undefined, {\n\t\tkill: subprocess.kill.bind(subprocess),\n\t\toptions,\n\t\tonInternalError,\n\t\tcontext,\n\t\tcontroller,\n\t});\n\tsubprocess.all = makeAllStream(subprocess, options);\n\taddConvertedStreams(subprocess, options);\n\taddIpcMethods(subprocess, options);\n\n\tconst promise = handlePromise({\n\t\tsubprocess,\n\t\toptions,\n\t\tstartTime,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\toriginalStreams,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tcontext,\n\t\tonInternalError,\n\t\tcontroller,\n\t});\n\treturn {subprocess, promise};\n};\n\n// Asynchronous logic, as opposed to the previous logic which can be run synchronously, i.e. can be returned to user right away\nconst handlePromise = async ({subprocess, options, startTime, verboseInfo, fileDescriptors, originalStreams, command, escapedCommand, context, onInternalError, controller}) => {\n\tconst [\n\t\terrorInfo,\n\t\t[exitCode, signal],\n\t\tstdioResults,\n\t\tallResult,\n\t\tipcOutput,\n\t] = await waitForSubprocessResult({\n\t\tsubprocess,\n\t\toptions,\n\t\tcontext,\n\t\tverboseInfo,\n\t\tfileDescriptors,\n\t\toriginalStreams,\n\t\tonInternalError,\n\t\tcontroller,\n\t});\n\tcontroller.abort();\n\tonInternalError.resolve();\n\n\tconst stdio = stdioResults.map((stdioResult, fdNumber) => stripNewline(stdioResult, options, fdNumber));\n\tconst all = stripNewline(allResult, options, 'all');\n\tconst result = getAsyncResult({\n\t\terrorInfo,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\tcontext,\n\t\toptions,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstartTime,\n\t});\n\treturn handleResult(result, verboseInfo, options);\n};\n\nconst getAsyncResult = ({errorInfo, exitCode, signal, stdio, all, ipcOutput, context, options, command, escapedCommand, startTime}) => 'error' in errorInfo\n\t? makeError({\n\t\terror: errorInfo.error,\n\t\tcommand,\n\t\tescapedCommand,\n\t\ttimedOut: context.terminationReason === 'timeout',\n\t\tisCanceled: context.terminationReason === 'cancel' || context.terminationReason === 'gracefulCancel',\n\t\tisGracefullyCanceled: context.terminationReason === 'gracefulCancel',\n\t\tisMaxBuffer: errorInfo.error instanceof MaxBufferError,\n\t\tisForcefullyTerminated: context.isForcefullyTerminated,\n\t\texitCode,\n\t\tsignal,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: false,\n\t})\n\t: makeSuccessResult({\n\t\tcommand,\n\t\tescapedCommand,\n\t\tstdio,\n\t\tall,\n\t\tipcOutput,\n\t\toptions,\n\t\tstartTime,\n\t});\n","import process from 'node:process';\nimport {sendMessage} from './send.js';\nimport {getOneMessage} from './get-one.js';\nimport {getEachMessage} from './get-each.js';\nimport {getCancelSignal} from './graceful.js';\n\n// Add promise-based IPC methods in current process\nexport const addIpcMethods = (subprocess, {ipc}) => {\n\tObject.assign(subprocess, getIpcMethods(subprocess, false, ipc));\n};\n\n// Get promise-based IPC in the subprocess\nexport const getIpcExport = () => {\n\tconst anyProcess = process;\n\tconst isSubprocess = true;\n\tconst ipc = process.channel !== undefined;\n\n\treturn {\n\t\t...getIpcMethods(anyProcess, isSubprocess, ipc),\n\t\tgetCancelSignal: getCancelSignal.bind(undefined, {\n\t\t\tanyProcess,\n\t\t\tchannel: anyProcess.channel,\n\t\t\tisSubprocess,\n\t\t\tipc,\n\t\t}),\n\t};\n};\n\n// Retrieve the `ipc` shared by both the current process and the subprocess\nconst getIpcMethods = (anyProcess, isSubprocess, ipc) => ({\n\tsendMessage: sendMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n\tgetOneMessage: getOneMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n\tgetEachMessage: getEachMessage.bind(undefined, {\n\t\tanyProcess,\n\t\tchannel: anyProcess.channel,\n\t\tisSubprocess,\n\t\tipc,\n\t}),\n});\n","import {once, on} from 'node:events';\nimport {\n\tvalidateIpcMethod,\n\tthrowOnEarlyDisconnect,\n\tdisconnect,\n\tgetStrictResponseError,\n} from './validation.js';\nimport {getIpcEmitter, isConnected} from './forward.js';\nimport {addReference, removeReference} from './reference.js';\n\n// Like `[sub]process.once('message')` but promise-based\nexport const getOneMessage = ({anyProcess, channel, isSubprocess, ipc}, {reference = true, filter} = {}) => {\n\tvalidateIpcMethod({\n\t\tmethodName: 'getOneMessage',\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: isConnected(anyProcess),\n\t});\n\n\treturn getOneMessageAsync({\n\t\tanyProcess,\n\t\tchannel,\n\t\tisSubprocess,\n\t\tfilter,\n\t\treference,\n\t});\n};\n\nconst getOneMessageAsync = async ({anyProcess, channel, isSubprocess, filter, reference}) => {\n\taddReference(channel, reference);\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst controller = new AbortController();\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tgetMessage(ipcEmitter, filter, controller),\n\t\t\tthrowOnDisconnect(ipcEmitter, isSubprocess, controller),\n\t\t\tthrowOnStrictError(ipcEmitter, isSubprocess, controller),\n\t\t]);\n\t} catch (error) {\n\t\tdisconnect(anyProcess);\n\t\tthrow error;\n\t} finally {\n\t\tcontroller.abort();\n\t\tremoveReference(channel, reference);\n\t}\n};\n\nconst getMessage = async (ipcEmitter, filter, {signal}) => {\n\tif (filter === undefined) {\n\t\tconst [message] = await once(ipcEmitter, 'message', {signal});\n\t\treturn message;\n\t}\n\n\tfor await (const [message] of on(ipcEmitter, 'message', {signal})) {\n\t\tif (filter(message)) {\n\t\t\treturn message;\n\t\t}\n\t}\n};\n\nconst throwOnDisconnect = async (ipcEmitter, isSubprocess, {signal}) => {\n\tawait once(ipcEmitter, 'disconnect', {signal});\n\tthrowOnEarlyDisconnect(isSubprocess);\n};\n\nconst throwOnStrictError = async (ipcEmitter, isSubprocess, {signal}) => {\n\tconst [error] = await once(ipcEmitter, 'strict:error', {signal});\n\tthrow getStrictResponseError(error, isSubprocess);\n};\n","import {once, on} from 'node:events';\nimport {validateIpcMethod, disconnect, getStrictResponseError} from './validation.js';\nimport {getIpcEmitter, isConnected} from './forward.js';\nimport {addReference, removeReference} from './reference.js';\n\n// Like `[sub]process.on('message')` but promise-based\nexport const getEachMessage = ({anyProcess, channel, isSubprocess, ipc}, {reference = true} = {}) => loopOnMessages({\n\tanyProcess,\n\tchannel,\n\tisSubprocess,\n\tipc,\n\tshouldAwait: !isSubprocess,\n\treference,\n});\n\n// Same but used internally\nexport const loopOnMessages = ({anyProcess, channel, isSubprocess, ipc, shouldAwait, reference}) => {\n\tvalidateIpcMethod({\n\t\tmethodName: 'getEachMessage',\n\t\tisSubprocess,\n\t\tipc,\n\t\tisConnected: isConnected(anyProcess),\n\t});\n\n\taddReference(channel, reference);\n\tconst ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);\n\tconst controller = new AbortController();\n\tconst state = {};\n\tstopOnDisconnect(anyProcess, ipcEmitter, controller);\n\tabortOnStrictError({\n\t\tipcEmitter,\n\t\tisSubprocess,\n\t\tcontroller,\n\t\tstate,\n\t});\n\treturn iterateOnMessages({\n\t\tanyProcess,\n\t\tchannel,\n\t\tipcEmitter,\n\t\tisSubprocess,\n\t\tshouldAwait,\n\t\tcontroller,\n\t\tstate,\n\t\treference,\n\t});\n};\n\nconst stopOnDisconnect = async (anyProcess, ipcEmitter, controller) => {\n\ttry {\n\t\tawait once(ipcEmitter, 'disconnect', {signal: controller.signal});\n\t\tcontroller.abort();\n\t} catch {}\n};\n\nconst abortOnStrictError = async ({ipcEmitter, isSubprocess, controller, state}) => {\n\ttry {\n\t\tconst [error] = await once(ipcEmitter, 'strict:error', {signal: controller.signal});\n\t\tstate.error = getStrictResponseError(error, isSubprocess);\n\t\tcontroller.abort();\n\t} catch {}\n};\n\nconst iterateOnMessages = async function * ({anyProcess, channel, ipcEmitter, isSubprocess, shouldAwait, controller, state, reference}) {\n\ttry {\n\t\tfor await (const [message] of on(ipcEmitter, 'message', {signal: controller.signal})) {\n\t\t\tthrowIfStrictError(state);\n\t\t\tyield message;\n\t\t}\n\t} catch {\n\t\tthrowIfStrictError(state);\n\t} finally {\n\t\tcontroller.abort();\n\t\tremoveReference(channel, reference);\n\n\t\tif (!isSubprocess) {\n\t\t\tdisconnect(anyProcess);\n\t\t}\n\n\t\tif (shouldAwait) {\n\t\t\tawait anyProcess;\n\t\t}\n\t}\n};\n\nconst throwIfStrictError = ({error}) => {\n\tif (error) {\n\t\tthrow error;\n\t}\n};\n","import {ChildProcess} from 'node:child_process';\nimport {\n\tPassThrough,\n\tReadable,\n\tWritable,\n\tDuplex,\n} from 'node:stream';\nimport {cleanupCustomStreams} from '../stdio/handle.js';\nimport {makeEarlyError} from './result.js';\nimport {handleResult} from './reject.js';\n\n// When the subprocess fails to spawn.\n// We ensure the returned error is always both a promise and a subprocess.\nexport const handleEarlyError = ({error, command, escapedCommand, fileDescriptors, options, startTime, verboseInfo}) => {\n\tcleanupCustomStreams(fileDescriptors);\n\n\tconst subprocess = new ChildProcess();\n\tcreateDummyStreams(subprocess, fileDescriptors);\n\tObject.assign(subprocess, {readable, writable, duplex});\n\n\tconst earlyError = makeEarlyError({\n\t\terror,\n\t\tcommand,\n\t\tescapedCommand,\n\t\tfileDescriptors,\n\t\toptions,\n\t\tstartTime,\n\t\tisSync: false,\n\t});\n\tconst promise = handleDummyPromise(earlyError, verboseInfo, options);\n\treturn {subprocess, promise};\n};\n\nconst createDummyStreams = (subprocess, fileDescriptors) => {\n\tconst stdin = createDummyStream();\n\tconst stdout = createDummyStream();\n\tconst stderr = createDummyStream();\n\tconst extraStdio = Array.from({length: fileDescriptors.length - 3}, createDummyStream);\n\tconst all = createDummyStream();\n\tconst stdio = [stdin, stdout, stderr, ...extraStdio];\n\tObject.assign(subprocess, {\n\t\tstdin,\n\t\tstdout,\n\t\tstderr,\n\t\tall,\n\t\tstdio,\n\t});\n};\n\nconst createDummyStream = () => {\n\tconst stream = new PassThrough();\n\tstream.end();\n\treturn stream;\n};\n\nconst readable = () => new Readable({read() {}});\nconst writable = () => new Writable({write() {}});\nconst duplex = () => new Duplex({read() {}, write() {}});\n\nconst handleDummyPromise = async (error, verboseInfo, options) => handleResult(error, verboseInfo, options);\n","import {createReadStream, createWriteStream} from 'node:fs';\nimport {Buffer} from 'node:buffer';\nimport {Readable, Writable, Duplex} from 'node:stream';\nimport {generatorToStream} from '../transform/generator.js';\nimport {handleStdio} from './handle.js';\nimport {TYPE_TO_MESSAGE} from './type.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, before spawning, in async mode\nexport const handleStdioAsync = (options, verboseInfo) => handleStdio(addPropertiesAsync, options, verboseInfo, false);\n\nconst forbiddenIfAsync = ({type, optionName}) => {\n\tthrow new TypeError(`The \\`${optionName}\\` option cannot be ${TYPE_TO_MESSAGE[type]}.`);\n};\n\n// Create streams used internally for piping when using specific values for the `std*` options, in async mode.\n// For example, `stdout: {file}` creates a file stream, which is piped from/to.\nconst addProperties = {\n\tfileNumber: forbiddenIfAsync,\n\tgenerator: generatorToStream,\n\tasyncGenerator: generatorToStream,\n\tnodeStream: ({value}) => ({stream: value}),\n\twebTransform({value: {transform, writableObjectMode, readableObjectMode}}) {\n\t\tconst objectMode = writableObjectMode || readableObjectMode;\n\t\tconst stream = Duplex.fromWeb(transform, {objectMode});\n\t\treturn {stream};\n\t},\n\tduplex: ({value: {transform}}) => ({stream: transform}),\n\tnative() {},\n};\n\nconst addPropertiesAsync = {\n\tinput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({stream: createReadStream(value)}),\n\t\tfilePath: ({value: {file}}) => ({stream: createReadStream(file)}),\n\t\twebStream: ({value}) => ({stream: Readable.fromWeb(value)}),\n\t\titerable: ({value}) => ({stream: Readable.from(value)}),\n\t\tasyncIterable: ({value}) => ({stream: Readable.from(value)}),\n\t\tstring: ({value}) => ({stream: Readable.from(value)}),\n\t\tuint8Array: ({value}) => ({stream: Readable.from(Buffer.from(value))}),\n\t},\n\toutput: {\n\t\t...addProperties,\n\t\tfileUrl: ({value}) => ({stream: createWriteStream(value)}),\n\t\tfilePath: ({value: {file, append}}) => ({stream: createWriteStream(file, append ? {flags: 'a'} : {})}),\n\t\twebStream: ({value}) => ({stream: Writable.fromWeb(value)}),\n\t\titerable: forbiddenIfAsync,\n\t\tasyncIterable: forbiddenIfAsync,\n\t\tstring: forbiddenIfAsync,\n\t\tuint8Array: forbiddenIfAsync,\n\t},\n};\n","import {on, once} from 'node:events';\nimport {PassThrough as PassThroughStream, getDefaultHighWaterMark} from 'node:stream';\nimport {finished} from 'node:stream/promises';\n\nexport default function mergeStreams(streams) {\n\tif (!Array.isArray(streams)) {\n\t\tthrow new TypeError(`Expected an array, got \\`${typeof streams}\\`.`);\n\t}\n\n\tfor (const stream of streams) {\n\t\tvalidateStream(stream);\n\t}\n\n\tconst objectMode = streams.some(({readableObjectMode}) => readableObjectMode);\n\tconst highWaterMark = getHighWaterMark(streams, objectMode);\n\tconst passThroughStream = new MergedStream({\n\t\tobjectMode,\n\t\twritableHighWaterMark: highWaterMark,\n\t\treadableHighWaterMark: highWaterMark,\n\t});\n\n\tfor (const stream of streams) {\n\t\tpassThroughStream.add(stream);\n\t}\n\n\treturn passThroughStream;\n}\n\nconst getHighWaterMark = (streams, objectMode) => {\n\tif (streams.length === 0) {\n\t\treturn getDefaultHighWaterMark(objectMode);\n\t}\n\n\tconst highWaterMarks = streams\n\t\t.filter(({readableObjectMode}) => readableObjectMode === objectMode)\n\t\t.map(({readableHighWaterMark}) => readableHighWaterMark);\n\treturn Math.max(...highWaterMarks);\n};\n\nclass MergedStream extends PassThroughStream {\n\t#streams = new Set([]);\n\t#ended = new Set([]);\n\t#aborted = new Set([]);\n\t#onFinished;\n\t#unpipeEvent = Symbol('unpipe');\n\t#streamPromises = new WeakMap();\n\n\tadd(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (this.#streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#streams.add(stream);\n\n\t\tthis.#onFinished ??= onMergedStreamFinished(this, this.#streams, this.#unpipeEvent);\n\t\tconst streamPromise = endWhenStreamsDone({\n\t\t\tpassThroughStream: this,\n\t\t\tstream,\n\t\t\tstreams: this.#streams,\n\t\t\tended: this.#ended,\n\t\t\taborted: this.#aborted,\n\t\t\tonFinished: this.#onFinished,\n\t\t\tunpipeEvent: this.#unpipeEvent,\n\t\t});\n\t\tthis.#streamPromises.set(stream, streamPromise);\n\n\t\tstream.pipe(this, {end: false});\n\t}\n\n\tasync remove(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (!this.#streams.has(stream)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst streamPromise = this.#streamPromises.get(stream);\n\t\tif (streamPromise === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#streamPromises.delete(stream);\n\n\t\tstream.unpipe(this);\n\t\tawait streamPromise;\n\t\treturn true;\n\t}\n}\n\nconst onMergedStreamFinished = async (passThroughStream, streams, unpipeEvent) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tonMergedStreamEnd(passThroughStream, controller),\n\t\t\tonInputStreamsUnpipe(passThroughStream, streams, unpipeEvent, controller),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);\n\t}\n};\n\nconst onMergedStreamEnd = async (passThroughStream, {signal}) => {\n\ttry {\n\t\tawait finished(passThroughStream, {signal, cleanup: true});\n\t} catch (error) {\n\t\terrorOrAbortStream(passThroughStream, error);\n\t\tthrow error;\n\t}\n};\n\nconst onInputStreamsUnpipe = async (passThroughStream, streams, unpipeEvent, {signal}) => {\n\tfor await (const [unpipedStream] of on(passThroughStream, 'unpipe', {signal})) {\n\t\tif (streams.has(unpipedStream)) {\n\t\t\tunpipedStream.emit(unpipeEvent);\n\t\t}\n\t}\n};\n\nconst validateStream = stream => {\n\tif (typeof stream?.pipe !== 'function') {\n\t\tthrow new TypeError(`Expected a readable stream, got: \\`${typeof stream}\\`.`);\n\t}\n};\n\nconst endWhenStreamsDone = async ({passThroughStream, stream, streams, ended, aborted, onFinished, unpipeEvent}) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tafterMergedStreamFinished(onFinished, stream, controller),\n\t\t\tonInputStreamEnd({\n\t\t\t\tpassThroughStream,\n\t\t\t\tstream,\n\t\t\t\tstreams,\n\t\t\t\tended,\n\t\t\t\taborted,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t\tonInputStreamUnpipe({\n\t\t\t\tstream,\n\t\t\t\tstreams,\n\t\t\t\tended,\n\t\t\t\taborted,\n\t\t\t\tunpipeEvent,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);\n\t}\n\n\tif (streams.size > 0 && streams.size === ended.size + aborted.size) {\n\t\tif (ended.size === 0 && aborted.size > 0) {\n\t\t\tabortStream(passThroughStream);\n\t\t} else {\n\t\t\tendStream(passThroughStream);\n\t\t}\n\t}\n};\n\nconst afterMergedStreamFinished = async (onFinished, stream, {signal}) => {\n\ttry {\n\t\tawait onFinished;\n\t\tif (!signal.aborted) {\n\t\t\tabortStream(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (!signal.aborted) {\n\t\t\terrorOrAbortStream(stream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamEnd = async ({passThroughStream, stream, streams, ended, aborted, controller: {signal}}) => {\n\ttry {\n\t\tawait finished(stream, {\n\t\t\tsignal,\n\t\t\tcleanup: true,\n\t\t\treadable: true,\n\t\t\twritable: false,\n\t\t});\n\t\tif (streams.has(stream)) {\n\t\t\tended.add(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted || !streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isAbortError(error)) {\n\t\t\taborted.add(stream);\n\t\t} else {\n\t\t\terrorStream(passThroughStream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamUnpipe = async ({stream, streams, ended, aborted, unpipeEvent, controller: {signal}}) => {\n\tawait once(stream, unpipeEvent, {signal});\n\n\tif (!stream.readable) {\n\t\treturn once(signal, 'abort', {signal});\n\t}\n\n\tstreams.delete(stream);\n\tended.delete(stream);\n\taborted.delete(stream);\n};\n\nconst endStream = stream => {\n\tif (stream.writable) {\n\t\tstream.end();\n\t}\n};\n\nconst errorOrAbortStream = (stream, error) => {\n\tif (isAbortError(error)) {\n\t\tabortStream(stream);\n\t} else {\n\t\terrorStream(stream, error);\n\t}\n};\n\n// This is the error thrown by `finished()` on `stream.destroy()`\nconst isAbortError = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\nconst abortStream = stream => {\n\tif (stream.readable || stream.writable) {\n\t\tstream.destroy();\n\t}\n};\n\n// `stream.destroy(error)` crashes the process with `uncaughtException` if no `error` event listener exists on `stream`.\n// We take care of error handling on user behalf, so we do not want this to happen.\nconst errorStream = (stream, error) => {\n\tif (!stream.destroyed) {\n\t\tstream.once('error', noop);\n\t\tstream.destroy(error);\n\t}\n};\n\nconst noop = () => {};\n\nconst updateMaxListeners = (passThroughStream, increment) => {\n\tconst maxListeners = passThroughStream.getMaxListeners();\n\tif (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) {\n\t\tpassThroughStream.setMaxListeners(maxListeners + increment);\n\t}\n};\n\n// Number of times `passThroughStream.on()` is called regardless of streams:\n//  - once due to `finished(passThroughStream)`\n//  - once due to `on(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_COUNT = 2;\n\n// Number of times `passThroughStream.on()` is called per stream:\n//  - once due to `stream.pipe(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_PER_STREAM = 1;\n","import {finished} from 'node:stream/promises';\nimport {isStandardStream} from '../utils/standard-stream.js';\n\n// Similar to `Stream.pipeline(source, destination)`, but does not destroy standard streams\nexport const pipeStreams = (source, destination) => {\n\tsource.pipe(destination);\n\tonSourceFinish(source, destination);\n\tonDestinationFinish(source, destination);\n};\n\n// `source.pipe(destination)` makes `destination` end when `source` ends.\n// But it does not propagate aborts or errors. This function does it.\nconst onSourceFinish = async (source, destination) => {\n\tif (isStandardStream(source) || isStandardStream(destination)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait finished(source, {cleanup: true, readable: true, writable: false});\n\t} catch {}\n\n\tendDestinationStream(destination);\n};\n\nexport const endDestinationStream = destination => {\n\tif (destination.writable) {\n\t\tdestination.end();\n\t}\n};\n\n// We do the same thing in the other direction as well.\nconst onDestinationFinish = async (source, destination) => {\n\tif (isStandardStream(source) || isStandardStream(destination)) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait finished(destination, {cleanup: true, readable: false, writable: true});\n\t} catch {}\n\n\tabortSourceStream(source);\n};\n\nexport const abortSourceStream = source => {\n\tif (source.readable) {\n\t\tsource.destroy();\n\t}\n};\n","import mergeStreams from '@sindresorhus/merge-streams';\nimport {isStandardStream} from '../utils/standard-stream.js';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {pipeStreams} from './pipeline.js';\n\n// Handle `input`, `inputFile`, `stdin`, `stdout` and `stderr` options, after spawning, in async mode\n// When multiple input streams are used, we merge them to ensure the output stream ends only once each input stream has ended\nexport const pipeOutputAsync = (subprocess, fileDescriptors, controller) => {\n\tconst pipeGroups = new Map();\n\n\tfor (const [fdNumber, {stdioItems, direction}] of Object.entries(fileDescriptors)) {\n\t\tfor (const {stream} of stdioItems.filter(({type}) => TRANSFORM_TYPES.has(type))) {\n\t\t\tpipeTransform(subprocess, stream, direction, fdNumber);\n\t\t}\n\n\t\tfor (const {stream} of stdioItems.filter(({type}) => !TRANSFORM_TYPES.has(type))) {\n\t\t\tpipeStdioItem({\n\t\t\t\tsubprocess,\n\t\t\t\tstream,\n\t\t\t\tdirection,\n\t\t\t\tfdNumber,\n\t\t\t\tpipeGroups,\n\t\t\t\tcontroller,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [outputStream, inputStreams] of pipeGroups.entries()) {\n\t\tconst inputStream = inputStreams.length === 1 ? inputStreams[0] : mergeStreams(inputStreams);\n\t\tpipeStreams(inputStream, outputStream);\n\t}\n};\n\n// When using transforms, `subprocess.stdin|stdout|stderr|stdio` is directly mutated\nconst pipeTransform = (subprocess, stream, direction, fdNumber) => {\n\tif (direction === 'output') {\n\t\tpipeStreams(subprocess.stdio[fdNumber], stream);\n\t} else {\n\t\tpipeStreams(stream, subprocess.stdio[fdNumber]);\n\t}\n\n\tconst streamProperty = SUBPROCESS_STREAM_PROPERTIES[fdNumber];\n\tif (streamProperty !== undefined) {\n\t\tsubprocess[streamProperty] = stream;\n\t}\n\n\tsubprocess.stdio[fdNumber] = stream;\n};\n\nconst SUBPROCESS_STREAM_PROPERTIES = ['stdin', 'stdout', 'stderr'];\n\n// Most `std*` option values involve piping `subprocess.std*` to a stream.\n// The stream is either passed by the user or created internally.\nconst pipeStdioItem = ({subprocess, stream, direction, fdNumber, pipeGroups, controller}) => {\n\tif (stream === undefined) {\n\t\treturn;\n\t}\n\n\tsetStandardStreamMaxListeners(stream, controller);\n\n\tconst [inputStream, outputStream] = direction === 'output'\n\t\t? [stream, subprocess.stdio[fdNumber]]\n\t\t: [subprocess.stdio[fdNumber], stream];\n\tconst outputStreams = pipeGroups.get(inputStream) ?? [];\n\tpipeGroups.set(inputStream, [...outputStreams, outputStream]);\n};\n\n// Multiple subprocesses might be piping from/to `process.std*` at the same time.\n// This is not necessarily an error and should not print a `maxListeners` warning.\nconst setStandardStreamMaxListeners = (stream, {signal}) => {\n\tif (isStandardStream(stream)) {\n\t\tincrementMaxListeners(stream, MAX_LISTENERS_INCREMENT, signal);\n\t}\n};\n\n// `source.pipe(destination)` adds at most 1 listener for each event.\n// If `stdin` option is an array, the values might be combined with `merge-streams`.\n// That library also listens for `source` end, which adds 1 more listener.\nconst MAX_LISTENERS_INCREMENT = 2;\n","import {addAbortListener} from 'node:events';\nimport {onExit} from 'signal-exit';\n\n// If the `cleanup` option is used, call `subprocess.kill()` when the parent process exits\nexport const cleanupOnExit = (subprocess, {cleanup, detached}, {signal}) => {\n\tif (!cleanup || detached) {\n\t\treturn;\n\t}\n\n\tconst removeExitHandler = onExit(() => {\n\t\tsubprocess.kill();\n\t});\n\taddAbortListener(signal, () => {\n\t\tremoveExitHandler();\n\t});\n};\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 * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\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.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\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  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\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\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!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\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { <signal>: <listener fn>, ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\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        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#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    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n","import {normalizeParameters} from '../methods/parameters.js';\nimport {getStartTime} from '../return/duration.js';\nimport {SUBPROCESS_OPTIONS, getToStream, getFromStream} from '../arguments/fd-options.js';\nimport {isDenoExecPath} from '../arguments/file-url.js';\n\n// Normalize and validate arguments passed to `source.pipe(destination)`\nexport const normalizePipeArguments = ({source, sourcePromise, boundOptions, createNested}, ...pipeArguments) => {\n\tconst startTime = getStartTime();\n\tconst {\n\t\tdestination,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tfrom,\n\t\tunpipeSignal,\n\t} = getDestinationStream(boundOptions, createNested, pipeArguments);\n\tconst {sourceStream, sourceError} = getSourceStream(source, from);\n\tconst {options: sourceOptions, fileDescriptors} = SUBPROCESS_OPTIONS.get(source);\n\treturn {\n\t\tsourcePromise,\n\t\tsourceStream,\n\t\tsourceOptions,\n\t\tsourceError,\n\t\tdestination,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tunpipeSignal,\n\t\tfileDescriptors,\n\t\tstartTime,\n\t};\n};\n\nconst getDestinationStream = (boundOptions, createNested, pipeArguments) => {\n\ttry {\n\t\tconst {\n\t\t\tdestination,\n\t\t\tpipeOptions: {from, to, unpipeSignal} = {},\n\t\t} = getDestination(boundOptions, createNested, ...pipeArguments);\n\t\tconst destinationStream = getToStream(destination, to);\n\t\treturn {\n\t\t\tdestination,\n\t\t\tdestinationStream,\n\t\t\tfrom,\n\t\t\tunpipeSignal,\n\t\t};\n\t} catch (error) {\n\t\treturn {destinationError: error};\n\t}\n};\n\n// Piping subprocesses can use three syntaxes:\n//  - source.pipe('command', commandArguments, pipeOptionsOrDestinationOptions)\n//  - source.pipe`command commandArgument` or source.pipe(pipeOptionsOrDestinationOptions)`command commandArgument`\n//  - source.pipe(execa(...), pipeOptions)\nconst getDestination = (boundOptions, createNested, firstArgument, ...pipeArguments) => {\n\tif (Array.isArray(firstArgument)) {\n\t\tconst destination = createNested(mapDestinationArguments, boundOptions)(firstArgument, ...pipeArguments);\n\t\treturn {destination, pipeOptions: boundOptions};\n\t}\n\n\tif (typeof firstArgument === 'string' || firstArgument instanceof URL || isDenoExecPath(firstArgument)) {\n\t\tif (Object.keys(boundOptions).length > 0) {\n\t\t\tthrow new TypeError('Please use .pipe(\"file\", ..., options) or .pipe(execa(\"file\", ..., options)) instead of .pipe(options)(\"file\", ...).');\n\t\t}\n\n\t\tconst [rawFile, rawArguments, rawOptions] = normalizeParameters(firstArgument, ...pipeArguments);\n\t\tconst destination = createNested(mapDestinationArguments)(rawFile, rawArguments, rawOptions);\n\t\treturn {destination, pipeOptions: rawOptions};\n\t}\n\n\tif (SUBPROCESS_OPTIONS.has(firstArgument)) {\n\t\tif (Object.keys(boundOptions).length > 0) {\n\t\t\tthrow new TypeError('Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).');\n\t\t}\n\n\t\treturn {destination: firstArgument, pipeOptions: pipeArguments[0]};\n\t}\n\n\tthrow new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`);\n};\n\n// Force `stdin: 'pipe'` with the destination subprocess\nconst mapDestinationArguments = ({options}) => ({options: {...options, stdin: 'pipe', piped: true}});\n\nconst getSourceStream = (source, from) => {\n\ttry {\n\t\tconst sourceStream = getFromStream(source, from);\n\t\treturn {sourceStream};\n\t} catch (error) {\n\t\treturn {sourceError: error};\n\t}\n};\n","import {makeEarlyError} from '../return/result.js';\nimport {abortSourceStream, endDestinationStream} from '../io/pipeline.js';\n\n// When passing invalid arguments to `source.pipe()`, throw asynchronously.\n// We also abort both subprocesses.\nexport const handlePipeArgumentsError = ({\n\tsourceStream,\n\tsourceError,\n\tdestinationStream,\n\tdestinationError,\n\tfileDescriptors,\n\tsourceOptions,\n\tstartTime,\n}) => {\n\tconst error = getPipeArgumentsError({\n\t\tsourceStream,\n\t\tsourceError,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t});\n\tif (error !== undefined) {\n\t\tthrow createNonCommandError({\n\t\t\terror,\n\t\t\tfileDescriptors,\n\t\t\tsourceOptions,\n\t\t\tstartTime,\n\t\t});\n\t}\n};\n\nconst getPipeArgumentsError = ({sourceStream, sourceError, destinationStream, destinationError}) => {\n\tif (sourceError !== undefined && destinationError !== undefined) {\n\t\treturn destinationError;\n\t}\n\n\tif (destinationError !== undefined) {\n\t\tabortSourceStream(sourceStream);\n\t\treturn destinationError;\n\t}\n\n\tif (sourceError !== undefined) {\n\t\tendDestinationStream(destinationStream);\n\t\treturn sourceError;\n\t}\n};\n\n// Specific error return value when passing invalid arguments to `subprocess.pipe()` or when using `unpipeSignal`\nexport const createNonCommandError = ({error, fileDescriptors, sourceOptions, startTime}) => makeEarlyError({\n\terror,\n\tcommand: PIPE_COMMAND_MESSAGE,\n\tescapedCommand: PIPE_COMMAND_MESSAGE,\n\tfileDescriptors,\n\toptions: sourceOptions,\n\tstartTime,\n\tisSync: false,\n});\n\nconst PIPE_COMMAND_MESSAGE = 'source.pipe(destination)';\n","// Like Bash, we await both subprocesses. This is unlike some other shells which only await the destination subprocess.\n// Like Bash with the `pipefail` option, if either subprocess fails, the whole pipe fails.\n// Like Bash, if both subprocesses fail, we return the failure of the destination.\n// This ensures both subprocesses' errors are present, using `error.pipedFrom`.\nexport const waitForBothSubprocesses = async subprocessPromises => {\n\tconst [\n\t\t{status: sourceStatus, reason: sourceReason, value: sourceResult = sourceReason},\n\t\t{status: destinationStatus, reason: destinationReason, value: destinationResult = destinationReason},\n\t] = await subprocessPromises;\n\n\tif (!destinationResult.pipedFrom.includes(sourceResult)) {\n\t\tdestinationResult.pipedFrom.push(sourceResult);\n\t}\n\n\tif (destinationStatus === 'rejected') {\n\t\tthrow destinationResult;\n\t}\n\n\tif (sourceStatus === 'rejected') {\n\t\tthrow sourceResult;\n\t}\n\n\treturn destinationResult;\n};\n","import {finished} from 'node:stream/promises';\nimport mergeStreams from '@sindresorhus/merge-streams';\nimport {incrementMaxListeners} from '../utils/max-listeners.js';\nimport {pipeStreams} from '../io/pipeline.js';\n\n// The piping behavior is like Bash.\n// In particular, when one subprocess exits, the other is not terminated by a signal.\n// Instead, its stdout (for the source) or stdin (for the destination) closes.\n// If the subprocess uses it, it will make it error with SIGPIPE or EPIPE (for the source) or end (for the destination).\n// If it does not use it, it will continue running.\n// This allows for subprocesses to gracefully exit and lower the coupling between subprocesses.\nexport const pipeSubprocessStream = (sourceStream, destinationStream, maxListenersController) => {\n\tconst mergedStream = MERGED_STREAMS.has(destinationStream)\n\t\t? pipeMoreSubprocessStream(sourceStream, destinationStream)\n\t\t: pipeFirstSubprocessStream(sourceStream, destinationStream);\n\tincrementMaxListeners(sourceStream, SOURCE_LISTENERS_PER_PIPE, maxListenersController.signal);\n\tincrementMaxListeners(destinationStream, DESTINATION_LISTENERS_PER_PIPE, maxListenersController.signal);\n\tcleanupMergedStreamsMap(destinationStream);\n\treturn mergedStream;\n};\n\n// We use `merge-streams` to allow for multiple sources to pipe to the same destination.\nconst pipeFirstSubprocessStream = (sourceStream, destinationStream) => {\n\tconst mergedStream = mergeStreams([sourceStream]);\n\tpipeStreams(mergedStream, destinationStream);\n\tMERGED_STREAMS.set(destinationStream, mergedStream);\n\treturn mergedStream;\n};\n\nconst pipeMoreSubprocessStream = (sourceStream, destinationStream) => {\n\tconst mergedStream = MERGED_STREAMS.get(destinationStream);\n\tmergedStream.add(sourceStream);\n\treturn mergedStream;\n};\n\nconst cleanupMergedStreamsMap = async destinationStream => {\n\ttry {\n\t\tawait finished(destinationStream, {cleanup: true, readable: false, writable: true});\n\t} catch {}\n\n\tMERGED_STREAMS.delete(destinationStream);\n};\n\nconst MERGED_STREAMS = new WeakMap();\n\n// Number of listeners set up on `sourceStream` by each `sourceStream.pipe(destinationStream)`\n// Those are added by `merge-streams`\nconst SOURCE_LISTENERS_PER_PIPE = 2;\n// Number of listeners set up on `destinationStream` by each `sourceStream.pipe(destinationStream)`\n// Those are added by `finished()` in `cleanupMergedStreamsMap()`\nconst DESTINATION_LISTENERS_PER_PIPE = 1;\n","import {aborted} from 'node:util';\nimport {createNonCommandError} from './throw.js';\n\n// When passing an `unpipeSignal` option, abort piping when the signal is aborted.\n// However, do not terminate the subprocesses.\nexport const unpipeOnAbort = (unpipeSignal, unpipeContext) => unpipeSignal === undefined\n\t? []\n\t: [unpipeOnSignalAbort(unpipeSignal, unpipeContext)];\n\nconst unpipeOnSignalAbort = async (unpipeSignal, {sourceStream, mergedStream, fileDescriptors, sourceOptions, startTime}) => {\n\tawait aborted(unpipeSignal, sourceStream);\n\tawait mergedStream.remove(sourceStream);\n\tconst error = new Error('Pipe canceled by `unpipeSignal` option.');\n\tthrow createNonCommandError({\n\t\terror,\n\t\tfileDescriptors,\n\t\tsourceOptions,\n\t\tstartTime,\n\t});\n};\n","import isPlainObject from 'is-plain-obj';\nimport {normalizePipeArguments} from './pipe-arguments.js';\nimport {handlePipeArgumentsError} from './throw.js';\nimport {waitForBothSubprocesses} from './sequence.js';\nimport {pipeSubprocessStream} from './streaming.js';\nimport {unpipeOnAbort} from './abort.js';\n\n// Pipe a subprocess' `stdout`/`stderr`/`stdio` into another subprocess' `stdin`\nexport const pipeToSubprocess = (sourceInfo, ...pipeArguments) => {\n\tif (isPlainObject(pipeArguments[0])) {\n\t\treturn pipeToSubprocess.bind(undefined, {\n\t\t\t...sourceInfo,\n\t\t\tboundOptions: {...sourceInfo.boundOptions, ...pipeArguments[0]},\n\t\t});\n\t}\n\n\tconst {destination, ...normalizedInfo} = normalizePipeArguments(sourceInfo, ...pipeArguments);\n\tconst promise = handlePipePromise({...normalizedInfo, destination});\n\tpromise.pipe = pipeToSubprocess.bind(undefined, {\n\t\t...sourceInfo,\n\t\tsource: destination,\n\t\tsourcePromise: promise,\n\t\tboundOptions: {},\n\t});\n\treturn promise;\n};\n\n// Asynchronous logic when piping subprocesses\nconst handlePipePromise = async ({\n\tsourcePromise,\n\tsourceStream,\n\tsourceOptions,\n\tsourceError,\n\tdestination,\n\tdestinationStream,\n\tdestinationError,\n\tunpipeSignal,\n\tfileDescriptors,\n\tstartTime,\n}) => {\n\tconst subprocessPromises = getSubprocessPromises(sourcePromise, destination);\n\thandlePipeArgumentsError({\n\t\tsourceStream,\n\t\tsourceError,\n\t\tdestinationStream,\n\t\tdestinationError,\n\t\tfileDescriptors,\n\t\tsourceOptions,\n\t\tstartTime,\n\t});\n\tconst maxListenersController = new AbortController();\n\ttry {\n\t\tconst mergedStream = pipeSubprocessStream(sourceStream, destinationStream, maxListenersController);\n\t\treturn await Promise.race([\n\t\t\twaitForBothSubprocesses(subprocessPromises),\n\t\t\t...unpipeOnAbort(unpipeSignal, {\n\t\t\t\tsourceStream,\n\t\t\t\tmergedStream,\n\t\t\t\tsourceOptions,\n\t\t\t\tfileDescriptors,\n\t\t\t\tstartTime,\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tmaxListenersController.abort();\n\t}\n};\n\n// `.pipe()` awaits the subprocess promises.\n// When invalid arguments are passed to `.pipe()`, we throw an error, which prevents awaiting them.\n// We need to ensure this does not create unhandled rejections.\nconst getSubprocessPromises = (sourcePromise, destination) => Promise.allSettled([sourcePromise, destination]);\n","import {setImmediate} from 'node:timers/promises';\nimport getStream, {getStreamAsArrayBuffer, getStreamAsArray} from 'get-stream';\nimport {isArrayBuffer} from '../utils/uint-array.js';\nimport {shouldLogOutput, logLines} from '../verbose/output.js';\nimport {iterateForResult} from './iterate.js';\nimport {handleMaxBuffer} from './max-buffer.js';\nimport {getStripFinalNewline} from './strip-newline.js';\n\n// Retrieve `result.stdout|stderr|all|stdio[*]`\nexport const getStreamOutput = async ({stream, onStreamEnd, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline, verboseInfo, streamInfo}) => {\n\tconst logPromise = logOutputAsync({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tfdNumber,\n\t\tencoding,\n\t\tallMixed,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\n\tif (!buffer) {\n\t\tawait Promise.all([resumeStream(stream), logPromise]);\n\t\treturn;\n\t}\n\n\tconst stripFinalNewlineValue = getStripFinalNewline(stripFinalNewline, fdNumber);\n\tconst iterable = iterateForResult({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tlines,\n\t\tencoding,\n\t\tstripFinalNewline: stripFinalNewlineValue,\n\t\tallMixed,\n\t});\n\tconst [output] = await Promise.all([\n\t\tgetStreamContents({\n\t\t\tstream,\n\t\t\titerable,\n\t\t\tfdNumber,\n\t\t\tencoding,\n\t\t\tmaxBuffer,\n\t\t\tlines,\n\t\t}),\n\t\tlogPromise,\n\t]);\n\treturn output;\n};\n\nconst logOutputAsync = async ({stream, onStreamEnd, fdNumber, encoding, allMixed, verboseInfo, streamInfo: {fileDescriptors}}) => {\n\tif (!shouldLogOutput({\n\t\tstdioItems: fileDescriptors[fdNumber]?.stdioItems,\n\t\tencoding,\n\t\tverboseInfo,\n\t\tfdNumber,\n\t})) {\n\t\treturn;\n\t}\n\n\tconst linesIterable = iterateForResult({\n\t\tstream,\n\t\tonStreamEnd,\n\t\tlines: true,\n\t\tencoding,\n\t\tstripFinalNewline: true,\n\t\tallMixed,\n\t});\n\tawait logLines(linesIterable, stream, fdNumber, verboseInfo);\n};\n\n// When using `buffer: false`, users need to read `subprocess.stdout|stderr|all` right away\n// See https://github.com/sindresorhus/execa/issues/730 and https://github.com/sindresorhus/execa/pull/729#discussion_r1465496310\nconst resumeStream = async stream => {\n\tawait setImmediate();\n\tif (stream.readableFlowing === null) {\n\t\tstream.resume();\n\t}\n};\n\nconst getStreamContents = async ({stream, stream: {readableObjectMode}, iterable, fdNumber, encoding, maxBuffer, lines}) => {\n\ttry {\n\t\tif (readableObjectMode || lines) {\n\t\t\treturn await getStreamAsArray(iterable, {maxBuffer});\n\t\t}\n\n\t\tif (encoding === 'buffer') {\n\t\t\treturn new Uint8Array(await getStreamAsArrayBuffer(iterable, {maxBuffer}));\n\t\t}\n\n\t\treturn await getStream(iterable, {maxBuffer});\n\t} catch (error) {\n\t\treturn handleBufferedData(handleMaxBuffer({\n\t\t\terror,\n\t\t\tstream,\n\t\t\treadableObjectMode,\n\t\t\tlines,\n\t\t\tencoding,\n\t\t\tfdNumber,\n\t\t}));\n\t}\n};\n\n// On failure, `result.stdout|stderr|all` should contain the currently buffered stream\n// They are automatically closed and flushed by Node.js when the subprocess exits\n// When `buffer` is `false`, `streamPromise` is `undefined` and there is no buffered data to retrieve\nexport const getBufferedData = async streamPromise => {\n\ttry {\n\t\treturn await streamPromise;\n\t} catch (error) {\n\t\treturn handleBufferedData(error);\n\t}\n};\n\n// Ensure we are returning Uint8Arrays when using `encoding: 'buffer'`\nconst handleBufferedData = ({bufferedData}) => isArrayBuffer(bufferedData)\n\t? new Uint8Array(bufferedData)\n\t: bufferedData;\n","import {on} from 'node:events';\nimport {getDefaultHighWaterMark} from 'node:stream';\nimport {getEncodingTransformGenerator} from '../transform/encoding-transform.js';\nimport {getSplitLinesGenerator} from '../transform/split.js';\nimport {transformChunkSync, finalChunksSync} from '../transform/run-sync.js';\n\n// Iterate over lines of `subprocess.stdout`, used by `subprocess.readable|duplex|iterable()`\nexport const iterateOnSubprocessStream = ({subprocessStdout, subprocess, binary, shouldEncode, encoding, preserveNewlines}) => {\n\tconst controller = new AbortController();\n\tstopReadingOnExit(subprocess, controller);\n\treturn iterateOnStream({\n\t\tstream: subprocessStdout,\n\t\tcontroller,\n\t\tbinary,\n\t\tshouldEncode: !subprocessStdout.readableObjectMode && shouldEncode,\n\t\tencoding,\n\t\tshouldSplit: !subprocessStdout.readableObjectMode,\n\t\tpreserveNewlines,\n\t});\n};\n\nconst stopReadingOnExit = async (subprocess, controller) => {\n\ttry {\n\t\tawait subprocess;\n\t} catch {} finally {\n\t\tcontroller.abort();\n\t}\n};\n\n// Iterate over lines of `subprocess.stdout`, used by `result.stdout` and the `verbose: 'full'` option.\n// Applies the `lines` and `encoding` options.\nexport const iterateForResult = ({stream, onStreamEnd, lines, encoding, stripFinalNewline, allMixed}) => {\n\tconst controller = new AbortController();\n\tstopReadingOnStreamEnd(onStreamEnd, controller, stream);\n\tconst objectMode = stream.readableObjectMode && !allMixed;\n\treturn iterateOnStream({\n\t\tstream,\n\t\tcontroller,\n\t\tbinary: encoding === 'buffer',\n\t\tshouldEncode: !objectMode,\n\t\tencoding,\n\t\tshouldSplit: !objectMode && lines,\n\t\tpreserveNewlines: !stripFinalNewline,\n\t});\n};\n\nconst stopReadingOnStreamEnd = async (onStreamEnd, controller, stream) => {\n\ttry {\n\t\tawait onStreamEnd;\n\t} catch {\n\t\tstream.destroy();\n\t} finally {\n\t\tcontroller.abort();\n\t}\n};\n\nconst iterateOnStream = ({stream, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) => {\n\tconst onStdoutChunk = on(stream, 'data', {\n\t\tsignal: controller.signal,\n\t\thighWaterMark: HIGH_WATER_MARK,\n\t\t// Backward compatibility with older name for this option\n\t\t// See https://github.com/nodejs/node/pull/52080#discussion_r1525227861\n\t\t// @todo Remove after removing support for Node 21\n\t\thighWatermark: HIGH_WATER_MARK,\n\t});\n\treturn iterateOnData({\n\t\tonStdoutChunk,\n\t\tcontroller,\n\t\tbinary,\n\t\tshouldEncode,\n\t\tencoding,\n\t\tshouldSplit,\n\t\tpreserveNewlines,\n\t});\n};\n\nexport const DEFAULT_OBJECT_HIGH_WATER_MARK = getDefaultHighWaterMark(true);\n\n// The `highWaterMark` of `events.on()` is measured in number of events, not in bytes.\n// Not knowing the average amount of bytes per `data` event, we use the same heuristic as streams in objectMode, since they have the same issue.\n// Therefore, we use the value of `getDefaultHighWaterMark(true)`.\n// Note: this option does not exist on Node 18, but this is ok since the logic works without it. It just consumes more memory.\nconst HIGH_WATER_MARK = DEFAULT_OBJECT_HIGH_WATER_MARK;\n\nconst iterateOnData = async function * ({onStdoutChunk, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) {\n\tconst generators = getGenerators({\n\t\tbinary,\n\t\tshouldEncode,\n\t\tencoding,\n\t\tshouldSplit,\n\t\tpreserveNewlines,\n\t});\n\n\ttry {\n\t\tfor await (const [chunk] of onStdoutChunk) {\n\t\t\tyield * transformChunkSync(chunk, generators, 0);\n\t\t}\n\t} catch (error) {\n\t\tif (!controller.signal.aborted) {\n\t\t\tthrow error;\n\t\t}\n\t} finally {\n\t\tyield * finalChunksSync(generators);\n\t}\n};\n\nconst getGenerators = ({binary, shouldEncode, encoding, shouldSplit, preserveNewlines}) => [\n\tgetEncodingTransformGenerator(binary, encoding, !shouldEncode),\n\tgetSplitLinesGenerator(binary, preserveNewlines, !shouldSplit, {}),\n].filter(Boolean);\n","import {finished} from 'node:stream/promises';\n\n// Wraps `finished(stream)` to handle the following case:\n//  - When the subprocess exits, Node.js automatically calls `subprocess.stdin.destroy()`, which we need to ignore.\n//  - However, we still need to throw if `subprocess.stdin.destroy()` is called before subprocess exit.\nexport const waitForStream = async (stream, fdNumber, streamInfo, {isSameDirection, stopOnExit = false} = {}) => {\n\tconst state = handleStdinDestroy(stream, streamInfo);\n\tconst abortController = new AbortController();\n\ttry {\n\t\tawait Promise.race([\n\t\t\t...(stopOnExit ? [streamInfo.exitPromise] : []),\n\t\t\tfinished(stream, {cleanup: true, signal: abortController.signal}),\n\t\t]);\n\t} catch (error) {\n\t\tif (!state.stdinCleanedUp) {\n\t\t\thandleStreamError(error, fdNumber, streamInfo, isSameDirection);\n\t\t}\n\t} finally {\n\t\tabortController.abort();\n\t}\n};\n\n// If `subprocess.stdin` is destroyed before being fully written to, it is considered aborted and should throw an error.\n// This can happen for example when user called `subprocess.stdin.destroy()` before `subprocess.stdin.end()`.\n// However, Node.js calls `subprocess.stdin.destroy()` on exit for cleanup purposes.\n// https://github.com/nodejs/node/blob/0b4cdb4b42956cbd7019058e409e06700a199e11/lib/internal/child_process.js#L278\n// This is normal and should not throw an error.\n// Therefore, we need to differentiate between both situations to know whether to throw an error.\n// Unfortunately, events (`close`, `error`, `end`, `exit`) cannot be used because `.destroy()` can take an arbitrary amount of time.\n// For example, `stdin: 'pipe'` is implemented as a TCP socket, and its `.destroy()` method waits for TCP disconnection.\n// Therefore `.destroy()` might end before or after subprocess exit, based on OS speed and load.\n// The only way to detect this is to spy on `subprocess.stdin._destroy()` by wrapping it.\n// If `subprocess.exitCode` or `subprocess.signalCode` is set, it means `.destroy()` is being called by Node.js itself.\nconst handleStdinDestroy = (stream, {originalStreams: [originalStdin], subprocess}) => {\n\tconst state = {stdinCleanedUp: false};\n\tif (stream === originalStdin) {\n\t\tspyOnStdinDestroy(stream, subprocess, state);\n\t}\n\n\treturn state;\n};\n\nconst spyOnStdinDestroy = (subprocessStdin, subprocess, state) => {\n\tconst {_destroy} = subprocessStdin;\n\tsubprocessStdin._destroy = (...destroyArguments) => {\n\t\tsetStdinCleanedUp(subprocess, state);\n\t\t_destroy.call(subprocessStdin, ...destroyArguments);\n\t};\n};\n\nconst setStdinCleanedUp = ({exitCode, signalCode}, state) => {\n\tif (exitCode !== null || signalCode !== null) {\n\t\tstate.stdinCleanedUp = true;\n\t}\n};\n\n// We ignore EPIPEs on writable streams and aborts on readable streams since those can happen normally.\n// When one stream errors, the error is propagated to the other streams on the same file descriptor.\n// Those other streams might have a different direction due to the above.\n// When this happens, the direction of both the initial stream and the others should then be taken into account.\n// Therefore, we keep track of whether a stream error is currently propagating.\nconst handleStreamError = (error, fdNumber, streamInfo, isSameDirection) => {\n\tif (!shouldIgnoreStreamError(error, fdNumber, streamInfo, isSameDirection)) {\n\t\tthrow error;\n\t}\n};\n\nconst shouldIgnoreStreamError = (error, fdNumber, streamInfo, isSameDirection = true) => {\n\tif (streamInfo.propagating) {\n\t\treturn isStreamEpipe(error) || isStreamAbort(error);\n\t}\n\n\tstreamInfo.propagating = true;\n\treturn isInputFileDescriptor(streamInfo, fdNumber) === isSameDirection\n\t\t? isStreamEpipe(error)\n\t\t: isStreamAbort(error);\n};\n\n// Unfortunately, we cannot use the stream's class or properties to know whether it is readable or writable.\n// For example, `subprocess.stdin` is technically a Duplex, but can only be used as a writable.\n// Therefore, we need to use the file descriptor's direction (`stdin` is input, `stdout` is output, etc.).\n// However, while `subprocess.std*` and transforms follow that direction, any stream passed the `std*` option has the opposite direction.\n// For example, `subprocess.stdin` is a writable, but the `stdin` option is a readable.\nexport const isInputFileDescriptor = ({fileDescriptors}, fdNumber) => fdNumber !== 'all' && fileDescriptors[fdNumber].direction === 'input';\n\n// When `stream.destroy()` is called without an `error` argument, stream is aborted.\n// This is the only way to abort a readable stream, which can be useful in some instances.\n// Therefore, we ignore this error on readable streams.\nexport const isStreamAbort = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\n// When `stream.write()` is called but the underlying source has been closed, `EPIPE` is emitted.\n// When piping subprocesses, the source subprocess usually decides when to stop piping.\n// However, there are some instances when the destination does instead, such as `... | head -n1`.\n// It notifies the source by using `EPIPE`.\n// Therefore, we ignore this error on writable streams.\nconst isStreamEpipe = error => error?.code === 'EPIPE';\n","import {getStreamOutput} from '../io/contents.js';\nimport {waitForStream, isInputFileDescriptor} from './wait-stream.js';\n\n// Read the contents of `subprocess.std*` and|or wait for its completion\nexport const waitForStdioStreams = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => subprocess.stdio.map((stream, fdNumber) => waitForSubprocessStream({\n\tstream,\n\tfdNumber,\n\tencoding,\n\tbuffer: buffer[fdNumber],\n\tmaxBuffer: maxBuffer[fdNumber],\n\tlines: lines[fdNumber],\n\tallMixed: false,\n\tstripFinalNewline,\n\tverboseInfo,\n\tstreamInfo,\n}));\n\n// Read the contents of `subprocess.std*` or `subprocess.all` and|or wait for its completion\nexport const waitForSubprocessStream = async ({stream, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline, verboseInfo, streamInfo}) => {\n\tif (!stream) {\n\t\treturn;\n\t}\n\n\tconst onStreamEnd = waitForStream(stream, fdNumber, streamInfo);\n\tif (isInputFileDescriptor(streamInfo, fdNumber)) {\n\t\tawait onStreamEnd;\n\t\treturn;\n\t}\n\n\tconst [output] = await Promise.all([\n\t\tgetStreamOutput({\n\t\t\tstream,\n\t\t\tonStreamEnd,\n\t\t\tfdNumber,\n\t\t\tencoding,\n\t\t\tbuffer,\n\t\t\tmaxBuffer,\n\t\t\tlines,\n\t\t\tallMixed,\n\t\t\tstripFinalNewline,\n\t\t\tverboseInfo,\n\t\t\tstreamInfo,\n\t\t}),\n\t\tonStreamEnd,\n\t]);\n\treturn output;\n};\n","import mergeStreams from '@sindresorhus/merge-streams';\nimport {waitForSubprocessStream} from './stdio.js';\n\n// `all` interleaves `stdout` and `stderr`\nexport const makeAllStream = ({stdout, stderr}, {all}) => all && (stdout || stderr)\n\t? mergeStreams([stdout, stderr].filter(Boolean))\n\t: undefined;\n\n// Read the contents of `subprocess.all` and|or wait for its completion\nexport const waitForAllStream = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => waitForSubprocessStream({\n\t...getAllStream(subprocess, buffer),\n\tfdNumber: 'all',\n\tencoding,\n\tmaxBuffer: maxBuffer[1] + maxBuffer[2],\n\tlines: lines[1] || lines[2],\n\tallMixed: getAllMixed(subprocess),\n\tstripFinalNewline,\n\tverboseInfo,\n\tstreamInfo,\n});\n\nconst getAllStream = ({stdout, stderr, all}, [, bufferStdout, bufferStderr]) => {\n\tconst buffer = bufferStdout || bufferStderr;\n\tif (!buffer) {\n\t\treturn {stream: all, buffer};\n\t}\n\n\tif (!bufferStdout) {\n\t\treturn {stream: stderr, buffer};\n\t}\n\n\tif (!bufferStderr) {\n\t\treturn {stream: stdout, buffer};\n\t}\n\n\treturn {stream: all, buffer};\n};\n\n// When `subprocess.stdout` is in objectMode but not `subprocess.stderr` (or the opposite), we need to use both:\n//  - `getStreamAsArray()` for the chunks in objectMode, to return as an array without changing each chunk\n//  - `getStreamAsArrayBuffer()` or `getStream()` for the chunks not in objectMode, to convert them from Buffers to string or Uint8Array\n// We do this by emulating the Buffer -> string|Uint8Array conversion performed by `get-stream` with our own, which is identical.\nconst getAllMixed = ({all, stdout, stderr}) => all\n\t&& stdout\n\t&& stderr\n\t&& stdout.readableObjectMode !== stderr.readableObjectMode;\n","import {once} from 'node:events';\nimport {isStream as isNodeStream} from 'is-stream';\nimport {throwOnTimeout} from '../terminate/timeout.js';\nimport {throwOnCancel} from '../terminate/cancel.js';\nimport {throwOnGracefulCancel} from '../terminate/graceful.js';\nimport {isStandardStream} from '../utils/standard-stream.js';\nimport {TRANSFORM_TYPES} from '../stdio/type.js';\nimport {getBufferedData} from '../io/contents.js';\nimport {waitForIpcOutput, getBufferedIpcOutput} from '../ipc/buffer-messages.js';\nimport {sendIpcInput} from '../ipc/ipc-input.js';\nimport {waitForAllStream} from './all-async.js';\nimport {waitForStdioStreams} from './stdio.js';\nimport {waitForExit, waitForSuccessfulExit} from './exit-async.js';\nimport {waitForStream} from './wait-stream.js';\n\n// Retrieve result of subprocess: exit code, signal, error, streams (stdout/stderr/all)\nexport const waitForSubprocessResult = async ({\n\tsubprocess,\n\toptions: {\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\ttimeoutDuration: timeout,\n\t\tcancelSignal,\n\t\tgracefulCancel,\n\t\tforceKillAfterDelay,\n\t\tstripFinalNewline,\n\t\tipc,\n\t\tipcInput,\n\t},\n\tcontext,\n\tverboseInfo,\n\tfileDescriptors,\n\toriginalStreams,\n\tonInternalError,\n\tcontroller,\n}) => {\n\tconst exitPromise = waitForExit(subprocess, context);\n\tconst streamInfo = {\n\t\toriginalStreams,\n\t\tfileDescriptors,\n\t\tsubprocess,\n\t\texitPromise,\n\t\tpropagating: false,\n\t};\n\n\tconst stdioPromises = waitForStdioStreams({\n\t\tsubprocess,\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\tconst allPromise = waitForAllStream({\n\t\tsubprocess,\n\t\tencoding,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tlines,\n\t\tstripFinalNewline,\n\t\tverboseInfo,\n\t\tstreamInfo,\n\t});\n\tconst ipcOutput = [];\n\tconst ipcOutputPromise = waitForIpcOutput({\n\t\tsubprocess,\n\t\tbuffer,\n\t\tmaxBuffer,\n\t\tipc,\n\t\tipcOutput,\n\t\tverboseInfo,\n\t});\n\tconst originalPromises = waitForOriginalStreams(originalStreams, subprocess, streamInfo);\n\tconst customStreamsEndPromises = waitForCustomStreamsEnd(fileDescriptors, streamInfo);\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tPromise.all([\n\t\t\t\t{},\n\t\t\t\twaitForSuccessfulExit(exitPromise),\n\t\t\t\tPromise.all(stdioPromises),\n\t\t\t\tallPromise,\n\t\t\t\tipcOutputPromise,\n\t\t\t\tsendIpcInput(subprocess, ipcInput),\n\t\t\t\t...originalPromises,\n\t\t\t\t...customStreamsEndPromises,\n\t\t\t]),\n\t\t\tonInternalError,\n\t\t\tthrowOnSubprocessError(subprocess, controller),\n\t\t\t...throwOnTimeout(subprocess, timeout, context, controller),\n\t\t\t...throwOnCancel({\n\t\t\t\tsubprocess,\n\t\t\t\tcancelSignal,\n\t\t\t\tgracefulCancel,\n\t\t\t\tcontext,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t\t...throwOnGracefulCancel({\n\t\t\t\tsubprocess,\n\t\t\t\tcancelSignal,\n\t\t\t\tgracefulCancel,\n\t\t\t\tforceKillAfterDelay,\n\t\t\t\tcontext,\n\t\t\t\tcontroller,\n\t\t\t}),\n\t\t]);\n\t} catch (error) {\n\t\tcontext.terminationReason ??= 'other';\n\t\treturn Promise.all([\n\t\t\t{error},\n\t\t\texitPromise,\n\t\t\tPromise.all(stdioPromises.map(stdioPromise => getBufferedData(stdioPromise))),\n\t\t\tgetBufferedData(allPromise),\n\t\t\tgetBufferedIpcOutput(ipcOutputPromise, ipcOutput),\n\t\t\tPromise.allSettled(originalPromises),\n\t\t\tPromise.allSettled(customStreamsEndPromises),\n\t\t]);\n\t}\n};\n\n// Transforms replace `subprocess.std*`, which means they are not exposed to users.\n// However, we still want to wait for their completion.\nconst waitForOriginalStreams = (originalStreams, subprocess, streamInfo) =>\n\toriginalStreams.map((stream, fdNumber) => stream === subprocess.stdio[fdNumber]\n\t\t? undefined\n\t\t: waitForStream(stream, fdNumber, streamInfo));\n\n// Some `stdin`/`stdout`/`stderr` options create a stream, e.g. when passing a file path.\n// The `.pipe()` method automatically ends that stream when `subprocess` ends.\n// This makes sure we wait for the completion of those streams, in order to catch any error.\nconst waitForCustomStreamsEnd = (fileDescriptors, streamInfo) => fileDescriptors.flatMap(({stdioItems}, fdNumber) => stdioItems\n\t.filter(({value, stream = value}) => isNodeStream(stream, {checkOpen: false}) && !isStandardStream(stream))\n\t.map(({type, value, stream = value}) => waitForStream(stream, fdNumber, streamInfo, {\n\t\tisSameDirection: TRANSFORM_TYPES.has(type),\n\t\tstopOnExit: type === 'native',\n\t})));\n\n// Fails when the subprocess emits an `error` event\nconst throwOnSubprocessError = async (subprocess, {signal}) => {\n\tconst [error] = await once(subprocess, 'error', {signal});\n\tthrow error;\n};\n","import {verboseLog, serializeVerboseMessage} from './log.js';\nimport {isFullVerbose} from './values.js';\n\n// When `verbose` is `'full'`, print IPC messages from the subprocess\nexport const shouldLogIpc = verboseInfo => isFullVerbose(verboseInfo, 'ipc');\n\nexport const logIpcOutput = (message, verboseInfo) => {\n\tconst verboseMessage = serializeVerboseMessage(message);\n\tverboseLog({\n\t\ttype: 'ipc',\n\t\tverboseMessage,\n\t\tfdNumber: 'ipc',\n\t\tverboseInfo,\n\t});\n};\n","import {checkIpcMaxBuffer} from '../io/max-buffer.js';\nimport {shouldLogIpc, logIpcOutput} from '../verbose/ipc.js';\nimport {getFdSpecificValue} from '../arguments/specific.js';\nimport {loopOnMessages} from './get-each.js';\n\n// Iterate through IPC messages sent by the subprocess\nexport const waitForIpcOutput = async ({\n\tsubprocess,\n\tbuffer: bufferArray,\n\tmaxBuffer: maxBufferArray,\n\tipc,\n\tipcOutput,\n\tverboseInfo,\n}) => {\n\tif (!ipc) {\n\t\treturn ipcOutput;\n\t}\n\n\tconst isVerbose = shouldLogIpc(verboseInfo);\n\tconst buffer = getFdSpecificValue(bufferArray, 'ipc');\n\tconst maxBuffer = getFdSpecificValue(maxBufferArray, 'ipc');\n\n\tfor await (const message of loopOnMessages({\n\t\tanyProcess: subprocess,\n\t\tchannel: subprocess.channel,\n\t\tisSubprocess: false,\n\t\tipc,\n\t\tshouldAwait: false,\n\t\treference: true,\n\t})) {\n\t\tif (buffer) {\n\t\t\tcheckIpcMaxBuffer(subprocess, ipcOutput, maxBuffer);\n\t\t\tipcOutput.push(message);\n\t\t}\n\n\t\tif (isVerbose) {\n\t\t\tlogIpcOutput(message, verboseInfo);\n\t\t}\n\t}\n\n\treturn ipcOutput;\n};\n\nexport const getBufferedIpcOutput = async (ipcOutputPromise, ipcOutput) => {\n\tawait Promise.allSettled([ipcOutputPromise]);\n\treturn ipcOutput;\n};\n","import {createDeferred} from '../utils/deferred.js';\n\n// When using multiple `.readable()`/`.writable()`/`.duplex()`, `final` and `destroy` should wait for other streams\nexport const initializeConcurrentStreams = () => ({\n\treadableDestroy: new WeakMap(),\n\twritableFinal: new WeakMap(),\n\twritableDestroy: new WeakMap(),\n});\n\n// Each file descriptor + `waitName` has its own array of promises.\n// Each promise is a single `.readable()`/`.writable()`/`.duplex()` call.\nexport const addConcurrentStream = (concurrentStreams, stream, waitName) => {\n\tconst weakMap = concurrentStreams[waitName];\n\tif (!weakMap.has(stream)) {\n\t\tweakMap.set(stream, []);\n\t}\n\n\tconst promises = weakMap.get(stream);\n\tconst promise = createDeferred();\n\tpromises.push(promise);\n\tconst resolve = promise.resolve.bind(promise);\n\treturn {resolve, promises};\n};\n\n// Wait for other streams, but stop waiting when subprocess ends\nexport const waitForConcurrentStreams = async ({resolve, promises}, subprocess) => {\n\tresolve();\n\tconst [isSubprocessExit] = await Promise.race([\n\t\tPromise.allSettled([true, subprocess]),\n\t\tPromise.all([false, ...promises]),\n\t]);\n\treturn !isSubprocessExit;\n};\n","import {Readable} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {getFromStream} from '../arguments/fd-options.js';\nimport {iterateOnSubprocessStream, DEFAULT_OBJECT_HIGH_WATER_MARK} from '../io/iterate.js';\nimport {createDeferred} from '../utils/deferred.js';\nimport {addConcurrentStream, waitForConcurrentStreams} from './concurrent.js';\nimport {\n\tsafeWaitForSubprocessStdin,\n\twaitForSubprocessStdout,\n\twaitForSubprocess,\n\tdestroyOtherStream,\n} from './shared.js';\n\n// Create a `Readable` stream that forwards from `stdout` and awaits the subprocess\nexport const createReadable = ({subprocess, concurrentStreams, encoding}, {from, binary: binaryOption = true, preserveNewlines = true} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {subprocessStdout, waitReadableDestroy} = getSubprocessStdout(subprocess, from, concurrentStreams);\n\tconst {readableEncoding, readableObjectMode, readableHighWaterMark} = getReadableOptions(subprocessStdout, binary);\n\tconst {read, onStdoutDataDone} = getReadableMethods({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\tconst readable = new Readable({\n\t\tread,\n\t\tdestroy: callbackify(onReadableDestroy.bind(undefined, {subprocessStdout, subprocess, waitReadableDestroy})),\n\t\thighWaterMark: readableHighWaterMark,\n\t\tobjectMode: readableObjectMode,\n\t\tencoding: readableEncoding,\n\t});\n\tonStdoutFinished({\n\t\tsubprocessStdout,\n\t\tonStdoutDataDone,\n\t\treadable,\n\t\tsubprocess,\n\t});\n\treturn readable;\n};\n\n// Retrieve `stdout` (or other stream depending on `from`)\nexport const getSubprocessStdout = (subprocess, from, concurrentStreams) => {\n\tconst subprocessStdout = getFromStream(subprocess, from);\n\tconst waitReadableDestroy = addConcurrentStream(concurrentStreams, subprocessStdout, 'readableDestroy');\n\treturn {subprocessStdout, waitReadableDestroy};\n};\n\nexport const getReadableOptions = ({readableEncoding, readableObjectMode, readableHighWaterMark}, binary) => binary\n\t? {readableEncoding, readableObjectMode, readableHighWaterMark}\n\t: {readableEncoding, readableObjectMode: true, readableHighWaterMark: DEFAULT_OBJECT_HIGH_WATER_MARK};\n\nexport const getReadableMethods = ({subprocessStdout, subprocess, binary, encoding, preserveNewlines}) => {\n\tconst onStdoutDataDone = createDeferred();\n\tconst onStdoutData = iterateOnSubprocessStream({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tshouldEncode: !binary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\n\treturn {\n\t\tread() {\n\t\t\tonRead(this, onStdoutData, onStdoutDataDone);\n\t\t},\n\t\tonStdoutDataDone,\n\t};\n};\n\n// Forwards data from `stdout` to `readable`\nconst onRead = async (readable, onStdoutData, onStdoutDataDone) => {\n\ttry {\n\t\tconst {value, done} = await onStdoutData.next();\n\t\tif (done) {\n\t\t\tonStdoutDataDone.resolve();\n\t\t} else {\n\t\t\treadable.push(value);\n\t\t}\n\t} catch {}\n};\n\n// When `subprocess.stdout` ends/aborts/errors, do the same on `readable`.\n// Await the subprocess, for the same reason as above.\nexport const onStdoutFinished = async ({subprocessStdout, onStdoutDataDone, readable, subprocess, subprocessStdin}) => {\n\ttry {\n\t\tawait waitForSubprocessStdout(subprocessStdout);\n\t\tawait subprocess;\n\t\tawait safeWaitForSubprocessStdin(subprocessStdin);\n\t\tawait onStdoutDataDone;\n\n\t\tif (readable.readable) {\n\t\t\treadable.push(null);\n\t\t}\n\t} catch (error) {\n\t\tawait safeWaitForSubprocessStdin(subprocessStdin);\n\t\tdestroyOtherReadable(readable, error);\n\t}\n};\n\n// When `readable` aborts/errors, do the same on `subprocess.stdout`\nexport const onReadableDestroy = async ({subprocessStdout, subprocess, waitReadableDestroy}, error) => {\n\tif (await waitForConcurrentStreams(waitReadableDestroy, subprocess)) {\n\t\tdestroyOtherReadable(subprocessStdout, error);\n\t\tawait waitForSubprocess(subprocess, error);\n\t}\n};\n\nconst destroyOtherReadable = (stream, error) => {\n\tdestroyOtherStream(stream, stream.readable, error);\n};\n","import {finished} from 'node:stream/promises';\nimport {isStreamAbort} from '../resolve/wait-stream.js';\n\nexport const safeWaitForSubprocessStdin = async subprocessStdin => {\n\tif (subprocessStdin === undefined) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait waitForSubprocessStdin(subprocessStdin);\n\t} catch {}\n};\n\nexport const safeWaitForSubprocessStdout = async subprocessStdout => {\n\tif (subprocessStdout === undefined) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait waitForSubprocessStdout(subprocessStdout);\n\t} catch {}\n};\n\nexport const waitForSubprocessStdin = async subprocessStdin => {\n\tawait finished(subprocessStdin, {cleanup: true, readable: false, writable: true});\n};\n\nexport const waitForSubprocessStdout = async subprocessStdout => {\n\tawait finished(subprocessStdout, {cleanup: true, readable: true, writable: false});\n};\n\n// When `readable` or `writable` aborts/errors, awaits the subprocess, for the reason mentioned above\nexport const waitForSubprocess = async (subprocess, error) => {\n\tawait subprocess;\n\tif (error) {\n\t\tthrow error;\n\t}\n};\n\nexport const destroyOtherStream = (stream, isOpen, error) => {\n\tif (error && !isStreamAbort(error)) {\n\t\tstream.destroy(error);\n\t} else if (isOpen) {\n\t\tstream.destroy();\n\t}\n};\n","import {Writable} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {getToStream} from '../arguments/fd-options.js';\nimport {addConcurrentStream, waitForConcurrentStreams} from './concurrent.js';\nimport {\n\tsafeWaitForSubprocessStdout,\n\twaitForSubprocessStdin,\n\twaitForSubprocess,\n\tdestroyOtherStream,\n} from './shared.js';\n\n// Create a `Writable` stream that forwards to `stdin` and awaits the subprocess\nexport const createWritable = ({subprocess, concurrentStreams}, {to} = {}) => {\n\tconst {subprocessStdin, waitWritableFinal, waitWritableDestroy} = getSubprocessStdin(subprocess, to, concurrentStreams);\n\tconst writable = new Writable({\n\t\t...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),\n\t\tdestroy: callbackify(onWritableDestroy.bind(undefined, {\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t})),\n\t\thighWaterMark: subprocessStdin.writableHighWaterMark,\n\t\tobjectMode: subprocessStdin.writableObjectMode,\n\t});\n\tonStdinFinished(subprocessStdin, writable);\n\treturn writable;\n};\n\n// Retrieve `stdin` (or other stream depending on `to`)\nexport const getSubprocessStdin = (subprocess, to, concurrentStreams) => {\n\tconst subprocessStdin = getToStream(subprocess, to);\n\tconst waitWritableFinal = addConcurrentStream(concurrentStreams, subprocessStdin, 'writableFinal');\n\tconst waitWritableDestroy = addConcurrentStream(concurrentStreams, subprocessStdin, 'writableDestroy');\n\treturn {subprocessStdin, waitWritableFinal, waitWritableDestroy};\n};\n\nexport const getWritableMethods = (subprocessStdin, subprocess, waitWritableFinal) => ({\n\twrite: onWrite.bind(undefined, subprocessStdin),\n\tfinal: callbackify(onWritableFinal.bind(undefined, subprocessStdin, subprocess, waitWritableFinal)),\n});\n\n// Forwards data from `writable` to `stdin`\nconst onWrite = (subprocessStdin, chunk, encoding, done) => {\n\tif (subprocessStdin.write(chunk, encoding)) {\n\t\tdone();\n\t} else {\n\t\tsubprocessStdin.once('drain', done);\n\t}\n};\n\n// Ensures that the writable `final` and readable `end` events awaits the subprocess.\n// Like this, any subprocess failure is propagated as a stream `error` event, instead of being lost.\n// The user does not need to `await` the subprocess anymore, but now needs to await the stream completion or error.\n// When multiple writables are targeting the same stream, they wait for each other, unless the subprocess ends first.\nconst onWritableFinal = async (subprocessStdin, subprocess, waitWritableFinal) => {\n\tif (await waitForConcurrentStreams(waitWritableFinal, subprocess)) {\n\t\tif (subprocessStdin.writable) {\n\t\t\tsubprocessStdin.end();\n\t\t}\n\n\t\tawait subprocess;\n\t}\n};\n\n// When `subprocess.stdin` ends/aborts/errors, do the same on `writable`.\nexport const onStdinFinished = async (subprocessStdin, writable, subprocessStdout) => {\n\ttry {\n\t\tawait waitForSubprocessStdin(subprocessStdin);\n\t\tif (writable.writable) {\n\t\t\twritable.end();\n\t\t}\n\t} catch (error) {\n\t\tawait safeWaitForSubprocessStdout(subprocessStdout);\n\t\tdestroyOtherWritable(writable, error);\n\t}\n};\n\n// When `writable` aborts/errors, do the same on `subprocess.stdin`\nexport const onWritableDestroy = async ({subprocessStdin, subprocess, waitWritableFinal, waitWritableDestroy}, error) => {\n\tawait waitForConcurrentStreams(waitWritableFinal, subprocess);\n\tif (await waitForConcurrentStreams(waitWritableDestroy, subprocess)) {\n\t\tdestroyOtherWritable(subprocessStdin, error);\n\t\tawait waitForSubprocess(subprocess, error);\n\t}\n};\n\nconst destroyOtherWritable = (stream, error) => {\n\tdestroyOtherStream(stream, stream.writable, error);\n};\n","import {Duplex} from 'node:stream';\nimport {callbackify} from 'node:util';\nimport {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {\n\tgetSubprocessStdout,\n\tgetReadableOptions,\n\tgetReadableMethods,\n\tonStdoutFinished,\n\tonReadableDestroy,\n} from './readable.js';\nimport {\n\tgetSubprocessStdin,\n\tgetWritableMethods,\n\tonStdinFinished,\n\tonWritableDestroy,\n} from './writable.js';\n\n// Create a `Duplex` stream combining both `subprocess.readable()` and `subprocess.writable()`\nexport const createDuplex = ({subprocess, concurrentStreams, encoding}, {from, to, binary: binaryOption = true, preserveNewlines = true} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst {subprocessStdout, waitReadableDestroy} = getSubprocessStdout(subprocess, from, concurrentStreams);\n\tconst {subprocessStdin, waitWritableFinal, waitWritableDestroy} = getSubprocessStdin(subprocess, to, concurrentStreams);\n\tconst {readableEncoding, readableObjectMode, readableHighWaterMark} = getReadableOptions(subprocessStdout, binary);\n\tconst {read, onStdoutDataDone} = getReadableMethods({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\tconst duplex = new Duplex({\n\t\tread,\n\t\t...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),\n\t\tdestroy: callbackify(onDuplexDestroy.bind(undefined, {\n\t\t\tsubprocessStdout,\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitReadableDestroy,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t})),\n\t\treadableHighWaterMark,\n\t\twritableHighWaterMark: subprocessStdin.writableHighWaterMark,\n\t\treadableObjectMode,\n\t\twritableObjectMode: subprocessStdin.writableObjectMode,\n\t\tencoding: readableEncoding,\n\t});\n\tonStdoutFinished({\n\t\tsubprocessStdout,\n\t\tonStdoutDataDone,\n\t\treadable: duplex,\n\t\tsubprocess,\n\t\tsubprocessStdin,\n\t});\n\tonStdinFinished(subprocessStdin, duplex, subprocessStdout);\n\treturn duplex;\n};\n\nconst onDuplexDestroy = async ({subprocessStdout, subprocessStdin, subprocess, waitReadableDestroy, waitWritableFinal, waitWritableDestroy}, error) => {\n\tawait Promise.all([\n\t\tonReadableDestroy({subprocessStdout, subprocess, waitReadableDestroy}, error),\n\t\tonWritableDestroy({\n\t\t\tsubprocessStdin,\n\t\t\tsubprocess,\n\t\t\twaitWritableFinal,\n\t\t\twaitWritableDestroy,\n\t\t}, error),\n\t]);\n};\n","import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';\nimport {getFromStream} from '../arguments/fd-options.js';\nimport {iterateOnSubprocessStream} from '../io/iterate.js';\n\n// Convert the subprocess to an async iterable\nexport const createIterable = (subprocess, encoding, {\n\tfrom,\n\tbinary: binaryOption = false,\n\tpreserveNewlines = false,\n} = {}) => {\n\tconst binary = binaryOption || BINARY_ENCODINGS.has(encoding);\n\tconst subprocessStdout = getFromStream(subprocess, from);\n\tconst onStdoutData = iterateOnSubprocessStream({\n\t\tsubprocessStdout,\n\t\tsubprocess,\n\t\tbinary,\n\t\tshouldEncode: true,\n\t\tencoding,\n\t\tpreserveNewlines,\n\t});\n\treturn iterateOnStdoutData(onStdoutData, subprocessStdout, subprocess);\n};\n\nconst iterateOnStdoutData = async function * (onStdoutData, subprocessStdout, subprocess) {\n\ttry {\n\t\tyield * onStdoutData;\n\t} finally {\n\t\tif (subprocessStdout.readable) {\n\t\t\tsubprocessStdout.destroy();\n\t\t}\n\n\t\tawait subprocess;\n\t}\n};\n","import {initializeConcurrentStreams} from './concurrent.js';\nimport {createReadable} from './readable.js';\nimport {createWritable} from './writable.js';\nimport {createDuplex} from './duplex.js';\nimport {createIterable} from './iterable.js';\n\n// Add methods to convert the subprocess to a stream or iterable\nexport const addConvertedStreams = (subprocess, {encoding}) => {\n\tconst concurrentStreams = initializeConcurrentStreams();\n\tsubprocess.readable = createReadable.bind(undefined, {subprocess, concurrentStreams, encoding});\n\tsubprocess.writable = createWritable.bind(undefined, {subprocess, concurrentStreams});\n\tsubprocess.duplex = createDuplex.bind(undefined, {subprocess, concurrentStreams, encoding});\n\tsubprocess.iterable = createIterable.bind(undefined, subprocess, encoding);\n\tsubprocess[Symbol.asyncIterator] = createIterable.bind(undefined, subprocess, encoding, {});\n};\n","// The return value is a mixin of `subprocess` and `Promise`\nexport const mergePromise = (subprocess, promise) => {\n\tfor (const [property, descriptor] of descriptors) {\n\t\tconst value = descriptor.value.bind(promise);\n\t\tReflect.defineProperty(subprocess, property, {...descriptor, value});\n\t}\n};\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nconst nativePromisePrototype = (async () => {})().constructor.prototype;\n\nconst descriptors = ['then', 'catch', 'finally'].map(property => [\n\tproperty,\n\tReflect.getOwnPropertyDescriptor(nativePromisePrototype, property),\n]);\n","import isPlainObject from 'is-plain-obj';\nimport {FD_SPECIFIC_OPTIONS} from '../arguments/specific.js';\n\n// Deep merge specific options like `env`. Shallow merge the other ones.\nexport const mergeOptions = (boundOptions, options) => {\n\tconst newOptions = Object.fromEntries(\n\t\tObject.entries(options).map(([optionName, optionValue]) => [\n\t\t\toptionName,\n\t\t\tmergeOption(optionName, boundOptions[optionName], optionValue),\n\t\t]),\n\t);\n\treturn {...boundOptions, ...newOptions};\n};\n\nconst mergeOption = (optionName, boundOptionValue, optionValue) => {\n\tif (DEEP_OPTIONS.has(optionName) && isPlainObject(boundOptionValue) && isPlainObject(optionValue)) {\n\t\treturn {...boundOptionValue, ...optionValue};\n\t}\n\n\treturn optionValue;\n};\n\nconst DEEP_OPTIONS = new Set(['env', ...FD_SPECIFIC_OPTIONS]);\n","import isPlainObject from 'is-plain-obj';\nimport {normalizeParameters} from './parameters.js';\nimport {isTemplateString, parseTemplates} from './template.js';\nimport {execaCoreSync} from './main-sync.js';\nimport {execaCoreAsync} from './main-async.js';\nimport {mergeOptions} from './bind.js';\n\n// Wraps every exported methods to provide the following features:\n//  - template string syntax: execa`command argument`\n//  - options binding: boundExeca = execa(options)\n//  - optional argument/options: execa(file), execa(file, args), execa(file, options), execa(file, args, options)\n// `mapArguments()` and `setBoundExeca()` allows for method-specific logic.\nexport const createExeca = (mapArguments, boundOptions, deepOptions, setBoundExeca) => {\n\tconst createNested = (mapArguments, boundOptions, setBoundExeca) => createExeca(mapArguments, boundOptions, deepOptions, setBoundExeca);\n\tconst boundExeca = (...execaArguments) => callBoundExeca({\n\t\tmapArguments,\n\t\tdeepOptions,\n\t\tboundOptions,\n\t\tsetBoundExeca,\n\t\tcreateNested,\n\t}, ...execaArguments);\n\n\tif (setBoundExeca !== undefined) {\n\t\tsetBoundExeca(boundExeca, createNested, boundOptions);\n\t}\n\n\treturn boundExeca;\n};\n\nconst callBoundExeca = ({mapArguments, deepOptions = {}, boundOptions = {}, setBoundExeca, createNested}, firstArgument, ...nextArguments) => {\n\tif (isPlainObject(firstArgument)) {\n\t\treturn createNested(mapArguments, mergeOptions(boundOptions, firstArgument), setBoundExeca);\n\t}\n\n\tconst {file, commandArguments, options, isSync} = parseArguments({\n\t\tmapArguments,\n\t\tfirstArgument,\n\t\tnextArguments,\n\t\tdeepOptions,\n\t\tboundOptions,\n\t});\n\treturn isSync\n\t\t? execaCoreSync(file, commandArguments, options)\n\t\t: execaCoreAsync(file, commandArguments, options, createNested);\n};\n\nconst parseArguments = ({mapArguments, firstArgument, nextArguments, deepOptions, boundOptions}) => {\n\tconst callArguments = isTemplateString(firstArgument)\n\t\t? parseTemplates(firstArgument, nextArguments)\n\t\t: [firstArgument, ...nextArguments];\n\tconst [initialFile, initialArguments, initialOptions] = normalizeParameters(...callArguments);\n\tconst mergedOptions = mergeOptions(mergeOptions(deepOptions, boundOptions), initialOptions);\n\tconst {\n\t\tfile = initialFile,\n\t\tcommandArguments = initialArguments,\n\t\toptions = mergedOptions,\n\t\tisSync = false,\n\t} = mapArguments({file: initialFile, commandArguments: initialArguments, options: mergedOptions});\n\treturn {\n\t\tfile,\n\t\tcommandArguments,\n\t\toptions,\n\t\tisSync,\n\t};\n};\n","// Main logic for `execaCommand()`\nexport const mapCommandAsync = ({file, commandArguments}) => parseCommand(file, commandArguments);\n\n// Main logic for `execaCommandSync()`\nexport const mapCommandSync = ({file, commandArguments}) => ({...parseCommand(file, commandArguments), isSync: true});\n\n// Convert `execaCommand(command)` into `execa(file, ...commandArguments)`\nconst parseCommand = (command, unusedArguments) => {\n\tif (unusedArguments.length > 0) {\n\t\tthrow new TypeError(`The command and its arguments must be passed as a single string: ${command} ${unusedArguments}.`);\n\t}\n\n\tconst [file, ...commandArguments] = parseCommandString(command);\n\treturn {file, commandArguments};\n};\n\n// Convert `command` string into an array of file or arguments to pass to $`${...fileOrCommandArguments}`\nexport const parseCommandString = command => {\n\tif (typeof command !== 'string') {\n\t\tthrow new TypeError(`The command must be a string: ${String(command)}.`);\n\t}\n\n\tconst trimmedCommand = command.trim();\n\tif (trimmedCommand === '') {\n\t\treturn [];\n\t}\n\n\tconst tokens = [];\n\tfor (const token of trimmedCommand.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.at(-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\nconst SPACES_REGEXP = / +/g;\n","// Sets `$.sync` and `$.s`\nexport const setScriptSync = (boundExeca, createNested, boundOptions) => {\n\tboundExeca.sync = createNested(mapScriptSync, boundOptions);\n\tboundExeca.s = boundExeca.sync;\n};\n\n// Main logic for `$`\nexport const mapScriptAsync = ({options}) => getScriptOptions(options);\n\n// Main logic for `$.sync`\nconst mapScriptSync = ({options}) => ({...getScriptOptions(options), isSync: true});\n\n// `$` is like `execa` but with script-friendly options: `{stdin: 'inherit', preferLocal: true}`\nconst getScriptOptions = options => ({options: {...getScriptStdinOption(options), ...options}});\n\nconst getScriptStdinOption = ({input, inputFile, stdio}) => input === undefined && inputFile === undefined && stdio === undefined\n\t? {stdin: 'inherit'}\n\t: {};\n\n// When using $(...).pipe(...), most script-friendly options should apply to both commands.\n// However, some options (like `stdin: 'inherit'`) would create issues with piping, i.e. cannot be deep.\nexport const deepScriptOptions = {preferLocal: true};\n","import {createExeca} from './lib/methods/create.js';\nimport {mapCommandAsync, mapCommandSync} from './lib/methods/command.js';\nimport {mapNode} from './lib/methods/node.js';\nimport {mapScriptAsync, setScriptSync, deepScriptOptions} from './lib/methods/script.js';\nimport {getIpcExport} from './lib/ipc/methods.js';\n\nexport {parseCommandString} from './lib/methods/command.js';\nexport {ExecaError, ExecaSyncError} from './lib/return/final-error.js';\n\nexport const execa = createExeca(() => ({}));\nexport const execaSync = createExeca(() => ({isSync: true}));\nexport const execaCommand = createExeca(mapCommandAsync);\nexport const execaCommandSync = createExeca(mapCommandSync);\nexport const execaNode = createExeca(mapNode);\nexport const $ = createExeca(mapScriptAsync, {}, deepScriptOptions, setScriptSync);\n\nconst {\n\tsendMessage,\n\tgetOneMessage,\n\tgetEachMessage,\n\tgetCancelSignal,\n} = getIpcExport();\nexport {\n\tsendMessage,\n\tgetOneMessage,\n\tgetEachMessage,\n\tgetCancelSignal,\n};\n","import { execa } from \"execa\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport async function openBrowser(url: string): Promise<void> {\n  const platform = process.platform;\n\n  try {\n    if (platform === \"darwin\") {\n      await execa(\"open\", [url], { stdio: \"ignore\" });\n      return;\n    }\n    if (platform === \"win32\") {\n      await execa(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\", windowsHide: true });\n      return;\n    }\n    await execa(\"xdg-open\", [url], { stdio: \"ignore\" });\n  } catch (err) {\n    throw new CliError(\"Could not open a browser automatically.\", {\n      exitCode: 1,\n      hint: `Open this URL in a browser:\\n${url}\\n\\n${(err as Error)?.message ?? String(err)}`,\n    });\n  }\n}\n\n","export type { RemixAuthHelpers, WorkosAuthChallenge, WorkosContinuationInput } from \"@remixhq/core/auth\";\nexport { RemixAuthContinuationError, createRemixAuthHelpers } from \"@remixhq/core/auth\";\n","/**\n * Amplitude telemetry for the Remix CLI.\n *\n * Design constraints:\n *   - The CLI is a short-lived process. We must `flush()` before exit\n *     or events are lost.\n *   - Every call is best-effort and MUST NOT throw to user-facing code.\n *     A telemetry failure can never break a `remix` invocation.\n *   - Users must be able to opt out. Honor `REMIX_TELEMETRY=0` (or\n *     `false`/`off`/`no`). Vitest runs no-op automatically.\n *   - Identity stitching across surfaces (home/dashboard/desktop/CLI)\n *     happens by sharing the Remix user id as the Amplitude\n *     `user_id`. Before login we fall back to a stable per-machine\n *     `device_id` persisted in `~/.config/remix/telemetry.json`.\n *\n * This module is intentionally tolerant: import failures, missing API\n * keys, missing sessions, and SDK init errors all collapse silently\n * to \"telemetry disabled\".\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Build-time constant injected by tsup. Falls back to env vars for dev\n// (`tsx`) and for self-hosted/staging builds that want to point at a\n// different Amplitude project.\ndeclare const __REMIX_AMPLITUDE_API_KEY__: string | undefined;\n\nfunction resolveApiKey(): string | undefined {\n  const fromEnv = process.env.REMIX_AMPLITUDE_API_KEY;\n  if (fromEnv && fromEnv.trim().length > 0) return fromEnv.trim();\n  const fromBuild =\n    typeof __REMIX_AMPLITUDE_API_KEY__ === \"string\"\n      ? __REMIX_AMPLITUDE_API_KEY__\n      : undefined;\n  if (fromBuild && fromBuild.trim().length > 0) return fromBuild.trim();\n  return undefined;\n}\n\nfunction isOptedOut(): boolean {\n  const v = (process.env.REMIX_TELEMETRY ?? \"\").trim().toLowerCase();\n  if (v === \"0\" || v === \"false\" || v === \"off\" || v === \"no\") return true;\n  // Vitest sets VITEST=true; never emit telemetry from tests.\n  if (process.env.VITEST) return true;\n  if (process.env.NODE_ENV === \"test\") return true;\n  return false;\n}\n\nfunction xdgConfigHome(): string {\n  const v = process.env.XDG_CONFIG_HOME;\n  if (typeof v === \"string\" && v.trim().length > 0) return v;\n  return path.join(os.homedir(), \".config\");\n}\n\nfunction telemetryStatePath(): string {\n  return path.join(xdgConfigHome(), \"remix\", \"telemetry.json\");\n}\n\nasync function loadOrCreateMachineId(): Promise<string> {\n  const file = telemetryStatePath();\n  try {\n    const raw = await fs.readFile(file, \"utf8\");\n    const parsed = JSON.parse(raw) as { machineId?: unknown };\n    if (typeof parsed.machineId === \"string\" && parsed.machineId.length > 0) {\n      return parsed.machineId;\n    }\n  } catch {\n    // fall through to create\n  }\n  const id = crypto.randomUUID();\n  try {\n    await fs.mkdir(path.dirname(file), { recursive: true });\n    await fs.writeFile(file, JSON.stringify({ machineId: id }), { mode: 0o600 });\n  } catch {\n    // If we can't persist, we still return the id; it just won't be\n    // stable across runs. That's a fine fallback — Amplitude will still\n    // ingest events, they'll just look like separate devices.\n  }\n  return id;\n}\n\ntype AmplitudeNodeApi = {\n  init: (apiKey: string, options?: Record<string, unknown>) => { promise: Promise<unknown> };\n  track: (\n    eventType: string,\n    eventProperties?: Record<string, unknown>,\n    eventOptions?: Record<string, unknown>,\n  ) => { promise: Promise<unknown> };\n  flush: () => { promise: Promise<unknown> };\n};\n\ntype TelemetryState = {\n  enabled: boolean;\n  api: AmplitudeNodeApi | null;\n  deviceId: string | null;\n  userId: string | null;\n  sessionStart: number;\n};\n\nconst state: TelemetryState = {\n  enabled: false,\n  api: null,\n  deviceId: null,\n  userId: null,\n  sessionStart: Date.now(),\n};\n\n/**\n * Initialize Amplitude. Safe to call multiple times — only the first\n * call has an effect. Returns once init has resolved (or skipped).\n */\nexport async function initTelemetry(): Promise<void> {\n  if (state.enabled) return;\n  if (isOptedOut()) return;\n\n  const apiKey = resolveApiKey();\n  if (!apiKey) return;\n\n  try {\n    const mod: any = await import(\"@amplitude/analytics-node\");\n    const api: AmplitudeNodeApi = mod;\n\n    const deviceId = await loadOrCreateMachineId();\n    state.deviceId = deviceId;\n\n    // Best-effort: pick up the signed-in user id if we have a session.\n    try {\n      const { getSession } = await import(\"./sessionStore.js\");\n      const session = await getSession();\n      if (session?.user?.id) state.userId = session.user.id;\n    } catch {\n      // No session module / no session — fine, run anonymous.\n    }\n\n    await api\n      .init(apiKey, {\n        // Flush quickly because CLI processes exit fast.\n        flushIntervalMillis: 500,\n        flushQueueSize: 1,\n        flushMaxRetries: 1,\n        // Don't log SDK noise to the user's terminal.\n        logLevel: 0,\n      })\n      .promise;\n\n    state.api = api;\n    state.enabled = true;\n  } catch {\n    // If anything in init fails (network, module load, etc), stay\n    // disabled. Never let telemetry break the CLI.\n    state.enabled = false;\n    state.api = null;\n  }\n}\n\n/**\n * Update the user id after login completes. Subsequent events will be\n * attributed to this Remix user.\n */\nexport function setTelemetryUser(userId: string | null | undefined): void {\n  if (!userId) return;\n  state.userId = userId;\n}\n\n/**\n * Track an event. Fire-and-forget; failures are swallowed.\n */\nexport function trackEvent(\n  eventType: string,\n  properties?: Record<string, unknown>,\n): void {\n  if (!state.enabled || !state.api) return;\n  try {\n    state.api.track(eventType, properties ?? {}, {\n      ...(state.userId ? { user_id: state.userId } : {}),\n      ...(state.deviceId ? { device_id: state.deviceId } : {}),\n    });\n  } catch {\n    // Ignore.\n  }\n}\n\n/**\n * Flush queued events. Call before process exit. Bounded to a short\n * timeout so a hung Amplitude endpoint can't hold the CLI hostage.\n */\nexport async function flushTelemetry(timeoutMs = 1500): Promise<void> {\n  if (!state.enabled || !state.api) return;\n  try {\n    await Promise.race([\n      state.api.flush().promise,\n      new Promise((resolve) => setTimeout(resolve, timeoutMs)),\n    ]);\n  } catch {\n    // Ignore flush failures.\n  }\n}\n\n/**\n * Internal accessor used by `cli.ts` to compute durations.\n */\nexport function getSessionStart(): number {\n  return state.sessionStart;\n}\n","import {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/api/clientQuery.ts\nfunction appendStatus(qs, status) {\n  if (Array.isArray(status)) {\n    for (const value of status) qs.append(\"status\", value);\n  } else if (typeof status === \"string\") {\n    qs.set(\"status\", status);\n  }\n}\nfunction suffix(qs) {\n  const value = qs.toString();\n  return value ? `?${value}` : \"\";\n}\nfunction buildRuntimeEnvQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.repoFingerprint) qs.set(\"repoFingerprint\", params.repoFingerprint);\n  if (params?.environment) qs.set(\"environment\", params.environment);\n  if (params?.target) qs.set(\"target\", params.target);\n  return qs.toString();\n}\nfunction buildRuntimeTargetQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.repoFingerprint) qs.set(\"repoFingerprint\", params.repoFingerprint);\n  if (params?.environment) qs.set(\"environment\", params.environment);\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  return qs.toString();\n}\nfunction buildTriggerQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.repoFingerprint) qs.set(\"repoFingerprint\", params.repoFingerprint);\n  if (params?.environment) qs.set(\"environment\", params.environment);\n  if (params?.eventType) qs.set(\"eventType\", params.eventType);\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (params?.appId) qs.set(\"appId\", params.appId);\n  return qs.toString();\n}\nfunction buildProjectListQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.organizationId) qs.set(\"organizationId\", params.organizationId);\n  if (params?.clientAppId) qs.set(\"clientAppId\", params.clientAppId);\n  return suffix(qs);\n}\nfunction buildAppPreviewQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.environment) qs.set(\"environment\", params.environment);\n  if (params?.autostart !== void 0) qs.set(\"autostart\", params.autostart ? \"true\" : \"false\");\n  if (params?.probe) qs.set(\"probe\", params.probe);\n  if (params?.targetKind) qs.set(\"targetKind\", params.targetKind);\n  return suffix(qs);\n}\nfunction buildAppListQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.projectId) qs.set(\"projectId\", params.projectId);\n  if (params?.organizationId) qs.set(\"organizationId\", params.organizationId);\n  if (params?.ownership) qs.set(\"ownership\", params.ownership);\n  if (params?.accessScope) qs.set(\"accessScope\", params.accessScope);\n  if (params?.createdBy) qs.set(\"createdBy\", params.createdBy);\n  if (params?.forked) qs.set(\"forked\", params.forked);\n  if (params?.status) qs.set(\"status\", params.status);\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n  return suffix(qs);\n}\nfunction buildPaginationQuery(params) {\n  const qs = new URLSearchParams();\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n  return suffix(qs);\n}\nfunction buildAppTimelineQuery(params) {\n  const qs = new URLSearchParams();\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (params?.cursor) qs.set(\"cursor\", params.cursor);\n  if (params?.threadId) qs.set(\"threadId\", params.threadId);\n  if (typeof params?.includeHistorical === \"boolean\") qs.set(\"includeHistorical\", String(params.includeHistorical));\n  if (typeof params?.includeCosts === \"boolean\") qs.set(\"includeCosts\", String(params.includeCosts));\n  if (typeof params?.includeMergeRequestHistory === \"boolean\") {\n    qs.set(\"includeMergeRequestHistory\", String(params.includeMergeRequestHistory));\n  }\n  return suffix(qs);\n}\nfunction buildAppEditQueueQuery(params) {\n  const qs = new URLSearchParams(buildPaginationQuery(params).replace(/^\\?/, \"\"));\n  if (params?.threadId) qs.set(\"threadId\", params.threadId);\n  return suffix(qs);\n}\nfunction buildAppJobQueueQuery(params) {\n  const qs = new URLSearchParams();\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n  for (const kind of params?.kind ?? []) qs.append(\"kind\", kind);\n  for (const status of params?.status ?? []) qs.append(\"status\", status);\n  return suffix(qs);\n}\nfunction buildMergeRequestListQuery(params) {\n  const qs = new URLSearchParams();\n  if (params?.queue) qs.set(\"queue\", params.queue);\n  if (params?.appId) qs.set(\"appId\", params.appId);\n  if (params?.sourceAppId) qs.set(\"sourceAppId\", params.sourceAppId);\n  if (params?.targetAppId) qs.set(\"targetAppId\", params.targetAppId);\n  appendStatus(qs, params?.status);\n  if (params?.kind) qs.set(\"kind\", params.kind);\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n  return suffix(qs);\n}\nfunction buildMergeRequestInboxQuery(params) {\n  const qs = new URLSearchParams();\n  appendStatus(qs, params?.status);\n  if (params?.kind) qs.set(\"kind\", params.kind);\n  if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n  if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n  if (typeof params?.includeReview === \"boolean\") qs.set(\"includeReview\", String(params.includeReview));\n  if (typeof params?.includeDiffs === \"boolean\") qs.set(\"includeDiffs\", String(params.includeDiffs));\n  return suffix(qs);\n}\n\n// src/api/client.ts\nasync function readJsonSafe(res) {\n  const ct = res.headers.get(\"content-type\") ?? \"\";\n  if (!ct.toLowerCase().includes(\"application/json\")) return null;\n  try {\n    return await res.json();\n  } catch {\n    return null;\n  }\n}\nfunction createApiClient(config, opts) {\n  const apiKey = (opts?.apiKey ?? \"\").trim();\n  const tokenProvider = opts?.tokenProvider;\n  const defaultTimeoutMs = typeof opts?.defaultRequestTimeoutMs === \"number\" && opts.defaultRequestTimeoutMs > 0 ? opts.defaultRequestTimeoutMs : null;\n  const CLIENT_KEY_HEADER = \"x-comerge-api-key\";\n  function makeTimeoutSignal(timeoutMs) {\n    const ms = typeof timeoutMs === \"number\" && timeoutMs > 0 ? timeoutMs : defaultTimeoutMs;\n    return ms != null ? AbortSignal.timeout(ms) : void 0;\n  }\n  async function request(path, init, opts2) {\n    if (!tokenProvider) {\n      throw new RemixError(\"API client is missing a token provider.\", {\n        exitCode: 1,\n        hint: \"Configure auth before creating the Remix API client.\"\n      });\n    }\n    const auth = await tokenProvider();\n    const url = new URL(path, config.apiUrl).toString();\n    const doFetch = async (bearer) => fetch(url, {\n      ...init,\n      signal: makeTimeoutSignal(opts2?.timeoutMs),\n      headers: {\n        Accept: \"application/json\",\n        \"Content-Type\": \"application/json\",\n        ...init?.headers ?? {},\n        Authorization: `Bearer ${bearer}`,\n        ...apiKey ? { [CLIENT_KEY_HEADER]: apiKey } : {}\n      }\n    });\n    let res = await doFetch(auth.token);\n    if (res.status === 401 && !auth.fromEnv && auth.session?.refresh_token) {\n      const refreshed = await tokenProvider({ forceRefresh: true });\n      res = await doFetch(refreshed.token);\n    }\n    if (!res.ok) {\n      const body = await readJsonSafe(res);\n      const msg = (body && typeof body === \"object\" && body && \"message\" in body && typeof body.message === \"string\" ? body.message : null) ?? `Request failed (status ${res.status})`;\n      throw new RemixError(msg, {\n        exitCode: 1,\n        hint: body ? JSON.stringify(body, null, 2) : null,\n        statusCode: res.status\n      });\n    }\n    const json = await readJsonSafe(res);\n    return json ?? null;\n  }\n  async function requestBinary(path, init, opts2) {\n    if (!tokenProvider) {\n      throw new RemixError(\"API client is missing a token provider.\", {\n        exitCode: 1,\n        hint: \"Configure auth before creating the Remix API client.\"\n      });\n    }\n    const auth = await tokenProvider();\n    const url = new URL(path, config.apiUrl).toString();\n    const doFetch = async (bearer) => fetch(url, {\n      ...init,\n      signal: makeTimeoutSignal(opts2?.timeoutMs),\n      headers: {\n        Accept: \"*/*\",\n        ...init?.headers ?? {},\n        Authorization: `Bearer ${bearer}`,\n        ...apiKey ? { [CLIENT_KEY_HEADER]: apiKey } : {}\n      }\n    });\n    let res = await doFetch(auth.token);\n    if (res.status === 401 && !auth.fromEnv && auth.session?.refresh_token) {\n      const refreshed = await tokenProvider({ forceRefresh: true });\n      res = await doFetch(refreshed.token);\n    }\n    if (!res.ok) {\n      const body = await readJsonSafe(res);\n      const msg = (body && typeof body === \"object\" && body && \"message\" in body && typeof body.message === \"string\" ? body.message : null) ?? `Request failed (status ${res.status})`;\n      throw new RemixError(msg, {\n        exitCode: 1,\n        hint: body ? JSON.stringify(body, null, 2) : null,\n        statusCode: res.status\n      });\n    }\n    const contentDisposition = res.headers.get(\"content-disposition\") ?? \"\";\n    const fileNameMatch = contentDisposition.match(/filename=\\\"([^\\\"]+)\\\"/i);\n    return {\n      data: Buffer.from(await res.arrayBuffer()),\n      fileName: fileNameMatch?.[1] ?? null,\n      contentType: res.headers.get(\"content-type\")\n    };\n  }\n  return {\n    getMe: () => request(\"/v1/me\", { method: \"GET\" }),\n    listOrganizations: () => request(\"/v1/organizations\", { method: \"GET\" }),\n    getOrganization: (orgId) => request(`/v1/organizations/${encodeURIComponent(orgId)}`, { method: \"GET\" }),\n    listProjects: (params) => request(`/v1/projects${buildProjectListQuery(params)}`, { method: \"GET\" }),\n    getProject: (projectId) => request(`/v1/projects/${encodeURIComponent(projectId)}`, { method: \"GET\" }),\n    listProjectRuntimeEnv: (projectId, params) => {\n      const qs = buildRuntimeEnvQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/repo-env${suffix2}`, { method: \"GET\" });\n    },\n    setProjectRuntimeEnv: (projectId, name, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/repo-env/${encodeURIComponent(name)}`, {\n      method: \"PUT\",\n      body: JSON.stringify(payload)\n    }),\n    importProjectRuntimeEnv: (projectId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/repo-env/import`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    deleteProjectRuntimeEnv: (projectId, name, params) => {\n      const qs = buildRuntimeEnvQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/repo-env/${encodeURIComponent(name)}${suffix2}`, {\n        method: \"DELETE\"\n      });\n    },\n    resolveProjectRuntimeEnvForLocalPull: (projectId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/repo-env/resolve-local`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listProjectRuntimeTargets: (projectId, params) => {\n      const qs = buildRuntimeTargetQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/runtime-targets${suffix2}`, { method: \"GET\" });\n    },\n    detectProjectRuntimeTargets: (projectId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/runtime-targets/detect`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    setProjectRuntimeTarget: (projectId, targetId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/runtime-targets/${encodeURIComponent(targetId)}`, {\n      method: \"PUT\",\n      body: JSON.stringify(payload)\n    }),\n    deleteProjectRuntimeTarget: (projectId, targetId, params) => {\n      const qs = buildRuntimeTargetQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/runtime-targets/${encodeURIComponent(targetId)}${suffix2}`, {\n        method: \"DELETE\"\n      });\n    },\n    runAppRuntimeTarget: (appId, targetId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/runtime-targets/${encodeURIComponent(targetId)}/run`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    getAppRuntimeTargetStatus: (appId, targetId, params) => {\n      const qs = buildRuntimeTargetQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/runtime-targets/${encodeURIComponent(targetId)}/status${suffix2}`, {\n        method: \"GET\"\n      });\n    },\n    getAppRuntimeTargetLogs: (appId, targetId, params) => {\n      const qs = buildRuntimeTargetQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/runtime-targets/${encodeURIComponent(targetId)}/logs${suffix2}`, {\n        method: \"GET\"\n      });\n    },\n    stopAppRuntimeTarget: (appId, targetId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/runtime-targets/${encodeURIComponent(targetId)}/stop`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    getAppPreview: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/preview${buildAppPreviewQuery(params)}`, { method: \"GET\" }),\n    getGithubStatus: () => request(\"/v1/github/status\", { method: \"GET\" }),\n    startGithubOAuth: () => request(\"/v1/github/oauth/start\", { method: \"GET\" }),\n    getGithubInstallUrl: () => request(\"/v1/github/install-url\", { method: \"GET\" }),\n    syncGithubInstallations: () => request(\"/v1/github/installations/sync\", { method: \"POST\" }),\n    listGithubInstallations: () => request(\"/v1/github/installations\", { method: \"GET\" }),\n    listGithubRepositories: (installationId) => request(`/v1/github/installations/${encodeURIComponent(String(installationId))}/repositories`, { method: \"GET\" }),\n    linkAppGithubSource: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/github/link`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    getAppGithubPullRequest: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/github/pull-request`, { method: \"GET\" }),\n    createAppGithubPullRequest: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/github/pull-request`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    updateAppGithubPullRequest: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/github/pull-request`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    createAppShareLink: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/share-links`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    runAppSandboxCommand: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/sandbox/commands/run`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listAppSandboxCommandHistory: (appId, params) => {\n      const qs = new URLSearchParams();\n      if (params?.limit !== void 0) qs.set(\"limit\", String(params.limit));\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/sandbox/commands/history${suffix2}`, { method: \"GET\" });\n    },\n    listProjectTriggerEvents: (projectId) => request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/events`, { method: \"GET\" }),\n    listProjectTriggers: (projectId, params) => {\n      const qs = buildTriggerQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/triggers${suffix2}`, { method: \"GET\" });\n    },\n    createProjectTrigger: (projectId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/triggers`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    updateProjectTrigger: (projectId, triggerId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/${encodeURIComponent(triggerId)}`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    deleteProjectTrigger: (projectId, triggerId) => request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/${encodeURIComponent(triggerId)}`, {\n      method: \"DELETE\"\n    }),\n    resolveProjectTriggers: (projectId, params) => {\n      const qs = buildTriggerQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/resolve${suffix2}`, { method: \"GET\" });\n    },\n    runAppTrigger: (appId, triggerId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/triggers/${encodeURIComponent(triggerId)}/run`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    runAppTriggerEvent: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/triggers/run-event`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listProjectTriggerRuns: (projectId, params) => {\n      const qs = buildTriggerQuery(params);\n      const suffix2 = qs ? `?${qs}` : \"\";\n      return request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/runs${suffix2}`, { method: \"GET\" });\n    },\n    getProjectTriggerRun: (projectId, runId) => request(`/v1/projects/${encodeURIComponent(projectId)}/triggers/runs/${encodeURIComponent(runId)}`, {\n      method: \"GET\"\n    }),\n    resolveProjectBinding: (params) => {\n      const qs = new URLSearchParams();\n      if (params.repoFingerprint) qs.set(\"repoFingerprint\", params.repoFingerprint);\n      if (params.remoteUrl) qs.set(\"remoteUrl\", params.remoteUrl);\n      if (params.branchName) qs.set(\"branchName\", params.branchName);\n      return request(`/v1/projects/bindings/resolve?${qs.toString()}`, { method: \"GET\" });\n    },\n    resolveProjectLaneBinding: (params) => {\n      const qs = new URLSearchParams();\n      if (params.projectId) qs.set(\"projectId\", params.projectId);\n      if (params.repoFingerprint) qs.set(\"repoFingerprint\", params.repoFingerprint);\n      if (params.remoteUrl) qs.set(\"remoteUrl\", params.remoteUrl);\n      if (params.defaultBranch) qs.set(\"defaultBranch\", params.defaultBranch);\n      if (params.currentAppId) qs.set(\"currentAppId\", params.currentAppId);\n      if (params.upstreamAppId) qs.set(\"upstreamAppId\", params.upstreamAppId);\n      qs.set(\"branchName\", params.branchName);\n      return request(`/v1/projects/bindings/resolve-lane?${qs.toString()}`, { method: \"GET\" });\n    },\n    ensureProjectLaneBinding: (payload) => request(\"/v1/projects/bindings/ensure-lane\", { method: \"POST\", body: JSON.stringify(payload) }),\n    bootstrapFreshProjectLane: (payload) => request(\"/v1/projects/bindings/bootstrap-fresh-lane\", { method: \"POST\", body: JSON.stringify(payload) }),\n    autoEnableDeveloper: () => request(\"/v1/developer/auto-enable\", { method: \"POST\" }),\n    listClientApps: (params) => {\n      const qs = params?.orgId ? `?orgId=${encodeURIComponent(params.orgId)}` : \"\";\n      return request(`/v1/developer/client-apps${qs}`, { method: \"GET\" });\n    },\n    createClientApp: (payload) => request(\"/v1/developer/client-apps\", { method: \"POST\", body: JSON.stringify(payload) }),\n    createClientAppKey: (clientAppId, payload) => request(`/v1/developer/client-apps/${encodeURIComponent(clientAppId)}/keys`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    listApps: (params) => request(`/v1/apps${buildAppListQuery(params)}`, { method: \"GET\" }),\n    getApp: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}`, { method: \"GET\" }),\n    updateAppStatus: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/status`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    openApp: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/open`, { method: \"POST\", body: JSON.stringify(payload ?? {}) }),\n    listAppThreads: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/threads`, { method: \"GET\" }),\n    createAppThread: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/threads`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    renameAppThread: (appId, threadId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/threads/${encodeURIComponent(threadId)}`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    archiveAppThread: (appId, threadId) => request(`/v1/apps/${encodeURIComponent(appId)}/threads/${encodeURIComponent(threadId)}/archive`, {\n      method: \"POST\",\n      body: JSON.stringify({})\n    }),\n    openAppThread: (appId, threadId) => request(`/v1/apps/${encodeURIComponent(appId)}/threads/${encodeURIComponent(threadId)}/open`, {\n      method: \"POST\",\n      body: JSON.stringify({})\n    }),\n    getAppContext: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/context`, { method: \"GET\" }),\n    getAppOverview: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/overview`, { method: \"GET\" }),\n    getAppMergePreview: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/merge-preview`, { method: \"GET\" }),\n    listAppTimeline: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/timeline${buildAppTimelineQuery(params)}`, { method: \"GET\" }),\n    getAppTimelineEvent: (appId, eventId) => request(`/v1/apps/${encodeURIComponent(appId)}/timeline/${encodeURIComponent(eventId)}`, { method: \"GET\" }),\n    listAppEditQueue: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/edit-queue${buildAppEditQueueQuery(params)}`, {\n      method: \"GET\"\n    }),\n    cancelAppEditQueueItem: (appId, queueItemId) => request(`/v1/apps/${encodeURIComponent(appId)}/edit-queue/${encodeURIComponent(queueItemId)}`, {\n      method: \"DELETE\"\n    }),\n    listAppJobQueue: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/job-queue${buildAppJobQueueQuery(params)}`, { method: \"GET\" }),\n    getMergeRequest: (mrId) => request(`/v1/merge-requests/${encodeURIComponent(mrId)}`, { method: \"GET\" }),\n    presignImportUpload: (payload) => request(\"/v1/apps/import/upload/presign\", { method: \"POST\", body: JSON.stringify(payload) }),\n    importFromUpload: (payload) => request(\"/v1/apps/import/upload\", { method: \"POST\", body: JSON.stringify(payload) }),\n    presignImportUploadFirstParty: (payload) => request(\"/v1/apps/import/upload/presign/first-party\", { method: \"POST\", body: JSON.stringify(payload) }),\n    importFromUploadFirstParty: (payload) => request(\"/v1/apps/import/upload/first-party\", { method: \"POST\", body: JSON.stringify(payload) }),\n    importFromGithubFirstParty: (payload) => request(\"/v1/apps/import/github/first-party\", { method: \"POST\", body: JSON.stringify(payload) }),\n    forkApp: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/fork`, { method: \"POST\", body: JSON.stringify(payload ?? {}) }),\n    getAppHead: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/head`, { method: \"GET\" }),\n    getAppDelta: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/delta`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    downloadAppBundle: (appId) => requestBinary(`/v1/apps/${encodeURIComponent(appId)}/download.bundle`, { method: \"GET\" }),\n    createChangeStep: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listChangeSteps: (appId, params) => {\n      const qs = new URLSearchParams();\n      if (params?.limit !== void 0) qs.set(\"limit\", String(params.limit));\n      if (params?.offset !== void 0) qs.set(\"offset\", String(params.offset));\n      if (params?.idempotencyKey) qs.set(\"idempotencyKey\", params.idempotencyKey);\n      if (params?.threadId) qs.set(\"threadId\", params.threadId);\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/change-steps${suffix2}`, { method: \"GET\" });\n    },\n    createCollabTurn: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/collab-turns`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    attachCollabTurnUsage: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/collab-turns/attach-usage`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listCollabTurns: (appId, params) => {\n      const qs = new URLSearchParams();\n      if (params?.limit !== void 0) qs.set(\"limit\", String(params.limit));\n      if (params?.offset !== void 0) qs.set(\"offset\", String(params.offset));\n      if (params?.changeStepId) qs.set(\"changeStepId\", params.changeStepId);\n      if (params?.threadId) qs.set(\"threadId\", params.threadId);\n      if (params?.collabLaneId) qs.set(\"collabLaneId\", params.collabLaneId);\n      if (params?.createdAfter) qs.set(\"createdAfter\", params.createdAfter);\n      if (params?.createdBefore) qs.set(\"createdBefore\", params.createdBefore);\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/collab-turns${suffix2}`, { method: \"GET\" });\n    },\n    getCollabTurn: (appId, collabTurnId) => request(`/v1/apps/${encodeURIComponent(appId)}/collab-turns/${encodeURIComponent(collabTurnId)}`, {\n      method: \"GET\"\n    }),\n    getAgentMemorySummary: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/agent-memory/summary`, { method: \"GET\" }),\n    listAgentMemoryTimeline: (appId, params) => {\n      const qs = new URLSearchParams();\n      if (params?.limit !== void 0) qs.set(\"limit\", String(params.limit));\n      if (params?.offset !== void 0) qs.set(\"offset\", String(params.offset));\n      if (params?.createdAfter) qs.set(\"createdAfter\", params.createdAfter);\n      if (params?.createdBefore) qs.set(\"createdBefore\", params.createdBefore);\n      if (params?.threadId) qs.set(\"threadId\", params.threadId);\n      if (params?.kinds?.length) {\n        for (const kind of params.kinds) qs.append(\"kinds\", kind);\n      }\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/agent-memory/timeline${suffix2}`, { method: \"GET\" });\n    },\n    searchAgentMemory: (appId, params) => {\n      const qs = new URLSearchParams();\n      qs.set(\"q\", params.q);\n      if (params.limit !== void 0) qs.set(\"limit\", String(params.limit));\n      if (params.offset !== void 0) qs.set(\"offset\", String(params.offset));\n      if (params.createdAfter) qs.set(\"createdAfter\", params.createdAfter);\n      if (params.createdBefore) qs.set(\"createdBefore\", params.createdBefore);\n      if (params.threadId) qs.set(\"threadId\", params.threadId);\n      if (params.kinds?.length) {\n        for (const kind of params.kinds) qs.append(\"kinds\", kind);\n      }\n      return request(`/v1/apps/${encodeURIComponent(appId)}/agent-memory/search?${qs.toString()}`, { method: \"GET\" });\n    },\n    getChangeStep: (appId, changeStepId) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps/${encodeURIComponent(changeStepId)}`, { method: \"GET\" }),\n    getChangeStepDiff: (appId, changeStepId) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps/${encodeURIComponent(changeStepId)}/diff`, {\n      method: \"GET\"\n    }),\n    startChangeStepReplay: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps/replays`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    getChangeStepReplay: (appId, replayId) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps/replays/${encodeURIComponent(replayId)}`, {\n      method: \"GET\"\n    }),\n    getChangeStepReplayDiff: (appId, replayId) => request(`/v1/apps/${encodeURIComponent(appId)}/change-steps/replays/${encodeURIComponent(replayId)}/diff`, {\n      method: \"GET\"\n    }),\n    listMergeRequests: (params) => request(`/v1/merge-requests${buildMergeRequestListQuery(params)}`, { method: \"GET\" }),\n    listMergeRequestInbox: (params) => request(`/v1/merge-requests/inbox${buildMergeRequestInboxQuery(params)}`, { method: \"GET\" }),\n    openMergeRequest: (sourceAppId) => request(\"/v1/merge-requests\", { method: \"POST\", body: JSON.stringify({ sourceAppId }) }),\n    getMergeRequestReview: (mrId) => request(`/v1/merge-requests/${encodeURIComponent(mrId)}/review`, { method: \"GET\" }),\n    updateMergeRequest: (mrId, payload) => request(`/v1/merge-requests/${encodeURIComponent(mrId)}`, { method: \"PATCH\", body: JSON.stringify(payload) }),\n    createOrganizationInvite: (orgId, payload) => request(`/v1/organizations/${encodeURIComponent(orgId)}/invitations`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    createProjectInvite: (projectId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/invitations`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    createAppInvite: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/invitations`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    listOrganizationMembers: (orgId, params) => request(`/v1/organizations/${encodeURIComponent(orgId)}/members${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    updateOrganizationMember: (orgId, userId, payload) => request(`/v1/organizations/${encodeURIComponent(orgId)}/members/${encodeURIComponent(userId)}`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    listProjectMembers: (projectId, params) => request(`/v1/projects/${encodeURIComponent(projectId)}/members${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    updateProjectMember: (projectId, userId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(userId)}`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    listAppMembers: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/members${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    updateAppMember: (appId, userId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/members/${encodeURIComponent(userId)}`, {\n      method: \"PATCH\",\n      body: JSON.stringify(payload)\n    }),\n    listOrganizationInvites: (orgId, params) => request(`/v1/organizations/${encodeURIComponent(orgId)}/invitations${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    listProjectInvites: (projectId, params) => request(`/v1/projects/${encodeURIComponent(projectId)}/invitations${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    listAppInvites: (appId, params) => request(`/v1/apps/${encodeURIComponent(appId)}/invitations${buildPaginationQuery(params)}`, { method: \"GET\" }),\n    resendOrganizationInvite: (orgId, inviteId, payload) => request(`/v1/organizations/${encodeURIComponent(orgId)}/invitations/${encodeURIComponent(inviteId)}/resend`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    resendProjectInvite: (projectId, inviteId, payload) => request(`/v1/projects/${encodeURIComponent(projectId)}/invitations/${encodeURIComponent(inviteId)}/resend`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    resendAppInvite: (appId, inviteId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/invitations/${encodeURIComponent(inviteId)}/resend`, {\n      method: \"POST\",\n      body: JSON.stringify(payload ?? {})\n    }),\n    revokeOrganizationInvite: (orgId, inviteId) => request(`/v1/organizations/${encodeURIComponent(orgId)}/invitations/${encodeURIComponent(inviteId)}`, {\n      method: \"DELETE\"\n    }),\n    revokeProjectInvite: (projectId, inviteId) => request(`/v1/projects/${encodeURIComponent(projectId)}/invitations/${encodeURIComponent(inviteId)}`, {\n      method: \"DELETE\"\n    }),\n    revokeAppInvite: (appId, inviteId) => request(`/v1/apps/${encodeURIComponent(appId)}/invitations/${encodeURIComponent(inviteId)}`, {\n      method: \"DELETE\"\n    }),\n    acceptInvitation: (payload) => request(\"/v1/invitations/accept\", { method: \"POST\", body: JSON.stringify(payload) }),\n    listMyInvitations: () => request(\"/v1/me/invitations\", { method: \"GET\" }),\n    acceptMyInvitation: (scope, inviteId) => request(\n      `/v1/me/invitations/${encodeURIComponent(scope)}/${encodeURIComponent(inviteId)}/accept`,\n      { method: \"POST\", body: JSON.stringify({}) }\n    ),\n    declineMyInvitation: (scope, inviteId) => request(\n      `/v1/me/invitations/${encodeURIComponent(scope)}/${encodeURIComponent(inviteId)}/decline`,\n      { method: \"POST\", body: JSON.stringify({}) }\n    ),\n    syncUpstreamApp: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/sync-upstream`, {\n      method: \"POST\",\n      body: JSON.stringify({})\n    }),\n    preflightAppReconcile: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/reconcile/preflight`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    startAppReconcile: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/reconcile/start`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    getAppReconcile: (appId, reconcileId) => request(`/v1/apps/${encodeURIComponent(appId)}/reconcile/${encodeURIComponent(reconcileId)}`, { method: \"GET\" }),\n    downloadAppReconcileBundle: (appId, reconcileId) => requestBinary(`/v1/apps/${encodeURIComponent(appId)}/reconcile/${encodeURIComponent(reconcileId)}/download.bundle`, {\n      method: \"GET\"\n    }),\n    syncLocalApp: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/sync-local`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    reportLocalCheckoutState: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/local-alignment/checkout-state`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    getLatestLocalCheckoutState: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/local-alignment/checkout-state/latest`, { method: \"GET\" }),\n    recordLocalAlignmentEvent: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/local-alignment/events`, {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    initiateBundle: (appId, payload) => request(`/v1/apps/${encodeURIComponent(appId)}/bundles`, { method: \"POST\", body: JSON.stringify(payload) }),\n    getBundle: (appId, bundleId) => request(`/v1/apps/${encodeURIComponent(appId)}/bundles/${encodeURIComponent(bundleId)}`, { method: \"GET\" }),\n    getBundleDownloadUrl: (appId, bundleId, options) => request(\n      `/v1/apps/${encodeURIComponent(appId)}/bundles/${encodeURIComponent(bundleId)}/download?redirect=${options?.redirect ?? false}`,\n      { method: \"GET\" }\n    ),\n    getBundleAssetsDownloadUrl: (appId, bundleId, options) => {\n      const qs = new URLSearchParams({\n        redirect: String(options?.redirect ?? false),\n        kind: options?.kind ?? \"metro-assets\"\n      });\n      return request(\n        `/v1/apps/${encodeURIComponent(appId)}/bundles/${encodeURIComponent(bundleId)}/assets/download?${qs.toString()}`,\n        { method: \"GET\" }\n      );\n    },\n    listAgentRuns: (appId, params) => {\n      const qs = new URLSearchParams();\n      if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n      if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n      if (params?.status) qs.set(\"status\", params.status);\n      if (params?.threadId) qs.set(\"threadId\", params.threadId);\n      if (params?.currentPhase) qs.set(\"currentPhase\", params.currentPhase);\n      if (params?.createdAfter) qs.set(\"createdAfter\", params.createdAfter);\n      if (params?.createdBefore) qs.set(\"createdBefore\", params.createdBefore);\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/agent-runs${suffix2}`, { method: \"GET\" });\n    },\n    getAgentRun: (appId, runId) => request(`/v1/apps/${encodeURIComponent(appId)}/agent-runs/${encodeURIComponent(runId)}`, { method: \"GET\" }),\n    listAgentRunEvents: (appId, runId, params) => {\n      const qs = new URLSearchParams();\n      if (typeof params?.limit === \"number\") qs.set(\"limit\", String(params.limit));\n      if (typeof params?.offset === \"number\") qs.set(\"offset\", String(params.offset));\n      if (params?.createdAfter) qs.set(\"createdAfter\", params.createdAfter);\n      if (params?.createdBefore) qs.set(\"createdBefore\", params.createdBefore);\n      const suffix2 = qs.toString() ? `?${qs.toString()}` : \"\";\n      return request(`/v1/apps/${encodeURIComponent(appId)}/agent-runs/${encodeURIComponent(runId)}/events${suffix2}`, {\n        method: \"GET\"\n      });\n    },\n    getSandboxStatus: (appId) => request(`/v1/apps/${encodeURIComponent(appId)}/sandbox/status`, { method: \"GET\" }),\n    editAgentApp: (payload) => request(\"/v1/agent/editApp\", {\n      method: \"POST\",\n      body: JSON.stringify(payload)\n    }),\n    importHistory: async (payload) => {\n      const res = await request(\"/v1/history/import\", {\n        method: \"POST\",\n        body: JSON.stringify(payload)\n      });\n      const envelope = res;\n      if (!envelope || typeof envelope !== \"object\" || !envelope.responseObject) {\n        throw new RemixError(\"Malformed importHistory response from server.\", {\n          exitCode: 1,\n          hint: \"Expected `{ responseObject: ImportHistoryResponse }`.\"\n        });\n      }\n      return envelope.responseObject;\n    }\n  };\n}\n\nexport {\n  createApiClient\n};\n","import {\n  createApiClient\n} from \"./chunk-COO3TIHW.js\";\nimport {\n  RemixAuthContinuationError,\n  createDefaultRefreshLock,\n  createLocalSessionStore,\n  createRefreshLock,\n  createRemixAuthHelpers,\n  createStoredSessionTokenProvider,\n  defaultSessionFilePath,\n  isInvalidGrantError,\n  isNetworkError,\n  shouldRefreshSoon,\n  storedSessionSchema\n} from \"./chunk-GVFTISVO.js\";\nimport {\n  configSchema,\n  resolveConfig\n} from \"./chunk-62JBEMJH.js\";\nimport \"./chunk-4OCNZHHR.js\";\nimport {\n  REMIX_ERROR_CODES\n} from \"./chunk-GC2MOT3U.js\";\nimport {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\nexport {\n  RemixError as CliError,\n  REMIX_ERROR_CODES,\n  RemixAuthContinuationError,\n  RemixError,\n  configSchema,\n  createApiClient,\n  createDefaultRefreshLock,\n  createLocalSessionStore,\n  createRefreshLock,\n  createRemixAuthHelpers,\n  createStoredSessionTokenProvider,\n  defaultSessionFilePath,\n  isInvalidGrantError,\n  isNetworkError,\n  resolveConfig,\n  shouldRefreshSoon,\n  storedSessionSchema\n};\n","import {\n  createApiClient as createCoreApiClient,\n  createDefaultRefreshLock,\n  createRemixAuthHelpers,\n  createStoredSessionTokenProvider,\n  type ApiClient,\n  type AppReconcileResponse,\n  type Bundle,\n  type BundlePlatform,\n  type BundleStatus,\n  type InitiateBundleRequest,\n  type ReconcilePreflightResponse,\n  type SyncLocalResponse,\n  type SyncUpstreamResponse,\n} from \"@remixhq/core\";\n\nimport type { CliConfig } from \"../config/config.js\";\nimport { getSession, setSession } from \"../services/sessionStore.js\";\n\nexport type {\n  ApiClient,\n  AppReconcileResponse,\n  Bundle,\n  BundlePlatform,\n  BundleStatus,\n  InitiateBundleRequest,\n  ReconcilePreflightResponse,\n  SyncLocalResponse,\n  SyncUpstreamResponse,\n};\n\nexport function createApiClient(config: CliConfig, opts?: { apiKey?: string | null }): ApiClient {\n  const tokenProvider = createStoredSessionTokenProvider({\n    config,\n    sessionStore: { getSession, setSession },\n    refreshStoredSession: async ({ config: refreshConfig, session }) => {\n      const auth = createRemixAuthHelpers(refreshConfig);\n      return auth.refreshWithStoredSession({ session });\n    },\n    // Cross-process refresh lock: the desktop spawns CLI subprocesses\n    // for the finalize drainer at the same time the user may have\n    // Terminal CLIs and the MCP plugin host alive. Without a shared\n    // lock, two of them can race on the rotation and one ends up with\n    // a permanently-dead refresh token. The lock file lives next to\n    // the session file in xdg config.\n    withRefreshLock: createDefaultRefreshLock(),\n  });\n\n  return createCoreApiClient(config, {\n    apiKey: opts?.apiKey,\n    tokenProvider,\n  });\n}\n\n","export function isInteractive(): boolean {\n  return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n","import prompts from \"prompts\";\n\nimport {\n  RemixAuthContinuationError,\n  type RemixAuthHelpers,\n  type WorkosAuthChallenge,\n  type WorkosContinuationInput,\n} from \"../clients/auth.js\";\nimport { CliError } from \"../errors/cliError.js\";\n\nfunction isContinuationError(error: unknown): error is RemixAuthContinuationError {\n  return error instanceof RemixAuthContinuationError;\n}\n\nfunction challengeTitle(challenge: WorkosAuthChallenge): string {\n  if (challenge.code === \"email_verification_required\") return \"Email verification is required.\";\n  if (challenge.code === \"organization_selection_required\") return \"Organization selection is required.\";\n  if (challenge.code === \"mfa_challenge\") return \"Multi-factor authentication is required.\";\n  if (challenge.code === \"mfa_enrollment\") return \"MFA enrollment is required.\";\n  if (challenge.code === \"organization_authentication_methods_required\") {\n    return \"A different organization authentication method is required.\";\n  }\n  if (challenge.code === \"sso_required\") return \"SSO is required for this account.\";\n  return challenge.message || \"Authentication continuation is required.\";\n}\n\nfunction unsupportedChallengeError(challenge: WorkosAuthChallenge): CliError {\n  return new CliError(challengeTitle(challenge), {\n    exitCode: 1,\n    hint: \"Restart `remix login` and complete the required step in WorkOS/AuthKit.\",\n  });\n}\n\nasync function promptForContinuation(challenge: WorkosAuthChallenge): Promise<WorkosContinuationInput> {\n  const pendingAuthenticationToken = challenge.pendingAuthenticationToken?.trim();\n  if (!pendingAuthenticationToken) {\n    throw new CliError(\"Authentication challenge expired.\", {\n      exitCode: 1,\n      hint: \"Run `remix login` again.\",\n    });\n  }\n\n  if (challenge.code === \"email_verification_required\") {\n    const response = await prompts({\n      type: \"text\",\n      name: \"code\",\n      message: `Enter the verification code sent to ${challenge.email ?? \"your email\"}:`,\n      validate: (value) => String(value).trim().length > 0 || \"Verification code is required.\",\n    });\n    const code = typeof response.code === \"string\" ? response.code.trim() : \"\";\n    if (!code) throw new CliError(\"Verification code is required.\", { exitCode: 2 });\n    return { type: \"email_verification\", pendingAuthenticationToken, code };\n  }\n\n  if (challenge.code === \"organization_selection_required\") {\n    const organizations = challenge.organizations ?? [];\n    if (organizations.length === 0) throw unsupportedChallengeError(challenge);\n    const response = await prompts({\n      type: \"select\",\n      name: \"organizationId\",\n      message: \"Choose an organization:\",\n      choices: organizations.map((org) => ({ title: org.name ?? org.id, value: org.id })),\n    });\n    const organizationId = typeof response.organizationId === \"string\" ? response.organizationId.trim() : \"\";\n    if (!organizationId) throw new CliError(\"Organization selection is required.\", { exitCode: 2 });\n    return { type: \"organization_selection\", pendingAuthenticationToken, organizationId };\n  }\n\n  if (challenge.code === \"mfa_challenge\") {\n    const totp = challenge.authenticationFactors?.find(\n      (factor) => factor.type === \"totp\" && factor.authenticationChallengeId,\n    );\n    if (!totp?.authenticationChallengeId) throw unsupportedChallengeError(challenge);\n    const response = await prompts({\n      type: \"text\",\n      name: \"code\",\n      message: \"Enter your authenticator code:\",\n      validate: (value) => String(value).trim().length > 0 || \"Authenticator code is required.\",\n    });\n    const code = typeof response.code === \"string\" ? response.code.trim() : \"\";\n    if (!code) throw new CliError(\"Authenticator code is required.\", { exitCode: 2 });\n    return {\n      type: \"mfa_totp\",\n      pendingAuthenticationToken,\n      authenticationChallengeId: totp.authenticationChallengeId,\n      code,\n    };\n  }\n\n  throw unsupportedChallengeError(challenge);\n}\n\nexport async function exchangeCodeWithContinuations(params: {\n  auth: RemixAuthHelpers;\n  code: string;\n  codeVerifier?: string;\n  interactive: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  try {\n    return await params.auth.exchangeCode({ code: params.code, codeVerifier: params.codeVerifier });\n  } catch (error) {\n    if (!isContinuationError(error)) throw error;\n    let challenge = error.challenge;\n    while (true) {\n      if (params.json) {\n        console.log(JSON.stringify({ success: false, challenge }, null, 2));\n        throw new CliError(\"Authentication continuation required.\", { exitCode: 1 });\n      }\n      if (!params.interactive || params.yes) {\n        throw new CliError(challengeTitle(challenge), {\n          exitCode: 1,\n          hint: \"Run `remix login` in an interactive terminal to continue sign-in.\",\n        });\n      }\n      const input = await promptForContinuation(challenge);\n      try {\n        return await params.auth.continueAuthentication(input);\n      } catch (nextError) {\n        if (!isContinuationError(nextError)) throw nextError;\n        challenge = nextError.challenge;\n      }\n    }\n  }\n}\n","import type { Command } from \"commander\";\nimport pc from \"picocolors\";\n\nimport { resolveConfig } from \"../config/config.js\";\nimport { clearSession, getSession } from \"../services/sessionStore.js\";\n\nfunction activeEnvTokenName(): \"REMIX_ACCESS_TOKEN\" | \"COMERGE_ACCESS_TOKEN\" | null {\n  if (typeof process.env.REMIX_ACCESS_TOKEN === \"string\" && process.env.REMIX_ACCESS_TOKEN.trim().length > 0) {\n    return \"REMIX_ACCESS_TOKEN\";\n  }\n  if (typeof process.env.COMERGE_ACCESS_TOKEN === \"string\" && process.env.COMERGE_ACCESS_TOKEN.trim().length > 0) {\n    return \"COMERGE_ACCESS_TOKEN\";\n  }\n  return null;\n}\n\nasync function revokeStoredServerSession(): Promise<\"revoked\" | \"skipped\"> {\n  const session = await getSession();\n  if (!session?.access_token) return \"skipped\";\n  const config = await resolveConfig({ yes: true });\n  const apiUrl = String(config.apiUrl).replace(/\\/+$/, \"\");\n  const response = await fetch(`${apiUrl}/v1/auth/logout`, {\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${session.access_token}`,\n      \"content-type\": \"application/json\",\n    },\n    body: JSON.stringify({ refreshToken: session.refresh_token }),\n  });\n  if (!response.ok) {\n    throw new Error(`Failed to revoke server session (status ${response.status}).`);\n  }\n  return \"revoked\";\n}\n\nexport function registerLogoutCommand(program: Command) {\n  program\n    .command(\"logout\")\n    .description(\"Clear the local Remix session\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      let revokeStatus: \"revoked\" | \"skipped\";\n      let revokeError: Error | null = null;\n      try {\n        revokeStatus = await revokeStoredServerSession();\n      } catch (error) {\n        revokeStatus = \"skipped\";\n        revokeError = error instanceof Error ? error : new Error(\"Failed to revoke server session.\");\n      }\n      await clearSession();\n      const envTokenName = activeEnvTokenName();\n      if (opts.json) {\n        console.log(JSON.stringify({ success: !revokeError, cleared: true, revoked: revokeStatus === \"revoked\", envTokenPresent: Boolean(envTokenName), ...(revokeError ? { message: revokeError.message } : {}) }, null, 2));\n        if (revokeError) process.exitCode = 1;\n        return;\n      }\n      console.log(pc.green(\"Signed out.\"));\n      if (revokeError) {\n        console.log(pc.yellow(`Warning: ${revokeError.message}`));\n      }\n      if (envTokenName) {\n        console.log(pc.dim(`Note: ${envTokenName} is set and will still authenticate requests.`));\n      }\n    });\n}\n\n\n","import type { AppContext } from \"@remixhq/core\";\nimport pc from \"picocolors\";\n\nimport {\n  type JsonRecord,\n  createAuthedApi,\n  isBackendForbidden,\n  isBackendNotFound,\n  loadBindingContext,\n  resolveSelfRolesFromAppContext,\n  unwrapResponseObject,\n} from \"./serviceHelpers.js\";\n\nexport type WhoamiResult = {\n  user: {\n    id: string | null;\n    name: string | null;\n    email: string | null;\n    avatar: string | null;\n    organizationId: string | null;\n    roles: ReturnType<typeof resolveSelfRolesFromAppContext>;\n  };\n  binding:\n    | ({\n        repoRoot: string | null;\n        projectId: string | null;\n        organizationId: string | null;\n        visibility: string | null;\n        accessPath: string | null;\n        readableScopes: AppContext[\"readableScopes\"] | null;\n        projectName: string | null;\n        appName: string | null;\n      } & JsonRecord)\n    | null;\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\nfunction printWarnings(warnings: string[]) {\n  for (const warning of warnings) {\n    console.log(pc.yellow(warning));\n  }\n}\n\nexport async function whoami(params: { cwd?: string; json: boolean; yes: boolean }): Promise<WhoamiResult> {\n  const api = await createAuthedApi(params);\n  const bindingContext = await loadBindingContext(params.cwd);\n  const me = unwrapResponseObject<JsonRecord>(await api.getMe(), \"current user\");\n  const warnings: string[] = bindingContext.binding ? [] : [\"No local Remix binding was detected for the provided cwd.\"];\n\n  let boundAppContext: AppContext | null = null;\n  let boundProject: JsonRecord | null = null;\n  let boundApp: JsonRecord | null = null;\n\n  if (bindingContext.binding) {\n    try {\n      boundAppContext = unwrapResponseObject<AppContext>(await api.getAppContext(bindingContext.binding.currentAppId), \"bound app context\");\n    } catch (error) {\n      if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n      warnings.push(\n        \"The bound app context could not be loaded. The local binding may be stale, or the current user may no longer be able to read that app.\",\n      );\n    }\n\n    try {\n      boundApp = unwrapResponseObject<JsonRecord>(await api.getApp(bindingContext.binding.currentAppId), \"app\");\n    } catch (error) {\n      if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n      warnings.push(\"The bound app metadata could not be loaded for the current user.\");\n    }\n\n    if (boundAppContext?.readableScopes.project) {\n      try {\n        boundProject = unwrapResponseObject<JsonRecord>(await api.getProject(boundAppContext.projectId), \"project\");\n      } catch (error) {\n        if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n        warnings.push(\"The bound app is readable, but its project metadata is not currently readable to the current user.\");\n      }\n    } else if (boundAppContext) {\n      warnings.push(\"The bound app is readable, but its project/workspace is not readable to the current user.\");\n    }\n  }\n\n  const roles = resolveSelfRolesFromAppContext(boundAppContext);\n  const result: WhoamiResult = {\n    user: {\n      id: typeof me.id === \"string\" ? me.id : null,\n      name: typeof me.name === \"string\" ? me.name : null,\n      email: typeof me.email === \"string\" ? me.email : null,\n      avatar: typeof me.avatar === \"string\" ? me.avatar : null,\n      organizationId: typeof me.organizationId === \"string\" ? me.organizationId : null,\n      roles,\n    },\n    binding:\n      bindingContext.binding == null\n        ? null\n        : {\n            repoRoot: bindingContext.repoRoot,\n            ...bindingContext.binding,\n            projectId: boundAppContext?.projectId ?? bindingContext.binding.projectId,\n            organizationId: boundAppContext?.organizationId ?? null,\n            visibility: boundAppContext?.visibility ?? null,\n            accessPath: boundAppContext?.accessPath ?? null,\n            readableScopes: boundAppContext?.readableScopes ?? null,\n            projectName: typeof boundProject?.name === \"string\" ? boundProject.name : null,\n            appName: typeof boundApp?.name === \"string\" ? boundApp.name : null,\n          },\n    warnings,\n    suggestedNextSteps: bindingContext.binding\n      ? [\"Run `remix access debug` when you need to explain repository binding or membership issues in this workspace.\"]\n      : [\"Run `remix directory organizations list` to inspect visible tenancy context, or `remix collab init` in a repository to create a local binding.\"],\n  };\n\n  if (!params.json) {\n    const label = result.user.email ?? result.user.name ?? result.user.id ?? \"unknown\";\n    console.log(pc.green(`Signed in as ${label}.`));\n    console.log(`userId=${result.user.id ?? \"unknown\"} orgId=${result.user.organizationId ?? \"none\"}`);\n    console.log(\n      `roles org=${result.user.roles.organizationRole ?? \"none\"} project=${result.user.roles.projectRole ?? \"none\"} app=${result.user.roles.appRole ?? \"none\"} source=${result.user.roles.appAccessSource}`,\n    );\n\n    console.log(\"\");\n    console.log(pc.bold(\"Binding\"));\n    if (!result.binding) {\n      console.log(\"bound=no\");\n    } else {\n      console.log(`bound=yes repoRoot=${result.binding.repoRoot ?? \"unknown\"}`);\n      console.log(`appId=${result.binding.currentAppId} appName=${result.binding.appName ?? \"unknown\"}`);\n      console.log(`projectId=${result.binding.projectId ?? \"unknown\"} projectName=${result.binding.projectName ?? \"unknown\"}`);\n      console.log(`organizationId=${result.binding.organizationId ?? \"unknown\"} visibility=${result.binding.visibility ?? \"unknown\"}`);\n      console.log(`accessPath=${result.binding.accessPath ?? \"unknown\"}`);\n      if (result.binding.readableScopes) {\n        console.log(\n          `readableScopes app=yes project=${result.binding.readableScopes.project ? \"yes\" : \"no\"} organization=${\n            result.binding.readableScopes.organization ? \"yes\" : \"no\"\n          }`,\n        );\n      }\n    }\n\n    if (result.warnings.length > 0) {\n      console.log(\"\");\n      printWarnings(result.warnings);\n    }\n  }\n\n  return result;\n}\n","import {\n  REMIX_ERROR_CODES\n} from \"./chunk-GC2MOT3U.js\";\nimport {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/infrastructure/repo/gitRepo.ts\nimport fs from \"fs/promises\";\nimport { createHash } from \"crypto\";\nimport os from \"os\";\nimport path from \"path\";\n\n// src/infrastructure/git/gitAdapter.ts\nimport { execa } from \"execa\";\nfunction createGitCommandPlan(params) {\n  return {\n    command: \"git\",\n    args: [...params.args],\n    cwd: params.cwd,\n    ...params.env ? { env: params.env } : {},\n    ...params.timeoutMs !== void 0 ? { timeoutMs: params.timeoutMs } : {},\n    ...params.maxBuffer !== void 0 ? { maxBuffer: params.maxBuffer } : {},\n    ...params.stripFinalNewline !== void 0 ? { stripFinalNewline: params.stripFinalNewline } : {},\n    ...params.reject !== void 0 ? { reject: params.reject } : {},\n    ...params.stderr !== void 0 ? { stderr: params.stderr } : {}\n  };\n}\nfunction createSystemGitAdapter() {\n  return {\n    async run(plan) {\n      const res = await execa(plan.command, plan.args, {\n        cwd: plan.cwd,\n        reject: plan.reject ?? false,\n        stderr: plan.stderr ?? \"pipe\",\n        ...plan.env ? { env: plan.env } : {},\n        ...plan.timeoutMs !== void 0 ? { timeout: plan.timeoutMs } : {},\n        ...plan.maxBuffer !== void 0 ? { maxBuffer: plan.maxBuffer } : {},\n        ...plan.stripFinalNewline !== void 0 ? { stripFinalNewline: plan.stripFinalNewline } : {}\n      });\n      return {\n        exitCode: res.exitCode ?? -1,\n        stdout: String(res.stdout ?? \"\"),\n        stderr: String(res.stderr ?? \"\"),\n        timedOut: res.timedOut === true\n      };\n    }\n  };\n}\n\n// src/infrastructure/repo/gitRepo.ts\nvar GIT_REMOTE_PROTOCOL_RE = /^(https?|ssh):\\/\\//i;\nvar SCP_LIKE_GIT_REMOTE_RE = /^(?<user>[^@\\s]+)@(?<host>[^:\\s]+):(?<path>[^\\\\\\s]+)$/;\nvar CANONICAL_GIT_REMOTE_RE = /^(?<host>(?:localhost|[a-z0-9.-]+))\\/(?<path>[^\\\\\\s]+)$/i;\nasync function runGit(args, cwd) {\n  const res = await createSystemGitAdapter().run(createGitCommandPlan({ args, cwd, reject: true, stderr: \"ignore\" }));\n  return String(res.stdout || \"\").trim();\n}\nasync function runGitWithEnv(args, cwd, env) {\n  const res = await createSystemGitAdapter().run(createGitCommandPlan({ args, cwd, env, reject: true, stderr: \"ignore\" }));\n  return String(res.stdout || \"\").trim();\n}\nasync function runGitRaw(args, cwd) {\n  const res = await createSystemGitAdapter().run(createGitCommandPlan({ args, cwd, stripFinalNewline: false, reject: true, stderr: \"ignore\" }));\n  return String(res.stdout || \"\");\n}\nasync function runGitRawWithEnv(args, cwd, env) {\n  const res = await createSystemGitAdapter().run(createGitCommandPlan({ args, cwd, env, stripFinalNewline: false, reject: true, stderr: \"ignore\" }));\n  return String(res.stdout || \"\");\n}\nasync function runGitDetailed(args, cwd) {\n  const res = await createSystemGitAdapter().run(createGitCommandPlan({ args, cwd }));\n  return {\n    exitCode: res.exitCode,\n    stdout: String(res.stdout || \"\"),\n    stderr: String(res.stderr || \"\")\n  };\n}\nfunction cleanRepoPath(value) {\n  return value.trim().replace(/^\\/+/, \"\").replace(/\\/+$/, \"\").replace(/\\.git$/i, \"\");\n}\nfunction normalizeGitRemote(remote) {\n  const raw = String(remote ?? \"\").trim();\n  if (!raw) return null;\n  const canonicalMatch = raw.match(CANONICAL_GIT_REMOTE_RE);\n  if (canonicalMatch?.groups?.host && canonicalMatch.groups.path) {\n    const repoPath = cleanRepoPath(canonicalMatch.groups.path);\n    if (!repoPath) return null;\n    return `${canonicalMatch.groups.host}/${repoPath}`.toLowerCase();\n  }\n  if (GIT_REMOTE_PROTOCOL_RE.test(raw)) {\n    try {\n      const url = new URL(raw);\n      const repoPath = cleanRepoPath(url.pathname);\n      if (!url.hostname || !repoPath) return null;\n      return `${url.hostname}/${repoPath}`.toLowerCase();\n    } catch {\n      return null;\n    }\n  }\n  const scpMatch = raw.match(SCP_LIKE_GIT_REMOTE_RE);\n  if (scpMatch?.groups?.host && scpMatch.groups.path) {\n    const repoPath = cleanRepoPath(scpMatch.groups.path);\n    if (!repoPath) return null;\n    return `${scpMatch.groups.host}/${repoPath}`.toLowerCase();\n  }\n  return null;\n}\nfunction sanitizeRefFragment(value) {\n  return value.trim().replace(/[^A-Za-z0-9._/-]+/g, \"-\").replace(/\\/{2,}/g, \"/\").replace(/^\\/+|\\/+$/g, \"\").replace(/^-+|-+$/g, \"\").slice(0, 120);\n}\nfunction normalizeRepoRelativePath(value) {\n  const normalized = path.posix.normalize(value.replace(/\\\\/g, \"/\").trim());\n  if (!normalized || normalized === \".\" || normalized === \"..\" || normalized.startsWith(\"../\") || path.posix.isAbsolute(normalized)) {\n    throw new RemixError(\"Git returned an invalid repository-relative path.\", {\n      exitCode: 1,\n      hint: `Path: ${value}`\n    });\n  }\n  return normalized;\n}\nfunction sha256Hex(value) {\n  return createHash(\"sha256\").update(value).digest(\"hex\");\n}\nfunction resolveGitReportedPath(cwd, reportedPath) {\n  const value = reportedPath.trim();\n  if (!value) {\n    throw new RemixError(\"Git returned an empty internal path.\", { exitCode: 1 });\n  }\n  return path.isAbsolute(value) ? value : path.resolve(cwd, value);\n}\nfunction parseGitNameStatusZ(stdout) {\n  const tokens = stdout.split(\"\\0\");\n  const entries = [];\n  for (let i = 0; i < tokens.length; i += 1) {\n    const rawToken = tokens[i];\n    if (!rawToken) continue;\n    let status = rawToken;\n    let inlinePath = null;\n    const tabIdx = rawToken.indexOf(\"\t\");\n    if (tabIdx >= 0) {\n      status = rawToken.slice(0, tabIdx);\n      inlinePath = rawToken.slice(tabIdx + 1) || null;\n    }\n    const kind = status[0]?.toUpperCase() ?? \"\";\n    if (kind === \"R\" || kind === \"C\") {\n      const oldPath = inlinePath ?? tokens[++i] ?? \"\";\n      const newPath = tokens[++i] ?? \"\";\n      if (!newPath) continue;\n      entries.push({\n        status,\n        path: normalizeRepoRelativePath(newPath),\n        oldPath: oldPath ? normalizeRepoRelativePath(oldPath) : null\n      });\n      continue;\n    }\n    const nextPath = inlinePath ?? tokens[++i] ?? \"\";\n    if (!nextPath) continue;\n    entries.push({\n      status,\n      path: normalizeRepoRelativePath(nextPath),\n      oldPath: null\n    });\n  }\n  return entries;\n}\nfunction buildStagePlan(entries) {\n  const updatePaths = /* @__PURE__ */ new Set();\n  const addPaths = /* @__PURE__ */ new Set();\n  for (const entry of entries) {\n    const kind = entry.status[0]?.toUpperCase() ?? \"\";\n    if (kind === \"A\" || kind === \"C\") {\n      addPaths.add(entry.path);\n      continue;\n    }\n    if (kind === \"R\") {\n      if (entry.oldPath) updatePaths.add(entry.oldPath);\n      addPaths.add(entry.path);\n      continue;\n    }\n    updatePaths.add(entry.path);\n  }\n  const expectedPaths = /* @__PURE__ */ new Set([...updatePaths, ...addPaths]);\n  return {\n    updatePaths: Array.from(updatePaths).sort(),\n    addPaths: Array.from(addPaths).sort(),\n    expectedPaths: Array.from(expectedPaths).sort()\n  };\n}\nasync function findGitRoot(startDir) {\n  try {\n    const root = await runGit([\"rev-parse\", \"--show-toplevel\"], startDir);\n    if (!root) throw new Error(\"empty\");\n    return root;\n  } catch {\n    throw new RemixError(\"Not inside a git repository.\", {\n      exitCode: 2,\n      hint: \"Run this command from the root of the repository or one of its subdirectories.\"\n    });\n  }\n}\nasync function getAbsoluteGitDir(cwd) {\n  try {\n    const gitDir = await runGit([\"rev-parse\", \"--absolute-git-dir\"], cwd);\n    return resolveGitReportedPath(cwd, gitDir);\n  } catch {\n    throw new RemixError(\"Failed to resolve the git directory.\", {\n      exitCode: 1,\n      hint: \"Ensure the current working directory is inside a valid git repository.\"\n    });\n  }\n}\nasync function getGitCommonDir(cwd) {\n  try {\n    const commonDir = await runGit([\"rev-parse\", \"--git-common-dir\"], cwd);\n    return resolveGitReportedPath(cwd, commonDir);\n  } catch {\n    throw new RemixError(\"Failed to resolve the git common directory.\", {\n      exitCode: 1,\n      hint: \"Ensure the current working directory is inside a valid git repository.\"\n    });\n  }\n}\nasync function getGitPath(cwd, relativePath) {\n  try {\n    const gitPath = await runGit([\"rev-parse\", \"--git-path\", relativePath], cwd);\n    return resolveGitReportedPath(cwd, gitPath);\n  } catch {\n    throw new RemixError(\"Failed to resolve a git-managed path.\", {\n      exitCode: 1,\n      hint: `Path: ${relativePath}`\n    });\n  }\n}\nasync function getCurrentBranch(cwd) {\n  try {\n    const branch = await runGit([\"branch\", \"--show-current\"], cwd);\n    return branch || null;\n  } catch {\n    return null;\n  }\n}\nasync function checkoutLocalBranch(cwd, branchName) {\n  const normalized = sanitizeRefFragment(branchName);\n  if (!normalized) {\n    throw new RemixError(\"Preferred local branch name is invalid.\", {\n      exitCode: 2,\n      hint: `Branch: ${branchName}`\n    });\n  }\n  const res = await runGitDetailed([\"checkout\", \"-B\", normalized], cwd);\n  if (res.exitCode !== 0) {\n    const detail = [res.stderr.trim(), res.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to prepare the preferred local branch.\", {\n      exitCode: 1,\n      hint: detail || `Git could not switch the checkout to ${normalized}.`\n    });\n  }\n  return normalized;\n}\nasync function getRemoteOriginUrl(cwd) {\n  try {\n    const url = await runGit([\"config\", \"--get\", \"remote.origin.url\"], cwd);\n    return url || null;\n  } catch {\n    return null;\n  }\n}\nasync function setRemoteOriginUrl(cwd, remoteUrl) {\n  const normalized = String(remoteUrl ?? \"\").trim();\n  if (!normalized) return;\n  const existing = await runGitDetailed([\"remote\", \"get-url\", \"origin\"], cwd);\n  if (existing.exitCode === 0) {\n    const setUrl = await runGitDetailed([\"remote\", \"set-url\", \"origin\", normalized], cwd);\n    if (setUrl.exitCode !== 0) {\n      const detail = [setUrl.stderr.trim(), setUrl.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n      throw new RemixError(\"Failed to update the local git origin remote.\", {\n        exitCode: 1,\n        hint: detail || normalized\n      });\n    }\n    return;\n  }\n  const addRemote = await runGitDetailed([\"remote\", \"add\", \"origin\", normalized], cwd);\n  if (addRemote.exitCode !== 0) {\n    const detail = [addRemote.stderr.trim(), addRemote.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to write the local git origin remote.\", {\n      exitCode: 1,\n      hint: detail || normalized\n    });\n  }\n}\nasync function getDefaultBranch(cwd) {\n  try {\n    const ref = await runGit([\"symbolic-ref\", \"refs/remotes/origin/HEAD\"], cwd);\n    if (!ref) return null;\n    const suffix = ref.replace(/^refs\\/remotes\\/origin\\//, \"\").trim();\n    return suffix || null;\n  } catch {\n    return null;\n  }\n}\nasync function listUntrackedFiles(cwd) {\n  try {\n    const out = await runGit([\"ls-files\", \"--others\", \"--exclude-standard\"], cwd);\n    return out.split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n  } catch {\n    return [];\n  }\n}\nasync function getWorkingTreeDiff(cwd) {\n  const untracked = await listUntrackedFiles(cwd);\n  if (untracked.length > 0) {\n    throw new RemixError(\"Untracked files are not included in git diff mode.\", {\n      exitCode: 2,\n      hint: \"Add the files to git before retrying so the worktree diff can include them.\"\n    });\n  }\n  try {\n    return await runGitRaw([\"diff\", \"--binary\", \"--no-ext-diff\", \"HEAD\"], cwd);\n  } catch {\n    throw new RemixError(\"Failed to generate git diff.\", { exitCode: 1 });\n  }\n}\nasync function getWorkspaceDiff(cwd) {\n  const snapshot = await getWorkspaceSnapshot(cwd);\n  return {\n    diff: snapshot.diff,\n    includedUntrackedPaths: snapshot.includedUntrackedPaths\n  };\n}\nasync function getWorkspaceSnapshot(cwd) {\n  const headCommitHash = await getHeadCommitHash(cwd);\n  if (!headCommitHash) {\n    throw new RemixError(\"Failed to resolve local HEAD commit.\", { exitCode: 1 });\n  }\n  const includedUntrackedPaths = Array.from(new Set((await listUntrackedFiles(cwd)).map((entry) => normalizeRepoRelativePath(entry))));\n  const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), \"remix-index-\"));\n  const tempIndexPath = path.join(tempDir, \"index\");\n  const env = { ...process.env, GIT_INDEX_FILE: tempIndexPath };\n  try {\n    try {\n      await runGitWithEnv([\"read-tree\", \"HEAD\"], cwd, env);\n      await runGitWithEnv([\"add\", \"-A\", \"--\", \".\"], cwd, env);\n      const diff = await runGitRawWithEnv([\"diff\", \"--binary\", \"--no-ext-diff\", \"--cached\", \"HEAD\"], cwd, env);\n      const nameStatus = await runGitRawWithEnv([\"diff\", \"--name-status\", \"--find-renames\", \"-z\", \"--cached\", \"HEAD\"], cwd, env);\n      const pathEntries = parseGitNameStatusZ(nameStatus);\n      return {\n        diff,\n        diffSha256: sha256Hex(diff),\n        includedUntrackedPaths,\n        pathEntries,\n        stagePlan: buildStagePlan(pathEntries)\n      };\n    } catch {\n      throw new RemixError(\"Failed to generate workspace diff.\", {\n        exitCode: 1,\n        hint: \"Git could not snapshot the current workspace into an isolated index.\"\n      });\n    }\n  } finally {\n    await fs.rm(tempDir, { recursive: true, force: true }).catch(() => void 0);\n  }\n}\nasync function writeTempUnifiedDiffBackup(diff, prefix = \"remix-add-backup\") {\n  const safePrefix = prefix.replace(/[^a-zA-Z0-9._-]+/g, \"-\") || \"remix-add-backup\";\n  const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), `${safePrefix}-`));\n  const backupPath = path.join(tmpDir, \"submitted.diff\");\n  await fs.writeFile(backupPath, diff, \"utf8\");\n  return { backupPath, diffSha256: sha256Hex(diff) };\n}\nasync function applyUnifiedDiffToWorktree(cwd, diff, operation = \"`remix collab pull`\") {\n  const normalizedDiff = String(diff ?? \"\");\n  if (!normalizedDiff.trim()) {\n    throw new RemixError(\"Diff is empty.\", { exitCode: 2, hint: `${operation} requires a non-empty diff.` });\n  }\n  const { backupPath, diffSha256 } = await writeTempUnifiedDiffBackup(normalizedDiff, \"remix-apply-diff\");\n  try {\n    const applyRes = await runGitDetailed([\"apply\", \"--binary\", \"--whitespace=nowarn\", backupPath], cwd);\n    if (applyRes.exitCode !== 0) {\n      const detail = [applyRes.stderr.trim(), applyRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n      throw new RemixError(\"Failed to apply unified diff to the local working tree.\", {\n        exitCode: 1,\n        hint: detail || `${operation} could not apply the server diff to the current working tree.`\n      });\n    }\n    return { diffSha256 };\n  } finally {\n    await fs.rm(path.dirname(backupPath), { recursive: true, force: true }).catch(() => void 0);\n  }\n}\nasync function getHeadCommitHash(cwd) {\n  try {\n    const hash = await runGit([\"rev-parse\", \"HEAD\"], cwd);\n    return hash || null;\n  } catch {\n    return null;\n  }\n}\nasync function createGitBundle(cwd, bundleName = \"repository.bundle\") {\n  const headCommitHash = await getHeadCommitHash(cwd);\n  if (!headCommitHash) {\n    throw new RemixError(\"Failed to resolve local HEAD commit.\", { exitCode: 1 });\n  }\n  const safeName = bundleName.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), \"remix-bundle-\"));\n  const bundlePath = path.join(tmpDir, safeName);\n  const res = await runGitDetailed([\"bundle\", \"create\", bundlePath, \"--all\"], cwd);\n  if (res.exitCode !== 0) {\n    const detail = [res.stderr.trim(), res.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to create repository bundle.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not create the bundle artifact.\"\n    });\n  }\n  return { bundlePath, headCommitHash };\n}\nasync function getWorktreeStatus(cwd) {\n  try {\n    const out = await runGit([\"status\", \"--porcelain\"], cwd);\n    const entries = out.split(\"\\n\").map((line) => line.trimEnd()).filter(Boolean);\n    return { isClean: entries.length === 0, entries };\n  } catch {\n    return { isClean: false, entries: [] };\n  }\n}\nasync function captureRepoSnapshot(cwd, options) {\n  const [branch, headCommitHash, worktreeStatus] = await Promise.all([\n    getCurrentBranch(cwd),\n    getHeadCommitHash(cwd),\n    getWorktreeStatus(cwd)\n  ]);\n  const workspaceDiffSha256 = options?.includeWorkspaceDiffHash ? (await getWorkspaceSnapshot(cwd)).diffSha256 : null;\n  return {\n    branch,\n    headCommitHash,\n    statusEntries: worktreeStatus.entries,\n    statusSha256: sha256Hex(worktreeStatus.entries.join(\"\\n\")),\n    workspaceDiffSha256\n  };\n}\nasync function assertRepoSnapshotUnchanged(cwd, snapshot, params) {\n  const current = await captureRepoSnapshot(cwd, {\n    includeWorkspaceDiffHash: snapshot.workspaceDiffSha256 !== null\n  });\n  const changes = [];\n  if (current.branch !== snapshot.branch) {\n    changes.push(`Branch changed: ${snapshot.branch ?? \"(detached)\"} -> ${current.branch ?? \"(detached)\"}`);\n  }\n  if (current.headCommitHash !== snapshot.headCommitHash) {\n    changes.push(`HEAD changed: ${snapshot.headCommitHash ?? \"(missing)\"} -> ${current.headCommitHash ?? \"(missing)\"}`);\n  }\n  if (current.statusSha256 !== snapshot.statusSha256) {\n    changes.push(\"Working tree status changed.\");\n  }\n  if (snapshot.workspaceDiffSha256 !== null && current.workspaceDiffSha256 !== snapshot.workspaceDiffSha256) {\n    changes.push(\"Workspace diff changed.\");\n  }\n  if (changes.length === 0) return;\n  const operation = params?.operation?.trim() || \"this Remix operation\";\n  const hint = [\n    `Operation: ${operation}`,\n    ...changes,\n    params?.recoveryHint?.trim() || \"Review the local changes, then rerun the operation.\"\n  ].filter(Boolean).join(\"\\n\");\n  throw new RemixError(\"Repository state changed during the operation.\", {\n    code: REMIX_ERROR_CODES.REPO_STATE_CHANGED_DURING_OPERATION,\n    exitCode: 2,\n    hint\n  });\n}\nasync function ensureCleanWorktree(cwd, operation = \"`remix collab sync`\") {\n  const status = await getWorktreeStatus(cwd);\n  if (status.isClean) return;\n  const preview = status.entries.slice(0, 10).join(\"\\n\");\n  const suffix = status.entries.length > 10 ? `\n...and ${status.entries.length - 10} more` : \"\";\n  throw new RemixError(`Working tree must be clean before running ${operation}.`, {\n    exitCode: 2,\n    hint: `Commit, stash, or discard local changes first.\n\n${preview}${suffix}`\n  });\n}\nasync function discardTrackedChanges(cwd, operation = \"the Remix operation\") {\n  const res = await runGitDetailed([\"reset\", \"--hard\", \"HEAD\"], cwd);\n  if (res.exitCode !== 0) {\n    const detail = [res.stderr.trim(), res.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(`Failed to discard local tracked changes while running ${operation}.`, {\n      exitCode: 1,\n      hint: detail || \"Git could not reset tracked changes back to HEAD.\"\n    });\n  }\n  const hash = await getHeadCommitHash(cwd);\n  if (!hash) {\n    throw new RemixError(\"Failed to resolve local HEAD after discarding tracked changes.\", { exitCode: 1 });\n  }\n  return hash;\n}\nasync function requireCurrentBranch(cwd) {\n  const branch = await getCurrentBranch(cwd);\n  if (!branch) {\n    throw new RemixError(\"`remix collab sync` requires a checked out local branch.\", {\n      exitCode: 2,\n      hint: \"Checkout a branch before syncing.\"\n    });\n  }\n  return branch;\n}\nasync function importGitBundle(cwd, bundlePath, bundleRef) {\n  const verifyRes = await runGitDetailed([\"bundle\", \"verify\", bundlePath], cwd);\n  if (verifyRes.exitCode !== 0) {\n    const detail = [verifyRes.stderr.trim(), verifyRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to verify sync bundle.\", {\n      exitCode: 1,\n      hint: detail || \"Git bundle verification failed.\"\n    });\n  }\n  const fetchRes = await runGitDetailed([\"fetch\", \"--quiet\", bundlePath, bundleRef], cwd);\n  if (fetchRes.exitCode !== 0) {\n    const detail = [fetchRes.stderr.trim(), fetchRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to import sync bundle.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not fetch objects from the sync bundle.\"\n    });\n  }\n}\nasync function cloneGitBundleToDirectory(bundlePath, targetDir) {\n  const parentDir = path.dirname(targetDir);\n  const cloneRes = await runGitDetailed([\"clone\", bundlePath, targetDir], parentDir);\n  if (cloneRes.exitCode !== 0) {\n    const detail = [cloneRes.stderr.trim(), cloneRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to create local remix checkout.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not clone the remix repository bundle.\"\n    });\n  }\n  const remoteRemoveRes = await runGitDetailed([\"remote\", \"remove\", \"origin\"], targetDir);\n  if (remoteRemoveRes.exitCode !== 0) {\n    const detail = [remoteRemoveRes.stderr.trim(), remoteRemoveRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to finalize local remix checkout.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not remove the temporary bundle origin.\"\n    });\n  }\n}\nasync function ensureGitInfoExcludeEntries(cwd, entries) {\n  const excludePath = await getGitPath(cwd, \"info/exclude\");\n  await fs.mkdir(path.dirname(excludePath), { recursive: true });\n  let current = \"\";\n  try {\n    current = await fs.readFile(excludePath, \"utf8\");\n  } catch {\n  }\n  const lines = new Set(current.split(\"\\n\").map((line) => line.trim()).filter(Boolean));\n  let changed = false;\n  for (const entry of entries) {\n    const normalized = entry.trim();\n    if (!normalized || lines.has(normalized)) continue;\n    lines.add(normalized);\n    changed = true;\n  }\n  if (!changed) return;\n  await fs.writeFile(excludePath, `${Array.from(lines).join(\"\\n\")}\n`, \"utf8\");\n}\nasync function ensureCommitExists(cwd, commitHash) {\n  const res = await runGitDetailed([\"cat-file\", \"-e\", `${commitHash}^{commit}`], cwd);\n  if (res.exitCode === 0) return;\n  throw new RemixError(\"Expected target commit is missing after bundle import.\", {\n    exitCode: 1,\n    hint: `Commit ${commitHash} is not available in the local repository.`\n  });\n}\nasync function fastForwardToCommit(cwd, commitHash) {\n  const res = await runGitDetailed([\"merge\", \"--ff-only\", commitHash], cwd);\n  if (res.exitCode !== 0) {\n    const detail = [res.stderr.trim(), res.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to fast-forward local branch.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not fast-forward to the target commit.\"\n    });\n  }\n  const hash = await getHeadCommitHash(cwd);\n  if (!hash) throw new RemixError(\"Failed to resolve local HEAD after fast-forward sync.\", { exitCode: 1 });\n  return hash;\n}\nasync function createBackupBranch(cwd, params) {\n  const sourceCommitHash = params?.sourceCommitHash?.trim() || await getHeadCommitHash(cwd);\n  if (!sourceCommitHash) {\n    throw new RemixError(\"Failed to resolve local HEAD before creating reconcile backup.\", { exitCode: 1 });\n  }\n  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, \"-\");\n  const branchFragment = sanitizeRefFragment(params?.branchName?.trim() || \"current-branch\");\n  const prefix = sanitizeRefFragment(params?.prefix?.trim() || \"remix/reconcile-backup\");\n  const backupBranchName = `${prefix}/${branchFragment}-${timestamp}`;\n  const createRes = await runGitDetailed([\"branch\", backupBranchName, sourceCommitHash], cwd);\n  if (createRes.exitCode !== 0) {\n    const detail = [createRes.stderr.trim(), createRes.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(\"Failed to create reconcile backup branch.\", {\n      exitCode: 1,\n      hint: detail || \"Git could not create the safety backup branch.\"\n    });\n  }\n  return { branchName: backupBranchName, commitHash: sourceCommitHash };\n}\nasync function hardResetToCommit(cwd, commitHash, operation = \"`remix collab reconcile`\") {\n  const res = await runGitDetailed([\"reset\", \"--hard\", commitHash], cwd);\n  if (res.exitCode !== 0) {\n    const detail = [res.stderr.trim(), res.stdout.trim()].filter(Boolean).join(\"\\n\\n\");\n    throw new RemixError(`Failed to move local branch while running ${operation}.`, {\n      exitCode: 1,\n      hint: detail || `Git could not reset the current branch to ${commitHash}.`\n    });\n  }\n  const hash = await getHeadCommitHash(cwd);\n  if (!hash) {\n    throw new RemixError(\"Failed to resolve local HEAD after resetting branch.\", { exitCode: 1 });\n  }\n  return hash;\n}\nasync function buildRepoFingerprint(params) {\n  const remote = normalizeGitRemote(params.remoteUrl);\n  const defaultBranch = params.defaultBranch?.trim().toLowerCase() || \"\";\n  const payload = remote ? { remote, defaultBranch } : { local: path.resolve(params.gitRoot).toLowerCase(), defaultBranch };\n  return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n}\nfunction summarizeUnifiedDiff(diff) {\n  const lines = diff.split(\"\\n\");\n  let changedFilesCount = 0;\n  let insertions = 0;\n  let deletions = 0;\n  for (const line of lines) {\n    if (line.startsWith(\"diff --git \")) changedFilesCount += 1;\n    if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) insertions += 1;\n    if (line.startsWith(\"-\") && !line.startsWith(\"---\")) deletions += 1;\n  }\n  return { changedFilesCount, insertions, deletions };\n}\n\nexport {\n  createGitCommandPlan,\n  createSystemGitAdapter,\n  normalizeGitRemote,\n  findGitRoot,\n  getAbsoluteGitDir,\n  getGitCommonDir,\n  getGitPath,\n  getCurrentBranch,\n  checkoutLocalBranch,\n  getRemoteOriginUrl,\n  setRemoteOriginUrl,\n  getDefaultBranch,\n  listUntrackedFiles,\n  getWorkingTreeDiff,\n  getWorkspaceDiff,\n  writeTempUnifiedDiffBackup,\n  applyUnifiedDiffToWorktree,\n  getHeadCommitHash,\n  createGitBundle,\n  getWorktreeStatus,\n  captureRepoSnapshot,\n  assertRepoSnapshotUnchanged,\n  ensureCleanWorktree,\n  discardTrackedChanges,\n  requireCurrentBranch,\n  importGitBundle,\n  cloneGitBundleToDirectory,\n  ensureGitInfoExcludeEntries,\n  ensureCommitExists,\n  fastForwardToCommit,\n  createBackupBranch,\n  hardResetToCommit,\n  buildRepoFingerprint,\n  summarizeUnifiedDiff\n};\n","import {\n  getCurrentBranch\n} from \"./chunk-FA6PTZQI.js\";\nimport {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/infrastructure/binding/collabBindingStore.ts\nimport fs2 from \"fs/promises\";\nimport path2 from \"path\";\n\n// src/shared/fs.ts\nimport fs from \"fs/promises\";\nimport path from \"path\";\nasync function reserveDirectory(targetDir) {\n  try {\n    await fs.mkdir(targetDir);\n    return targetDir;\n  } catch (error) {\n    if (error?.code === \"EEXIST\") {\n      throw new RemixError(\"Output directory already exists.\", {\n        exitCode: 2,\n        hint: `Choose an empty destination path: ${targetDir}`\n      });\n    }\n    throw error;\n  }\n}\nasync function reserveAvailableDirPath(preferredDir) {\n  const parent = path.dirname(preferredDir);\n  const base = path.basename(preferredDir);\n  for (let i = 1; i <= 1e3; i += 1) {\n    const candidate = i === 1 ? preferredDir : path.join(parent, `${base}-${i}`);\n    try {\n      await fs.mkdir(candidate);\n      return candidate;\n    } catch (error) {\n      if (error?.code === \"EEXIST\") continue;\n      throw error;\n    }\n  }\n  throw new RemixError(\"No available output directory name.\", {\n    exitCode: 2,\n    hint: `Tried ${base} through ${base}-1000 under ${parent}.`\n  });\n}\nasync function writeJsonAtomic(filePath, value) {\n  const dir = path.dirname(filePath);\n  await fs.mkdir(dir, { recursive: true });\n  const tmp = `${filePath}.tmp-${Date.now()}`;\n  await fs.writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, \"utf8\");\n  await fs.rename(tmp, filePath);\n}\n\n// src/infrastructure/binding/collabBindingStore.ts\nfunction getCollabBindingPath(repoRoot) {\n  return path2.join(repoRoot, \".remix\", \"config.json\");\n}\nfunction buildBindingFileV3(params) {\n  return {\n    schemaVersion: 3,\n    repoFingerprint: params.repoFingerprint,\n    remoteUrl: params.remoteUrl,\n    defaultBranch: params.defaultBranch,\n    branchBindings: params.branchBindings,\n    ...params.explicitRootBinding ? { explicitRootBinding: params.explicitRootBinding } : {}\n  };\n}\nfunction normalizeBranchName(value) {\n  const normalized = String(value ?? \"\").trim();\n  return normalized || null;\n}\nfunction normalizeProjectId(value) {\n  const normalized = String(value ?? \"\").trim();\n  return normalized || null;\n}\nasync function readCurrentBranchOrNull(repoRoot) {\n  try {\n    return normalizeBranchName(await getCurrentBranch(repoRoot));\n  } catch {\n    return null;\n  }\n}\nfunction normalizeBranchBinding(value) {\n  if (!value?.currentAppId || !value?.upstreamAppId) return null;\n  return {\n    projectId: normalizeProjectId(value.projectId),\n    currentAppId: value.currentAppId,\n    upstreamAppId: value.upstreamAppId,\n    threadId: value.threadId ?? null,\n    laneId: value.laneId ?? null,\n    bindingMode: value.bindingMode === \"legacy\" ? \"legacy\" : value.bindingMode === \"explicit_root\" ? \"explicit_root\" : \"lane\"\n  };\n}\nfunction buildResolvedBinding(params) {\n  if (!params.binding) return null;\n  return {\n    schemaVersion: 3,\n    projectId: params.binding.projectId ?? params.fallbackProjectId,\n    currentAppId: params.binding.currentAppId,\n    upstreamAppId: params.binding.upstreamAppId,\n    threadId: params.binding.threadId,\n    repoFingerprint: params.repoFingerprint,\n    remoteUrl: params.remoteUrl,\n    defaultBranch: params.defaultBranch,\n    laneId: params.binding.laneId,\n    branchName: params.branchName,\n    bindingMode: params.binding.bindingMode\n  };\n}\nfunction deriveFallbackProjectId(params) {\n  const candidates = [\n    params.currentBranch ? params.branchBindings[params.currentBranch]?.projectId ?? null : null,\n    params.defaultBranch ? params.branchBindings[params.defaultBranch]?.projectId ?? null : null,\n    ...Object.values(params.branchBindings).map((binding) => binding.projectId),\n    params.legacyProjectId\n  ];\n  for (const candidate of candidates) {\n    if (candidate) return candidate;\n  }\n  return null;\n}\nasync function readCollabBindingState(repoRoot, options) {\n  try {\n    const persist = options?.persist === true;\n    const filePath = getCollabBindingPath(repoRoot);\n    const raw = await fs2.readFile(filePath, \"utf8\");\n    const parsed = JSON.parse(raw);\n    if (!parsed || typeof parsed !== \"object\") return null;\n    const currentBranch = await readCurrentBranchOrNull(repoRoot);\n    if (parsed.schemaVersion === 1) {\n      if (!parsed.currentAppId || !parsed.upstreamAppId) return null;\n      const projectId = normalizeProjectId(parsed.projectId);\n      const preferredBranch = normalizeBranchName(parsed.preferredBranch ?? parsed.defaultBranch ?? null);\n      const branchKey = preferredBranch ?? currentBranch ?? null;\n      const branchBindings2 = branchKey ? {\n        [branchKey]: {\n          projectId,\n          currentAppId: parsed.currentAppId,\n          upstreamAppId: parsed.upstreamAppId,\n          threadId: parsed.threadId ?? null,\n          laneId: null,\n          bindingMode: \"legacy\"\n        }\n      } : {};\n      const migratedFile = buildBindingFileV3({\n        repoFingerprint: parsed.repoFingerprint ?? null,\n        remoteUrl: parsed.remoteUrl ?? null,\n        defaultBranch: parsed.defaultBranch ?? null,\n        branchBindings: branchBindings2\n      });\n      if (persist) {\n        try {\n          await writeJsonAtomic(filePath, migratedFile);\n        } catch {\n        }\n      }\n      return {\n        schemaVersion: 3,\n        projectId,\n        repoFingerprint: migratedFile.repoFingerprint,\n        remoteUrl: migratedFile.remoteUrl,\n        defaultBranch: migratedFile.defaultBranch,\n        currentBranch,\n        branchBindings: migratedFile.branchBindings,\n        explicitRootBinding: null,\n        binding: buildResolvedBinding({\n          fallbackProjectId: projectId,\n          repoFingerprint: migratedFile.repoFingerprint,\n          remoteUrl: migratedFile.remoteUrl,\n          defaultBranch: migratedFile.defaultBranch,\n          branchName: branchKey,\n          binding: branchKey ? migratedFile.branchBindings[branchKey] : null\n        })\n      };\n    }\n    if (parsed.schemaVersion !== 2 && parsed.schemaVersion !== 3) return null;\n    const file = parsed;\n    let shouldPersistNormalizedBranchBindings = false;\n    const legacyProjectId = normalizeProjectId(file.projectId);\n    const branchBindings = Object.fromEntries(\n      Object.entries(file.branchBindings ?? {}).map(([branchName, branchBinding]) => {\n        const normalized = normalizeBranchBinding(branchBinding);\n        const rawProjectId = branchBinding && typeof branchBinding === \"object\" && \"projectId\" in branchBinding ? normalizeProjectId(branchBinding.projectId) : null;\n        const rawBindingMode = branchBinding && typeof branchBinding === \"object\" && \"bindingMode\" in branchBinding ? branchBinding.bindingMode : null;\n        const hasLegacyPreferredBranch = Boolean(branchBinding) && typeof branchBinding === \"object\" && \"preferredBranch\" in branchBinding;\n        let normalizedWithProject = normalized;\n        if (normalizedWithProject && !normalizedWithProject.projectId && legacyProjectId) {\n          normalizedWithProject = {\n            ...normalizedWithProject,\n            projectId: legacyProjectId\n          };\n        }\n        if (normalizedWithProject && (rawBindingMode !== normalizedWithProject.bindingMode || hasLegacyPreferredBranch || rawProjectId !== normalizedWithProject.projectId)) {\n          shouldPersistNormalizedBranchBindings = true;\n        }\n        return [branchName, normalizedWithProject];\n      }).filter((entry) => Boolean(entry[1]))\n    );\n    const legacyExplicitBinding = normalizeBranchBinding(file.explicitBinding ?? null);\n    const legacyExplicitBranch = currentBranch ?? normalizeBranchName(file.defaultBranch);\n    if (legacyExplicitBinding && legacyExplicitBranch) {\n      branchBindings[legacyExplicitBranch] = {\n        ...legacyExplicitBinding,\n        projectId: legacyExplicitBinding.projectId ?? branchBindings[legacyExplicitBranch]?.projectId ?? legacyProjectId,\n        bindingMode: \"lane\"\n      };\n      shouldPersistNormalizedBranchBindings = true;\n    }\n    let explicitRootBinding = normalizeBranchBinding(file.explicitRootBinding ?? null);\n    if (explicitRootBinding && !explicitRootBinding.projectId && legacyProjectId) {\n      explicitRootBinding = {\n        ...explicitRootBinding,\n        projectId: legacyProjectId\n      };\n      shouldPersistNormalizedBranchBindings = true;\n    }\n    if (explicitRootBinding && explicitRootBinding.bindingMode !== \"explicit_root\") {\n      explicitRootBinding = {\n        ...explicitRootBinding,\n        bindingMode: \"explicit_root\"\n      };\n      shouldPersistNormalizedBranchBindings = true;\n    }\n    if (persist && (\"explicitBinding\" in file || \"explicitRootBinding\" in file || shouldPersistNormalizedBranchBindings || parsed.schemaVersion === 2)) {\n      try {\n        await writeJsonAtomic(\n          filePath,\n          buildBindingFileV3({\n            repoFingerprint: file.repoFingerprint ?? null,\n            remoteUrl: file.remoteUrl ?? null,\n            defaultBranch: file.defaultBranch ?? null,\n            branchBindings,\n            explicitRootBinding\n          })\n        );\n      } catch {\n      }\n    }\n    const resolvedBranch = currentBranch ?? normalizeBranchName(file.defaultBranch);\n    const fallbackProjectId = deriveFallbackProjectId({\n      branchBindings,\n      currentBranch: resolvedBranch,\n      defaultBranch: normalizeBranchName(file.defaultBranch),\n      legacyProjectId: explicitRootBinding?.projectId ?? legacyProjectId\n    });\n    const resolvedBinding = buildResolvedBinding({\n      fallbackProjectId,\n      repoFingerprint: file.repoFingerprint ?? null,\n      remoteUrl: file.remoteUrl ?? null,\n      defaultBranch: file.defaultBranch ?? null,\n      branchName: resolvedBranch,\n      binding: resolvedBranch ? branchBindings[resolvedBranch] ?? null : null\n    }) ?? (resolvedBranch && resolvedBranch === normalizeBranchName(file.defaultBranch) && explicitRootBinding ? buildResolvedBinding({\n      fallbackProjectId,\n      repoFingerprint: file.repoFingerprint ?? null,\n      remoteUrl: file.remoteUrl ?? null,\n      defaultBranch: file.defaultBranch ?? null,\n      branchName: normalizeBranchName(file.defaultBranch),\n      binding: explicitRootBinding\n    }) : null);\n    return {\n      schemaVersion: parsed.schemaVersion,\n      projectId: fallbackProjectId,\n      repoFingerprint: file.repoFingerprint ?? null,\n      remoteUrl: file.remoteUrl ?? null,\n      defaultBranch: file.defaultBranch ?? null,\n      currentBranch,\n      branchBindings,\n      explicitRootBinding: buildResolvedBinding({\n        fallbackProjectId,\n        repoFingerprint: file.repoFingerprint ?? null,\n        remoteUrl: file.remoteUrl ?? null,\n        defaultBranch: file.defaultBranch ?? null,\n        branchName: normalizeBranchName(file.defaultBranch),\n        binding: explicitRootBinding\n      }),\n      binding: resolvedBinding\n    };\n  } catch {\n    return null;\n  }\n}\nasync function readCollabBinding(repoRoot) {\n  const state = await readCollabBindingState(repoRoot);\n  return state?.binding ?? null;\n}\nasync function writeCollabBinding(repoRoot, binding) {\n  const filePath = getCollabBindingPath(repoRoot);\n  const currentBranch = await readCurrentBranchOrNull(repoRoot);\n  const branchName = normalizeBranchName(binding.branchName) ?? currentBranch ?? binding.defaultBranch ?? \"main\";\n  const existing = await readCollabBindingState(repoRoot, { persist: true });\n  const branchBindings = { ...existing?.branchBindings ?? {} };\n  branchBindings[branchName] = {\n    projectId: normalizeProjectId(binding.projectId) ?? branchBindings[branchName]?.projectId ?? existing?.projectId ?? null,\n    currentAppId: binding.currentAppId,\n    upstreamAppId: binding.upstreamAppId,\n    threadId: binding.threadId ?? null,\n    laneId: binding.laneId ?? null,\n    bindingMode: binding.bindingMode ?? \"lane\"\n  };\n  const explicitRootBinding = binding.bindingMode === \"explicit_root\" ? {\n    ...branchBindings[branchName],\n    bindingMode: \"explicit_root\"\n  } : existing?.explicitRootBinding ? {\n    projectId: existing.explicitRootBinding.projectId,\n    currentAppId: existing.explicitRootBinding.currentAppId,\n    upstreamAppId: existing.explicitRootBinding.upstreamAppId,\n    threadId: existing.explicitRootBinding.threadId,\n    laneId: existing.explicitRootBinding.laneId,\n    bindingMode: \"explicit_root\"\n  } : null;\n  await writeJsonAtomic(\n    filePath,\n    buildBindingFileV3({\n      repoFingerprint: binding.repoFingerprint ?? null,\n      remoteUrl: binding.remoteUrl ?? null,\n      defaultBranch: binding.defaultBranch ?? null,\n      branchBindings,\n      explicitRootBinding\n    })\n  );\n  return filePath;\n}\nasync function writeCollabBindingSnapshot(params) {\n  const filePath = getCollabBindingPath(params.repoRoot);\n  await writeJsonAtomic(\n    filePath,\n    buildBindingFileV3({\n      repoFingerprint: params.repoFingerprint,\n      remoteUrl: params.remoteUrl,\n      defaultBranch: params.defaultBranch,\n      branchBindings: params.branchBindings,\n      explicitRootBinding: params.explicitRootBinding ?? null\n    })\n  );\n  return filePath;\n}\n\nexport {\n  reserveDirectory,\n  reserveAvailableDirPath,\n  writeJsonAtomic,\n  getCollabBindingPath,\n  readCollabBindingState,\n  readCollabBinding,\n  writeCollabBinding,\n  writeCollabBindingSnapshot\n};\n","import {\n  getCollabBindingPath,\n  readCollabBinding,\n  readCollabBindingState,\n  writeCollabBinding\n} from \"./chunk-GNW6FA4J.js\";\nimport \"./chunk-FA6PTZQI.js\";\nimport \"./chunk-GC2MOT3U.js\";\nimport \"./chunk-7XJGOKEO.js\";\nexport {\n  getCollabBindingPath,\n  readCollabBinding,\n  readCollabBindingState,\n  writeCollabBinding\n};\n","import \"./chunk-HZNEDSRS.js\";\nimport {\n  assertRepoSnapshotUnchanged,\n  buildRepoFingerprint,\n  captureRepoSnapshot,\n  cloneGitBundleToDirectory,\n  createBackupBranch,\n  createGitBundle,\n  discardTrackedChanges,\n  ensureCleanWorktree,\n  ensureCommitExists,\n  ensureGitInfoExcludeEntries,\n  fastForwardToCommit,\n  findGitRoot,\n  getAbsoluteGitDir,\n  getCurrentBranch,\n  getDefaultBranch,\n  getGitCommonDir,\n  getGitPath,\n  getHeadCommitHash,\n  getRemoteOriginUrl,\n  getWorkingTreeDiff,\n  getWorkspaceDiff,\n  hardResetToCommit,\n  importGitBundle,\n  listUntrackedFiles,\n  normalizeGitRemote,\n  requireCurrentBranch,\n  summarizeUnifiedDiff,\n  writeTempUnifiedDiffBackup\n} from \"./chunk-FA6PTZQI.js\";\nimport \"./chunk-GC2MOT3U.js\";\nimport \"./chunk-7XJGOKEO.js\";\nexport {\n  assertRepoSnapshotUnchanged,\n  buildRepoFingerprint,\n  captureRepoSnapshot,\n  cloneGitBundleToDirectory,\n  createBackupBranch,\n  createGitBundle,\n  discardTrackedChanges,\n  ensureCleanWorktree,\n  ensureCommitExists,\n  ensureGitInfoExcludeEntries,\n  fastForwardToCommit,\n  findGitRoot,\n  getAbsoluteGitDir,\n  getCurrentBranch,\n  getDefaultBranch,\n  getGitCommonDir,\n  getGitPath,\n  getHeadCommitHash,\n  getRemoteOriginUrl,\n  getWorkingTreeDiff,\n  getWorkspaceDiff,\n  hardResetToCommit,\n  importGitBundle,\n  listUntrackedFiles,\n  normalizeGitRemote,\n  requireCurrentBranch,\n  summarizeUnifiedDiff,\n  writeTempUnifiedDiffBackup\n};\n","import type { ApiClient, AppContext } from \"@remixhq/core\";\nimport { readCollabBinding, type CollabBinding } from \"@remixhq/core/binding\";\nimport { findGitRoot } from \"@remixhq/core/repo\";\n\nimport { createApiClient } from \"../clients/api.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { ensureAuth } from \"./ensureAuth.js\";\n\nexport type JsonRecord = Record<string, any>;\nexport type EffectiveAppRole = \"owner\" | \"maintainer\" | \"editor\" | \"viewer\" | null;\n\nexport type BindingContext = {\n  repoRoot: string | null;\n  binding: CollabBinding | null;\n};\n\nexport async function createAuthedApi(params: { yes: boolean; json: boolean }): Promise<ApiClient> {\n  await ensureAuth({ yes: params.yes, json: params.json });\n  const cfg = await resolveConfig({ yes: params.yes });\n  return createApiClient(cfg);\n}\n\nexport function unwrapResponseObject<T>(resp: any, label: string): T {\n  const obj = resp?.responseObject;\n  if (obj === undefined || obj === null) {\n    throw new CliError(typeof resp?.message === \"string\" && resp.message.trim() ? resp.message : `Missing ${label} response.`, {\n      exitCode: 1,\n    });\n  }\n  return obj as T;\n}\n\nexport async function maybeFindGitRoot(cwd: string): Promise<string | null> {\n  try {\n    return await findGitRoot(cwd);\n  } catch {\n    return null;\n  }\n}\n\nexport async function loadBindingContext(cwd?: string): Promise<BindingContext> {\n  if (!cwd) return { repoRoot: null, binding: null };\n  const repoRoot = await maybeFindGitRoot(cwd);\n  if (!repoRoot) return { repoRoot: null, binding: null };\n  const binding = await readCollabBinding(repoRoot);\n  return { repoRoot, binding };\n}\n\nexport function makeNotBoundError(message = \"Repository is not bound to Remix.\", hint?: string): CliError {\n  return new CliError(message, {\n    exitCode: 2,\n    hint: hint ?? \"Run `remix collab init` in this repository, or pass an explicit id for a direct read.\",\n  });\n}\n\nexport function createAccessDeniedError(message: string, hint?: string | null): CliError {\n  return new CliError(message, {\n    exitCode: 2,\n    hint: hint ?? undefined,\n  });\n}\n\nfunction parseJsonObject(value: string | null): Record<string, unknown> | null {\n  if (!value) return null;\n  try {\n    const parsed = JSON.parse(value);\n    return parsed && typeof parsed === \"object\" ? (parsed as Record<string, unknown>) : null;\n  } catch {\n    return null;\n  }\n}\n\nexport function getBackendStatusCode(error: unknown): number | null {\n  if (!error || typeof error !== \"object\") return null;\n  const directStatus =\n    \"statusCode\" in error && typeof (error as { statusCode?: unknown }).statusCode === \"number\"\n      ? (error as { statusCode: number }).statusCode\n      : null;\n  if (directStatus !== null) return directStatus;\n  const hint =\n    \"hint\" in error && typeof (error as { hint?: unknown }).hint === \"string\" ? ((error as { hint: string }).hint as string) : null;\n  const body = parseJsonObject(hint);\n  if (typeof body?.statusCode === \"number\") return body.statusCode;\n  if (typeof body?.statusCode === \"string\") {\n    const parsed = Number(body.statusCode);\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n  return null;\n}\n\nexport function isBackendForbidden(error: unknown): boolean {\n  return getBackendStatusCode(error) === 403;\n}\n\nexport function isBackendNotFound(error: unknown): boolean {\n  return getBackendStatusCode(error) === 404;\n}\n\nexport function normalizePagination(\n  params: { limit?: number; offset?: number } | undefined,\n  options?: { defaultLimit?: number; maxLimit?: number },\n) {\n  const defaultLimit = options?.defaultLimit ?? 25;\n  const maxLimit = options?.maxLimit ?? 50;\n  const rawLimit = typeof params?.limit === \"number\" ? Math.trunc(params.limit) : defaultLimit;\n  const rawOffset = typeof params?.offset === \"number\" ? Math.trunc(params.offset) : 0;\n  return {\n    limit: Math.max(1, Math.min(maxLimit, rawLimit)),\n    offset: Math.max(0, rawOffset),\n  };\n}\n\nexport async function resolveAppId(params: { appId?: string | null; cwd?: string }): Promise<{ appId: string; repoRoot: string | null }> {\n  const explicitId = params.appId?.trim();\n  const bindingContext = await loadBindingContext(params.cwd);\n  if (explicitId) {\n    return {\n      appId: explicitId,\n      repoRoot: bindingContext.repoRoot,\n    };\n  }\n  if (!bindingContext.binding) {\n    throw makeNotBoundError(\"App id was not provided and the current repository is not bound to Remix.\");\n  }\n  return {\n    appId: bindingContext.binding.currentAppId,\n    repoRoot: bindingContext.repoRoot,\n  };\n}\n\nexport async function resolveProjectId(\n  api: ApiClient,\n  params: { projectId?: string | null; cwd?: string },\n): Promise<{ projectId: string; repoRoot: string | null }> {\n  const explicitId = params.projectId?.trim();\n  const bindingContext = await loadBindingContext(params.cwd);\n  if (explicitId) {\n    return {\n      projectId: explicitId,\n      repoRoot: bindingContext.repoRoot,\n    };\n  }\n  if (!bindingContext.binding) {\n    throw makeNotBoundError(\"Project id was not provided and the current repository is not bound to Remix.\");\n  }\n  const appContext = unwrapResponseObject<AppContext>(await api.getAppContext(bindingContext.binding.currentAppId), \"bound app context\");\n  if (!appContext.readableScopes.project) {\n    throw createAccessDeniedError(\n      \"The bound app's project is not readable to the current user.\",\n      \"Use `remix directory apps get` or `remix access debug` for app-level diagnostics, or pass an explicit project id you can access.\",\n    );\n  }\n  return {\n    projectId: appContext.projectId,\n    repoRoot: bindingContext.repoRoot,\n  };\n}\n\nexport async function resolveOrganizationId(api: ApiClient, params: { organizationId?: string | null; cwd?: string }): Promise<string> {\n  const explicitId = params.organizationId?.trim();\n  if (explicitId) return explicitId;\n  const bindingContext = await loadBindingContext(params.cwd);\n  if (!bindingContext.binding) {\n    throw makeNotBoundError(\"Organization id was not provided and the current repository is not bound to Remix.\");\n  }\n  const appContext = unwrapResponseObject<AppContext>(await api.getAppContext(bindingContext.binding.currentAppId), \"bound app context\");\n  if (!appContext.readableScopes.organization) {\n    throw createAccessDeniedError(\n      \"The bound app's organization is not readable to the current user.\",\n      \"Use an explicit organization id you can access, or inspect the bound app with `remix directory apps get` / `remix access debug` for app-level context.\",\n    );\n  }\n  return appContext.organizationId;\n}\n\nexport function mapProjectRoleToAppRole(role: string | null): EffectiveAppRole {\n  switch (role) {\n    case \"owner\":\n    case \"maintainer\":\n      return \"maintainer\";\n    case \"editor\":\n      return \"editor\";\n    case \"viewer\":\n      return \"viewer\";\n    default:\n      return null;\n  }\n}\n\nexport function toEffectiveAppRole(role: string | null): EffectiveAppRole {\n  switch (role) {\n    case \"owner\":\n    case \"maintainer\":\n    case \"editor\":\n    case \"viewer\":\n      return role;\n    default:\n      return null;\n  }\n}\n\nexport function strongestRole(...roles: Array<EffectiveAppRole>): EffectiveAppRole {\n  if (roles.includes(\"owner\")) return \"owner\";\n  if (roles.includes(\"maintainer\")) return \"maintainer\";\n  if (roles.includes(\"editor\")) return \"editor\";\n  if (roles.includes(\"viewer\")) return \"viewer\";\n  return null;\n}\n\nexport function resolveAppAccessSource(params: {\n  directAppRole: EffectiveAppRole;\n  inheritedProjectRole: EffectiveAppRole;\n}): \"none\" | \"direct_app_membership\" | \"project_membership\" | \"both\" {\n  if (params.directAppRole && params.inheritedProjectRole) return \"both\";\n  if (params.directAppRole) return \"direct_app_membership\";\n  if (params.inheritedProjectRole) return \"project_membership\";\n  return \"none\";\n}\n\nexport function resolveSelfRolesFromAppContext(appContext: AppContext | null) {\n  if (!appContext) {\n    return {\n      organizationRole: null,\n      projectRole: null,\n      appRole: null,\n      directAppRole: null,\n      inheritedProjectRole: null,\n      appAccessSource: \"none\" as const,\n    };\n  }\n  const directAppRole = toEffectiveAppRole(appContext.roles.appRole);\n  const inheritedProjectRole = toEffectiveAppRole(appContext.roles.inheritedProjectRole);\n  return {\n    organizationRole: appContext.roles.organizationRole ?? null,\n    projectRole: appContext.roles.projectRole ?? null,\n    appRole: toEffectiveAppRole(appContext.roles.effectiveAppRole),\n    directAppRole,\n    inheritedProjectRole,\n    appAccessSource: resolveAppAccessSource({ directAppRole, inheritedProjectRole }),\n  };\n}\n\nexport function buildEffectiveAppAccess(params: { directAppRole: string | null; projectRole: string | null }) {\n  const directAppRole = toEffectiveAppRole(params.directAppRole);\n  const inheritedProjectRole = mapProjectRoleToAppRole(params.projectRole);\n  const effectiveRole = strongestRole(directAppRole, inheritedProjectRole);\n  return {\n    effectiveRole,\n    directAppRole,\n    projectRole: params.projectRole,\n    inheritedProjectRole,\n    accessSource: resolveAppAccessSource({ directAppRole, inheritedProjectRole }),\n    canReadWorkflow: effectiveRole !== null,\n    canEdit: effectiveRole === \"owner\" || effectiveRole === \"maintainer\" || effectiveRole === \"editor\",\n    canManage: effectiveRole === \"owner\" || effectiveRole === \"maintainer\",\n    isOwner: directAppRole === \"owner\",\n  };\n}\n","import pc from \"picocolors\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { createApiClient } from \"../clients/api.js\";\nimport { startOAuthCallbackServer } from \"./oauthCallbackServer.js\";\nimport { openBrowser } from \"../utils/browser.js\";\nimport { createRemixAuthHelpers } from \"../clients/auth.js\";\nimport { clearSession, getSession, setSession } from \"./sessionStore.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport { exchangeCodeWithContinuations } from \"./authContinuation.js\";\n\nfunction hasEnvAccessToken(): boolean {\n  return [process.env.REMIX_ACCESS_TOKEN, process.env.COMERGE_ACCESS_TOKEN].some(\n    (value) => typeof value === \"string\" && value.trim().length > 0\n  );\n}\n\nasync function validateBackendSession(params?: { yes?: boolean }): Promise<void> {\n  const cfg = await resolveConfig({ yes: Boolean(params?.yes) });\n  const api = createApiClient(cfg);\n  await api.getMe();\n}\n\nexport async function ensureAuth(params?: { yes?: boolean; json?: boolean }): Promise<void> {\n  if (hasEnvAccessToken()) return;\n\n  const existing = await getSession();\n  if (existing) {\n    try {\n      await validateBackendSession({ yes: params?.yes });\n      return;\n    } catch {\n      // Continue into login flow if interactive; otherwise fail.\n    }\n  }\n\n  const interactive = isInteractive();\n  const yes = Boolean(params?.yes);\n  if (!interactive || yes) {\n    throw new CliError(\"Not signed in.\", {\n      exitCode: 2,\n      hint: \"Run `remix login`, or set REMIX_ACCESS_TOKEN for CI.\",\n    });\n  }\n\n  const cfg = await resolveConfig({ yes: Boolean(params?.yes) });\n  const server = await startOAuthCallbackServer({ port: null });\n  try {\n    const auth = createRemixAuthHelpers(cfg);\n    const { url, codeVerifier } = await auth.startLogin({ redirectTo: server.redirectTo, state: server.state });\n\n    try {\n      await openBrowser(url);\n      if (!params?.json) console.log(pc.dim(\"Opened a browser for sign-in.\"));\n    } catch {\n      if (!params?.json) {\n        console.log(pc.yellow(\"Could not open a browser automatically.\"));\n        console.log(`Open this URL in a browser:\\n${url}`);\n      }\n    }\n\n    const code = await server.waitForCode();\n    const session = await exchangeCodeWithContinuations({\n      auth,\n      code,\n      codeVerifier,\n      interactive,\n      json: Boolean(params?.json),\n      yes,\n    });\n    await setSession(session);\n\n    try {\n      await validateBackendSession({ yes: params?.yes });\n    } catch (err) {\n      await clearSession().catch(() => {});\n      throw err;\n    }\n  } finally {\n    await server.close();\n  }\n}\n\n","import type { Command } from \"commander\";\n\nimport { whoami } from \"../services/identity.js\";\n\nexport function registerWhoamiCommand(program: Command) {\n  program\n    .command(\"whoami\")\n    .description(\"Show the current Remix user\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await whoami({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import os from \"node:os\";\n\nimport prompts, { type PromptObject } from \"prompts\";\n\nimport { createApiClient } from \"../clients/api.js\";\nimport { shellInit } from \"../commands/shellInit.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { inferExpoAppDefaults } from \"../utils/appDefaults.js\";\nimport { findExpoProjectRoot } from \"../utils/projectDetect.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport { getStoredApiKey, setStoredApiKey } from \"./apiKeyStore.js\";\nimport { collabInit } from \"./collab.js\";\n\nexport type MobileShellInitParams = {\n  appKey: string;\n  outDir: string;\n  packageManager: string | null;\n  subdir: string | null;\n  includeDotenv: boolean;\n  forceNew: boolean;\n  regenerateShell: boolean;\n  yes: boolean;\n  json: boolean;\n};\n\nexport type MobileShellInitResult = InitLocalResult & {\n  command: \"mobile_shell_init\";\n  forceNew: boolean;\n  regenerateShell: boolean;\n};\n\ntype InitLocalResult = {\n  appId: string;\n  dashboardUrl: string;\n  uploadId?: string;\n  projectId?: string;\n  threadId?: string;\n  status?: string;\n  shellOutDir: string;\n  bindingPath?: string;\n  repoRoot?: string;\n  repoFingerprint?: string;\n  bindingMode?: string;\n  baselineStatus?: string;\n};\n\ntype ClientAppRow = {\n  id: string;\n  name?: string | null;\n  organization_id?: string | null;\n};\n\nfunction unwrapResponseObject<T>(resp: any, label: string): T {\n  const obj = resp?.responseObject;\n  if (obj === undefined || obj === null) {\n    const message =\n      typeof resp?.message === \"string\" && resp.message.trim().length > 0\n        ? resp.message\n        : `Missing ${label} response`;\n    throw new CliError(message, { exitCode: 1, hint: resp ? JSON.stringify(resp, null, 2) : null });\n  }\n  return obj as T;\n}\n\nasync function selectClientApp(apps: ClientAppRow[], yes: boolean): Promise<{ app: ClientAppRow | null }> {\n  if (apps.length === 0) return { app: null };\n  if (apps.length === 1) return { app: apps[0] };\n\n  if (yes || !isInteractive()) {\n    throw new CliError(\"Multiple apps found. Re-run without --yes to select one.\", { exitCode: 2 });\n  }\n\n  const res = await prompts(\n    [\n      {\n        type: \"select\",\n        name: \"appId\",\n        message: \"Select an app or create a new one:\",\n        choices: [\n          ...apps.map((app) => ({\n            title: app.name ? `${app.name} (${app.id})` : app.id,\n            value: app.id,\n          })),\n          { title: \"Create a new app\", value: \"__create_new__\" },\n        ],\n      },\n    ],\n    {\n      onCancel: () => {\n        throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n      },\n    },\n  );\n\n  if (res.appId === \"__create_new__\") return { app: null };\n  const selected = apps.find((app) => app.id === res.appId);\n  if (!selected) throw new CliError(\"Invalid app selection.\", { exitCode: 1 });\n  return { app: selected };\n}\n\nasync function promptNewAppDetails(projectRoot: string, yes: boolean) {\n  const defaults = await inferExpoAppDefaults(projectRoot);\n  const defaultName = defaults.name || \"My App\";\n  const iosEnabled = true;\n  const androidEnabled = true;\n\n  if (yes || !isInteractive()) {\n    return {\n      name: defaultName,\n      iosEnabled,\n      androidEnabled,\n      iosBundleId: defaults.iosBundleId || defaults.suggestedBundleId || \"com.example.app\",\n      androidPackageName: defaults.androidPackageName || defaults.suggestedBundleId || \"com.example.app\",\n    };\n  }\n\n  const answers = await prompts(\n    [\n      {\n        type: \"text\",\n        name: \"name\",\n        message: \"App name\",\n        initial: defaultName,\n        validate: (v: string) => (String(v || \"\").trim() ? true : \"App name is required.\"),\n      },\n    ],\n    {\n      onCancel: () => {\n        throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n      },\n    },\n  );\n\n  const bundlePrompts: PromptObject[] = [\n    iosEnabled\n      ? {\n          type: \"text\",\n          name: \"iosBundleId\",\n          message: \"iOS bundle ID\",\n          initial: defaults.iosBundleId || defaults.suggestedBundleId || \"com.example.app\",\n          validate: (v: string) => (String(v || \"\").trim() ? true : \"iOS bundle ID is required.\"),\n        }\n      : null,\n    androidEnabled\n      ? {\n          type: \"text\",\n          name: \"androidPackageName\",\n          message: \"Android package name\",\n          initial: defaults.androidPackageName || defaults.suggestedBundleId || \"com.example.app\",\n          validate: (v: string) => (String(v || \"\").trim() ? true : \"Android package name is required.\"),\n        }\n      : null,\n  ].filter(Boolean) as PromptObject[];\n  const bundleAnswers = await prompts(bundlePrompts, {\n    onCancel: () => {\n      throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n    },\n  });\n\n  return {\n    name: String(answers.name || defaultName).trim(),\n    iosEnabled,\n    androidEnabled,\n    iosBundleId: iosEnabled ? String(bundleAnswers.iosBundleId || \"\").trim() : null,\n    androidPackageName: androidEnabled ? String(bundleAnswers.androidPackageName || \"\").trim() : null,\n  };\n}\n\nfunction buildKeyName(params: { email?: string | null; id?: string | null }): string {\n  const rawUser = params.email && params.email.includes(\"@\") ? params.email.split(\"@\")[0] : params.id || \"user\";\n  const user = rawUser.trim().replace(/\\s+/g, \"-\");\n  const hostname = os.hostname().trim().replace(/\\s+/g, \"-\");\n  const ts = Math.floor(Date.now() / 1000);\n  return `cli_${user}_${hostname}_${ts}`;\n}\n\nasync function resolveBoundOrganizationId(api: any, result: InitLocalResult): Promise<string> {\n  const projectId = String(result.projectId || \"\").trim();\n  if (!projectId) {\n    throw new CliError(\"Bound Remix project did not include a project ID.\", {\n      exitCode: 1,\n      hint: \"The app was imported, but the CLI could not resolve which organization should own the shell client key.\",\n    });\n  }\n  const project = unwrapResponseObject<Record<string, unknown>>(await api.getProject(projectId), \"project\");\n  const organizationId = String(project.organizationId ?? project.organization_id ?? \"\").trim();\n  if (!organizationId) {\n    throw new CliError(\"Bound Remix project did not include an organization ID.\", {\n      exitCode: 1,\n      hint: `Project: ${projectId}`,\n    });\n  }\n  return organizationId;\n}\n\nexport async function mobileShellInit(params: MobileShellInitParams): Promise<MobileShellInitResult> {\n  if (params.subdir?.trim()) {\n    throw new CliError(\"`remix mobile shell init --path` is not supported.\", {\n      exitCode: 2,\n      hint: \"Mobile shell init imports and binds the full Git repository. Run it from the Expo repo root without --path.\",\n    });\n  }\n  if (!params.includeDotenv) {\n    throw new CliError(\"`remix mobile shell init --no-include-dotenv` is not supported.\", {\n      exitCode: 2,\n      hint: \"Mobile shell init uses the repo import path. Secrets should be excluded by gitignore or managed with Remix environment variables.\",\n    });\n  }\n\n  const projectRoot = await findExpoProjectRoot(process.cwd());\n  const defaults = await inferExpoAppDefaults(projectRoot);\n\n  const result = await collabInit({\n    cwd: projectRoot,\n    appName: defaults.name || undefined,\n    profile: {\n      primaryCategory: \"mobile_app\",\n      capabilities: [\"mobile_run\", \"runtime_install\", \"runtime_dev\", \"runtime_build\"],\n      frameworks: [\"expo\"],\n      source: \"cli\",\n      confidence: \"high\",\n      evidence: [{ kind: \"cli_input\", value: \"remix mobile shell init\" }],\n    },\n    forceNew: params.forceNew,\n    queue: false,\n    waitTimeoutSeconds: null,\n    json: params.json,\n    yes: params.yes,\n  }) as InitLocalResult;\n\n  const cfg = await resolveConfig({ yes: params.yes });\n  const api = createApiClient(cfg);\n  try {\n    await api.autoEnableDeveloper();\n  } catch {\n    // Non-fatal.\n  }\n\n  const organizationId = await resolveBoundOrganizationId(api, result);\n  const apps = unwrapResponseObject<ClientAppRow[]>(\n    await api.listClientApps({ orgId: organizationId }),\n    \"client apps\",\n  );\n\n  const selectedAppResult = await selectClientApp(apps, params.yes);\n  let clientApp = selectedAppResult.app;\n  if (!clientApp) {\n    const details = await promptNewAppDetails(projectRoot, params.yes);\n    const createdResp = await api.createClientApp({\n      orgId: organizationId,\n      name: details.name,\n      type: \"wrapper\",\n      environment: \"production\",\n      platform: \"expo\",\n      iosBundleId: details.iosEnabled ? details.iosBundleId ?? undefined : undefined,\n      androidPackageName: details.androidEnabled ? details.androidPackageName ?? undefined : undefined,\n    });\n    clientApp = unwrapResponseObject<ClientAppRow>(createdResp, \"client app\");\n  }\n\n  const clientAppId = String(clientApp.id || \"\").trim();\n  if (!clientAppId) {\n    throw new CliError(\"Missing client app ID.\", { exitCode: 1 });\n  }\n\n  let apiKey = await getStoredApiKey(organizationId, clientAppId);\n  if (!apiKey) {\n    const me = unwrapResponseObject<{ id?: string; email?: string | null }>(await api.getMe(), \"user\");\n    const keyName = buildKeyName({ email: me.email ?? null, id: me.id ?? null });\n    const createdKeyResp = await api.createClientAppKey(clientAppId, { name: keyName });\n    const keyPayload = unwrapResponseObject<{ key?: string }>(createdKeyResp, \"client key\");\n    apiKey = String(keyPayload.key || \"\").trim();\n    if (!apiKey) {\n      throw new CliError(\"Server did not return a client key.\", { exitCode: 1 });\n    }\n    await setStoredApiKey(organizationId, clientAppId, apiKey);\n  }\n\n  const shell = await shellInit({\n    outDir: params.outDir,\n    appId: result.appId,\n    apiKey,\n    appKey: params.appKey,\n    packageManager: params.packageManager,\n    regenerate: params.regenerateShell,\n    json: params.json,\n  });\n\n  return {\n    ...result,\n    shellOutDir: shell.outDir,\n    command: \"mobile_shell_init\",\n    forceNew: params.forceNew,\n    regenerateShell: params.regenerateShell,\n  };\n}\n","import path from \"node:path\";\nimport os from \"node:os\";\n\nimport pc from \"picocolors\";\nimport fse from \"fs-extra\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { createApiClient } from \"../clients/api.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { readPackageJson, buildShellPackageJson } from \"../utils/packageJson.js\";\nimport { ensureEmptyDir, findAvailableDirPath, writeJsonAtomic, writeTextAtomic } from \"../utils/fs.js\";\nimport { findExpoProjectRoot } from \"../utils/projectDetect.js\";\nimport { shellBabelConfigJs, shellIndexTsx, shellLayoutTsx, shellMetroConfigJs } from \"../utils/templates.js\";\nimport { detectPackageManager, installCommand, type PackageManager } from \"../utils/packageManager.js\";\nimport { execa } from \"execa\";\nimport { copyProject } from \"../utils/copyProject.js\";\nimport { stripProject } from \"../utils/stripProject.js\";\nimport fs from \"node:fs/promises\";\nimport { ensureRemixShellPlugins } from \"../utils/appJsonPatch.js\";\nimport { ensureReanimatedBabelPlugin } from \"../utils/reanimated.js\";\nimport { downloadEmbeddedBundles } from \"../services/bundles.js\";\n\nexport type ShellInitParams = {\n  outDir: string;\n  appId: string;\n  apiKey: string;\n  appKey: string;\n  packageManager: string | null;\n  regenerate?: boolean;\n  json?: boolean;\n};\n\nexport type ShellInitResult = {\n  outDir: string;\n  outputPath: string;\n};\n\nasync function assertSafeRegenerateTarget(params: {\n  outputPath: string;\n  projectRoot: string;\n}): Promise<void> {\n  if (params.outputPath === params.projectRoot) {\n    throw new CliError(\"Refusing to regenerate the source project directory.\", {\n      exitCode: 2,\n      hint: \"Choose a shell output directory such as `--out remix-shell`.\",\n    });\n  }\n\n  if (!(await fse.pathExists(params.outputPath))) return;\n\n  try {\n    const config = await fse.readJson(path.join(params.outputPath, \"remix.config.json\"));\n    if (config && typeof config === \"object\" && typeof config.appId === \"string\" && typeof config.clientKey === \"string\") {\n      return;\n    }\n  } catch {\n    // Fall through to the explicit safety error below.\n  }\n\n  throw new CliError(\"Refusing to regenerate a directory that does not look like a Remix shell.\", {\n    exitCode: 2,\n    hint: `Directory: ${params.outputPath}\\nPass a different --out value or remove the directory yourself.`,\n  });\n}\n\nfunction outputDirLabel(params: { projectRoot: string; outputPath: string }): string {\n  const relative = path.relative(params.projectRoot, params.outputPath);\n  if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) return relative;\n  return params.outputPath;\n}\n\nfunction resolveShellAppKey(params: {\n  requestedAppKey: string;\n  embeddedBundlesMeta?: Awaited<ReturnType<typeof downloadEmbeddedBundles>>;\n}): string {\n  const requested = String(params.requestedAppKey || \"\").trim();\n  const embeddedAppKey =\n    params.embeddedBundlesMeta?.ios?.bundle?.appKey?.trim() ||\n    params.embeddedBundlesMeta?.android?.bundle?.appKey?.trim() ||\n    \"\";\n\n  if (embeddedAppKey && (!requested || requested === \"MicroMain\")) return embeddedAppKey;\n  return requested || embeddedAppKey || \"MicroMain\";\n}\n\nexport async function shellInit(params: ShellInitParams): Promise<ShellInitResult> {\n  const log = (message: string) => {\n    if (!params.json) console.log(message);\n  };\n  const outDirDefault = params.outDir || \"remix-shell\";\n\n  let outDir = outDirDefault;\n  let appId = params.appId ?? \"\";\n  let apiKey = params.apiKey ?? \"\";\n  const requestedAppKey = params.appKey ?? \"MicroMain\";\n\n  appId = String(appId || \"\").trim();\n  apiKey = String(apiKey || \"\").trim();\n  if (!appId) {\n    throw new CliError(\"Missing app ID.\", {\n      hint: \"Pass --app-id <uuid>.\",\n      exitCode: 2,\n    });\n  }\n  if (!apiKey) {\n    throw new CliError(\"Missing client key.\", {\n      hint: \"Pass --api-key <key>.\",\n      exitCode: 2,\n    });\n  }\n\n  const projectRoot = await findExpoProjectRoot(process.cwd());\n  const requestedOutputPath = path.resolve(projectRoot, outDir);\n  const outputPath = params.regenerate ? requestedOutputPath : await findAvailableDirPath(requestedOutputPath);\n  if (params.regenerate) {\n    await assertSafeRegenerateTarget({ outputPath, projectRoot });\n  }\n  log(pc.dim(`Project: ${projectRoot}`));\n  if (params.regenerate) {\n    log(pc.dim(`Output:  ${outputPath} (regenerating)`));\n  } else if (outputPath !== requestedOutputPath) {\n    log(pc.dim(`Output:  ${requestedOutputPath} (already exists)`));\n    log(pc.dim(`Using:   ${outputPath}`));\n  } else {\n    log(pc.dim(`Output:  ${outputPath}`));\n  }\n\n  // Stage destructive regenerations too so the previous shell survives failures.\n  const outputIsInsideProject =\n    outputPath === projectRoot || outputPath.startsWith(projectRoot + path.sep);\n  const stageBeforeFinalMove = outputIsInsideProject || Boolean(params.regenerate);\n  const stagingPath = stageBeforeFinalMove\n    ? await fs.mkdtemp(path.join(os.tmpdir(), \"remix-shell-\"))\n    : outputPath;\n\n  let movedToFinal = false;\n  try {\n    if (!stageBeforeFinalMove) {\n      await ensureEmptyDir(stagingPath);\n    }\n\n    await copyProject({ projectRoot, outRoot: stagingPath });\n\n    await stripProject({ outRoot: stagingPath });\n\n    try {\n      const didPatch = await ensureRemixShellPlugins(path.join(stagingPath, \"app.json\"));\n      if (didPatch) {\n        log(pc.dim(\"Updated app.json with required Remix shell plugins.\"));\n      }\n    } catch (e) {\n      log(pc.yellow(`Warning: failed to update app.json with required Remix shell plugins (${e instanceof Error ? e.message : String(e)})`));\n    }\n\n    let embeddedBundlesMeta: Awaited<ReturnType<typeof downloadEmbeddedBundles>> | undefined;\n    try {\n      const cfg = await resolveConfig({ yes: true });\n      const api = createApiClient(cfg, { apiKey });\n      embeddedBundlesMeta = await downloadEmbeddedBundles({\n        api,\n        appId,\n        outRoot: stagingPath,\n        log: (msg) => log(msg),\n      });\n    } catch (e) {\n      log(pc.yellow(`Warning: failed to embed base bundles: ${e instanceof Error ? e.message : String(e)}`));\n    }\n\n    await writeJsonAtomic(path.join(stagingPath, \"remix.config.json\"), {\n      appId,\n      appKey: resolveShellAppKey({ requestedAppKey, embeddedBundlesMeta }),\n      clientKey: apiKey,\n    });\n\n    await writeTextAtomic(path.join(stagingPath, \"app/_layout.tsx\"), shellLayoutTsx());\n    await writeTextAtomic(path.join(stagingPath, \"app/index.tsx\"), shellIndexTsx(embeddedBundlesMeta));\n    await ensureTextFile(path.join(stagingPath, \"babel.config.js\"), shellBabelConfigJs());\n    await ensureTextFile(path.join(stagingPath, \"metro.config.js\"), shellMetroConfigJs());\n    try {\n      const didPatch = await ensureReanimatedBabelPlugin(path.join(stagingPath, \"babel.config.js\"));\n      if (didPatch) log(pc.dim(\"Updated babel.config.js to include react-native-reanimated/plugin.\"));\n    } catch {}\n    await ensureTextFile(\n      path.join(stagingPath, \"tsconfig.json\"),\n    JSON.stringify(\n      {\n        extends: \"expo/tsconfig.base\",\n        compilerOptions: { strict: true, resolveJsonModule: true },\n      },\n      null,\n      2,\n    ) + \"\\n\",\n    );\n\n    const originalPkg = await readPackageJson(stagingPath);\n    const { pkg: shellPkg, warnings, info } = buildShellPackageJson({\n      original: originalPkg,\n    });\n    await writeJsonAtomic(path.join(stagingPath, \"package.json\"), shellPkg);\n\n    for (const w of warnings) log(pc.yellow(`Warning: ${w}`));\n    for (const i of info) log(pc.dim(`Info: ${i}`));\n\n    const pm =\n      (params.packageManager as PackageManager | null) ?? (await detectPackageManager(projectRoot));\n    const { cmd, args } = installCommand(pm);\n    log(pc.dim(`Installing dependencies with ${cmd}...`));\n    const res = await execa(cmd, args, { cwd: stagingPath, stdio: params.json ? \"ignore\" : \"inherit\" });\n    if (res.exitCode !== 0) {\n      throw new CliError(\"Dependency installation failed.\", { exitCode: res.exitCode ?? 1 });\n    }\n\n    log(pc.dim(\"Running Expo prebuild...\"));\n    const prebuild = await execa(\"npx\", [\"expo\", \"prebuild\"], { cwd: stagingPath, stdio: params.json ? \"ignore\" : \"inherit\" });\n    if (prebuild.exitCode !== 0) {\n      throw new CliError(\"Expo prebuild failed.\", { exitCode: prebuild.exitCode ?? 1 });\n    }\n\n    if (stageBeforeFinalMove) {\n      if (params.regenerate) await fse.remove(outputPath);\n      await fse.move(stagingPath, outputPath, { overwrite: false });\n      movedToFinal = true;\n    }\n\n    log(pc.green(\"Remix has been installed successfully.\"));\n    log(pc.dim(\"You can now open the app from the My apps page in the Remix app.\"));\n\n    return {\n      outDir: outputDirLabel({ projectRoot, outputPath }),\n      outputPath,\n    };\n  } finally {\n    if (stageBeforeFinalMove && !movedToFinal) {\n      try {\n        await fse.remove(stagingPath);\n      } catch {}\n    }\n  }\n}\n\nasync function ensureTextFile(filePath: string, contents: string): Promise<void> {\n  try {\n    await fs.access(filePath);\n    return;\n  } catch {\n  }\n  await writeTextAtomic(filePath, contents);\n}\n\n\n","import fs from \"node:fs/promises\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport type PackageJson = {\n  name?: string;\n  version?: string;\n  private?: boolean;\n  main?: string;\n  packageManager?: string;\n  scripts?: Record<string, string>;\n  dependencies?: Record<string, string>;\n  devDependencies?: Record<string, string>;\n  [key: string]: unknown;\n};\n\nexport async function readPackageJson(projectRoot: string): Promise<PackageJson> {\n  const raw = await fs.readFile(`${projectRoot}/package.json`, \"utf8\").catch(() => null);\n  if (!raw) {\n    throw new CliError(\"package.json not found.\", { exitCode: 2 });\n  }\n  try {\n    return JSON.parse(raw) as PackageJson;\n  } catch {\n    throw new CliError(\"Failed to parse package.json.\", { exitCode: 2 });\n  }\n}\n\nconst GENERATED_SHELL_DEPENDENCIES = {\n  \"@callstack/liquid-glass\": \"^0.7.0\",\n  \"@gorhom/bottom-sheet\": \"^5.2.8\",\n  \"@react-native-async-storage/async-storage\": \"^2.2.0\",\n  \"@remixhq/expo-runtime\": \"^0.1.10\",\n  \"@remixhq/expo-studio\": \"^0.1.42\",\n  \"@supabase/supabase-js\": \"^2.95.3\",\n  \"expo-asset\": \"~12.0.9\",\n  \"expo-build-properties\": \"~1.0.10\",\n  \"expo-crypto\": \"^15.0.7\",\n  \"expo-file-system\": \"^19.0.17\",\n  \"expo-haptics\": \"~15.0.7\",\n  \"expo-image\": \"~3.0.10\",\n  \"expo-linear-gradient\": \"^15.0.7\",\n  \"expo-secure-store\": \"~15.0.7\",\n  \"expo-web-browser\": \"^15.0.9\",\n  \"lottie-react-native\": \"~7.3.6\",\n  \"lucide-react-native\": \"^0.545.0\",\n  \"mixpanel-react-native\": \"^3.2.1\",\n  \"react-native-gesture-handler\": \"^2.30.0\",\n  \"react-native-get-random-values\": \"^1.11.0\",\n  \"react-native-reanimated\": \"4.2.2\",\n  \"react-native-safe-area-context\": \"~5.6.0\",\n  \"react-native-svg\": \"15.12.1\",\n  \"react-native-view-shot\": \"^4.0.0\",\n  \"react-native-zip-archive\": \"^7.0.2\",\n} as const;\n\nexport function buildShellPackageJson(params: {\n  original: PackageJson;\n}): { pkg: PackageJson; warnings: string[]; info: string[] } {\n  const orig = params.original;\n  const warnings: string[] = [];\n  const info: string[] = [];\n\n  const dependencies: Record<string, string> = { ...(orig.dependencies ?? {}) };\n  const devDependencies: Record<string, string> = { ...(orig.devDependencies ?? {}) };\n\n  const main = \"expo-router/entry\";\n\n  dependencies[\"@remixhq/expo-studio\"] = GENERATED_SHELL_DEPENDENCIES[\"@remixhq/expo-studio\"];\n  dependencies[\"@remixhq/expo-runtime\"] = GENERATED_SHELL_DEPENDENCIES[\"@remixhq/expo-runtime\"];\n\n  if (!dependencies[\"expo-router\"] && !devDependencies[\"expo-router\"]) {\n    dependencies[\"expo-router\"] = \"~6.0.10\";\n    warnings.push(\"Added missing dependency expo-router@~6.0.10.\");\n  }\n\n  for (const [dep, version] of Object.entries(GENERATED_SHELL_DEPENDENCIES)) {\n    if (dependencies[dep] || devDependencies[dep]) continue;\n    dependencies[dep] = version;\n    info.push(`Added missing peer dependency ${dep}@${version}.`);\n  }\n\n  const pkg: PackageJson = {\n    ...orig,\n    name: orig.name ? `${orig.name}-remix-shell` : \"remix-shell\",\n    private: true,\n    main,\n    scripts: {\n      dev: \"expo start -c\",\n      ios: \"expo start -c --ios\",\n      android: \"expo start -c --android\",\n      web: \"expo start -c --web\",\n      ...(orig.scripts ?? {}),\n    },\n    dependencies,\n    devDependencies,\n  };\n\n  return { pkg, warnings, info };\n}\n\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nasync function fileExists(p: string): Promise<boolean> {\n  try {\n    const st = await fs.stat(p);\n    return st.isFile();\n  } catch {\n    return false;\n  }\n}\n\nasync function dirExists(p: string): Promise<boolean> {\n  try {\n    const st = await fs.stat(p);\n    return st.isDirectory();\n  } catch {\n    return false;\n  }\n}\n\nexport async function findExpoProjectRoot(startDir: string): Promise<string> {\n  let cur = path.resolve(startDir);\n  while (true) {\n    const pkg = path.join(cur, \"package.json\");\n    if (await fileExists(pkg)) {\n      const hasAppJson = await fileExists(path.join(cur, \"app.json\"));\n      const hasAppConfig = await fileExists(path.join(cur, \"app.config.js\")) || await fileExists(path.join(cur, \"app.config.ts\"));\n      if (!hasAppJson && !hasAppConfig) {\n      } else {\n        return cur;\n      }\n    }\n\n    const parent = path.dirname(cur);\n    if (parent === cur) break;\n    cur = parent;\n  }\n\n  throw new CliError(\"Not inside an Expo project.\", {\n    hint: \"Run this command from the root of your Expo project.\",\n    exitCode: 2,\n  });\n}\n\nexport async function requireAssetsDir(projectRoot: string): Promise<void> {\n  const assets = path.join(projectRoot, \"assets\");\n  if (!(await dirExists(assets))) {\n    throw new CliError(\"Missing assets/ directory in the project root.\", {\n      hint: `Create ${assets} or update the CLI to support a different assets path.`,\n      exitCode: 2,\n    });\n  }\n}\n\n","export function shellLayoutTsx(): string {\n  return `import { Stack } from 'expo-router';\nimport { GestureHandlerRootView } from 'react-native-gesture-handler';\n\nexport default function Layout() {\n  return (\n    <GestureHandlerRootView style={{ flex: 1 }}>\n      <Stack screenOptions={{ headerShown: false }} />\n    </GestureHandlerRootView>\n  );\n}\n`;\n}\n\ntype EmbeddedBaseBundlesMeta = {\n  ios?: {\n    bundle?: { strategy?: \"reactNativeBundle\" | \"expoExport\" };\n    assets?: { kind?: string };\n    exportMetadata?: { kind?: string };\n  };\n  android?: {\n    bundle?: { strategy?: \"reactNativeBundle\" | \"expoExport\" };\n    assets?: { kind?: string };\n    exportMetadata?: { kind?: string };\n  };\n};\n\nfunction platformEmbeddedSource(meta: EmbeddedBaseBundlesMeta | undefined, platform: \"ios\" | \"android\"): string {\n  const entry = meta?.[platform];\n  if (!entry?.bundle) return \"undefined\";\n  const strategy = entry.bundle.strategy === \"expoExport\" ? \"expoExport\" : \"reactNativeBundle\";\n  const bundleFile = strategy === \"expoExport\" ? `base.${platform}.expo.hbc` : `base.${platform}.jsbundle`;\n  const assetsFile = strategy === \"expoExport\" ? `base.${platform}.expo.assets.zip` : `base.${platform}.assets.zip`;\n  const metadataFile = `base.${platform}.expo.metadata.json`;\n  return `{\n      module: require('../assets/remix/${bundleFile}'),\n      ${entry.assets ? `assetsModule: require('../assets/remix/${assetsFile}'),` : \"\"}\n      ${strategy === \"expoExport\" && entry.exportMetadata ? `exportMetadataModule: require('../assets/remix/${metadataFile}'),` : \"\"}\n      meta: (embeddedMeta as any)?.${platform}?.bundle,\n      assetsMeta: (embeddedMeta as any)?.${platform}?.assets,\n      exportMetadataMeta: (embeddedMeta as any)?.${platform}?.exportMetadata,\n    }`;\n}\n\nexport function shellIndexTsx(embeddedBundlesMeta?: EmbeddedBaseBundlesMeta): string {\n  return `import * as React from 'react';\nimport { View } from 'react-native';\nimport { Stack } from 'expo-router';\nimport { RemixStudio } from '@remixhq/expo-studio';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport config from '../remix.config.json';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport embeddedMeta from '../assets/remix/base.meta.json';\n\nexport default function Index() {\n  const appId = String((config as any)?.appId || '');\n  const configuredAppKey = String((config as any)?.appKey || '');\n  const embeddedAppKey = String((embeddedMeta as any)?.ios?.bundle?.appKey || (embeddedMeta as any)?.android?.bundle?.appKey || '');\n  const appKey = configuredAppKey === 'MicroMain' && embeddedAppKey === 'main'\n    ? embeddedAppKey\n    : String(configuredAppKey || embeddedAppKey || 'MicroMain');\n  const clientKey = String((config as any)?.clientKey || '');\n  const embeddedBaseBundles = {\n    ios: ${platformEmbeddedSource(embeddedBundlesMeta, \"ios\")},\n    android: ${platformEmbeddedSource(embeddedBundlesMeta, \"android\")},\n  };\n  return (\n    <>\n      <Stack.Screen options={{ headerShown: false }} />\n      <View style={{ flex: 1 }}>\n        {appId ? (\n          <RemixStudio appId={appId} clientKey={clientKey} appKey={appKey} embeddedBaseBundles={embeddedBaseBundles} />\n        ) : null}\n      </View>\n    </>\n  );\n}\n`;\n}\n\nexport function shellBabelConfigJs(): string {\n  return `module.exports = function (api) {\n  api.cache(true);\n  return {\n    presets: ['babel-preset-expo'],\n    plugins: ['react-native-reanimated/plugin'],\n  };\n};\n`;\n}\n\nexport function shellMetroConfigJs(): string {\n  return `const { getDefaultConfig } = require('expo/metro-config');\n\nconst config = getDefaultConfig(__dirname);\nconst resolver = config.resolver || {};\nconst assetExts = resolver.assetExts || [];\nif (!assetExts.includes('jsbundle')) {\n  resolver.assetExts = [...assetExts, 'jsbundle'];\n}\nif (!resolver.assetExts.includes('hbc')) {\n  resolver.assetExts = [...resolver.assetExts, 'hbc'];\n}\nif (!resolver.assetExts.includes('zip')) {\n  resolver.assetExts = [...resolver.assetExts, 'zip'];\n}\nconfig.resolver = resolver;\n\nmodule.exports = config;\n`;\n}\n\n","import fs from \"node:fs/promises\";\n\nexport type PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nasync function exists(p: string): Promise<boolean> {\n  try {\n    await fs.stat(p);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function detectPackageManager(projectRoot: string): Promise<PackageManager> {\n  if (await exists(`${projectRoot}/pnpm-lock.yaml`)) return \"pnpm\";\n  if (await exists(`${projectRoot}/yarn.lock`)) return \"yarn\";\n  if (await exists(`${projectRoot}/package-lock.json`)) return \"npm\";\n  if (await exists(`${projectRoot}/bun.lockb`)) return \"bun\";\n  return \"npm\";\n}\n\nexport function installCommand(pm: PackageManager): { cmd: string; args: string[] } {\n  switch (pm) {\n    case \"pnpm\":\n      return { cmd: \"pnpm\", args: [\"install\"] };\n    case \"yarn\":\n      return { cmd: \"yarn\", args: [\"install\"] };\n    case \"bun\":\n      return { cmd: \"bun\", args: [\"install\"] };\n    case \"npm\":\n    default:\n      return { cmd: \"npm\", args: [\"install\"] };\n  }\n}\n\n","import path from \"node:path\";\n\nimport fse from \"fs-extra\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nconst ALWAYS_EXCLUDE_DIRS = new Set([\n  \"node_modules\",\n  \".git\",\n  \".expo\",\n  \"dist\",\n  \"build\",\n]);\n\nfunction normalizeRel(relPath: string): string {\n  return relPath.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n}\n\nfunction shouldExclude(relPath: string): boolean {\n  const rel = normalizeRel(relPath);\n  const parts = rel.split(\"/\").filter(Boolean);\n  const top = parts[0] ?? \"\";\n\n  if (!top) return false;\n  if (ALWAYS_EXCLUDE_DIRS.has(top)) return true;\n  if (top.startsWith(\"remix-shell\")) return true;\n\n  if (rel.startsWith(\"ios/build/\") || rel === \"ios/build\") return true;\n  if (rel.startsWith(\"android/build/\") || rel === \"android/build\") return true;\n\n  return false;\n}\n\nexport async function copyProject(params: { projectRoot: string; outRoot: string }): Promise<void> {\n  const src = path.resolve(params.projectRoot);\n  const dest = path.resolve(params.outRoot);\n\n  const srcExists = await fse.pathExists(src);\n  if (!srcExists) {\n    throw new CliError(\"Project root not found.\", { exitCode: 2 });\n  }\n\n  await fse.copy(src, dest, {\n    dereference: true,\n    preserveTimestamps: true,\n    filter: (srcPath) => {\n      const rel = path.relative(src, srcPath);\n      if (!rel) return true;\n      return !shouldExclude(rel);\n    },\n  });\n}\n\n","import path from \"node:path\";\n\nimport fse from \"fs-extra\";\n\nexport const DEFAULT_STRIP_DIRS = [\"app\", \"src\", \"components\", \"lib\", \"hooks\", \"providers\"] as const;\n\nexport async function stripProject(params: { outRoot: string; dirs?: readonly string[] }): Promise<void> {\n  const dirs = params.dirs ?? DEFAULT_STRIP_DIRS;\n  await Promise.all(\n    dirs.map(async (d) => {\n      const p = path.join(params.outRoot, d);\n      const exists = await fse.pathExists(p);\n      if (!exists) return;\n      await fse.remove(p);\n    }),\n  );\n}\n\n","import fs from \"node:fs/promises\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\ntype AppJson = { expo?: any };\n\nconst MIN_IOS_DEPLOYMENT_TARGET = \"16.4\";\nconst BUILD_PROPERTIES_PLUGIN = \"expo-build-properties\";\n\nfunction pluginName(entry: any): string | null {\n  if (Array.isArray(entry)) return typeof entry[0] === \"string\" ? entry[0] : null;\n  return typeof entry === \"string\" ? entry : null;\n}\n\nfunction isObject(value: unknown): value is Record<string, any> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction compareVersion(a: string, b: string): number {\n  const left = a.split(\".\").map((part) => Number.parseInt(part, 10));\n  const right = b.split(\".\").map((part) => Number.parseInt(part, 10));\n  const length = Math.max(left.length, right.length);\n  for (let i = 0; i < length; i += 1) {\n    const delta = (left[i] || 0) - (right[i] || 0);\n    if (delta !== 0) return delta;\n  }\n  return 0;\n}\n\nfunction stripJsonComments(source: string): string {\n  let result = \"\";\n  let inString = false;\n  let escaping = false;\n\n  for (let i = 0; i < source.length; i += 1) {\n    const char = source[i];\n    const next = source[i + 1];\n\n    if (inString) {\n      result += char;\n      if (escaping) {\n        escaping = false;\n      } else if (char === \"\\\\\") {\n        escaping = true;\n      } else if (char === \"\\\"\") {\n        inString = false;\n      }\n      continue;\n    }\n\n    if (char === \"\\\"\") {\n      inString = true;\n      result += char;\n      continue;\n    }\n\n    if (char === \"/\" && next === \"/\") {\n      while (i < source.length && source[i] !== \"\\n\") i += 1;\n      if (i < source.length) result += \"\\n\";\n      continue;\n    }\n\n    if (char === \"/\" && next === \"*\") {\n      i += 2;\n      while (i < source.length && !(source[i] === \"*\" && source[i + 1] === \"/\")) {\n        if (source[i] === \"\\n\") result += \"\\n\";\n        i += 1;\n      }\n      i += 1;\n      continue;\n    }\n\n    result += char;\n  }\n\n  return result;\n}\n\nfunction ensureBuildPropertiesPlugin(entry: any): any {\n  const existingOptions = Array.isArray(entry) && isObject(entry[1]) ? entry[1] : {};\n  const existingIos = isObject(existingOptions.ios) ? existingOptions.ios : {};\n  const existingTarget = typeof existingIos.deploymentTarget === \"string\" ? existingIos.deploymentTarget : null;\n  const deploymentTarget =\n    existingTarget && compareVersion(existingTarget, MIN_IOS_DEPLOYMENT_TARGET) >= 0 ? existingTarget : MIN_IOS_DEPLOYMENT_TARGET;\n\n  return [\n    BUILD_PROPERTIES_PLUGIN,\n    {\n      ...existingOptions,\n      ios: {\n        ...existingIos,\n        deploymentTarget,\n      },\n    },\n  ];\n}\n\nexport async function ensureRemixShellPlugins(appJsonPath: string): Promise<boolean> {\n  let raw: string;\n  try {\n    raw = await fs.readFile(appJsonPath, \"utf8\");\n  } catch {\n    return false;\n  }\n  let parsed: AppJson;\n  try {\n    parsed = JSON.parse(stripJsonComments(raw)) as AppJson;\n  } catch {\n    throw new CliError(\"Failed to parse app.json in the generated shell.\", { exitCode: 2 });\n  }\n\n  const expo = parsed.expo;\n  if (!expo || typeof expo !== \"object\") return false;\n\n  const plugins = Array.isArray(expo.plugins) ? [...expo.plugins] : [];\n  const routerEntry = plugins.find((p) => pluginName(p) === \"expo-router\");\n  const runtimeEntry = plugins.find((p) => pluginName(p) === \"@remixhq/expo-runtime\");\n  const buildPropertiesEntry = plugins.find((p) => pluginName(p) === BUILD_PROPERTIES_PLUGIN);\n\n  const rest = plugins.filter((p) => {\n    const name = pluginName(p);\n    return name !== \"expo-router\" && name !== \"@remixhq/expo-runtime\" && name !== BUILD_PROPERTIES_PLUGIN;\n  });\n\n  const nextPlugins = [\n    routerEntry ?? \"expo-router\",\n    runtimeEntry ?? \"@remixhq/expo-runtime\",\n    ensureBuildPropertiesPlugin(buildPropertiesEntry),\n    ...rest,\n  ];\n  if (JSON.stringify(nextPlugins) === JSON.stringify(plugins)) return false;\n\n  expo.plugins = nextPlugins;\n  await fs.writeFile(appJsonPath, JSON.stringify({ expo }, null, 2) + \"\\n\", \"utf8\");\n  return true;\n}\n\n","import fs from \"node:fs/promises\";\n\nexport async function ensureReanimatedBabelPlugin(babelConfigPath: string): Promise<boolean> {\n  const raw = await fs.readFile(babelConfigPath, \"utf8\").catch(() => null);\n  if (!raw) return false;\n  if (raw.includes(\"react-native-reanimated/plugin\")) return false;\n\n  const patched = patchBabelConfigAddReanimatedPlugin(raw);\n  if (patched === raw) return false;\n\n  await fs.writeFile(babelConfigPath, patched, \"utf8\");\n  return true;\n}\n\nfunction patchBabelConfigAddReanimatedPlugin(raw: string): string {\n  const pluginsMatch = /(^|\\n)([ \\t]*)plugins\\s*:\\s*\\[/m.exec(raw);\n  if (pluginsMatch) {\n    const matchIdx = pluginsMatch.index + pluginsMatch[1].length;\n    const indent = pluginsMatch[2] ?? \"\";\n    const bracketIdx = raw.indexOf(\"[\", matchIdx);\n    if (bracketIdx >= 0) {\n      const closeIdx = findMatchingBracket(raw, bracketIdx, \"[\", \"]\");\n      if (closeIdx >= 0) {\n        const inner = raw.slice(bracketIdx + 1, closeIdx);\n        const innerTrim = inner.trim();\n        const innerTrimEnd = inner.replace(/[ \\t\\r\\n]+$/g, \"\");\n        const elementIndent = indent + \"  \";\n        let insert = \"\";\n        if (!innerTrim) {\n          insert = `\\n${elementIndent}'react-native-reanimated/plugin'\\n${indent}`;\n        } else if (innerTrimEnd.endsWith(\",\")) {\n          insert = `\\n${elementIndent}'react-native-reanimated/plugin'`;\n        } else {\n          insert = `,\\n${elementIndent}'react-native-reanimated/plugin'`;\n        }\n        return raw.slice(0, closeIdx) + insert + raw.slice(closeIdx);\n      }\n    }\n  }\n\n  const presetsMatch = /(^|\\n)([ \\t]*)presets\\s*:\\s*\\[[^\\]]*\\]\\s*,?/m.exec(raw);\n  if (presetsMatch) {\n    const indent = presetsMatch[2] ?? \"\";\n    const insertAt = presetsMatch.index + presetsMatch[0].length;\n    const insertion = `\\n${indent}// Required by react-native-reanimated. Must be listed last.\\n${indent}plugins: ['react-native-reanimated/plugin'],`;\n    return raw.slice(0, insertAt) + insertion + raw.slice(insertAt);\n  }\n\n  return raw;\n}\n\nfunction findMatchingBracket(text: string, openIdx: number, open: string, close: string): number {\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplate = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = openIdx; i < text.length; i++) {\n    const ch = text[i]!;\n    const next = text[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\") inLineComment = false;\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i++;\n      }\n      continue;\n    }\n\n    if (!inSingle && !inDouble && !inTemplate) {\n      if (ch === \"/\" && next === \"/\") {\n        inLineComment = true;\n        i++;\n        continue;\n      }\n      if (ch === \"/\" && next === \"*\") {\n        inBlockComment = true;\n        i++;\n        continue;\n      }\n    }\n\n    if (!inDouble && !inTemplate && ch === \"'\" && text[i - 1] !== \"\\\\\") {\n      inSingle = !inSingle;\n      continue;\n    }\n    if (!inSingle && !inTemplate && ch === `\"` && text[i - 1] !== \"\\\\\") {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!inSingle && !inDouble && ch === \"`\" && text[i - 1] !== \"\\\\\") {\n      inTemplate = !inTemplate;\n      continue;\n    }\n    if (inSingle || inDouble || inTemplate) continue;\n\n    if (ch === open) depth++;\n    if (ch === close) {\n      depth--;\n      if (depth === 0) return i;\n    }\n  }\n  return -1;\n}\n\n","import fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\n\nimport pc from \"picocolors\";\n\nimport type { ApiClient, Bundle, BundlePlatform } from \"../clients/api.js\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { sha256FileHex } from \"../utils/zip.js\";\n\ntype BaseBundleMeta = {\n  fingerprint: string;\n  bundleId: string;\n  checksumSha256: string | null;\n  size: number | null;\n  strategy: \"reactNativeBundle\" | \"expoExport\";\n  appKey: string;\n  exportMetadata?: Record<string, unknown> | null;\n  updatedAt: string;\n};\n\nexport type EmbeddedBaseBundlesMeta = {\n  ios?: {\n    bundle: BaseBundleMeta;\n    assets?: BaseAssetsMeta;\n    exportMetadata?: BaseAssetsMeta;\n  };\n  android?: {\n    bundle: BaseBundleMeta;\n    assets?: BaseAssetsMeta;\n    exportMetadata?: BaseAssetsMeta;\n  };\n};\n\ntype DownloadedBundle = {\n  platform: BundlePlatform;\n  bundlePath: string;\n  bundleId: string;\n  meta: BaseBundleMeta;\n};\n\ntype BaseAssetsMeta = {\n  kind: \"metro-assets\" | \"expo-export-assets\" | \"expo-export-metadata\";\n  checksumSha256: string | null;\n  size: number | null;\n  updatedAt: string;\n};\n\nfunction bundleStrategy(bundle: Bundle): \"reactNativeBundle\" | \"expoExport\" {\n  return (bundle as any).strategy === \"expoExport\" ? \"expoExport\" : \"reactNativeBundle\";\n}\n\nfunction bundleAppKey(bundle: Bundle): string {\n  const explicit = String((bundle as any).appKey || \"\").trim();\n  if (explicit) return explicit;\n  return bundleStrategy(bundle) === \"expoExport\" ? \"main\" : \"MicroMain\";\n}\n\nfunction baseBundleFilename(platform: BundlePlatform, strategy: \"reactNativeBundle\" | \"expoExport\"): string {\n  return strategy === \"expoExport\" ? `base.${platform}.expo.hbc` : `base.${platform}.jsbundle`;\n}\n\nfunction baseAssetsFilename(platform: BundlePlatform, strategy: \"reactNativeBundle\" | \"expoExport\"): string {\n  return strategy === \"expoExport\" ? `base.${platform}.expo.assets.zip` : `base.${platform}.assets.zip`;\n}\n\nfunction baseExportMetadataFilename(platform: BundlePlatform): string {\n  return `base.${platform}.expo.metadata.json`;\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction isRetryableNetworkError(e: unknown): boolean {\n  const err = e as any;\n  const code = typeof err?.code === 'string' ? err.code : '';\n  const message = typeof err?.message === 'string' ? err.message : '';\n\n  if (code === 'ERR_NETWORK' || code === 'ECONNABORTED') return true;\n  if (message.toLowerCase().includes('network error')) return true;\n  if (message.toLowerCase().includes('timeout')) return true;\n\n  const status = typeof err?.response?.status === 'number' ? err.response.status : undefined;\n  if (status && (status === 429 || status >= 500)) return true;\n\n  return false;\n}\n\nasync function withRetry<T>(\n  fn: () => Promise<T>,\n  opts: { attempts: number; baseDelayMs: number; maxDelayMs: number }\n): Promise<T> {\n  let lastErr: unknown = null;\n  for (let attempt = 1; attempt <= opts.attempts; attempt += 1) {\n    try {\n      return await fn();\n    } catch (e) {\n      lastErr = e;\n      const retryable = isRetryableNetworkError(e);\n      if (!retryable || attempt >= opts.attempts) {\n        throw e;\n      }\n      const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1));\n      const jitter = Math.floor(Math.random() * 250);\n      await sleep(exp + jitter);\n    }\n  }\n  throw lastErr;\n}\n\nfunction unwrapResponseObject<T>(resp: any, label: string): T {\n  const obj = resp?.responseObject;\n  if (obj === undefined || obj === null) {\n    const message =\n      typeof resp?.message === \"string\" && resp.message.trim().length > 0\n        ? resp.message\n        : `Missing ${label} response`;\n    throw new CliError(message, { exitCode: 1, hint: resp ? JSON.stringify(resp, null, 2) : null });\n  }\n  return obj as T;\n}\n\nasync function pollBundle(api: ApiClient, appId: string, bundleId: string, opts: { timeoutMs: number; intervalMs: number }) {\n  const start = Date.now();\n  while (true) {\n    try {\n      const bundleResp: any = await api.getBundle(appId, bundleId);\n      const bundle = unwrapResponseObject<Bundle>(bundleResp, \"bundle\");\n      if (bundle.status === \"succeeded\" || bundle.status === \"failed\") return bundle;\n    } catch (e) {\n      if (!isRetryableNetworkError(e)) {\n        throw e;\n      }\n    }\n    if (Date.now() - start > opts.timeoutMs) {\n      throw new Error(\"Bundle build timed out.\");\n    }\n    await sleep(opts.intervalMs);\n  }\n}\n\nasync function downloadToFile(url: string, targetPath: string): Promise<void> {\n  const dir = path.dirname(targetPath);\n  await fsPromises.mkdir(dir, { recursive: true });\n  const tmpPath = `${targetPath}.tmp-${Date.now()}`;\n\n  await withRetry(\n    async () => {\n      const res = await fetch(url);\n      if (!res.ok) {\n        throw new Error(`Download failed (status ${res.status})`);\n      }\n      if (!res.body) {\n        throw new Error(\"Download response has no body.\");\n      }\n      const body = Readable.fromWeb(res.body as any);\n      const out = fs.createWriteStream(tmpPath);\n      await pipeline(body, out);\n    },\n    { attempts: 3, baseDelayMs: 500, maxDelayMs: 4000 }\n  );\n\n  const stat = await fsPromises.stat(tmpPath);\n  if (!stat.size || stat.size <= 0) {\n    await fsPromises.unlink(tmpPath).catch(() => {});\n    throw new Error(\"Downloaded bundle is empty.\");\n  }\n  await fsPromises.rename(tmpPath, targetPath);\n}\n\nasync function downloadBundle(\n  api: ApiClient,\n  appId: string,\n  platform: BundlePlatform,\n  baseDir: string\n): Promise<DownloadedBundle> {\n  const initiateResp: any = await api.initiateBundle(appId, {\n    platform,\n    idempotencyKey: `${appId}:head:${platform}`,\n  });\n  const initiate = unwrapResponseObject<Bundle>(initiateResp, \"bundle initiate\");\n  const finalBundle =\n    initiate.status === \"succeeded\" || initiate.status === \"failed\"\n      ? initiate\n      : await pollBundle(api, appId, initiate.id, { timeoutMs: 15 * 60 * 1000, intervalMs: 1200 });\n\n  if (finalBundle.status === \"failed\") {\n    throw new Error(\"Bundle build failed.\");\n  }\n\n  const strategy = bundleStrategy(finalBundle);\n  const targetPath = path.join(baseDir, baseBundleFilename(platform, strategy));\n  const signedResp: any = await api.getBundleDownloadUrl(appId, finalBundle.id, { redirect: false });\n  const signed = unwrapResponseObject<{ url: string }>(signedResp, \"bundle download url\");\n  const url = String((signed as any).url || \"\").trim();\n  if (!url) throw new Error(\"Download URL is missing.\");\n\n  await downloadToFile(url, targetPath);\n\n  const fingerprint = finalBundle.checksumSha256 ?? `id:${finalBundle.id}`;\n  const meta: BaseBundleMeta = {\n    fingerprint,\n    bundleId: finalBundle.id,\n    checksumSha256: finalBundle.checksumSha256 ?? null,\n    size: finalBundle.size ?? null,\n    strategy,\n    appKey: bundleAppKey(finalBundle),\n    exportMetadata: ((finalBundle as any).exportMetadata ?? null) as Record<string, unknown> | null,\n    updatedAt: new Date().toISOString(),\n  };\n  return { platform, bundlePath: targetPath, bundleId: finalBundle.id, meta };\n}\n\nasync function downloadBundleAssets(\n  api: ApiClient,\n  appId: string,\n  bundleId: string,\n  kind: BaseAssetsMeta[\"kind\"],\n  targetPath: string\n): Promise<BaseAssetsMeta> {\n  const signedResp: any = await api.getBundleAssetsDownloadUrl(appId, bundleId, {\n    redirect: false,\n    kind,\n  });\n  const signed = unwrapResponseObject<{ url: string }>(signedResp, \"bundle assets download url\");\n  const url = String((signed as any).url || \"\").trim();\n  if (!url) throw new Error(\"Assets download URL is missing.\");\n\n  await downloadToFile(url, targetPath);\n\n  const stat = await fsPromises.stat(targetPath);\n  const checksumSha256 = await sha256FileHex(targetPath);\n  return {\n    kind,\n    checksumSha256,\n    size: stat.size ?? null,\n    updatedAt: new Date().toISOString(),\n  };\n}\n\nexport async function downloadEmbeddedBundles(params: {\n  api: ApiClient;\n  appId: string;\n  outRoot: string;\n  log?: (msg: string) => void;\n}): Promise<EmbeddedBaseBundlesMeta> {\n  const log = params.log ?? (() => {});\n  const baseDir = path.join(params.outRoot, \"assets\", \"remix\");\n\n  log(pc.dim(\"Downloading base bundles for shell...\"));\n\n  const results = await Promise.allSettled([\n    (async () => {\n      const bundle = await downloadBundle(params.api, params.appId, \"ios\", baseDir);\n      const strategy = bundle.meta.strategy;\n      let assets: BaseAssetsMeta | undefined;\n      let exportMetadata: BaseAssetsMeta | undefined;\n      try {\n        assets = await downloadBundleAssets(\n          params.api,\n          params.appId,\n          bundle.bundleId,\n          strategy === \"expoExport\" ? \"expo-export-assets\" : \"metro-assets\",\n          path.join(baseDir, baseAssetsFilename(\"ios\", strategy))\n        );\n      } catch (e) {\n        log(pc.yellow(`Warning: failed to download iOS assets (${(e as Error)?.message ?? e})`));\n      }\n      if (strategy === \"expoExport\") {\n        try {\n          exportMetadata = await downloadBundleAssets(\n            params.api,\n            params.appId,\n            bundle.bundleId,\n            \"expo-export-metadata\",\n            path.join(baseDir, baseExportMetadataFilename(\"ios\"))\n          );\n        } catch (e) {\n          log(pc.yellow(`Warning: failed to download iOS export metadata (${(e as Error)?.message ?? e})`));\n        }\n      }\n      return { platform: \"ios\" as const, meta: { bundle: bundle.meta, ...(assets ? { assets } : {}), ...(exportMetadata ? { exportMetadata } : {}) } };\n    })(),\n    (async () => {\n      const bundle = await downloadBundle(params.api, params.appId, \"android\", baseDir);\n      const strategy = bundle.meta.strategy;\n      let assets: BaseAssetsMeta | undefined;\n      let exportMetadata: BaseAssetsMeta | undefined;\n      try {\n        assets = await downloadBundleAssets(\n          params.api,\n          params.appId,\n          bundle.bundleId,\n          strategy === \"expoExport\" ? \"expo-export-assets\" : \"metro-assets\",\n          path.join(baseDir, baseAssetsFilename(\"android\", strategy))\n        );\n      } catch (e) {\n        log(pc.yellow(`Warning: failed to download Android assets (${(e as Error)?.message ?? e})`));\n      }\n      if (strategy === \"expoExport\") {\n        try {\n          exportMetadata = await downloadBundleAssets(\n            params.api,\n            params.appId,\n            bundle.bundleId,\n            \"expo-export-metadata\",\n            path.join(baseDir, baseExportMetadataFilename(\"android\"))\n          );\n        } catch (e) {\n          log(pc.yellow(`Warning: failed to download Android export metadata (${(e as Error)?.message ?? e})`));\n        }\n      }\n      return { platform: \"android\" as const, meta: { bundle: bundle.meta, ...(assets ? { assets } : {}), ...(exportMetadata ? { exportMetadata } : {}) } };\n    })(),\n  ]);\n\n  const meta: EmbeddedBaseBundlesMeta = {};\n  for (const res of results) {\n    if (res.status === \"fulfilled\") {\n      meta[res.value.platform] = res.value.meta;\n    } else {\n      log(pc.yellow(`Warning: failed to download ${res.reason?.message ?? res.reason}`));\n    }\n  }\n\n  await fsPromises.mkdir(baseDir, { recursive: true });\n  await fsPromises.writeFile(path.join(baseDir, \"base.meta.json\"), JSON.stringify(meta, null, 2) + \"\\n\", \"utf8\");\n  return meta;\n}\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport archiver from \"archiver\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport const MAX_IMPORT_ZIP_BYTES = 50 * 1024 * 1024;\nexport const MAX_IMPORT_FILE_COUNT = 25_000;\n\nexport type ZipStats = {\n  fileCount: number;\n  totalBytes: number;\n  largestFiles: Array<{ path: string; bytes: number }>;\n};\n\nfunction normalizeRel(p: string): string {\n  return p.replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\").replace(/^\\/+/, \"\");\n}\n\nexport function validateRelPath(rel: string): string {\n  const p = normalizeRel(rel);\n  if (!p) throw new CliError(\"Invalid file path.\", { exitCode: 1 });\n  if (p.startsWith(\"../\") || p.includes(\"/../\") || p === \"..\") {\n    throw new CliError(\"Refusing to add a path traversal entry.\", { exitCode: 1, hint: p });\n  }\n  if (p.startsWith(\"/\")) {\n    throw new CliError(\"Refusing to add an absolute path.\", { exitCode: 1, hint: p });\n  }\n  return p;\n}\n\nexport async function computeStats(params: { root: string; files: string[]; largestN?: number }): Promise<ZipStats> {\n  const largestN = params.largestN ?? 10;\n  if (params.files.length > MAX_IMPORT_FILE_COUNT) {\n    throw new CliError(\"Too many files to import.\", {\n      exitCode: 2,\n      hint: `File count ${params.files.length} exceeds limit ${MAX_IMPORT_FILE_COUNT}. Use --path or add ignores.`,\n    });\n  }\n\n  let totalBytes = 0;\n  const largest: Array<{ path: string; bytes: number }> = [];\n\n  for (const rel0 of params.files) {\n    const rel = validateRelPath(rel0);\n    const abs = path.join(params.root, rel);\n    const st = await fsp.stat(abs);\n    if (!st.isFile()) continue;\n    const bytes = st.size;\n    totalBytes += bytes;\n    if (largestN > 0) {\n      largest.push({ path: rel, bytes });\n    }\n  }\n\n  largest.sort((a, b) => b.bytes - a.bytes);\n  return {\n    fileCount: params.files.length,\n    totalBytes,\n    largestFiles: largest.slice(0, largestN),\n  };\n}\n\nexport async function createZip(params: { root: string; files: string[]; zipName?: string }): Promise<{ zipPath: string }> {\n  const zipName = (params.zipName ?? \"import.zip\").replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  const tmpDir = await fsp.mkdtemp(path.join(os.tmpdir(), \"remix-import-\"));\n  const zipPath = path.join(tmpDir, zipName);\n\n  await new Promise<void>((resolve, reject) => {\n    const output = fs.createWriteStream(zipPath);\n    const archive = archiver(\"zip\", { zlib: { level: 9 } });\n    output.on(\"close\", () => resolve());\n    output.on(\"error\", (err) => reject(err));\n    archive.on(\"warning\", (err: any) => {\n      // Treat warnings as errors for safety.\n      reject(err);\n    });\n    archive.on(\"error\", (err: any) => reject(err));\n\n    archive.pipe(output);\n    for (const rel0 of params.files) {\n      const rel = validateRelPath(rel0);\n      const abs = path.join(params.root, rel);\n      archive.file(abs, { name: rel });\n    }\n    void archive.finalize();\n  });\n\n  const st = await fsp.stat(zipPath);\n  if (st.size > MAX_IMPORT_ZIP_BYTES) {\n    throw new CliError(\"Archive exceeds the upload size limit.\", {\n      exitCode: 2,\n      hint: `Zip size ${st.size} bytes exceeds limit ${MAX_IMPORT_ZIP_BYTES} bytes. Use --path or add ignores.`,\n    });\n  }\n\n  return { zipPath };\n}\n\nexport async function sha256FileHex(filePath: string): Promise<string> {\n  const hash = crypto.createHash(\"sha256\");\n  await new Promise<void>((resolve, reject) => {\n    const s = fs.createReadStream(filePath);\n    s.on(\"data\", (chunk) => hash.update(chunk));\n    s.on(\"error\", reject);\n    s.on(\"end\", () => resolve());\n  });\n  return hash.digest(\"hex\");\n}\n\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport fg from \"fast-glob\";\nimport { execa } from \"execa\";\n\nimport { readPackageJson } from \"./packageJson.js\";\n\ntype ExpoConfig = {\n  name?: unknown;\n  slug?: unknown;\n  platforms?: unknown;\n  ios?: { bundleIdentifier?: unknown };\n  android?: { package?: unknown };\n};\n\nexport type AppDefaults = {\n  name: string | null;\n  slug: string | null;\n  iosBundleId: string | null;\n  androidPackageName: string | null;\n  iosEnabled: boolean | null;\n  androidEnabled: boolean | null;\n  suggestedBundleId: string | null;\n};\n\nfunction normalizeString(value: unknown): string | null {\n  if (typeof value !== \"string\") return null;\n  const trimmed = value.trim();\n  return trimmed ? trimmed : null;\n}\n\nfunction normalizeSlug(value: string | null): string | null {\n  if (!value) return null;\n  const cleaned = value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9.-]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n  return cleaned || null;\n}\n\nfunction suggestBundleId(slug: string | null): string | null {\n  if (!slug) return null;\n  return `com.example.${slug}`;\n}\n\nfunction derivePlatforms(config: ExpoConfig, iosBundleId: string | null, androidPackageName: string | null) {\n  const platforms = Array.isArray(config.platforms) ? config.platforms.map(String) : null;\n  const iosEnabled = platforms ? platforms.includes(\"ios\") : iosBundleId ? true : null;\n  const androidEnabled = platforms ? platforms.includes(\"android\") : androidPackageName ? true : null;\n  return { iosEnabled, androidEnabled };\n}\n\nasync function loadExpoConfig(projectRoot: string): Promise<ExpoConfig> {\n  try {\n    const res = await execa(\"npx\", [\"expo\", \"config\", \"--json\"], { cwd: projectRoot });\n    const parsed = JSON.parse(res.stdout);\n    if (parsed && typeof parsed === \"object\" && \"expo\" in parsed) {\n      return (parsed as any).expo ?? {};\n    }\n    return parsed as ExpoConfig;\n  } catch {\n    // fall through to app.json\n  }\n\n  const appJsonPath = path.join(projectRoot, \"app.json\");\n  const rawAppJson = await fs.readFile(appJsonPath, \"utf8\").catch(() => null);\n  if (!rawAppJson) return {};\n  try {\n    const parsed = JSON.parse(rawAppJson);\n    if (parsed && typeof parsed === \"object\" && \"expo\" in parsed) {\n      return (parsed as any).expo ?? {};\n    }\n  } catch {}\n  return {};\n}\n\nasync function findIosBundleId(projectRoot: string): Promise<string | null> {\n  const pbxprojMatches = await fg(\"ios/**/*.xcodeproj/project.pbxproj\", {\n    cwd: projectRoot,\n    absolute: true,\n    suppressErrors: true,\n  });\n  for (const file of pbxprojMatches) {\n    const raw = await fs.readFile(file, \"utf8\").catch(() => null);\n    if (!raw) continue;\n    const match = raw.match(/PRODUCT_BUNDLE_IDENTIFIER\\s*=\\s*([A-Za-z0-9.\\-]+)\\s*;/);\n    if (match && match[1]) return match[1];\n  }\n\n  const plistMatches = await fg(\"ios/**/Info.plist\", {\n    cwd: projectRoot,\n    absolute: true,\n    suppressErrors: true,\n  });\n  for (const file of plistMatches) {\n    const raw = await fs.readFile(file, \"utf8\").catch(() => null);\n    if (!raw) continue;\n    const match = raw.match(/<key>CFBundleIdentifier<\\/key>\\s*<string>([^<]+)<\\/string>/);\n    if (match && match[1] && !match[1].includes(\"$\")) return match[1];\n  }\n\n  return null;\n}\n\nasync function findAndroidPackageName(projectRoot: string): Promise<string | null> {\n  const gradlePaths = [\"android/app/build.gradle\", \"android/app/build.gradle.kts\"];\n  for (const rel of gradlePaths) {\n    const file = path.join(projectRoot, rel);\n    const raw = await fs.readFile(file, \"utf8\").catch(() => null);\n    if (!raw) continue;\n    const match =\n      raw.match(/applicationId\\s+[\"']([^\"']+)[\"']/) ||\n      raw.match(/applicationId\\s*=\\s*[\"']([^\"']+)[\"']/);\n    if (match && match[1]) return match[1];\n  }\n\n  const manifestMatches = await fg(\"android/**/AndroidManifest.xml\", {\n    cwd: projectRoot,\n    absolute: true,\n    suppressErrors: true,\n  });\n  for (const file of manifestMatches) {\n    const raw = await fs.readFile(file, \"utf8\").catch(() => null);\n    if (!raw) continue;\n    const match = raw.match(/<manifest[^>]*\\spackage=\"([^\"]+)\"/);\n    if (match && match[1] && !match[1].includes(\"$\")) return match[1];\n  }\n\n  return null;\n}\n\nexport async function inferExpoAppDefaults(projectRoot: string): Promise<AppDefaults> {\n  const expoConfig = await loadExpoConfig(projectRoot);\n\n  const name = normalizeString(expoConfig.name);\n  const slug = normalizeSlug(normalizeString(expoConfig.slug));\n  const iosBundleId = normalizeString(expoConfig.ios?.bundleIdentifier);\n  const androidPackageName = normalizeString(expoConfig.android?.package);\n  const platforms = derivePlatforms(expoConfig, iosBundleId, androidPackageName);\n\n  let fallbackName = name;\n  if (!fallbackName) {\n    const pkg = await readPackageJson(projectRoot).catch(() => null);\n    fallbackName = normalizeString(pkg?.name ?? null);\n  }\n  if (!fallbackName) {\n    fallbackName = normalizeString(path.basename(projectRoot));\n  }\n\n  const resolvedSlug = slug ?? normalizeSlug(fallbackName ?? null) ?? normalizeSlug(path.basename(projectRoot));\n  const suggestedBundleId = suggestBundleId(resolvedSlug);\n\n  const nativeIosBundleId = iosBundleId ?? (await findIosBundleId(projectRoot));\n  const nativeAndroidPackage = androidPackageName ?? (await findAndroidPackageName(projectRoot));\n\n  return {\n    name: fallbackName,\n    slug: resolvedSlug,\n    iosBundleId: nativeIosBundleId,\n    androidPackageName: nativeAndroidPackage,\n    iosEnabled: platforms.iosEnabled,\n    androidEnabled: platforms.androidEnabled,\n    suggestedBundleId,\n  };\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { writeJsonAtomic } from \"../utils/fs.js\";\n\nconst KEYTAR_SERVICE = \"remix-cli-api-keys\";\n\n// See sessionStore.ts: when launched by the desktop we still skip the\n// system keychain (avoids a macOS access-prompt across signing\n// identities), but the on-disk file is shared with terminal callers\n// so a `remix login` from one surface flows through to the other.\nfunction isDesktop(): boolean {\n  return process.env.REMIX_DESKTOP === \"1\";\n}\n\nfunction xdgConfigHome(): string {\n  const v = process.env.XDG_CONFIG_HOME;\n  if (typeof v === \"string\" && v.trim().length > 0) return v;\n  return path.join(os.homedir(), \".config\");\n}\n\nfunction apiKeyFilePath(): string {\n  return path.join(xdgConfigHome(), \"remix\", \"api-keys.json\");\n}\n\n// Pre-unification path. Read at lookup time so users mid-migration\n// don't lose desktop-stored API keys; cleaned up on the next write.\nfunction legacyDesktopApiKeyFilePath(): string {\n  return path.join(xdgConfigHome(), \"remix\", \"desktop-api-keys.json\");\n}\n\nasync function ensurePathPermissions(filePath: string): Promise<void> {\n  const dir = path.dirname(filePath);\n  await fs.mkdir(dir, { recursive: true });\n  try {\n    await fs.chmod(dir, 0o700);\n  } catch {}\n  try {\n    await fs.chmod(filePath, 0o600);\n  } catch {}\n}\n\ntype KeytarLike = {\n  getPassword(service: string, account: string): Promise<string | null>;\n  setPassword(service: string, account: string, password: string): Promise<void>;\n};\n\nasync function defaultLoadKeytar(): Promise<KeytarLike | null> {\n  if (isDesktop()) return null;\n  try {\n    const mod: any = await import(\"keytar\");\n    const candidates = [mod?.default, mod].filter(Boolean);\n    for (const c of candidates) {\n      if (c && typeof c.getPassword === \"function\" && typeof c.setPassword === \"function\") {\n        return c;\n      }\n    }\n    return null;\n  } catch {\n    return null;\n  }\n}\n\nlet loadKeytar = defaultLoadKeytar;\n\nexport function setApiKeyStoreKeytarForTests(loader: typeof defaultLoadKeytar): () => void {\n  loadKeytar = loader;\n  return () => {\n    loadKeytar = defaultLoadKeytar;\n  };\n}\n\nfunction keyId(orgId: string, clientAppId: string): string {\n  return `${orgId}:${clientAppId}`;\n}\n\ntype ApiKeyMap = Record<string, string>;\n\nasync function readKeyFileFrom(filePath: string): Promise<ApiKeyMap> {\n  const raw = await fs.readFile(filePath, \"utf8\").catch(() => null);\n  if (!raw) return {};\n  try {\n    const parsed = JSON.parse(raw);\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n    return parsed as ApiKeyMap;\n  } catch {\n    return {};\n  }\n}\n\nasync function readKeyFile(): Promise<ApiKeyMap> {\n  // Merge unified + legacy file. Unified wins on key collisions\n  // because that's the format we'll persist next time.\n  const [unified, legacy] = await Promise.all([\n    readKeyFileFrom(apiKeyFilePath()),\n    readKeyFileFrom(legacyDesktopApiKeyFilePath()),\n  ]);\n  return { ...legacy, ...unified };\n}\n\nexport async function getStoredApiKey(orgId: string, clientAppId: string): Promise<string | null> {\n  const account = keyId(orgId, clientAppId);\n  const map = await readKeyFile();\n  const key = map[account];\n  if (key && key.trim()) return key.trim();\n\n  const keytar = await loadKeytar();\n  if (!keytar) return null;\n  const raw = await keytar.getPassword(KEYTAR_SERVICE, account);\n  return raw && raw.trim() ? raw.trim() : null;\n}\n\nexport async function setStoredApiKey(orgId: string, clientAppId: string, apiKey: string): Promise<void> {\n  const account = keyId(orgId, clientAppId);\n  const trimmed = String(apiKey || \"\").trim();\n  if (!trimmed) {\n    throw new CliError(\"API key is empty and was not stored.\", { exitCode: 1 });\n  }\n\n  const fp = apiKeyFilePath();\n  const map = await readKeyFile();\n  map[account] = trimmed;\n  await writeJsonAtomic(fp, map);\n  await ensurePathPermissions(fp);\n  // One-shot migration: the unified file now holds everything that\n  // was in the legacy `desktop-api-keys.json`, so drop it. Best-\n  // effort — readKeyFile() merges both anyway if the cleanup races.\n  await fs.rm(legacyDesktopApiKeyFilePath(), { force: true }).catch(() => {});\n\n  const keytar = await loadKeytar();\n  if (keytar) {\n    await keytar.setPassword(KEYTAR_SERVICE, account, trimmed);\n  }\n}\n","import { spawn } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport pc from \"picocolors\";\nimport {\n  collabListMembers as collabListMembersCore,\n  collabUpdateMemberRole as collabUpdateMemberRoleCore,\n  getMemberRolesForScope,\n  collabFinalizeTurn as collabFinalizeTurnCore,\n  collabApprove as collabApproveCore,\n  collabCheckout as collabCheckoutCore,\n  cleanStaleFinalizeJobLocks as cleanStaleFinalizeJobLocksCore,\n  drainPendingFinalizeQueue as collabDrainPendingFinalizeQueueCore,\n  forgetPendingFinalizeJob as forgetPendingFinalizeJobCore,\n  listPendingFinalizeJobs as listPendingFinalizeJobsCore,\n  readPendingFinalizeJob as readPendingFinalizeJobCore,\n  requeuePendingFinalizeJob as requeuePendingFinalizeJobCore,\n  type PendingFinalizeJob,\n  collabListMergeRequests as collabListMergeRequestsCore,\n  collabInit as collabInitCore,\n  collabInitSubmit as collabInitSubmitCore,\n  collabInvite as collabInviteCore,\n  collabList as collabListCore,\n  collabReconcile as collabReconcileCore,\n  collabReject as collabRejectCore,\n  collabRemix as collabRemixCore,\n  collabRequestMerge as collabRequestMergeCore,\n  collabStatus as collabStatusCore,\n  collabSync as collabSyncCore,\n  collabSyncUpstream as collabSyncUpstreamCore,\n  collabView as collabViewCore,\n  drainAsyncJobs as drainAsyncJobsCore,\n  drainerLogPath,\n  listAsyncJobsForRepo,\n  type AsyncJob,\n  type AppProfileInput,\n  type CollabApproveMode,\n  type CollabApiClient,\n  type CollabStatus,\n  type InvitationScopeType,\n  type MergeRequestQueue,\n} from \"@remixhq/core/collab\";\n\nimport { createApiClient } from \"../clients/api.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { ensureAuth } from \"./ensureAuth.js\";\nimport { createAuthedApi, loadBindingContext, unwrapResponseObject } from \"./serviceHelpers.js\";\nimport {\n  attachPendingAsyncJobs,\n  awaitWithProgress,\n  printAwaitResult,\n  printDeprecationHintOnce,\n  spawnAsyncJobsDrainer,\n  warnAboutAsyncJobIssues,\n} from \"./asyncJobsClient.js\";\n\nasync function readStdin(): Promise<string> {\n  const chunks: Buffer[] = [];\n  for await (const chunk of process.stdin) {\n    chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n  }\n  return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction logMaybe(json: boolean, message: string) {\n  if (!json) console.log(message);\n}\n\nfunction collectResultWarnings(value: unknown): string[] {\n  if (!value || typeof value !== \"object\") return [];\n  const warnings = (value as { warnings?: unknown }).warnings;\n  if (!Array.isArray(warnings)) return [];\n  return warnings.filter((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n}\n\nfunction printResultWarnings(json: boolean, value: unknown) {\n  if (json) return;\n  for (const warning of collectResultWarnings(value)) {\n    console.log(pc.yellow(warning));\n  }\n}\n\nfunction printMergeRequests(result: { mergeRequests?: unknown }, json: boolean) {\n  if (json) return;\n  const items = Array.isArray(result.mergeRequests) ? result.mergeRequests : [];\n  for (const mr of items as Array<Record<string, any>>) {\n    console.log(`${mr.id}  ${mr.status}  ${mr.title ?? \"(untitled)\"}`);\n  }\n}\n\nasync function createCollabApi(params: { yes: boolean; json: boolean }): Promise<CollabApiClient> {\n  await ensureAuth({ yes: params.yes, json: params.json });\n  const cfg = await resolveConfig({ yes: params.yes });\n  return createApiClient(cfg) as unknown as CollabApiClient;\n}\n\nfunction spawnFinalizeQueueDrainer(cwd: string): void {\n  const entrypoint = process.argv[1];\n  if (!entrypoint) return;\n  const child = spawn(\n    process.execPath,\n    [...process.execArgv, entrypoint, \"collab\", \"drain-finalize-queue\", \"--cwd\", cwd],\n    {\n      detached: true,\n      stdio: \"ignore\",\n      env: process.env,\n    },\n  );\n  child.unref();\n}\n\nasync function resolveInviteTargetId(params: {\n  api: CollabApiClient;\n  cwd: string;\n  scope: InvitationScopeType;\n  targetId?: string | null;\n}) {\n  if (params.targetId?.trim()) return params.targetId.trim();\n  const { binding } = await loadBindingContext(params.cwd);\n  if (!binding) {\n    throw new CliError(\"Repository is not bound to Remix and no explicit target id was provided.\", { exitCode: 2 });\n  }\n  if (params.scope === \"project\") {\n    if (!binding.projectId) {\n      throw new CliError(\"Could not resolve the project for the current repository binding.\", { exitCode: 2 });\n    }\n    return binding.projectId;\n  }\n  if (params.scope === \"app\") return binding.currentAppId;\n\n  if (!binding.projectId) {\n    throw new CliError(\"Could not resolve the project for the current repository binding.\", { exitCode: 2 });\n  }\n\n  const project = (await params.api.getProject(binding.projectId)) as {\n    responseObject?: { organizationId?: string | null } | null;\n  };\n  const organizationId = project.responseObject?.organizationId ?? null;\n  if (!organizationId) {\n    throw new CliError(\"Could not resolve the organization for the current repository binding.\", { exitCode: 2 });\n  }\n  return organizationId;\n}\n\nasync function runInviteList(params: {\n  api: CollabApiClient;\n  scope: InvitationScopeType;\n  targetId: string;\n  limit?: number;\n  offset?: number;\n}) {\n  const response =\n    params.scope === \"organization\"\n      ? await params.api.listOrganizationInvites(params.targetId, {\n          limit: params.limit,\n          offset: params.offset,\n        })\n      : params.scope === \"project\"\n        ? await params.api.listProjectInvites(params.targetId, {\n            limit: params.limit,\n            offset: params.offset,\n          })\n        : await params.api.listAppInvites(params.targetId, {\n            limit: params.limit,\n            offset: params.offset,\n          });\n  return ((response as { responseObject?: unknown }).responseObject ?? response) as unknown;\n}\n\nasync function runInviteResend(params: {\n  api: CollabApiClient;\n  scope: InvitationScopeType;\n  targetId: string;\n  inviteId: string;\n  ttlDays?: number;\n}) {\n  const response =\n    params.scope === \"organization\"\n      ? await params.api.resendOrganizationInvite(params.targetId, params.inviteId, { ttlDays: params.ttlDays })\n      : params.scope === \"project\"\n        ? await params.api.resendProjectInvite(params.targetId, params.inviteId, { ttlDays: params.ttlDays })\n        : await params.api.resendAppInvite(params.targetId, params.inviteId, { ttlDays: params.ttlDays });\n  return ((response as { responseObject?: unknown }).responseObject ?? response) as unknown;\n}\n\nasync function runInviteRevoke(params: {\n  api: CollabApiClient;\n  scope: InvitationScopeType;\n  targetId: string;\n  inviteId: string;\n}) {\n  const response =\n    params.scope === \"organization\"\n      ? await params.api.revokeOrganizationInvite(params.targetId, params.inviteId)\n      : params.scope === \"project\"\n        ? await params.api.revokeProjectInvite(params.targetId, params.inviteId)\n        : await params.api.revokeAppInvite(params.targetId, params.inviteId);\n  return ((response as { responseObject?: unknown }).responseObject ?? response) as unknown;\n}\n\nfunction isQueuedInitResult(result: unknown): result is { queued: true; jobId: string; repoRoot: string } {\n  return (\n    !!result &&\n    typeof result === \"object\" &&\n    (result as { queued?: unknown }).queued === true &&\n    typeof (result as { jobId?: unknown }).jobId === \"string\"\n  );\n}\n\nexport async function collabInit(params: {\n  cwd: string;\n  appName?: string | null;\n  profile?: AppProfileInput | null;\n  json: boolean;\n  yes: boolean;\n  forceNew?: boolean;\n  queue?: boolean;\n  waitTimeoutSeconds?: number | null;\n}) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n\n  if (params.queue) {\n    const submitResult = await collabInitSubmitCore({\n      api,\n      cwd: params.cwd,\n      appName: params.appName,\n      profile: params.profile,\n      forceNew: params.forceNew,\n    });\n    spawnAsyncJobsDrainer(params.cwd);\n\n    if (isQueuedInitResult(submitResult)) {\n      if (params.waitTimeoutSeconds && params.waitTimeoutSeconds > 0) {\n        const awaitResult = await awaitWithProgress({\n          jobId: submitResult.jobId,\n          timeoutMs: params.waitTimeoutSeconds * 1000,\n          json: params.json,\n        });\n        if (!params.json) printAwaitResult(awaitResult, submitResult.jobId);\n        const enriched = { ...submitResult, await: awaitResult };\n        return await attachPendingAsyncJobs(enriched, params.cwd);\n      }\n      if (!params.json) {\n        console.log(pc.green(`Init queued. jobId=${submitResult.jobId}`));\n        console.log(pc.dim(\"Run `remix collab status` to check progress.\"));\n      }\n      return await attachPendingAsyncJobs({ ...submitResult }, params.cwd);\n    }\n    // Already-bound fast path returned a sync result through collabInitSubmit.\n    return await printAndReturnInitSync(submitResult, params);\n  }\n\n  printDeprecationHintOnce();\n  const result = await collabInitCore({\n    api,\n    cwd: params.cwd,\n    appName: params.appName,\n    profile: params.profile,\n    forceNew: params.forceNew,\n  });\n  spawnAsyncJobsDrainer(params.cwd);\n  return await printAndReturnInitSync(result, params);\n}\n\nasync function printAndReturnInitSync(\n  result: unknown,\n  params: { cwd: string; json: boolean },\n): Promise<unknown> {\n  if (!params.json) {\n    const r = result as {\n      reused?: boolean;\n      appId?: string;\n      dashboardUrl?: string;\n      baselineStatus?: string;\n    };\n    if (r.reused) {\n      console.log(pc.green(`Bound existing Remix project. appId=${r.appId}`));\n    } else {\n      console.log(pc.green(`Initialized repository in Remix. appId=${r.appId}`));\n    }\n    if (r.dashboardUrl) console.log(pc.dim(`Dashboard: ${r.dashboardUrl}`));\n    if (r.baselineStatus === \"seeded\") {\n      console.log(pc.green(\"Initial local Remix baseline created. This checkout is ready for turn recording.\"));\n    } else if (r.baselineStatus === \"requires_sync\") {\n      console.log(pc.yellow(\"Next step: run `remix collab sync` to pull the server delta and create the first baseline for this checkout.\"));\n    } else if (r.baselineStatus === \"baseline_missing\") {\n      console.log(pc.yellow(\"Next step: run `remix collab init` or `remix collab sync` to seed this checkout's revision baseline before recording turns.\"));\n    } else if (r.baselineStatus === \"existing\") {\n      console.log(pc.dim(\"Existing local Remix baseline detected for this lane.\"));\n    }\n    // Only show the invite tip on a brand-new init. When `reused` is true the\n    // user just bound to an existing project that already has collaborators,\n    // so the hint would be redundant (and possibly misleading — they're not\n    // necessarily the owner). Mirror the agent-side hint emitted by the\n    // init-or-remix skill so users see the same guidance regardless of\n    // whether they ran init via the CLI or via Claude.\n    if (!r.reused) {\n      console.log(\n        pc.dim(\n          \"Invite teammates anytime: ask your agent to invite their email, or run `remix collab invite <email>`.\",\n        ),\n      );\n    }\n    printResultWarnings(params.json, result);\n  }\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabList(params: {\n  ownership?: \"mine\" | \"shared\" | \"all\";\n  accessScope?: \"all_readable\" | \"explicit_member\";\n  createdBy?: \"me\" | string | null;\n  forked?: \"only\" | \"exclude\" | \"all\";\n  limit?: number;\n  offset?: number;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabListCore({\n    api,\n    ownership: params.ownership,\n    accessScope: params.accessScope,\n    createdBy: params.createdBy ?? undefined,\n    forked: params.forked,\n    limit: params.limit,\n    offset: params.offset,\n  });\n  if (!params.json) {\n    for (const app of result.apps) {\n      console.log(`${app.id}  ${app.name}  status=${app.status}  project=${app.projectId}${app.forkedFromAppId ? `  forkOf=${app.forkedFromAppId}` : \"\"}`);\n    }\n  }\n  return result;\n}\n\nexport async function collabStatus(params: { cwd: string; json: boolean; yes: boolean }) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const localStatus = await collabStatusCore({\n    api: null,\n    cwd: params.cwd,\n  });\n\n  let result = localStatus;\n  if (localStatus.repo.isGitRepo && localStatus.binding.isBound) {\n    try {\n      result = await collabStatusCore({\n        api: await createCollabApi(params),\n        cwd: params.cwd,\n      });\n    } catch (err) {\n      const detail =\n        err instanceof CliError\n          ? [err.message, err.hint].filter(Boolean).join(\"\\n\\n\") || \"Remote collab checks are unavailable.\"\n          : err instanceof Error\n            ? err.message || \"Remote collab checks are unavailable.\"\n            : \"Remote collab checks are unavailable.\";\n      result = {\n        ...localStatus,\n        remote: {\n          ...localStatus.remote,\n          error: detail,\n        },\n        sync: {\n          ...localStatus.sync,\n          error: detail,\n          blockedReasons: Array.from(new Set([...localStatus.sync.blockedReasons, \"remote_error\"])),\n        },\n        reconcile: {\n          ...localStatus.reconcile,\n          error: detail,\n          blockedReasons: Array.from(new Set([...localStatus.reconcile.blockedReasons, \"remote_error\"])),\n        },\n        recommendedAction: localStatus.recommendedAction,\n        warnings: Array.from(new Set([...localStatus.warnings, detail].filter(Boolean))),\n      };\n    }\n  }\n\n  const repoRoot = result.repo.repoRoot ?? params.cwd;\n  let pendingAsyncJobs: AsyncJob[] = [];\n  try {\n    pendingAsyncJobs = await listAsyncJobsForRepo({ repoRoot });\n  } catch {\n    pendingAsyncJobs = [];\n  }\n  // Only surface non-completed jobs to keep the section focused on actionable state.\n  const visibleJobs = pendingAsyncJobs.filter((job) => job.status !== \"completed\");\n\n  if (!params.json) {\n    printCollabStatus(result);\n    await printPendingAsyncJobsSection(visibleJobs);\n  }\n\n  return await attachPendingAsyncJobs(\n    Object.assign({}, result as object, { pendingAsyncJobsList: visibleJobs }),\n    repoRoot,\n  );\n}\n\nasync function printPendingAsyncJobsSection(jobs: AsyncJob[]): Promise<void> {\n  console.log(\"\");\n  console.log(pc.bold(\"Pending async jobs\"));\n  if (jobs.length === 0) {\n    console.log(\"  none\");\n  } else {\n    const now = Date.now();\n    for (const job of jobs) {\n      const updated = Date.parse(job.updatedAt);\n      const ageMs = Number.isFinite(updated) ? now - updated : 0;\n      const errorTail = job.error ? ` error=${firstLineForStatus(job.error)}` : \"\";\n      console.log(\n        `  ${job.kind} ${job.id} status=${job.status} age=${formatAgeForStatus(ageMs)} retries=${job.retryCount}${errorTail}`,\n      );\n    }\n  }\n  const logPath = drainerLogPath();\n  let logHint = `log: ${logPath}`;\n  try {\n    await fsAccess(logPath);\n  } catch {\n    logHint = `log: ${logPath} (not yet created)`;\n  }\n  console.log(pc.dim(logHint));\n}\n\nasync function fsAccess(p: string): Promise<void> {\n  await fs.access(p);\n}\n\nfunction formatAgeForStatus(ms: number): string {\n  if (ms < 0) ms = 0;\n  if (ms < 1000) return `${ms}ms`;\n  const sec = Math.floor(ms / 1000);\n  if (sec < 60) return `${sec}s`;\n  const min = Math.floor(sec / 60);\n  if (min < 60) return `${min}m`;\n  const hr = Math.floor(min / 60);\n  if (hr < 24) return `${hr}h`;\n  return `${Math.floor(hr / 24)}d`;\n}\n\nfunction firstLineForStatus(value: string): string {\n  const line = value.split(\"\\n\", 1)[0] ?? \"\";\n  return line.length > 160 ? `${line.slice(0, 160)}…` : line;\n}\n\nfunction printCollabStatus(result: CollabStatus) {\n  if (!result.repo.isGitRepo) {\n    console.log(pc.yellow(\"Repository: not inside a git repository\"));\n    return;\n  }\n\n  console.log(pc.bold(\"Repository\"));\n  console.log(`${result.repo.repoRoot}`);\n  console.log(`branch=${result.repo.branch ?? \"(detached)\"}`);\n  console.log(`branchMismatch=${result.repo.branchMismatch ? \"yes\" : \"no\"}`);\n  console.log(`head=${result.repo.headCommitHash ?? \"unknown\"}`);\n  console.log(\n    `worktree=${result.repo.worktree.isClean ? \"clean\" : \"dirty\"} entries=${result.repo.worktree.entryCount} tracked=${\n      result.repo.worktree.hasTrackedChanges ? \"yes\" : \"no\"\n    } untracked=${result.repo.worktree.hasUntrackedFiles ? \"yes\" : \"no\"}`,\n  );\n\n  console.log(\"\");\n  console.log(pc.bold(\"Binding\"));\n  if (!result.binding.isBound) {\n    console.log(\"bound=no\");\n  } else {\n    console.log(`bound=yes appId=${result.binding.currentAppId} projectId=${result.binding.projectId}`);\n    console.log(`remix=${result.binding.isRemix ? \"yes\" : \"no\"} upstreamAppId=${result.binding.upstreamAppId}`);\n    console.log(`defaultChat=Main/default threadId=${result.binding.threadId ?? \"(unknown)\"}`);\n    console.log(`branchName=${result.binding.branchName ?? \"(unset)\"} defaultBranch=${result.binding.defaultBranch ?? \"(unknown)\"}`);\n    console.log(\n      `bindingMode=${result.binding.bindingMode ?? \"(unknown)\"} laneId=${result.binding.laneId ?? \"(none)\"} branchName=${result.binding.branchName ?? \"(unknown)\"}`,\n    );\n  }\n\n  console.log(\"\");\n  console.log(pc.bold(\"Remote\"));\n  console.log(`appStatus=${result.remote.appStatus ?? \"unknown\"}`);\n  console.log(\n    `incomingOpenMergeRequests=${result.remote.incomingOpenMergeRequestCount ?? \"unknown\"} outgoingOpenMergeRequests=${\n      result.remote.outgoingOpenMergeRequestCount ?? \"unknown\"\n    }`,\n  );\n\n  console.log(\"\");\n  console.log(pc.bold(\"Alignment\"));\n  console.log(\n    `repoState=${result.alignment.repoState ?? \"unknown\"} canRecordTurn=${result.alignment.canRecordTurn ? \"yes\" : \"no\"}`,\n  );\n  console.log(\n    `pendingFinalize=${result.alignment.pendingFinalize.state} active=${result.alignment.pendingFinalize.activeJobCount} queued=${result.alignment.pendingFinalize.queuedJobCount} processing=${result.alignment.pendingFinalize.processingJobCount} retryScheduled=${result.alignment.pendingFinalize.retryScheduledJobCount} awaitingUsage=${result.alignment.pendingFinalize.awaitingUsageJobCount} failed=${result.alignment.pendingFinalize.failedJobCount}`,\n  );\n  console.log(\n    `baselineSnapshot=${result.alignment.baseline.lastSnapshotId ?? \"none\"} serverHead=${result.alignment.current.serverHeadHash ?? \"unknown\"} localSnapshot=${result.alignment.current.snapshotHash ?? \"unknown\"}`,\n  );\n\n  console.log(\"\");\n  console.log(pc.bold(\"Recommendation\"));\n  console.log(result.recommendedAction);\n\n  if (result.warnings.length > 0) {\n    console.log(\"\");\n    console.log(pc.bold(\"Warnings\"));\n    for (const warning of result.warnings) {\n      console.log(`- ${warning}`);\n    }\n  }\n}\n\n// Emit a `[checkout] <phase>` marker on stderr for each phase\n// boundary inside `materializeAppCheckout`. The desktop setup-queue\n// pipes stderr into the job log (see `setupQueueManager.ts`), and\n// `Running.tsx`'s `computeSteps` reads the latest marker to update\n// the active step's live description. We write to stderr (not stdout)\n// so JSON-mode callers parsing stdout aren't affected.\nfunction reportCheckoutPhase(phase: string): void {\n  try {\n    process.stderr.write(`[checkout] ${phase}\\n`);\n  } catch {\n    /* progress is best-effort — never break a real checkout for it */\n  }\n}\n\nexport async function collabRemix(params: {\n  cwd: string;\n  outputDir?: string | null;\n  appId?: string | null;\n  json: boolean;\n  yes: boolean;\n  name?: string | null;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabRemixCore({\n    api,\n    cwd: params.cwd,\n    outputDir: params.outputDir ?? null,\n    appId: params.appId,\n    name: params.name,\n    onPhase: reportCheckoutPhase,\n  });\n  if (!params.json) {\n    console.log(pc.green(`Created remix. appId=${result.appId} path=${result.repoRoot}`));\n    console.log(pc.dim(`Dashboard: ${result.dashboardUrl}`));\n  }\n  return result;\n}\n\nexport async function collabCheckout(params: {\n  cwd: string;\n  outputDir?: string | null;\n  appId?: string | null;\n  skipLaneMaterialization?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabCheckoutCore({\n    api,\n    cwd: params.cwd,\n    outputDir: params.outputDir ?? null,\n    appId: params.appId,\n    skipLaneMaterialization: params.skipLaneMaterialization ?? false,\n    onPhase: reportCheckoutPhase,\n  });\n  if (!params.json) {\n    console.log(pc.green(`Checked out app. appId=${result.appId} path=${result.repoRoot}`));\n    console.log(pc.dim(`Dashboard: ${result.dashboardUrl}`));\n  }\n  return result;\n}\n\nexport async function collabFinalizeTurn(params: {\n  cwd: string;\n  prompt?: string | null;\n  assistantResponse?: string | null;\n  promptFile?: string | null;\n  assistantResponseFile?: string | null;\n  promptStdin?: boolean;\n  sync?: boolean;\n  allowBranchMismatch?: boolean;\n  idempotencyKey?: string | null;\n  json: boolean;\n  yes: boolean;\n  queue?: boolean;\n  waitTimeoutSeconds?: number | null;\n}) {\n  if (params.queue || params.waitTimeoutSeconds != null) {\n    const flag = params.queue ? \"--queue\" : \"--wait-timeout\";\n    throw new CliError(`${flag} is not yet supported for finalize-turn (tracked for v1.6).`, {\n      exitCode: 2,\n      hint: \"finalize-turn already runs asynchronously by default — you don't need this flag.\",\n    });\n  }\n\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n\n  let prompt = params.prompt?.trim() || \"\";\n  if (params.promptFile) prompt = (await fs.readFile(path.resolve(params.promptFile), \"utf8\")).trim();\n  if (params.promptStdin) prompt = (await readStdin()).trim();\n  if (!prompt) throw new CliError(\"Prompt is required.\", { exitCode: 2 });\n\n  let assistantResponse = params.assistantResponse?.trim() || \"\";\n  if (params.assistantResponseFile) {\n    assistantResponse = (await fs.readFile(path.resolve(params.assistantResponseFile), \"utf8\")).trim();\n  }\n  if (!assistantResponse) {\n    throw new CliError(\"Assistant response is required.\", {\n      exitCode: 2,\n      hint: \"Pass `--assistant-response` or `--assistant-response-file`.\",\n    });\n  }\n\n  const api = await createCollabApi(params);\n  const result = await collabFinalizeTurnCore({\n    api,\n    cwd: params.cwd,\n    prompt,\n    assistantResponse,\n    sync: params.sync,\n    allowBranchMismatch: params.allowBranchMismatch,\n    idempotencyKey: params.idempotencyKey,\n    actor: {\n      type: process.env.COMERGE_AGENT_TYPE || \"agent\",\n      name: process.env.COMERGE_AGENT_NAME || undefined,\n      version: process.env.COMERGE_AGENT_VERSION || undefined,\n      provider: process.env.COMERGE_AGENT_PROVIDER || undefined,\n    },\n  });\n  if (result.queued) {\n    spawnFinalizeQueueDrainer(params.cwd);\n  }\n  spawnAsyncJobsDrainer(params.cwd);\n\n  if (!params.json) {\n    const label =\n      result.mode === \"conversation_only\" ? \"conversation-only\" : result.mode === \"changed_turn\" ? \"changed\" : \"no-diff\";\n    console.log(pc.green(`Captured ${label} turn boundary locally.`));\n    if (result.queued) {\n      console.log(pc.yellow(`Queued only: remote recording has not finished yet. jobId=${result.jobId ?? \"unknown\"}`));\n      console.log(pc.dim(\"Run `remix collab drain-finalize-queue` before merge-related flows if you need the queued turn recorded immediately.\"));\n    }\n    printResultWarnings(params.json, result);\n  }\n\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function drainPendingFinalizeQueue(params: { cwd: string; json: boolean; yes: boolean }) {\n  const api = await createCollabApi(params);\n  const result = await collabDrainPendingFinalizeQueueCore({ api });\n  if (!params.json) {\n    logMaybe(\n      params.json,\n      pc.green(\n        result.length > 0\n          ? `Recorded ${result.length} queued finalize job${result.length === 1 ? \"\" : \"s\"} remotely.`\n          : \"No queued finalize jobs were ready to record.\",\n      ),\n    );\n  }\n  return result;\n}\n\n// `remix collab finalize-queue` operator surface. These commands deliberately\n// do NOT require backend auth — they only inspect / mutate local on-disk\n// state. The whole point is that an operator can recover from a wedged queue\n// even if the network or backend is down.\n\nfunction summarizeFinalizeJob(job: PendingFinalizeJob) {\n  const meta = job.metadata as Record<string, unknown>;\n  return {\n    id: job.id,\n    status: job.status,\n    repoRoot: job.repoRoot,\n    appId: job.currentAppId,\n    laneId: job.laneId,\n    branchName: job.branchName,\n    capturedAt: job.capturedAt,\n    updatedAt: job.updatedAt,\n    retryCount: job.retryCount,\n    nextRetryAt: job.nextRetryAt,\n    lastAttemptAt: job.lastAttemptAt,\n    error: job.error,\n    failureDisposition:\n      typeof meta?.failureDisposition === \"string\" ? (meta.failureDisposition as string) : null,\n    failureReason: typeof meta?.failureReason === \"string\" ? (meta.failureReason as string) : null,\n    consecutiveFailures:\n      typeof meta?.consecutiveFailures === \"number\" ? (meta.consecutiveFailures as number) : 0,\n  };\n}\n\nfunction colorForStatus(status: string): (s: string) => string {\n  switch (status) {\n    case \"queued\":\n      return pc.yellow;\n    case \"processing\":\n      return pc.cyan;\n    case \"completed\":\n      return pc.green;\n    case \"failed\":\n      return pc.red;\n    default:\n      return pc.dim;\n  }\n}\n\nexport async function finalizeQueueList(params: { json: boolean }) {\n  const jobs = await listPendingFinalizeJobsCore();\n  const summaries = jobs.map(summarizeFinalizeJob);\n  if (params.json) return summaries;\n  if (summaries.length === 0) {\n    console.log(pc.dim(\"Finalize queue is empty.\"));\n    return summaries;\n  }\n  console.log(pc.bold(`Finalize queue (${summaries.length} job${summaries.length === 1 ? \"\" : \"s\"}):`));\n  for (const job of summaries) {\n    const status = colorForStatus(job.status)(job.status.toUpperCase().padEnd(10));\n    const retry = job.retryCount > 0 ? pc.dim(` retries=${job.retryCount}`) : \"\";\n    const streak =\n      job.consecutiveFailures > 0\n        ? pc.dim(` streak=${job.consecutiveFailures}/${\"5\"} (${job.failureReason ?? \"?\"})`)\n        : \"\";\n    const next = job.nextRetryAt ? pc.dim(` next=${job.nextRetryAt}`) : \"\";\n    console.log(`  ${status} ${job.id}  ${pc.dim(job.repoRoot)}${retry}${streak}${next}`);\n    if (job.error) console.log(`    ${pc.red(\"error:\")} ${job.error}`);\n  }\n  return summaries;\n}\n\nexport async function finalizeQueueShow(params: { jobId: string; json: boolean }) {\n  const job = await readPendingFinalizeJobCore(params.jobId);\n  if (!job) {\n    if (params.json) return null;\n    console.log(pc.red(`Finalize job ${params.jobId} not found.`));\n    return null;\n  }\n  if (params.json) return job;\n  console.log(JSON.stringify(job, null, 2));\n  return job;\n}\n\nexport async function finalizeQueueRetry(params: { jobId: string; json: boolean }) {\n  const job = await requeuePendingFinalizeJobCore(params.jobId);\n  if (!job) {\n    if (params.json) return null;\n    console.log(pc.red(`Finalize job ${params.jobId} not found.`));\n    return null;\n  }\n  if (!params.json) {\n    console.log(\n      pc.green(\n        `Re-queued finalize job ${job.id} (status=${job.status}). The next drainer pass will pick it up.`,\n      ),\n    );\n  }\n  return job;\n}\n\nexport async function finalizeQueueForget(params: { jobId: string; json: boolean }) {\n  const before = await readPendingFinalizeJobCore(params.jobId);\n  if (!before) {\n    if (params.json) return { jobId: params.jobId, removed: false };\n    console.log(pc.red(`Finalize job ${params.jobId} not found.`));\n    return { jobId: params.jobId, removed: false };\n  }\n  await forgetPendingFinalizeJobCore(params.jobId);\n  if (!params.json) {\n    console.log(pc.green(`Forgot finalize job ${params.jobId} (was status=${before.status}).`));\n  }\n  return { jobId: params.jobId, removed: true };\n}\n\nexport async function finalizeQueueCleanLocks(params: { json: boolean }) {\n  const result = await cleanStaleFinalizeJobLocksCore();\n  if (params.json) return result;\n  if (result.removed.length === 0 && result.errors.length === 0) {\n    console.log(\n      pc.dim(\n        `No stale locks to clean (skipped ${result.skipped.length} fresh lock${result.skipped.length === 1 ? \"\" : \"s\"}).`,\n      ),\n    );\n  } else {\n    if (result.removed.length > 0) {\n      console.log(pc.green(`Removed ${result.removed.length} stale lock${result.removed.length === 1 ? \"\" : \"s\"}:`));\n      for (const id of result.removed) console.log(`  - ${id}`);\n    }\n    if (result.errors.length > 0) {\n      console.log(pc.red(`Failed to remove ${result.errors.length} lock${result.errors.length === 1 ? \"\" : \"s\"}:`));\n      for (const err of result.errors) console.log(`  - ${err.jobId}: ${err.error}`);\n    }\n  }\n  return result;\n}\n\nexport async function drainAsyncJobs(params: {\n  cwd: string;\n  json: boolean;\n  yes: boolean;\n  silent?: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const outcomes = await drainAsyncJobsCore({ api });\n  if (!params.json && !params.silent) {\n    if (outcomes.length === 0) {\n      console.log(pc.dim(\"No queued async jobs to drain.\"));\n    } else {\n      const completed = outcomes.filter((o) => o.status === \"completed\").length;\n      const failed = outcomes.filter((o) => o.status === \"failed\").length;\n      const retried = outcomes.filter((o) => o.status === \"retry_scheduled\").length;\n      const skipped = outcomes.filter((o) => o.status === \"skipped\").length;\n      console.log(\n        pc.green(\n          `Drained ${outcomes.length} async job${outcomes.length === 1 ? \"\" : \"s\"}: completed=${completed} failed=${failed} retry=${retried} skipped=${skipped}`,\n        ),\n      );\n      for (const outcome of outcomes) {\n        if (outcome.status === \"failed\") {\n          process.stderr.write(pc.red(`  ${outcome.jobId}: ${outcome.error}\\n`));\n        } else if (outcome.status === \"retry_scheduled\") {\n          process.stderr.write(\n            pc.yellow(`  ${outcome.jobId}: transient error (retry ${outcome.retryCount}/5) — ${outcome.error}\\n`),\n          );\n        }\n      }\n    }\n  }\n  return outcomes;\n}\n\nexport async function collabSync(params: {\n  cwd: string;\n  dryRun: boolean;\n  allowBranchMismatch?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n  const result = await collabSyncCore({\n    api,\n    cwd: params.cwd,\n    dryRun: params.dryRun,\n    allowBranchMismatch: params.allowBranchMismatch,\n  });\n  if (!params.dryRun) spawnAsyncJobsDrainer(params.cwd);\n  if (!params.json) {\n    if (result.status === \"up_to_date\") {\n      logMaybe(params.json, pc.green(`Already aligned with the current server head. head=${result.targetCommitHash}`));\n    } else if (result.status === \"base_unknown\") {\n      logMaybe(\n        params.json,\n        pc.yellow(\n          `Pull preview unavailable because the last acknowledged server head is no longer reachable. target=${result.targetCommitHash}`,\n        ),\n      );\n    } else if (result.dryRun) {\n      logMaybe(\n        params.json,\n        pc.green(\n          `Pull preview ready. target=${result.targetCommitHash} files=${result.stats.changedFilesCount} +${result.stats.insertions} -${result.stats.deletions}`,\n        ),\n      );\n    } else if (result.applied) {\n      logMaybe(\n        params.json,\n        pc.green(\n          `Pulled server delta into the working tree. branch=${result.branch} head=${result.localCommitHash} files=${result.stats.changedFilesCount}`,\n        ),\n      );\n    }\n    printResultWarnings(params.json, result);\n  }\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabSyncUpstream(params: { cwd: string; json: boolean; yes: boolean }) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n  const result = await collabSyncUpstreamCore({\n    api,\n    cwd: params.cwd,\n  });\n  spawnAsyncJobsDrainer(params.cwd);\n  if (!params.json) {\n    if (result.status === \"up-to-date\") {\n      logMaybe(params.json, pc.green(\"Upstream is already synced for the current remix.\"));\n    } else {\n      logMaybe(\n        params.json,\n        pc.green(\n          `Upstream sync completed for remix. appId=${result.appId} mergeRequestId=${result.mergeRequestId ?? \"unknown\"}`,\n        ),\n      );\n    }\n    printResultWarnings(params.json, result);\n  }\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabReconcile(params: {\n  cwd: string;\n  dryRun: boolean;\n  allowBranchMismatch?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n  const result = await collabReconcileCore({\n    api,\n    cwd: params.cwd,\n    dryRun: params.dryRun,\n    allowBranchMismatch: params.allowBranchMismatch,\n  });\n  if (!params.dryRun) spawnAsyncJobsDrainer(params.cwd);\n  if (!params.json) {\n    if (result.dryRun) {\n      logMaybe(params.json, pc.green(`Reconcile preview ready. status=${String((result as { status?: string }).status ?? \"unknown\")}`));\n    } else {\n      logMaybe(params.json, pc.green(`Reconcile flow completed. status=${String((result as { status?: string }).status ?? \"unknown\")}`));\n    }\n    printResultWarnings(params.json, result);\n  }\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabRequestMerge(params: { cwd: string; json: boolean; yes: boolean }) {\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n  const result = await collabRequestMergeCore({\n    api,\n    cwd: params.cwd,\n  });\n  if (!params.json) console.log(pc.green(`Opened merge request. id=${result.id}`));\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabReviewQueue(params: {\n  status?: string;\n  kind?: \"merge\" | \"sync\" | \"all\";\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabListMergeRequestsCore({\n    api,\n    queue: \"reviewable\",\n    status: params.status ?? \"open\",\n    kind: params.kind ?? \"merge\",\n  });\n  printMergeRequests(result, params.json);\n  return result;\n}\n\nexport async function collabMyMergeRequests(params: {\n  status?: string;\n  kind?: \"merge\" | \"sync\" | \"all\";\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabListMergeRequestsCore({\n    api,\n    queue: \"created_by_me\",\n    status: params.status ?? \"open\",\n    kind: params.kind ?? \"merge\",\n  });\n  printMergeRequests(result, params.json);\n  return result;\n}\n\nexport async function collabListAppMergeRequests(params: {\n  cwd?: string;\n  appId?: string | null;\n  queue: Extract<MergeRequestQueue, \"app_reviewable\" | \"app_outgoing\" | \"app_related_visible\">;\n  status?: string;\n  kind?: \"merge\" | \"sync\" | \"all\";\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabListMergeRequestsCore({\n    api,\n    cwd: params.cwd,\n    appId: params.appId ?? null,\n    queue: params.queue,\n    status: params.status ?? \"open\",\n    kind: params.kind ?? \"merge\",\n  });\n  printMergeRequests(result, params.json);\n  return result;\n}\n\nexport async function collabMergeRequestsInbox(params: {\n  status?: string;\n  kind?: \"merge\" | \"sync\" | \"all\";\n  limit?: number;\n  offset?: number;\n  includeReview?: boolean;\n  includeDiffs?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const response = await api.listMergeRequestInbox({\n    status: params.status ?? \"open\",\n    kind: params.kind ?? \"merge\",\n    limit: params.limit,\n    offset: params.offset,\n    includeReview: params.includeReview !== false,\n    includeDiffs: params.includeDiffs === true,\n  });\n  const result = unwrapResponseObject<Record<string, any>>(response, \"merge request inbox\");\n  if (!params.json) {\n    const incomingCount = Number(result.counts?.incoming ?? 0);\n    const outgoingCount = Number(result.counts?.outgoing ?? 0);\n    console.log(pc.bold(\"Merge request inbox\"));\n    console.log(`incoming=${incomingCount} outgoing=${outgoingCount}`);\n    const incoming = Array.isArray(result.incoming) ? result.incoming : [];\n    const outgoing = Array.isArray(result.outgoing) ? result.outgoing : [];\n    for (const [label, rows] of [\n      [\"Awaiting your review\", incoming],\n      [\"Sent by you\", outgoing],\n    ] as const) {\n      if (rows.length === 0) continue;\n      console.log(\"\");\n      console.log(pc.bold(label));\n      for (const mr of rows as Array<Record<string, any>>) {\n        const source = mr.sourceApp?.name ?? mr.sourceAppName ?? mr.sourceAppId ?? \"unknown\";\n        const target = mr.targetApp?.name ?? mr.targetAppName ?? mr.targetAppId ?? \"unknown\";\n        const creator = mr.createdByUser?.name ?? mr.createdByUser?.email ?? mr.createdBy ?? \"unknown\";\n        const promptCount = Array.isArray(mr.review?.prompts) ? mr.review.prompts.length : null;\n        const promptSuffix = promptCount === null ? \"\" : ` prompts=${promptCount}`;\n        console.log(`${mr.id}  ${mr.status}  ${source} -> ${target}  by ${creator}${promptSuffix}`);\n        if (mr.title) console.log(`  ${mr.title}`);\n      }\n    }\n  }\n  return result;\n}\n\nexport async function collabView(params: { mrId: string; json: boolean; yes: boolean }) {\n  const api = await createCollabApi(params);\n  const result = await collabViewCore({\n    api,\n    mrId: params.mrId,\n  });\n  if (!params.json) {\n    console.log(pc.bold(`${result.mergeRequest?.title ?? \"Merge request\"} (${result.mergeRequest?.status ?? \"unknown\"})`));\n    console.log(result.unifiedDiff ?? \"\");\n  }\n  return result;\n}\n\nexport async function collabApprove(params: {\n  mrId: string;\n  cwd: string;\n  remoteOnly: boolean;\n  syncTargetRepo: boolean;\n  allowBranchMismatch?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  const mode: CollabApproveMode | null =\n    params.remoteOnly === params.syncTargetRepo ? null : params.remoteOnly ? \"remote-only\" : \"sync-target-repo\";\n  if (!mode) {\n    throw new CliError(\"Choose exactly one approval mode.\", {\n      exitCode: 2,\n      hint: \"Pass either `--remote-only` or `--sync-target-repo`.\",\n    });\n  }\n\n  await warnAboutAsyncJobIssues(params.cwd, params.json);\n  const api = await createCollabApi(params);\n  const result = await collabApproveCore({\n    api,\n    mrId: params.mrId,\n    mode,\n    cwd: params.cwd,\n    allowBranchMismatch: params.allowBranchMismatch,\n  });\n  if (!params.json) {\n    if (result.mode === \"remote-only\") {\n      console.log(pc.green(`Merge approval completed remotely. id=${result.mergeRequestId} status=${result.terminalStatus}`));\n    } else {\n      console.log(\n        pc.green(\n          `Merge approval completed and synced local repo. id=${result.mergeRequestId} branch=${result.localSync?.branch} head=${result.localSync?.localCommitHash}`,\n        ),\n      );\n    }\n    printResultWarnings(params.json, result);\n  }\n  return await attachPendingAsyncJobs(result as object, params.cwd);\n}\n\nexport async function collabReject(params: { mrId: string; json: boolean; yes: boolean }) {\n  const api = await createCollabApi(params);\n  const result = await collabRejectCore({\n    api,\n    mrId: params.mrId,\n  });\n  if (!params.json) console.log(pc.green(`Rejected merge request. id=${result.id}`));\n  return result;\n}\n\nexport async function collabInvite(params: {\n  cwd: string;\n  email: string;\n  role?: string | null;\n  ttlDays?: number;\n  scope?: InvitationScopeType | null;\n  targetId?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabInviteCore({\n    api,\n    cwd: params.cwd,\n    email: params.email,\n    role: params.role,\n    ttlDays: params.ttlDays,\n    scope: params.scope ?? \"project\",\n    targetId: params.targetId ?? null,\n  });\n  if (!params.json) {\n    const inviteId = (result as { id?: string | null }).id ?? \"unknown\";\n    console.log(pc.green(`Created ${result.scopeType} invite. id=${inviteId}`));\n  }\n  return result;\n}\n\nexport async function collabInviteList(params: {\n  cwd: string;\n  scope: InvitationScopeType;\n  targetId?: string | null;\n  limit?: number;\n  offset?: number;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const targetId = await resolveInviteTargetId({\n    api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId,\n  });\n  const limit = Math.max(1, Math.min(50, Math.trunc(params.limit ?? 25)));\n  const offset = Math.max(0, Math.trunc(params.offset ?? 0));\n  const invites = await runInviteList({\n    api,\n    scope: params.scope,\n    targetId,\n    limit: limit + 1,\n    offset,\n  });\n  const inviteItems = Array.isArray(invites) ? (invites as Array<Record<string, unknown>>) : [];\n  const result = {\n    scopeType: params.scope,\n    targetId,\n    invites: inviteItems.slice(0, limit),\n    pagination: {\n      limit,\n      offset,\n      hasMore: inviteItems.length > limit,\n    },\n  };\n  if (!params.json) {\n    for (const invite of result.invites) {\n      console.log(\n        `${String(invite.id ?? \"\")}  ${String(invite.email ?? \"\")}  role=${String(invite.role ?? \"\")}  state=${String(\n          invite.state ?? \"\",\n        )}`,\n      );\n    }\n    console.log(pc.dim(`limit=${result.pagination.limit} offset=${result.pagination.offset} hasMore=${result.pagination.hasMore ? \"yes\" : \"no\"}`));\n  }\n  return result;\n}\n\nexport async function collabInviteResend(params: {\n  cwd: string;\n  scope: InvitationScopeType;\n  inviteId: string;\n  targetId?: string | null;\n  ttlDays?: number;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const targetId = await resolveInviteTargetId({\n    api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId,\n  });\n  const result = await runInviteResend({\n    api,\n    scope: params.scope,\n    targetId,\n    inviteId: params.inviteId,\n    ttlDays: params.ttlDays,\n  });\n  if (!params.json) console.log(pc.green(`Resent ${params.scope} invite. id=${params.inviteId}`));\n  return result;\n}\n\nexport async function collabInviteRevoke(params: {\n  cwd: string;\n  scope: InvitationScopeType;\n  inviteId: string;\n  targetId?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const targetId = await resolveInviteTargetId({\n    api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId,\n  });\n  const result = await runInviteRevoke({\n    api,\n    scope: params.scope,\n    targetId,\n    inviteId: params.inviteId,\n  });\n  if (!params.json) console.log(pc.green(`Revoked ${params.scope} invite. id=${params.inviteId}`));\n  return result;\n}\n\nexport async function collabInviteAccept(params: {\n  token: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createAuthedApi(params);\n  const result = unwrapResponseObject<Record<string, unknown>>(\n    await api.acceptInvitation({ token: params.token }),\n    \"accepted invitation\",\n  );\n  if (!params.json) {\n    const redirectPath = typeof result.redirectPath === \"string\" ? result.redirectPath : null;\n    console.log(pc.green(\"Accepted invitation.\"));\n    if (redirectPath) {\n      console.log(pc.dim(`redirectPath=${redirectPath}`));\n    }\n  }\n  return result;\n}\n\n// Inbox surface (matches GET /v1/me/invitations on the backend). Same\n// JSON shape goes back out of `--json` so the desktop's IPC layer can\n// consume it directly. We deliberately don't reshape the rows here —\n// the backend owns the contract.\n//\n// STABLE IPC CONTRACT — the Remix Desktop app polls `remix collab\n// invites inbox --json` on focus to drive the sidebar badge + the\n// inbox screen. Adding new optional fields to the row shape is fine;\n// renaming or removing existing ones will break the desktop's UI.\nexport async function collabInviteInbox(params: { json: boolean; yes: boolean }) {\n  const api = await createAuthedApi(params);\n  const result = unwrapResponseObject<Array<Record<string, unknown>>>(\n    await api.listMyInvitations(),\n    \"invitations\",\n  );\n  if (!params.json) {\n    if (result.length === 0) {\n      console.log(pc.dim(\"No pending invitations.\"));\n    } else {\n      for (const invite of result) {\n        const scope = String(invite.scope ?? \"\");\n        const role = String(invite.role ?? \"\");\n        const target =\n          scope === \"app\"\n            ? String(invite.appName ?? \"\")\n            : scope === \"project\"\n              ? String(invite.projectName ?? \"\")\n              : String(invite.organizationName ?? \"\");\n        const inviter = invite.invitedBy as { name?: string | null; email?: string | null } | undefined;\n        const inviterLabel = inviter?.name ?? inviter?.email ?? \"someone\";\n        console.log(\n          `${String(invite.id ?? \"\")}  scope=${scope}  ${target}  role=${role}  from=${inviterLabel}`,\n        );\n      }\n    }\n  }\n  return result;\n}\n\ntype MyInvitationScope = \"organization\" | \"project\" | \"app\";\n\nfunction parseMyInviteScope(value: string): MyInvitationScope {\n  const normalized = value.trim().toLowerCase();\n  if (normalized === \"organization\" || normalized === \"project\" || normalized === \"app\") {\n    return normalized;\n  }\n  throw new Error(\"scope must be one of: organization, project, app\");\n}\n\nexport { parseMyInviteScope };\n\nexport async function collabInviteAcceptMine(params: {\n  scope: MyInvitationScope;\n  inviteId: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createAuthedApi(params);\n  const result = unwrapResponseObject<Record<string, unknown>>(\n    await api.acceptMyInvitation(params.scope, params.inviteId),\n    \"accepted invitation\",\n  );\n  if (!params.json) {\n    console.log(pc.green(`Accepted ${params.scope} invitation. id=${params.inviteId}`));\n  }\n  return result;\n}\n\nexport async function collabInviteDeclineMine(params: {\n  scope: MyInvitationScope;\n  inviteId: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createAuthedApi(params);\n  const result = unwrapResponseObject<Record<string, unknown>>(\n    await api.declineMyInvitation(params.scope, params.inviteId),\n    \"declined invitation\",\n  );\n  if (!params.json) {\n    console.log(pc.green(`Declined ${params.scope} invitation. id=${params.inviteId}`));\n  }\n  return result;\n}\n\nexport async function collabMembersList(params: {\n  cwd: string;\n  scope: InvitationScopeType;\n  targetId?: string | null;\n  limit?: number;\n  offset?: number;\n  json: boolean;\n  yes: boolean;\n}) {\n  const api = await createCollabApi(params);\n  const result = await collabListMembersCore({\n    api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId ?? null,\n    limit: params.limit,\n    offset: params.offset,\n  });\n  if (!params.json) {\n    for (const member of result.members as Array<Record<string, unknown>>) {\n      console.log(\n        `${String(member.userId ?? \"\")}  role=${String(member.role ?? \"\")}  invitedBy=${String(member.invitedBy ?? \"\")}`,\n      );\n    }\n    const pagination = (result as { pagination?: { limit?: number; offset?: number; hasMore?: boolean } }).pagination;\n    if (pagination) {\n      console.log(\n        pc.dim(\n          `limit=${String(pagination.limit ?? \"\")} offset=${String(pagination.offset ?? \"\")} hasMore=${\n            pagination.hasMore ? \"yes\" : \"no\"\n          }`,\n        ),\n      );\n    }\n  }\n  return result;\n}\n\nexport async function collabMembersUpdate(params: {\n  cwd: string;\n  scope: InvitationScopeType;\n  userId: string;\n  role: string;\n  targetId?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const normalizedRole = params.role.trim().toLowerCase();\n  if (!getMemberRolesForScope(params.scope).includes(normalizedRole)) {\n    throw new CliError(`Invalid ${params.scope} member role.`, {\n      exitCode: 2,\n      hint: `Allowed roles: ${getMemberRolesForScope(params.scope).join(\", \")}`,\n    });\n  }\n\n  const api = await createCollabApi(params);\n  const result = await collabUpdateMemberRoleCore({\n    api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId ?? null,\n    userId: params.userId,\n    role: normalizedRole,\n  });\n  if (!params.json) {\n    const member = result.member as Record<string, unknown>;\n    console.log(\n      pc.green(\n        `Updated ${result.scopeType} member. userId=${String(member.userId ?? params.userId)} role=${String(member.role ?? normalizedRole)}`,\n      ),\n    );\n  }\n  return result;\n}\n","import \"./chunk-HZNEDSRS.js\";\nimport {\n  getCollabBindingPath,\n  readCollabBinding,\n  readCollabBindingState,\n  reserveAvailableDirPath,\n  reserveDirectory,\n  writeCollabBinding,\n  writeCollabBindingSnapshot,\n  writeJsonAtomic\n} from \"./chunk-GNW6FA4J.js\";\nimport {\n  applyUnifiedDiffToWorktree,\n  assertRepoSnapshotUnchanged,\n  buildRepoFingerprint,\n  captureRepoSnapshot,\n  checkoutLocalBranch,\n  cloneGitBundleToDirectory,\n  createGitBundle,\n  createGitCommandPlan,\n  createSystemGitAdapter,\n  ensureCleanWorktree,\n  ensureGitInfoExcludeEntries,\n  findGitRoot,\n  getCurrentBranch,\n  getDefaultBranch,\n  getGitCommonDir,\n  getHeadCommitHash,\n  getRemoteOriginUrl,\n  getWorktreeStatus,\n  normalizeGitRemote,\n  requireCurrentBranch,\n  setRemoteOriginUrl,\n  summarizeUnifiedDiff\n} from \"./chunk-FA6PTZQI.js\";\nimport {\n  REMIX_ERROR_CODES\n} from \"./chunk-GC2MOT3U.js\";\nimport {\n  RemixError\n} from \"./chunk-7XJGOKEO.js\";\n\n// src/application/collab/contracts.ts\nimport { z } from \"zod\";\nvar sourceId = z.string().trim().min(1).max(500);\nvar sourceTurnIds = {\n  nativeTurnId: sourceId.optional(),\n  turnId: sourceId.optional()\n};\nvar SourceConversationSchema = z.discriminatedUnion(\"provider\", [\n  z.object({\n    provider: z.literal(\"cursor\"),\n    conversationId: sourceId,\n    ...sourceTurnIds\n  }).strict(),\n  z.object({\n    provider: z.literal(\"claude\"),\n    sessionId: sourceId,\n    ...sourceTurnIds\n  }).strict(),\n  z.object({\n    provider: z.literal(\"codex\"),\n    sessionId: sourceId,\n    ...sourceTurnIds\n  }).strict()\n]);\n\n// src/application/collab/appDeltaCache.ts\nvar APP_DELTA_CACHE_TTL_MS = 5e3;\nvar appDeltaCache = /* @__PURE__ */ new Map();\nvar cacheClock = () => Date.now();\nfunction buildAppDeltaCacheKey(appId, payload) {\n  return [\n    appId,\n    payload.baseHeadHash,\n    payload.targetHeadHash ?? \"\",\n    payload.baseRevisionId ?? \"\",\n    payload.targetRevisionId ?? \"\",\n    payload.localSnapshotHash ?? \"\",\n    payload.repoFingerprint ?? \"\",\n    payload.remoteUrl ?? \"\",\n    payload.defaultBranch ?? \"\"\n  ].join(\"|\");\n}\nfunction readAppDeltaCache(key) {\n  const entry = appDeltaCache.get(key);\n  if (!entry) return void 0;\n  if (cacheClock() - entry.cachedAt > APP_DELTA_CACHE_TTL_MS) {\n    appDeltaCache.delete(key);\n    return void 0;\n  }\n  return entry.value;\n}\nfunction writeAppDeltaCache(key, value) {\n  appDeltaCache.set(key, { value, cachedAt: cacheClock() });\n}\nasync function getAppDeltaCached(api, appId, payload) {\n  const key = buildAppDeltaCacheKey(appId, payload);\n  const cached = readAppDeltaCache(key);\n  if (cached !== void 0) return cached;\n  const fresh = await api.getAppDelta(appId, payload);\n  writeAppDeltaCache(key, fresh);\n  return fresh;\n}\nfunction invalidateAppDeltaCacheForApp(appId) {\n  const prefix = `${appId}|`;\n  for (const key of appDeltaCache.keys()) {\n    if (key.startsWith(prefix)) appDeltaCache.delete(key);\n  }\n}\n\n// src/application/collab/appHeadCache.ts\nvar APP_HEAD_CACHE_TTL_MS = 5e3;\nvar appHeadCache = /* @__PURE__ */ new Map();\nvar cacheClock2 = () => Date.now();\nfunction readAppHeadCache(appId) {\n  const entry = appHeadCache.get(appId);\n  if (!entry) return void 0;\n  if (cacheClock2() - entry.cachedAt > APP_HEAD_CACHE_TTL_MS) {\n    appHeadCache.delete(appId);\n    return void 0;\n  }\n  return entry.value;\n}\nfunction writeAppHeadCache(appId, value) {\n  appHeadCache.set(appId, { value, cachedAt: cacheClock2() });\n}\nasync function getAppHeadCached(api, appId) {\n  const cached = readAppHeadCache(appId);\n  if (cached !== void 0) return cached;\n  const fresh = await api.getAppHead(appId);\n  writeAppHeadCache(appId, fresh);\n  return fresh;\n}\nfunction invalidateAppHeadCache(appId) {\n  appHeadCache.delete(appId);\n}\n\n// src/application/collab/branchPolicy.ts\nfunction describeBranch(value) {\n  const normalized = String(value ?? \"\").trim();\n  return normalized || \"(detached)\";\n}\nfunction isBoundBranchMatch(currentBranch, branchName) {\n  const current = String(currentBranch ?? \"\").trim();\n  const expected = String(branchName ?? \"\").trim();\n  if (!expected || !current) return true;\n  return current === expected;\n}\nfunction buildBranchMismatchHint(params) {\n  const overrideFlag = params.overrideFlag?.trim() || \"--allow-branch-mismatch\";\n  return [\n    `Current branch: ${describeBranch(params.currentBranch)}`,\n    `Bound branch: ${describeBranch(params.branchName)}`,\n    `Switch to ${describeBranch(params.branchName)} or rerun with ${overrideFlag} if this is intentional.`\n  ].join(\"\\n\");\n}\nfunction assertBoundBranchMatch(params) {\n  if (params.allowBranchMismatch) return;\n  if (isBoundBranchMatch(params.currentBranch, params.branchName)) return;\n  throw new RemixError(`Current branch does not match this checkout's bound Remix branch while running ${params.operation}.`, {\n    code: REMIX_ERROR_CODES.PREFERRED_BRANCH_MISMATCH,\n    exitCode: 2,\n    hint: buildBranchMismatchHint({\n      currentBranch: params.currentBranch,\n      branchName: params.branchName,\n      overrideFlag: params.overrideFlag\n    })\n  });\n}\n\n// src/infrastructure/collab/asyncJobStore.ts\nimport { randomUUID } from \"crypto\";\nimport fs from \"fs/promises\";\nimport path2 from \"path\";\n\n// src/infrastructure/collab/statePaths.ts\nimport { createHash } from \"crypto\";\nimport os from \"os\";\nimport path from \"path\";\nfunction sha256Hex(value) {\n  return createHash(\"sha256\").update(value).digest(\"hex\");\n}\nfunction getCollabStateRoot() {\n  const configured = process.env.REMIX_COLLAB_STATE_ROOT?.trim();\n  return configured || path.join(os.homedir(), \".remix\", \"collab-state\");\n}\nfunction buildLaneStateKey(params) {\n  const fingerprint = params.repoFingerprint?.trim();\n  const laneId = params.laneId?.trim();\n  const repoRoot = params.repoRoot?.trim();\n  const stableSource = repoRoot || \"unknown-repo-root\";\n  const fingerprintSource = fingerprint || \"unknown-repo-fingerprint\";\n  const laneSource = laneId || \"unknown-lane\";\n  return sha256Hex(`${stableSource}::${fingerprintSource}::${laneSource}`);\n}\nfunction getSnapshotsRoot() {\n  return path.join(getCollabStateRoot(), \"snapshots\");\n}\nfunction getSnapshotRecordsRoot() {\n  return path.join(getSnapshotsRoot(), \"records\");\n}\nfunction getSnapshotBlobsRoot() {\n  return path.join(getSnapshotsRoot(), \"blobs\");\n}\nfunction getBaselinesRoot() {\n  return path.join(getCollabStateRoot(), \"baselines\");\n}\nfunction getFinalizeQueueRoot() {\n  return path.join(getCollabStateRoot(), \"finalize-queue\");\n}\nfunction getAsyncJobsRoot() {\n  return path.join(getCollabStateRoot(), \"jobs\");\n}\nfunction getAsyncJobDir(jobId) {\n  return path.join(getAsyncJobsRoot(), jobId);\n}\nfunction getAsyncJobFilePath(jobId) {\n  return path.join(getAsyncJobDir(jobId), \"job.json\");\n}\nfunction getAsyncJobBundlePath(jobId) {\n  return path.join(getAsyncJobDir(jobId), \"bundle.bundle\");\n}\nfunction getLogsRoot() {\n  return path.join(getCollabStateRoot(), \"logs\");\n}\nfunction getDrainerLogPath() {\n  return path.join(getLogsRoot(), \"drainer.log\");\n}\nfunction getDrainerPidPath() {\n  return path.join(getCollabStateRoot(), \"drainer.pid\");\n}\n\n// src/infrastructure/collab/asyncJobStore.ts\nvar ASYNC_JOB_LOCK_STALE_MS = 10 * 60 * 1e3;\nvar TERMINAL_ASYNC_JOB_RETENTION_MS = 24 * 60 * 60 * 1e3;\nvar REMOVED_ASYNC_JOB_KINDS = /* @__PURE__ */ new Set([[\"re\", \"anchor\"].join(\"_\")]);\nfunction getJobLockPath(id) {\n  return path2.join(getAsyncJobDir(id), \"lock\");\n}\nfunction isTerminalStatus(status) {\n  return status === \"completed\" || status === \"failed\";\n}\nfunction isProcessingStatus(status) {\n  return status === \"submitting\" || status === \"uploading\" || status === \"server_processing\";\n}\nfunction createEmptySummary() {\n  return {\n    state: \"idle\",\n    activeJobCount: 0,\n    queuedJobCount: 0,\n    processingJobCount: 0,\n    failedJobCount: 0,\n    oldestCreatedAt: null,\n    newestCreatedAt: null,\n    latestError: null,\n    kinds: []\n  };\n}\nfunction normalizeJob(input) {\n  const now = (/* @__PURE__ */ new Date()).toISOString();\n  const base = {\n    schemaVersion: 1,\n    id: input.id ?? randomUUID(),\n    kind: input.kind,\n    status: input.status,\n    repoRoot: input.repoRoot,\n    repoFingerprint: input.repoFingerprint ?? null,\n    branchName: input.branchName ?? null,\n    laneId: input.laneId ?? null,\n    createdAt: input.createdAt ?? now,\n    updatedAt: input.updatedAt ?? now,\n    retryCount: Number.isFinite(input.retryCount) ? Math.max(0, Number(input.retryCount)) : 0,\n    error: input.error ?? null,\n    idempotencyKey: input.idempotencyKey ?? null\n  };\n  if (input.kind === \"init\") {\n    return { ...base, kind: \"init\", payload: input.payload };\n  }\n  if (input.kind === \"init_post\") {\n    return { ...base, kind: \"init_post\", payload: input.payload };\n  }\n  throw new Error(`Unsupported async job kind: ${input.kind ?? \"unknown\"}`);\n}\nasync function enqueueAsyncJob(input) {\n  const job = normalizeJob(input);\n  await fs.mkdir(getAsyncJobDir(job.id), { recursive: true });\n  await writeJsonAtomic(getAsyncJobFilePath(job.id), job);\n  return job;\n}\nfunction parseAsyncJob(raw) {\n  if (!raw || typeof raw !== \"object\") return null;\n  const data = raw;\n  if (data.schemaVersion !== 1) return null;\n  if (typeof data.id !== \"string\") return null;\n  if (data.kind !== \"init\" && data.kind !== \"init_post\") return null;\n  if (!data.payload || typeof data.payload !== \"object\") return null;\n  return data;\n}\nasync function readAsyncJob(jobId) {\n  try {\n    const raw = await fs.readFile(getAsyncJobFilePath(jobId), \"utf8\");\n    const parsed = JSON.parse(raw);\n    return parseAsyncJob(parsed);\n  } catch {\n    return null;\n  }\n}\nasync function listAsyncJobs() {\n  const root = getAsyncJobsRoot();\n  let entries;\n  try {\n    entries = await fs.readdir(root, { withFileTypes: true });\n  } catch (error) {\n    if (error?.code === \"ENOENT\") return [];\n    throw error;\n  }\n  const jobs = await Promise.all(\n    entries.filter((entry) => entry.isDirectory()).map((entry) => readAsyncJob(entry.name))\n  );\n  return jobs.filter((job) => Boolean(job)).sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n}\nasync function pruneRemovedAsyncJobKinds() {\n  const root = getAsyncJobsRoot();\n  let entries;\n  try {\n    entries = await fs.readdir(root, { withFileTypes: true });\n  } catch (error) {\n    if (error?.code === \"ENOENT\") return;\n    throw error;\n  }\n  await Promise.all(\n    entries.filter((entry) => entry.isDirectory()).map(async (entry) => {\n      let parsed;\n      try {\n        const raw = await fs.readFile(getAsyncJobFilePath(entry.name), \"utf8\");\n        parsed = JSON.parse(raw);\n      } catch {\n        return;\n      }\n      if (parsed.schemaVersion === 1 && typeof parsed.id === \"string\" && typeof parsed.kind === \"string\" && REMOVED_ASYNC_JOB_KINDS.has(parsed.kind)) {\n        await deleteAsyncJob(entry.name);\n      }\n    })\n  );\n}\nasync function listAsyncJobsForRepo(params) {\n  const jobs = await listAsyncJobs();\n  return jobs.filter((job) => {\n    if (job.repoRoot !== params.repoRoot) return false;\n    if (params.branchName && job.branchName && job.branchName !== params.branchName) return false;\n    if (params.kind && job.kind !== params.kind) return false;\n    return true;\n  });\n}\nasync function findPendingAsyncJob(params) {\n  const jobs = await listAsyncJobsForRepo({\n    repoRoot: params.repoRoot,\n    branchName: params.branchName,\n    kind: params.kind\n  });\n  return jobs.find((job) => !isTerminalStatus(job.status)) ?? null;\n}\nasync function findFailedAsyncJob(params) {\n  const jobs = await listAsyncJobsForRepo({\n    repoRoot: params.repoRoot,\n    branchName: params.branchName,\n    kind: params.kind\n  });\n  return jobs.find((job) => job.status === \"failed\") ?? null;\n}\nasync function updateAsyncJob(jobId, update) {\n  const existing = await readAsyncJob(jobId);\n  if (!existing) return null;\n  const now = (/* @__PURE__ */ new Date()).toISOString();\n  if (existing.kind === \"init\") {\n    const nextPayload = update.payload ?? existing.payload;\n    const next = {\n      ...existing,\n      ...update,\n      schemaVersion: 1,\n      id: existing.id,\n      kind: \"init\",\n      createdAt: existing.createdAt,\n      updatedAt: now,\n      payload: nextPayload\n    };\n    await writeJsonAtomic(getAsyncJobFilePath(jobId), next);\n    return next;\n  }\n  if (existing.kind === \"init_post\") {\n    const nextPayload = update.payload ?? existing.payload;\n    const next = {\n      ...existing,\n      ...update,\n      schemaVersion: 1,\n      id: existing.id,\n      kind: \"init_post\",\n      createdAt: existing.createdAt,\n      updatedAt: now,\n      payload: nextPayload\n    };\n    await writeJsonAtomic(getAsyncJobFilePath(jobId), next);\n    return next;\n  }\n  throw new Error(`Unsupported async job kind: ${existing.kind ?? \"unknown\"}`);\n}\nasync function deleteAsyncJob(jobId) {\n  await fs.rm(getAsyncJobDir(jobId), { recursive: true, force: true });\n}\nasync function acquireJobLock(jobId) {\n  const lockPath = getJobLockPath(jobId);\n  await fs.mkdir(getAsyncJobDir(jobId), { recursive: true });\n  try {\n    await fs.mkdir(lockPath);\n    return true;\n  } catch (error) {\n    if (error?.code !== \"EEXIST\") throw error;\n  }\n  try {\n    const stat = await fs.stat(lockPath);\n    if (Date.now() - stat.mtimeMs < ASYNC_JOB_LOCK_STALE_MS) return false;\n    await fs.rm(lockPath, { recursive: true, force: true });\n  } catch (error) {\n    if (error?.code !== \"ENOENT\") throw error;\n  }\n  try {\n    await fs.mkdir(lockPath);\n    return true;\n  } catch (error) {\n    if (error?.code === \"EEXIST\") return false;\n    throw error;\n  }\n}\nasync function claimAsyncJob(jobId) {\n  const acquired = await acquireJobLock(jobId);\n  if (!acquired) return null;\n  const lockPath = getJobLockPath(jobId);\n  let released = false;\n  const release = async () => {\n    if (released) return;\n    released = true;\n    await fs.rm(lockPath, { recursive: true, force: true }).catch(() => void 0);\n  };\n  try {\n    const job = await readAsyncJob(jobId);\n    if (!job) {\n      await release();\n      return null;\n    }\n    if (isTerminalStatus(job.status)) {\n      await release();\n      return null;\n    }\n    return { job, release };\n  } catch (error) {\n    await release();\n    throw error;\n  }\n}\nasync function summarizeAsyncJobs(params) {\n  const jobs = await listAsyncJobsForRepo({ repoRoot: params.repoRoot, branchName: params.branchName ?? null });\n  const active = jobs.filter((job) => !isTerminalStatus(job.status) || job.status === \"failed\");\n  const summary = createEmptySummary();\n  if (active.length === 0) return summary;\n  const kinds = /* @__PURE__ */ new Set();\n  for (const job of active) {\n    kinds.add(job.kind);\n    if (job.error) summary.latestError = job.error;\n    if (job.status === \"failed\") {\n      summary.failedJobCount += 1;\n    } else if (isProcessingStatus(job.status)) {\n      summary.processingJobCount += 1;\n    } else {\n      summary.queuedJobCount += 1;\n    }\n  }\n  summary.activeJobCount = summary.queuedJobCount + summary.processingJobCount;\n  summary.kinds = Array.from(kinds);\n  summary.oldestCreatedAt = active[0].createdAt;\n  summary.newestCreatedAt = active[active.length - 1].createdAt;\n  if (summary.processingJobCount > 0) summary.state = \"processing\";\n  else if (summary.queuedJobCount > 0) summary.state = \"queued\";\n  else summary.state = \"failed\";\n  return summary;\n}\nasync function pruneTerminalAsyncJobs() {\n  await pruneRemovedAsyncJobKinds();\n  const jobs = await listAsyncJobs();\n  const now = Date.now();\n  await Promise.all(\n    jobs.filter((job) => {\n      if (!isTerminalStatus(job.status)) return false;\n      const updated = Date.parse(job.updatedAt);\n      if (!Number.isFinite(updated)) return true;\n      return now - updated >= TERMINAL_ASYNC_JOB_RETENTION_MS;\n    }).map((job) => deleteAsyncJob(job.id))\n  );\n}\nfunction getAsyncJobBundleFilePath(jobId) {\n  return getAsyncJobBundlePath(jobId);\n}\nasync function awaitAsyncJob(params) {\n  const pollIntervalMs = Math.max(50, params.pollIntervalMs ?? 500);\n  const deadline = Date.now() + params.timeoutMs;\n  let lastSeen = null;\n  while (Date.now() < deadline) {\n    const job = await readAsyncJob(params.jobId);\n    if (job) {\n      lastSeen = job;\n      if (job.status === \"completed\") return { status: \"completed\", job };\n      if (job.status === \"failed\") return { status: \"failed\", job };\n    } else if (lastSeen) {\n      return { status: \"timeout\", job: lastSeen };\n    } else {\n      return { status: \"timeout\", job: null };\n    }\n    const remaining = deadline - Date.now();\n    if (remaining <= 0) break;\n    await new Promise((resolve) => setTimeout(resolve, Math.min(pollIntervalMs, remaining)));\n  }\n  const final = await readAsyncJob(params.jobId);\n  if (final) {\n    if (final.status === \"completed\") return { status: \"completed\", job: final };\n    if (final.status === \"failed\") return { status: \"failed\", job: final };\n    return { status: \"timeout\", job: final };\n  }\n  return { status: \"timeout\", job: lastSeen };\n}\n\n// src/infrastructure/collab/localBaselineStore.ts\nimport fs2 from \"fs/promises\";\nimport path3 from \"path\";\nfunction getBaselinePath(params) {\n  return path3.join(getBaselinesRoot(), `${buildLaneStateKey(params)}.json`);\n}\nfunction normalizeNullableString(value) {\n  const normalized = String(value ?? \"\").trim();\n  return normalized || null;\n}\nfunction isSameBaselineIdentity(left, right) {\n  return left.repoRoot === right.repoRoot && (left.repoFingerprint ?? null) === (right.repoFingerprint ?? null) && (left.laneId ?? null) === (right.laneId ?? null) && left.currentAppId === right.currentAppId && (left.branchName ?? null) === (right.branchName ?? null);\n}\nasync function readLocalBaseline(params) {\n  try {\n    const raw = await fs2.readFile(getBaselinePath(params), \"utf8\");\n    const parsed = JSON.parse(raw);\n    if (!parsed || typeof parsed !== \"object\") return null;\n    if (![1, 2].includes(Number(parsed.schemaVersion)) || typeof parsed.key !== \"string\" || typeof parsed.repoRoot !== \"string\") {\n      return null;\n    }\n    return {\n      schemaVersion: Number(parsed.schemaVersion) === 2 ? 2 : 1,\n      key: parsed.key,\n      repoRoot: parsed.repoRoot,\n      repoFingerprint: parsed.repoFingerprint ?? null,\n      laneId: parsed.laneId ?? null,\n      currentAppId: String(parsed.currentAppId ?? \"\"),\n      branchName: parsed.branchName ?? null,\n      lastSnapshotId: parsed.lastSnapshotId ?? null,\n      lastSnapshotHash: parsed.lastSnapshotHash ?? null,\n      lastServerRevisionId: parsed.lastServerRevisionId ?? null,\n      lastServerTreeHash: parsed.lastServerTreeHash ?? null,\n      lastServerHeadHash: parsed.lastServerHeadHash ?? null,\n      lastSeenLocalCommitHash: parsed.lastSeenLocalCommitHash ?? null,\n      updatedAt: String(parsed.updatedAt ?? \"\")\n    };\n  } catch {\n    return null;\n  }\n}\nasync function writeLocalBaseline(baseline) {\n  const key = buildLaneStateKey(baseline);\n  const normalized = {\n    schemaVersion: 2,\n    key,\n    repoRoot: baseline.repoRoot,\n    repoFingerprint: baseline.repoFingerprint ?? null,\n    laneId: baseline.laneId ?? null,\n    currentAppId: baseline.currentAppId,\n    branchName: baseline.branchName ?? null,\n    lastSnapshotId: baseline.lastSnapshotId ?? null,\n    lastSnapshotHash: baseline.lastSnapshotHash ?? null,\n    lastServerRevisionId: baseline.lastServerRevisionId ?? null,\n    lastServerTreeHash: baseline.lastServerTreeHash ?? null,\n    lastServerHeadHash: baseline.lastServerHeadHash ?? null,\n    lastSeenLocalCommitHash: baseline.lastSeenLocalCommitHash ?? null,\n    updatedAt: baseline.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString()\n  };\n  await writeJsonAtomic(getBaselinePath(baseline), normalized);\n  return normalized;\n}\nasync function readAllLocalBaselines() {\n  let entries;\n  try {\n    entries = await fs2.readdir(getBaselinesRoot());\n  } catch (error) {\n    if (error?.code === \"ENOENT\") return [];\n    throw error;\n  }\n  const baselines = [];\n  for (const entry of entries) {\n    if (!entry.endsWith(\".json\")) continue;\n    try {\n      const raw = await fs2.readFile(path3.join(getBaselinesRoot(), entry), \"utf8\");\n      const parsed = JSON.parse(raw);\n      if (!parsed || typeof parsed !== \"object\") continue;\n      if (![1, 2].includes(Number(parsed.schemaVersion)) || typeof parsed.key !== \"string\" || typeof parsed.repoRoot !== \"string\") {\n        continue;\n      }\n      baselines.push({\n        schemaVersion: Number(parsed.schemaVersion) === 2 ? 2 : 1,\n        key: parsed.key,\n        repoRoot: parsed.repoRoot,\n        repoFingerprint: parsed.repoFingerprint ?? null,\n        laneId: parsed.laneId ?? null,\n        currentAppId: String(parsed.currentAppId ?? \"\"),\n        branchName: parsed.branchName ?? null,\n        lastSnapshotId: parsed.lastSnapshotId ?? null,\n        lastSnapshotHash: parsed.lastSnapshotHash ?? null,\n        lastServerRevisionId: parsed.lastServerRevisionId ?? null,\n        lastServerTreeHash: parsed.lastServerTreeHash ?? null,\n        lastServerHeadHash: parsed.lastServerHeadHash ?? null,\n        lastSeenLocalCommitHash: parsed.lastSeenLocalCommitHash ?? null,\n        updatedAt: String(parsed.updatedAt ?? \"\")\n      });\n    } catch {\n      continue;\n    }\n  }\n  return baselines;\n}\nasync function migrateLocalBaselineForLaneChange(params) {\n  if ((params.fromLaneId ?? null) === (params.toLaneId ?? null)) {\n    return { status: \"same_lane\" };\n  }\n  const target = await readLocalBaseline({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.toLaneId\n  });\n  if (target) {\n    return { status: \"target_exists\" };\n  }\n  const source = await readLocalBaseline({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.fromLaneId\n  });\n  if (!source) {\n    return { status: \"source_missing\" };\n  }\n  const expectedSource = {\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.fromLaneId,\n    currentAppId: params.currentAppId,\n    branchName: params.branchName\n  };\n  const actualSource = {\n    repoRoot: source.repoRoot,\n    repoFingerprint: source.repoFingerprint,\n    laneId: source.laneId,\n    currentAppId: source.currentAppId,\n    branchName: source.branchName\n  };\n  if (!isSameBaselineIdentity(actualSource, expectedSource)) {\n    return { status: \"source_missing\" };\n  }\n  const baseline = await writeLocalBaseline({\n    ...source,\n    laneId: params.toLaneId\n  });\n  return { status: \"migrated\", baseline };\n}\nasync function findCompatibleLocalBaseline(params) {\n  const targetKey = buildLaneStateKey(params);\n  const branchName = normalizeNullableString(params.branchName);\n  const candidates = (await readAllLocalBaselines()).filter((baseline) => {\n    if (baseline.key === targetKey) return false;\n    if (baseline.repoRoot !== params.repoRoot) return false;\n    if ((baseline.repoFingerprint ?? null) !== (params.repoFingerprint ?? null)) return false;\n    if (baseline.currentAppId !== params.currentAppId) return false;\n    return true;\n  });\n  const branchMatches = candidates.filter((baseline) => normalizeNullableString(baseline.branchName) === branchName);\n  const compatible = branchMatches.length > 0 ? branchMatches : candidates.filter((baseline) => normalizeNullableString(baseline.branchName) === null);\n  if (compatible.length === 0) return { status: \"none\", candidateCount: 0 };\n  if (compatible.length > 1) return { status: \"ambiguous\", candidateCount: compatible.length };\n  return { status: \"found\", baseline: compatible[0] };\n}\nasync function clearLocalBaseline(params) {\n  try {\n    await fs2.unlink(getBaselinePath(params));\n  } catch (error) {\n    if (error?.code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n}\n\n// src/infrastructure/collab/localSnapshotStore.ts\nimport { createHash as createHash2, randomUUID as randomUUID2 } from \"crypto\";\nimport fs3 from \"fs/promises\";\nimport os2 from \"os\";\nimport path4 from \"path\";\nimport { execa } from \"execa\";\nfunction sha256Hex2(value) {\n  return createHash2(\"sha256\").update(value).digest(\"hex\");\n}\nfunction getSnapshotRecordPath(snapshotId) {\n  return path4.join(getSnapshotRecordsRoot(), `${snapshotId}.json`);\n}\nfunction getBlobPath(blobHash) {\n  return path4.join(getSnapshotBlobsRoot(), blobHash.slice(0, 2), blobHash);\n}\nasync function runGitZ(args, cwd) {\n  const res = await execa(\"git\", args, {\n    cwd,\n    stderr: \"ignore\",\n    stripFinalNewline: false\n  });\n  return String(res.stdout || \"\");\n}\nasync function listWorkspaceFiles(repoRoot) {\n  const raw = await runGitZ([\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--deduplicate\"], repoRoot);\n  const seen = /* @__PURE__ */ new Set();\n  const result = [];\n  for (const entry of raw.split(\"\\0\")) {\n    const relativePath = entry.trim();\n    if (!relativePath || seen.has(relativePath)) continue;\n    const absolutePath = path4.join(repoRoot, relativePath);\n    try {\n      const stat = await fs3.lstat(absolutePath);\n      if (stat.isFile() || stat.isSymbolicLink()) {\n        seen.add(relativePath);\n        result.push(relativePath);\n      }\n    } catch {\n    }\n  }\n  return result.sort((a, b) => a.localeCompare(b));\n}\nasync function persistBlob(blobHash, content) {\n  const blobPath = getBlobPath(blobHash);\n  try {\n    await fs3.access(blobPath);\n  } catch {\n    await fs3.mkdir(path4.dirname(blobPath), { recursive: true });\n    if (typeof content === \"string\") {\n      await fs3.writeFile(blobPath, content, \"utf8\");\n    } else {\n      await fs3.writeFile(blobPath, content);\n    }\n  }\n}\nfunction buildSnapshotHash(files) {\n  const manifest = files.map((file) => `${file.path}\t${file.mode}\t${file.blobHash}\t${file.size}`).join(\"\\n\");\n  return sha256Hex2(manifest);\n}\nasync function inspectLocalSnapshot(params) {\n  const repoRoot = params.repoRoot;\n  const files = await listWorkspaceFiles(repoRoot);\n  const manifest = [];\n  for (const relativePath of files) {\n    const absolutePath = path4.join(repoRoot, relativePath);\n    const stat = await fs3.lstat(absolutePath);\n    if (stat.isSymbolicLink()) {\n      const linkTarget = await fs3.readlink(absolutePath);\n      const blobHash2 = sha256Hex2(`symlink:${linkTarget}`);\n      if (params.persistBlobs !== false) {\n        await persistBlob(blobHash2, linkTarget);\n      }\n      manifest.push({\n        path: relativePath,\n        mode: \"symlink\",\n        blobHash: blobHash2,\n        size: Buffer.byteLength(linkTarget)\n      });\n      continue;\n    }\n    const content = await fs3.readFile(absolutePath);\n    const blobHash = sha256Hex2(content);\n    if (params.persistBlobs !== false) {\n      await persistBlob(blobHash, content);\n    }\n    manifest.push({\n      path: relativePath,\n      mode: stat.mode & 73 ? \"executable\" : \"file\",\n      blobHash,\n      size: stat.size\n    });\n  }\n  const normalizedManifest = manifest.sort((a, b) => a.path.localeCompare(b.path));\n  return {\n    repoRoot,\n    repoFingerprint: params.repoFingerprint ?? null,\n    laneId: params.laneId ?? null,\n    /* v8 ignore next -- branch fallback only applies when git branch lookup races/fails. */\n    branchName: params.branchName ?? await getCurrentBranch(repoRoot).catch(() => null),\n    /* v8 ignore next -- commit fallback only applies when git HEAD lookup races/fails. */\n    localCommitHash: await getHeadCommitHash(repoRoot).catch(() => null),\n    snapshotHash: buildSnapshotHash(normalizedManifest),\n    createdAt: (/* @__PURE__ */ new Date()).toISOString(),\n    files: normalizedManifest\n  };\n}\nasync function captureLocalSnapshot(params) {\n  const inspection = await inspectLocalSnapshot({ ...params, persistBlobs: true });\n  const snapshot = {\n    schemaVersion: 1,\n    id: randomUUID2(),\n    ...inspection\n  };\n  await writeJsonAtomic(getSnapshotRecordPath(snapshot.id), snapshot);\n  return snapshot;\n}\nasync function readLocalSnapshot(snapshotId) {\n  if (!snapshotId) return null;\n  try {\n    const raw = await fs3.readFile(getSnapshotRecordPath(snapshotId), \"utf8\");\n    const parsed = JSON.parse(raw);\n    if (!parsed || parsed.schemaVersion !== 1) return null;\n    return parsed;\n  } catch {\n    return null;\n  }\n}\nasync function materializeLocalSnapshot(snapshotId, targetDir) {\n  const snapshot = await readLocalSnapshot(snapshotId);\n  await fs3.mkdir(targetDir, { recursive: true });\n  if (!snapshot) return;\n  for (const entry of snapshot.files) {\n    const destination = path4.join(targetDir, entry.path);\n    await fs3.mkdir(path4.dirname(destination), { recursive: true });\n    const blobPath = getBlobPath(entry.blobHash);\n    if (entry.mode === \"symlink\") {\n      const linkTarget = await fs3.readFile(blobPath, \"utf8\");\n      await fs3.symlink(linkTarget, destination);\n      continue;\n    }\n    await fs3.copyFile(blobPath, destination);\n    if (entry.mode === \"executable\") {\n      await fs3.chmod(destination, 493);\n    }\n  }\n}\nasync function pruneEmptyParentDirectories(repoRoot, filePath) {\n  let current = path4.dirname(filePath);\n  while (current !== repoRoot) {\n    const entries = await fs3.readdir(current).catch(() => null);\n    if (!entries || entries.length > 0) return;\n    await fs3.rmdir(current).catch(() => void 0);\n    current = path4.dirname(current);\n  }\n}\nasync function restoreLocalSnapshotToWorktree(snapshotId, repoRoot) {\n  const snapshot = await readLocalSnapshot(snapshotId);\n  await fs3.mkdir(repoRoot, { recursive: true });\n  const desiredPaths = new Set(snapshot?.files.map((entry) => entry.path) ?? []);\n  const currentPaths = await listWorkspaceFiles(repoRoot);\n  for (const relativePath of currentPaths) {\n    if (desiredPaths.has(relativePath)) continue;\n    const absolutePath = path4.join(repoRoot, relativePath);\n    await fs3.rm(absolutePath, { recursive: true, force: true }).catch(() => void 0);\n    await pruneEmptyParentDirectories(repoRoot, absolutePath);\n  }\n  if (!snapshot) return;\n  for (const entry of snapshot.files) {\n    const destination = path4.join(repoRoot, entry.path);\n    await fs3.mkdir(path4.dirname(destination), { recursive: true });\n    await fs3.rm(destination, { recursive: true, force: true }).catch(() => void 0);\n    const blobPath = getBlobPath(entry.blobHash);\n    if (entry.mode === \"symlink\") {\n      const linkTarget = await fs3.readFile(blobPath, \"utf8\");\n      await fs3.symlink(linkTarget, destination);\n      continue;\n    }\n    await fs3.copyFile(blobPath, destination);\n    if (entry.mode === \"executable\") {\n      await fs3.chmod(destination, 493);\n    }\n  }\n}\nasync function clearDirectoryExceptGit(targetDir) {\n  const entries = await fs3.readdir(targetDir, { withFileTypes: true });\n  for (const entry of entries) {\n    if (entry.name === \".git\") continue;\n    await fs3.rm(path4.join(targetDir, entry.name), { recursive: true, force: true });\n  }\n}\nasync function diffLocalSnapshots(params) {\n  const tempRoot = await fs3.mkdtemp(path4.join(os2.tmpdir(), \"remix-snapshot-diff-\"));\n  const repoDir = path4.join(tempRoot, \"repo\");\n  await fs3.mkdir(repoDir, { recursive: true });\n  try {\n    await materializeLocalSnapshot(params.baseSnapshotId, repoDir);\n    await execa(\"git\", [\"init\"], { cwd: repoDir, stderr: \"ignore\" });\n    await execa(\"git\", [\"add\", \"-A\"], { cwd: repoDir, stderr: \"ignore\" });\n    await execa(\n      \"git\",\n      [\"-c\", \"user.name=Remix\", \"-c\", \"user.email=remix@local\", \"commit\", \"--allow-empty\", \"-m\", \"baseline snapshot\"],\n      { cwd: repoDir, stderr: \"ignore\" }\n    );\n    await clearDirectoryExceptGit(repoDir);\n    await materializeLocalSnapshot(params.targetSnapshotId, repoDir);\n    await execa(\"git\", [\"add\", \"-A\"], { cwd: repoDir, stderr: \"ignore\" });\n    const diffRes = await execa(\"git\", [\"diff\", \"--binary\", \"--no-ext-diff\", \"--cached\", \"HEAD\"], {\n      cwd: repoDir,\n      reject: false,\n      stderr: \"ignore\",\n      stripFinalNewline: false\n    });\n    const pathsRes = await execa(\"git\", [\"diff\", \"--name-only\", \"--cached\", \"HEAD\", \"-z\"], {\n      cwd: repoDir,\n      reject: false,\n      stderr: \"ignore\",\n      stripFinalNewline: false\n    });\n    const diff = String(diffRes.stdout || \"\");\n    const changedPaths = String(pathsRes.stdout || \"\").split(\"\\0\").map((value) => value.trim()).filter(Boolean);\n    return {\n      baseSnapshotId: params.baseSnapshotId,\n      targetSnapshotId: params.targetSnapshotId,\n      diff,\n      diffSha256: diff ? sha256Hex2(diff) : null,\n      changedPaths,\n      stats: summarizeUnifiedDiff(diff)\n    };\n  } finally {\n    await fs3.rm(tempRoot, { recursive: true, force: true });\n  }\n}\n\n// src/infrastructure/collab/pendingFinalizeQueue.ts\nimport { randomUUID as randomUUID3 } from \"crypto\";\nimport fs4 from \"fs/promises\";\nimport path5 from \"path\";\nvar FINALIZE_JOB_LOCK_STALE_MS = 90 * 1e3;\nvar FINALIZE_ATTEMPT_STALE_MS = 10 * 60 * 1e3;\nvar TERMINAL_FINALIZE_JOB_RETENTION_MS = 24 * 60 * 60 * 1e3;\nfunction getJobPath(id) {\n  return path5.join(getFinalizeQueueRoot(), `${id}.json`);\n}\nfunction getJobLockPath2(id) {\n  return path5.join(getFinalizeQueueRoot(), `${id}.lock`);\n}\nfunction isPastDue(isoTimestamp) {\n  if (!isoTimestamp) return true;\n  const parsed = Date.parse(isoTimestamp);\n  return Number.isFinite(parsed) && parsed <= Date.now();\n}\nfunction isStaleAttempt(job) {\n  if (job.status !== \"processing\") return false;\n  if (!job.lastAttemptAt) return true;\n  const parsed = Date.parse(job.lastAttemptAt);\n  if (!Number.isFinite(parsed)) return true;\n  return Date.now() - parsed >= FINALIZE_ATTEMPT_STALE_MS;\n}\nfunction readMetadataDisposition(job) {\n  const value = job.metadata.failureDisposition;\n  return value === \"retryable\" || value === \"terminal\" ? value : null;\n}\nfunction isTerminalFailure(job) {\n  return job.status === \"failed\" && readMetadataDisposition(job) === \"terminal\";\n}\nfunction isTerminalFailureExpired(job) {\n  if (!isTerminalFailure(job)) return false;\n  const updatedAtMs = Date.parse(job.updatedAt);\n  if (!Number.isFinite(updatedAtMs)) return false;\n  return Date.now() - updatedAtMs >= TERMINAL_FINALIZE_JOB_RETENTION_MS;\n}\nfunction matchesJobScope(job, scope) {\n  if (job.repoRoot !== scope.repoRoot) return false;\n  if (scope.currentAppId && job.currentAppId !== scope.currentAppId) return false;\n  if (scope.laneId && job.laneId !== scope.laneId) return false;\n  if (scope.repoFingerprint && job.repoFingerprint && job.repoFingerprint !== scope.repoFingerprint) return false;\n  return true;\n}\nfunction isSameProcessingScope(left, right) {\n  return left.id !== right.id && left.repoRoot === right.repoRoot && left.currentAppId === right.currentAppId && (left.laneId ?? null) === (right.laneId ?? null) && (left.repoFingerprint ?? null) === (right.repoFingerprint ?? null);\n}\nasync function hasFreshJobLock(jobId) {\n  try {\n    const stat = await fs4.stat(getJobLockPath2(jobId));\n    return Date.now() - stat.mtimeMs < FINALIZE_JOB_LOCK_STALE_MS;\n  } catch (error) {\n    if (error?.code === \"ENOENT\") {\n      return false;\n    }\n    throw error;\n  }\n}\nasync function blocksFinalizeClaim(candidate, blocker) {\n  if (!isSameProcessingScope(candidate, blocker)) return false;\n  if (blocker.status === \"processing\") return hasFreshJobLock(blocker.id);\n  return blocker.status === \"queued\" && isPastDue(blocker.nextRetryAt) && blocker.capturedAt < candidate.capturedAt;\n}\nfunction createEmptyPendingFinalizeQueueSummary() {\n  return {\n    state: \"idle\",\n    activeJobCount: 0,\n    queuedJobCount: 0,\n    processingJobCount: 0,\n    retryScheduledJobCount: 0,\n    awaitingUsageJobCount: 0,\n    failedJobCount: 0,\n    oldestCapturedAt: null,\n    newestCapturedAt: null,\n    nextRetryAt: null,\n    latestError: null\n  };\n}\nasync function acquireJobLock2(jobId) {\n  const lockPath = getJobLockPath2(jobId);\n  try {\n    await fs4.mkdir(lockPath);\n    return true;\n  } catch (error) {\n    if (error?.code !== \"EEXIST\") {\n      throw error;\n    }\n  }\n  try {\n    const stat = await fs4.stat(lockPath);\n    if (Date.now() - stat.mtimeMs < FINALIZE_JOB_LOCK_STALE_MS) {\n      return false;\n    }\n    await fs4.rm(lockPath, { recursive: true, force: true });\n  } catch (error) {\n    if (error?.code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n  try {\n    await fs4.mkdir(lockPath);\n    return true;\n  } catch (error) {\n    if (error?.code === \"EEXIST\") {\n      return false;\n    }\n    throw error;\n  }\n}\nasync function heartbeatJobLock(jobId) {\n  const lockPath = getJobLockPath2(jobId);\n  const now = /* @__PURE__ */ new Date();\n  try {\n    await fs4.utimes(lockPath, now, now);\n  } catch {\n  }\n}\nasync function cleanStaleFinalizeJobLocks() {\n  const removed = [];\n  const skipped = [];\n  const errors = [];\n  let entries;\n  try {\n    const dirents = await fs4.readdir(getFinalizeQueueRoot(), { withFileTypes: true });\n    entries = dirents.map((d) => ({ name: d.name, isDir: d.isDirectory() }));\n  } catch (error) {\n    if (error?.code === \"ENOENT\") {\n      return { removed, skipped, errors };\n    }\n    throw error;\n  }\n  for (const entry of entries) {\n    if (!entry.isDir || !entry.name.endsWith(\".lock\")) continue;\n    const jobId = entry.name.replace(/\\.lock$/, \"\");\n    const lockPath = path5.join(getFinalizeQueueRoot(), entry.name);\n    try {\n      const stat = await fs4.stat(lockPath);\n      const ageMs = Date.now() - stat.mtimeMs;\n      if (ageMs < FINALIZE_JOB_LOCK_STALE_MS) {\n        skipped.push({ jobId, reason: `fresh (age=${Math.round(ageMs / 1e3)}s)` });\n        continue;\n      }\n      await fs4.rm(lockPath, { recursive: true, force: true });\n      removed.push(jobId);\n    } catch (error) {\n      errors.push({ jobId, error: error instanceof Error ? error.message : String(error) });\n    }\n  }\n  return { removed, skipped, errors };\n}\nfunction normalizeJob2(input) {\n  const now = (/* @__PURE__ */ new Date()).toISOString();\n  const sourceConversation = SourceConversationSchema.safeParse(input.sourceConversation);\n  return {\n    schemaVersion: 1,\n    id: input.id ?? randomUUID3(),\n    status: input.status,\n    repoRoot: input.repoRoot,\n    repoFingerprint: input.repoFingerprint ?? null,\n    currentAppId: input.currentAppId,\n    laneId: input.laneId ?? null,\n    threadId: input.threadId ?? null,\n    sourceConversation: sourceConversation.success ? sourceConversation.data : null,\n    branchName: input.branchName ?? null,\n    prompt: input.prompt,\n    assistantResponse: input.assistantResponse,\n    baselineSnapshotId: input.baselineSnapshotId ?? null,\n    baselineServerRevisionId: input.baselineServerRevisionId ?? null,\n    baselineServerHeadHash: input.baselineServerHeadHash ?? null,\n    currentSnapshotId: input.currentSnapshotId,\n    capturedAt: input.capturedAt ?? now,\n    updatedAt: input.updatedAt ?? now,\n    idempotencyKey: input.idempotencyKey ?? null,\n    error: input.error ?? null,\n    retryCount: Number.isFinite(input.retryCount) ? Math.max(0, Number(input.retryCount)) : 0,\n    lastAttemptAt: input.lastAttemptAt ?? null,\n    nextRetryAt: input.nextRetryAt ?? null,\n    metadata: input.metadata ?? {}\n  };\n}\nasync function enqueuePendingFinalizeJob(input) {\n  const job = normalizeJob2(input);\n  await writeJsonAtomic(getJobPath(job.id), job);\n  return job;\n}\nasync function readPendingFinalizeJob(jobId) {\n  try {\n    const raw = await fs4.readFile(getJobPath(jobId), \"utf8\");\n    const parsed = JSON.parse(raw);\n    if (!parsed || parsed.schemaVersion !== 1 || typeof parsed.id !== \"string\") return null;\n    return normalizeJob2({\n      id: parsed.id,\n      status: parsed.status ?? \"queued\",\n      repoRoot: String(parsed.repoRoot ?? \"\"),\n      repoFingerprint: parsed.repoFingerprint ?? null,\n      currentAppId: String(parsed.currentAppId ?? \"\"),\n      laneId: parsed.laneId ?? null,\n      threadId: parsed.threadId ?? null,\n      sourceConversation: parsed.sourceConversation ?? null,\n      branchName: parsed.branchName ?? null,\n      prompt: String(parsed.prompt ?? \"\"),\n      assistantResponse: String(parsed.assistantResponse ?? \"\"),\n      baselineSnapshotId: parsed.baselineSnapshotId ?? null,\n      baselineServerRevisionId: parsed.baselineServerRevisionId ?? null,\n      baselineServerHeadHash: parsed.baselineServerHeadHash ?? null,\n      currentSnapshotId: String(parsed.currentSnapshotId ?? \"\"),\n      capturedAt: parsed.capturedAt,\n      updatedAt: parsed.updatedAt,\n      idempotencyKey: parsed.idempotencyKey ?? null,\n      error: parsed.error ?? null,\n      retryCount: parsed.retryCount ?? 0,\n      lastAttemptAt: parsed.lastAttemptAt ?? null,\n      nextRetryAt: parsed.nextRetryAt ?? null,\n      metadata: parsed.metadata ?? {}\n    });\n  } catch {\n    return null;\n  }\n}\nasync function listPendingFinalizeJobs() {\n  try {\n    const entries = await fs4.readdir(getFinalizeQueueRoot(), { withFileTypes: true });\n    const jobs = await Promise.all(\n      entries.filter((entry) => entry.isFile() && entry.name.endsWith(\".json\")).map((entry) => readPendingFinalizeJob(entry.name.replace(/\\.json$/, \"\")))\n    );\n    return jobs.filter((job) => Boolean(job)).sort((a, b) => a.capturedAt.localeCompare(b.capturedAt));\n  } catch (error) {\n    if (error?.code === \"ENOENT\") {\n      return [];\n    }\n    throw error;\n  }\n}\nasync function prunePendingFinalizeJobs() {\n  const jobs = await listPendingFinalizeJobs();\n  await Promise.all(\n    jobs.filter((job) => job.status === \"completed\" || isTerminalFailureExpired(job)).map((job) => removePendingFinalizeJob(job.id))\n  );\n}\nasync function summarizePendingFinalizeJobs(scope) {\n  const jobs = (await listPendingFinalizeJobs()).filter((job) => matchesJobScope(job, scope));\n  const summary = createEmptyPendingFinalizeQueueSummary();\n  const relevantJobs = jobs.filter((job) => job.status !== \"completed\");\n  if (relevantJobs.length === 0) return summary;\n  summary.oldestCapturedAt = relevantJobs[0]?.capturedAt ?? null;\n  summary.newestCapturedAt = relevantJobs[relevantJobs.length - 1]?.capturedAt ?? null;\n  for (const job of relevantJobs) {\n    if (job.error) {\n      summary.latestError = job.error;\n    }\n    if (job.nextRetryAt && (!summary.nextRetryAt || job.nextRetryAt < summary.nextRetryAt)) {\n      summary.nextRetryAt = job.nextRetryAt;\n    }\n    if (job.status === \"processing\") {\n      summary.processingJobCount += 1;\n      continue;\n    }\n    if (job.status === \"failed\") {\n      summary.failedJobCount += 1;\n      continue;\n    }\n    if (!isPastDue(job.nextRetryAt)) {\n      if (job.retryCount === 0 && !job.error) {\n        summary.awaitingUsageJobCount += 1;\n      } else {\n        summary.retryScheduledJobCount += 1;\n      }\n      continue;\n    }\n    summary.queuedJobCount += 1;\n  }\n  summary.activeJobCount = summary.queuedJobCount + summary.processingJobCount + summary.retryScheduledJobCount + summary.awaitingUsageJobCount;\n  if (summary.processingJobCount > 0) {\n    summary.state = \"processing\";\n  } else if (summary.queuedJobCount > 0) {\n    summary.state = \"queued\";\n  } else if (summary.retryScheduledJobCount > 0) {\n    summary.state = \"retry_scheduled\";\n  } else if (summary.awaitingUsageJobCount > 0) {\n    summary.state = \"awaiting_usage\";\n  } else {\n    summary.state = \"failed\";\n  }\n  return summary;\n}\nasync function updatePendingFinalizeJob(jobId, update) {\n  const existing = await readPendingFinalizeJob(jobId);\n  if (!existing) return null;\n  const next = {\n    ...existing,\n    ...update,\n    schemaVersion: 1,\n    id: existing.id,\n    capturedAt: existing.capturedAt,\n    updatedAt: (/* @__PURE__ */ new Date()).toISOString(),\n    metadata: update.metadata ? { ...existing.metadata, ...update.metadata } : existing.metadata\n  };\n  await writeJsonAtomic(getJobPath(jobId), next);\n  return next;\n}\nasync function claimPendingFinalizeJob(jobId) {\n  const lockPath = getJobLockPath2(jobId);\n  const lockAcquired = await acquireJobLock2(jobId);\n  if (!lockAcquired) return null;\n  let released = false;\n  const release = async () => {\n    if (released) return;\n    released = true;\n    await fs4.rm(lockPath, { recursive: true, force: true }).catch(() => void 0);\n  };\n  try {\n    let existing = await readPendingFinalizeJob(jobId);\n    if (!existing) {\n      await release();\n      return null;\n    }\n    if (isStaleAttempt(existing)) {\n      const recovered = await updatePendingFinalizeJob(jobId, {\n        status: \"queued\",\n        error: existing.error ?? \"Recovered a stale finalize processing lease.\",\n        nextRetryAt: null\n      });\n      existing = recovered ?? existing;\n    }\n    if (existing.status === \"failed\") {\n      if (isTerminalFailure(existing)) {\n        await release();\n        return null;\n      }\n      const recovered = await updatePendingFinalizeJob(jobId, {\n        status: \"queued\",\n        nextRetryAt: existing.nextRetryAt ?? null\n      });\n      existing = recovered ?? existing;\n    }\n    if (existing.status !== \"queued\" || !isPastDue(existing.nextRetryAt)) {\n      await release();\n      return null;\n    }\n    const jobs = await listPendingFinalizeJobs();\n    for (const job of jobs) {\n      if (await blocksFinalizeClaim(existing, job)) {\n        await release();\n        return null;\n      }\n    }\n    const now = (/* @__PURE__ */ new Date()).toISOString();\n    const claimed = await updatePendingFinalizeJob(jobId, {\n      status: \"processing\",\n      error: null,\n      retryCount: existing.retryCount + 1,\n      lastAttemptAt: now,\n      nextRetryAt: null\n    });\n    if (!claimed) {\n      await release();\n      return null;\n    }\n    return { job: claimed, release };\n  } catch (error) {\n    await release();\n    throw error;\n  }\n}\nasync function removePendingFinalizeJob(jobId) {\n  try {\n    await fs4.unlink(getJobPath(jobId));\n  } catch (error) {\n    if (error?.code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n  await fs4.rm(getJobLockPath2(jobId), { recursive: true, force: true }).catch(() => void 0);\n}\nvar forgetPendingFinalizeJob = removePendingFinalizeJob;\nasync function requeuePendingFinalizeJob(jobId) {\n  const existing = await readPendingFinalizeJob(jobId);\n  if (!existing) return null;\n  await fs4.rm(getJobLockPath2(jobId), { recursive: true, force: true }).catch(() => void 0);\n  return updatePendingFinalizeJob(jobId, {\n    status: \"queued\",\n    error: null,\n    nextRetryAt: null,\n    metadata: {\n      // Reset the auto-terminal counter so an operator-initiated retry gets\n      // a fresh budget instead of being escalated to \"failed\" on the very\n      // next attempt.\n      consecutiveFailures: 0,\n      consecutiveFailureReason: null,\n      // Clear any previous terminal disposition so claim doesn't short-circuit.\n      failureDisposition: null,\n      failureReason: null,\n      requeuedAt: (/* @__PURE__ */ new Date()).toISOString()\n    }\n  });\n}\n\n// src/application/collab/shared.ts\nimport { createHash as createHash3 } from \"crypto\";\nfunction unwrapResponseObject(resp, label) {\n  const obj = resp?.responseObject;\n  if (obj === void 0 || obj === null) {\n    const message = typeof resp?.message === \"string\" && resp.message.trim().length > 0 ? resp.message : `Missing ${label} response`;\n    throw new RemixError(message, { exitCode: 1, hint: resp ? JSON.stringify(resp, null, 2) : null });\n  }\n  return obj;\n}\nvar DEFAULT_PAGINATION_LIMIT = 25;\nvar MAX_PAGINATION_LIMIT = 50;\nfunction normalizePagination(params) {\n  const rawLimit = typeof params?.limit === \"number\" && Number.isFinite(params.limit) ? Math.trunc(params.limit) : DEFAULT_PAGINATION_LIMIT;\n  const rawOffset = typeof params?.offset === \"number\" && Number.isFinite(params.offset) ? Math.trunc(params.offset) : 0;\n  return {\n    limit: Math.max(1, Math.min(MAX_PAGINATION_LIMIT, rawLimit)),\n    offset: Math.max(0, rawOffset)\n  };\n}\nfunction paginateOverfetchedItems(items, params) {\n  const pagination = normalizePagination(params);\n  return {\n    items: items.slice(0, pagination.limit),\n    pagination: {\n      ...pagination,\n      hasMore: items.length > pagination.limit\n    }\n  };\n}\nfunction unwrapMergeRequest(resp) {\n  return unwrapResponseObject(resp, \"merge request\");\n}\nfunction unwrapMergeRequestReview(resp) {\n  return unwrapResponseObject(resp, \"merge request review\");\n}\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\nfunction buildDeterministicIdempotencyKey(parts) {\n  return createHash3(\"sha256\").update(JSON.stringify(parts)).digest(\"hex\");\n}\nfunction formatCliErrorDetail(err) {\n  if (err instanceof RemixError) {\n    return [err.message, err.hint].filter(Boolean).join(\"\\n\\n\") || null;\n  }\n  if (err instanceof Error) {\n    return err.message || null;\n  }\n  return typeof err === \"string\" && err.trim() ? err.trim() : null;\n}\nfunction sanitizeCheckoutDirName(value) {\n  const sanitized = value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n  return sanitized || \"remix-remix\";\n}\nfunction buildDashboardAppUrl(appId) {\n  return `https://dashboard.remix.one/apps/${encodeURIComponent(appId)}`;\n}\nasync function resolveProjectLaneIfAuthoritative(api, params) {\n  const branchName = String(params.branchName ?? \"\").trim();\n  if (!branchName) return null;\n  if (!params.projectId && !params.repoFingerprint && !params.remoteUrl) return null;\n  const readLane = async () => {\n    const laneResp = await api.resolveProjectLaneBinding({\n      projectId: params.projectId ?? void 0,\n      repoFingerprint: params.repoFingerprint ?? void 0,\n      remoteUrl: params.remoteUrl ?? void 0,\n      defaultBranch: params.defaultBranch ?? void 0,\n      branchName,\n      currentAppId: params.currentAppId ?? void 0,\n      upstreamAppId: params.expectedUpstreamAppId ?? void 0\n    });\n    return unwrapResponseObject(laneResp, \"project lane binding\");\n  };\n  let lane = await readLane();\n  const shouldRepairResolvedLane = lane.status === \"resolved\" && Boolean(\n    params.expectedUpstreamAppId && (!lane.upstreamAppId || lane.upstreamAppId !== params.expectedUpstreamAppId)\n  );\n  if (shouldRepairResolvedLane && params.createIfMissing && params.seedAppId) {\n    const ensuredResp = await api.ensureProjectLaneBinding({\n      projectId: params.projectId ?? void 0,\n      repoFingerprint: params.repoFingerprint ?? void 0,\n      remoteUrl: params.remoteUrl ?? void 0,\n      defaultBranch: params.defaultBranch ?? void 0,\n      branchName,\n      currentAppId: params.currentAppId ?? void 0,\n      upstreamAppId: params.expectedUpstreamAppId ?? void 0,\n      seedAppId: params.seedAppId\n    });\n    lane = unwrapResponseObject(ensuredResp, \"project lane binding\");\n  }\n  if (lane.status !== \"resolved\" && params.createIfMissing && params.seedAppId) {\n    const ensuredResp = await api.ensureProjectLaneBinding({\n      projectId: params.projectId ?? void 0,\n      repoFingerprint: params.repoFingerprint ?? void 0,\n      remoteUrl: params.remoteUrl ?? void 0,\n      defaultBranch: params.defaultBranch ?? void 0,\n      branchName,\n      currentAppId: params.currentAppId ?? void 0,\n      upstreamAppId: params.expectedUpstreamAppId ?? void 0,\n      seedAppId: params.seedAppId\n    });\n    lane = unwrapResponseObject(ensuredResp, \"project lane binding\");\n  }\n  if (lane.status !== \"resolved\") return null;\n  if (params.projectId && lane.projectId && lane.projectId !== params.projectId) return null;\n  if (params.currentAppId && lane.currentAppId && lane.currentAppId !== params.currentAppId) return null;\n  if (params.expectedUpstreamAppId && lane.upstreamAppId && lane.upstreamAppId !== params.expectedUpstreamAppId) return null;\n  return lane;\n}\nasync function pollAppReady(api, appId, deps = {}) {\n  const now = deps.clock?.now ?? Date.now;\n  const sleepFn = deps.timers?.sleep ?? sleep;\n  const started = now();\n  let delay = 2e3;\n  while (now() - started < 20 * 60 * 1e3) {\n    const appResp = await api.getApp(appId);\n    const app = unwrapResponseObject(appResp, \"app\");\n    const status = typeof app.status === \"string\" ? app.status : \"\";\n    if (status === \"ready\") return app;\n    if (status === \"error\") {\n      throw new RemixError(\"App is in error state.\", {\n        exitCode: 1,\n        hint: typeof app.statusError === \"string\" ? app.statusError : null\n      });\n    }\n    await sleepFn(delay);\n    delay = Math.min(1e4, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for app to become ready.\", { exitCode: 1 });\n}\nvar DEFAULT_APP_IMPORTED_TIMEOUT_MS = 6e4;\nvar APP_IMPORTED_SLOW_WARNING_MS = 3e4;\nfunction resolveImportedTimeoutMs(override) {\n  if (typeof override === \"number\" && Number.isFinite(override) && override > 0) return override;\n  const fromEnv = Number(process.env.REMIX_INIT_POLL_TIMEOUT_MS);\n  if (Number.isFinite(fromEnv) && fromEnv > 0) return fromEnv;\n  return DEFAULT_APP_IMPORTED_TIMEOUT_MS;\n}\nasync function pollAppImported(api, appId, opts) {\n  const timeoutMs = resolveImportedTimeoutMs(opts?.timeoutMs);\n  const slowWarningMs = opts?.slowWarningMs ?? APP_IMPORTED_SLOW_WARNING_MS;\n  const started = Date.now();\n  let delay = 500;\n  let warnedSlow = false;\n  while (Date.now() - started < timeoutMs) {\n    const appResp = await api.getApp(appId);\n    const app = unwrapResponseObject(appResp, \"app\");\n    const status = typeof app.status === \"string\" ? app.status : \"\";\n    if (status === \"error\") {\n      throw new RemixError(\"App is in error state.\", {\n        exitCode: 1,\n        hint: typeof app.statusError === \"string\" ? app.statusError : null\n      });\n    }\n    const headCommitId = typeof app.headCommitId === \"string\" ? app.headCommitId : null;\n    if (headCommitId) return app;\n    const elapsed = Date.now() - started;\n    if (!warnedSlow && elapsed >= slowWarningMs) {\n      warnedSlow = true;\n      const onSlow = opts?.onSlow;\n      if (onSlow) {\n        onSlow(elapsed);\n      } else {\n        console.warn(\n          `[remix collab init] still waiting for app import (>${Math.round(elapsed / 1e3)}s); will time out at ${Math.round(timeoutMs / 1e3)}s`\n        );\n      }\n    }\n    await sleep(delay);\n    delay = Math.min(2e3, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for app to be imported.\", {\n    exitCode: 1,\n    hint: `head_commit_id was not set within ${Math.round(timeoutMs / 1e3)}s. The backend import worker may have hung; check the app's status in the dashboard, or set REMIX_INIT_POLL_TIMEOUT_MS to a higher value if the bundle is unusually large.`\n  });\n}\nasync function pollChangeStep(api, appId, changeStepId) {\n  const started = Date.now();\n  let delay = 1500;\n  while (Date.now() - started < 20 * 60 * 1e3) {\n    const resp = await api.getChangeStep(appId, changeStepId);\n    const step = unwrapResponseObject(resp, \"change step\");\n    const status = typeof step.status === \"string\" ? step.status : \"\";\n    if (status === \"succeeded\") return step;\n    if (status === \"failed\") {\n      throw new RemixError(\"Change step failed.\", {\n        exitCode: 1,\n        hint: typeof step.statusError === \"string\" ? step.statusError : null\n      });\n    }\n    await sleep(delay);\n    delay = Math.min(1e4, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for change step.\", { exitCode: 1 });\n}\nasync function pollChangeStepReplay(api, appId, replayId) {\n  const started = Date.now();\n  let delay = 1500;\n  while (Date.now() - started < 30 * 60 * 1e3) {\n    const resp = await api.getChangeStepReplay(appId, replayId);\n    const replay = unwrapResponseObject(resp, \"change step replay\");\n    if (replay.status === \"succeeded\") return replay;\n    if (replay.status === \"manual_resolution_required\") {\n      throw new RemixError(\"AI-assisted replay requires manual intervention.\", {\n        exitCode: 2,\n        hint: replay.statusError || \"The server could not safely adapt the preserved local diff.\"\n      });\n    }\n    if (replay.status === \"failed\" || replay.status === \"cancelled\") {\n      throw new RemixError(\"AI-assisted replay failed.\", {\n        exitCode: 1,\n        hint: replay.statusError || null\n      });\n    }\n    await sleep(delay);\n    delay = Math.min(1e4, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for AI-assisted replay.\", { exitCode: 1 });\n}\nasync function pollUpstreamSyncCompletion(api, appId, params) {\n  const started = Date.now();\n  let delay = 1500;\n  let sawNonReady = params.initialStatus !== \"ready\";\n  while (Date.now() - started < 30 * 60 * 1e3) {\n    const appResp = await api.getApp(appId);\n    const app = unwrapResponseObject(appResp, \"app\");\n    const status = typeof app.status === \"string\" ? app.status : \"\";\n    const headCommitId = typeof app.headCommitId === \"string\" ? app.headCommitId : null;\n    if (status === \"error\") {\n      throw new RemixError(\"App upstream sync failed.\", {\n        exitCode: 1,\n        hint: typeof app.statusError === \"string\" ? app.statusError : null\n      });\n    }\n    if (status !== \"ready\") sawNonReady = true;\n    if (status === \"ready\" && headCommitId && headCommitId !== params.initialHeadCommitId) {\n      return app;\n    }\n    if (status === \"ready\" && sawNonReady) {\n      return app;\n    }\n    await sleep(delay);\n    delay = Math.min(1e4, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for upstream sync.\", { exitCode: 1 });\n}\nasync function pollMergeRequestCompletion(api, mrId, params) {\n  const started = Date.now();\n  let delay = 1500;\n  while (Date.now() - started < 30 * 60 * 1e3) {\n    const reviewResp = await api.getMergeRequestReview(mrId);\n    const review = unwrapMergeRequestReview(reviewResp);\n    const mergeRequest = review.mergeRequest;\n    if (mergeRequest.status === \"merged\") return mergeRequest;\n    if (mergeRequest.status === \"manual_resolution_required\") {\n      throw new RemixError(\"Merge approval requires manual conflict resolution.\", {\n        exitCode: 2,\n        hint: \"Merge request ended in status=manual_resolution_required.\"\n      });\n    }\n    if (mergeRequest.status === \"rejected\" || mergeRequest.status === \"closed\") {\n      throw new RemixError(\"Merge approval did not complete successfully.\", {\n        exitCode: 1,\n        hint: `Merge request ended in status=${mergeRequest.status}.`\n      });\n    }\n    if (params?.targetAppId) {\n      const appResp = await api.getApp(params.targetAppId);\n      const app = unwrapResponseObject(appResp, \"app\");\n      const status = typeof app.status === \"string\" ? app.status : \"\";\n      if (status === \"error\") {\n        throw new RemixError(\"Merge job failed.\", {\n          exitCode: 1,\n          hint: typeof app.statusError === \"string\" ? app.statusError : null\n        });\n      }\n    }\n    await sleep(delay);\n    delay = Math.min(1e4, Math.floor(delay * 1.4));\n  }\n  throw new RemixError(\"Timed out waiting for merge approval to complete.\", { exitCode: 1 });\n}\n\n// src/application/collab/laneBindingResolver.ts\nfunction normalizeBranchName(value) {\n  const normalized = String(value ?? \"\").trim();\n  return normalized || null;\n}\nfunction buildBindingFromLane(state, lane) {\n  if (!lane.currentAppId || !lane.upstreamAppId) return null;\n  const resolvedBranch = normalizeBranchName(lane.branchName) ?? state.currentBranch ?? null;\n  const resolvedDefaultBranch = normalizeBranchName(lane.defaultBranch) ?? normalizeBranchName(state.defaultBranch);\n  const explicitRootProjectId = state.explicitRootBinding?.projectId ?? null;\n  const bindingMode = explicitRootProjectId && lane.projectId === explicitRootProjectId && resolvedBranch && resolvedBranch === resolvedDefaultBranch ? \"explicit_root\" : \"lane\";\n  return {\n    schemaVersion: 3,\n    projectId: lane.projectId ?? state.projectId,\n    currentAppId: lane.currentAppId,\n    upstreamAppId: lane.upstreamAppId,\n    threadId: lane.threadId ?? null,\n    repoFingerprint: lane.repoFingerprint ?? state.repoFingerprint ?? null,\n    remoteUrl: lane.remoteUrl ?? state.remoteUrl ?? null,\n    defaultBranch: lane.defaultBranch ?? state.defaultBranch ?? null,\n    laneId: lane.laneId ?? null,\n    branchName: resolvedBranch,\n    bindingMode\n  };\n}\nfunction shouldPersistRemoteLaneMetadata(localBinding, lane) {\n  return Boolean(\n    !localBinding.laneId && lane.laneId || !localBinding.threadId && lane.threadId || !localBinding.repoFingerprint && lane.repoFingerprint || !localBinding.remoteUrl && lane.remoteUrl || !localBinding.defaultBranch && lane.defaultBranch || !localBinding.branchName && lane.branchName\n  );\n}\nfunction shouldRequireRemoteLaneForCurrentBranch(params) {\n  if (!params.currentBranch) return false;\n  const defaultBranch = normalizeBranchName(params.defaultBranch);\n  if (params.currentBranch === defaultBranch) return false;\n  return !params.binding.laneId || params.binding.currentAppId === params.binding.upstreamAppId;\n}\nfunction resolveLaneLookupProjectId(params) {\n  const currentBranch = normalizeBranchName(params.currentBranch);\n  const defaultBranch = normalizeBranchName(params.defaultBranch);\n  const localProjectId = params.localBinding.projectId ?? null;\n  if (currentBranch && currentBranch !== defaultBranch && localProjectId) {\n    return localProjectId;\n  }\n  return params.explicitRootProjectId ?? (params.requireRemoteLane ? void 0 : localProjectId ?? params.fallbackProjectId ?? void 0);\n}\nasync function persistResolvedLane(repoRoot, binding) {\n  const previousBinding = await readCollabBinding(repoRoot);\n  await writeCollabBinding(repoRoot, {\n    projectId: binding.projectId,\n    currentAppId: binding.currentAppId,\n    upstreamAppId: binding.upstreamAppId,\n    threadId: binding.threadId,\n    repoFingerprint: binding.repoFingerprint,\n    remoteUrl: binding.remoteUrl,\n    defaultBranch: binding.defaultBranch,\n    laneId: binding.laneId,\n    branchName: binding.branchName,\n    bindingMode: binding.bindingMode\n  });\n  if (previousBinding && (previousBinding.laneId ?? null) !== (binding.laneId ?? null)) {\n    await migrateLocalBaselineForLaneChange({\n      repoRoot,\n      repoFingerprint: binding.repoFingerprint,\n      currentAppId: binding.currentAppId,\n      branchName: binding.branchName,\n      fromLaneId: previousBinding.laneId,\n      toLaneId: binding.laneId\n    });\n  }\n  return readCollabBinding(repoRoot);\n}\nfunction buildAmbiguousResolution(params) {\n  return {\n    status: \"ambiguous_family_selection\",\n    currentBranch: params.currentBranch,\n    projectIds: Array.isArray(params.lane.projectIds) ? params.lane.projectIds.filter((value) => typeof value === \"string\" && value.trim().length > 0) : [],\n    repoFingerprint: params.lane.repoFingerprint ?? params.state.repoFingerprint,\n    remoteUrl: params.lane.remoteUrl ?? params.state.remoteUrl,\n    defaultBranch: params.lane.defaultBranch ?? params.state.defaultBranch\n  };\n}\nvar RESOLUTION_CACHE_TTL_MS = 5e3;\nvar resolutionCache = /* @__PURE__ */ new Map();\nvar cacheClock3 = () => Date.now();\nfunction buildResolutionCacheKey(params) {\n  return [\n    params.repoRoot,\n    params.currentBranch ?? \"\",\n    params.hasApi ? \"1\" : \"0\",\n    params.currentAppId ?? \"\",\n    params.upstreamAppId ?? \"\",\n    params.laneId ?? \"\"\n  ].join(\"|\");\n}\nfunction readResolutionCache(key) {\n  const entry = resolutionCache.get(key);\n  if (!entry) return null;\n  if (cacheClock3() - entry.cachedAt > RESOLUTION_CACHE_TTL_MS) {\n    resolutionCache.delete(key);\n    return null;\n  }\n  return entry.resolution;\n}\nfunction writeResolutionCache(key, resolution) {\n  if (resolution.status !== \"resolved\") return;\n  resolutionCache.set(key, { resolution, cachedAt: cacheClock3() });\n}\nasync function resolveActiveLaneBinding(params) {\n  const state = await readCollabBindingState(params.repoRoot);\n  const cacheKey = buildResolutionCacheKey({\n    repoRoot: params.repoRoot,\n    currentBranch: state ? normalizeBranchName(state.currentBranch) : null,\n    hasApi: Boolean(params.api),\n    currentAppId: state?.binding?.currentAppId ?? null,\n    upstreamAppId: state?.binding?.upstreamAppId ?? null,\n    laneId: state?.binding?.laneId ?? null\n  });\n  const cached = readResolutionCache(cacheKey);\n  if (cached) return cached;\n  const resolution = await resolveActiveLaneBindingUncached(params, state);\n  writeResolutionCache(cacheKey, resolution);\n  return resolution;\n}\nasync function resolveActiveLaneBindingUncached(params, state) {\n  if (!state) {\n    return { status: \"not_bound\", currentBranch: null };\n  }\n  const currentBranch = normalizeBranchName(state.currentBranch);\n  const localBinding = state.binding;\n  if (localBinding) {\n    const requireRemoteLane = shouldRequireRemoteLaneForCurrentBranch({\n      binding: localBinding,\n      currentBranch,\n      defaultBranch: state.defaultBranch\n    });\n    if (!params.api || !currentBranch) {\n      return {\n        status: \"resolved\",\n        source: \"local\",\n        binding: localBinding,\n        currentBranch\n      };\n    }\n    const laneResp2 = await params.api.resolveProjectLaneBinding({\n      projectId: resolveLaneLookupProjectId({\n        explicitRootProjectId: state.explicitRootBinding?.projectId,\n        localBinding,\n        currentBranch,\n        defaultBranch: state.defaultBranch,\n        requireRemoteLane,\n        fallbackProjectId: state.projectId\n      }),\n      repoFingerprint: state.repoFingerprint ?? void 0,\n      remoteUrl: state.remoteUrl ?? void 0,\n      defaultBranch: state.defaultBranch ?? void 0,\n      branchName: currentBranch,\n      currentAppId: localBinding.currentAppId,\n      upstreamAppId: localBinding.upstreamAppId\n    });\n    const lane2 = unwrapResponseObject(laneResp2, \"project lane binding\");\n    if (lane2.status === \"ambiguous_family_selection\") {\n      return buildAmbiguousResolution({ state, currentBranch, lane: lane2 });\n    }\n    if (lane2.status === \"resolved\") {\n      const resolvedBranch = normalizeBranchName(lane2.branchName);\n      const resolvedProjectId = lane2.projectId ?? state.projectId;\n      const branchConflict = Boolean(resolvedBranch && localBinding.branchName && resolvedBranch !== localBinding.branchName);\n      const appConflict = Boolean(lane2.currentAppId && lane2.currentAppId !== localBinding.currentAppId);\n      const upstreamConflict = Boolean(lane2.upstreamAppId && lane2.upstreamAppId !== localBinding.upstreamAppId);\n      const projectConflict = Boolean(resolvedProjectId && localBinding.projectId && resolvedProjectId !== localBinding.projectId);\n      if (branchConflict || appConflict || upstreamConflict || projectConflict) {\n        if (requireRemoteLane) {\n          const binding = buildBindingFromLane(state, lane2);\n          if (binding) {\n            return {\n              status: \"resolved\",\n              source: \"remote\",\n              binding,\n              currentBranch\n            };\n          }\n        }\n        return {\n          status: \"binding_conflict\",\n          binding: localBinding,\n          resolvedLane: lane2,\n          currentBranch\n        };\n      }\n      if (shouldPersistRemoteLaneMetadata(localBinding, lane2)) {\n        const binding = buildBindingFromLane(state, lane2);\n        if (binding) {\n          return {\n            status: \"resolved\",\n            source: \"remote\",\n            binding,\n            currentBranch\n          };\n        }\n      }\n    }\n    if (requireRemoteLane) {\n      return {\n        status: \"missing_branch_binding\",\n        currentBranch,\n        projectId: lane2.projectId ?? state.projectId,\n        repoFingerprint: lane2.repoFingerprint ?? state.repoFingerprint,\n        remoteUrl: lane2.remoteUrl ?? state.remoteUrl,\n        defaultBranch: lane2.defaultBranch ?? state.defaultBranch,\n        upstreamAppId: lane2.upstreamAppId ?? localBinding.upstreamAppId ?? null,\n        threadId: lane2.threadId ?? localBinding.threadId ?? null\n      };\n    }\n    return {\n      status: \"resolved\",\n      source: \"local\",\n      binding: localBinding,\n      currentBranch\n    };\n  }\n  if (!params.api || !currentBranch) {\n    return {\n      status: \"missing_branch_binding\",\n      currentBranch,\n      projectId: state.projectId,\n      repoFingerprint: state.repoFingerprint,\n      remoteUrl: state.remoteUrl,\n      defaultBranch: state.defaultBranch,\n      upstreamAppId: null,\n      threadId: null\n    };\n  }\n  const laneResp = await params.api.resolveProjectLaneBinding({\n    projectId: state.explicitRootBinding?.projectId ?? state.projectId ?? void 0,\n    repoFingerprint: state.repoFingerprint ?? void 0,\n    remoteUrl: state.remoteUrl ?? void 0,\n    defaultBranch: state.defaultBranch ?? void 0,\n    branchName: currentBranch,\n    currentAppId: state.binding?.currentAppId,\n    upstreamAppId: state.binding?.upstreamAppId\n  });\n  const lane = unwrapResponseObject(laneResp, \"project lane binding\");\n  if (lane.status === \"ambiguous_family_selection\") {\n    return buildAmbiguousResolution({ state, currentBranch, lane });\n  }\n  if (lane.status === \"resolved\") {\n    const binding = buildBindingFromLane(state, lane);\n    if (binding) {\n      return {\n        status: \"resolved\",\n        source: \"remote\",\n        binding,\n        currentBranch\n      };\n    }\n  }\n  return {\n    status: \"missing_branch_binding\",\n    currentBranch,\n    projectId: lane.projectId ?? state.explicitRootBinding?.projectId ?? state.projectId,\n    repoFingerprint: lane.repoFingerprint ?? state.repoFingerprint,\n    remoteUrl: lane.remoteUrl ?? state.remoteUrl,\n    defaultBranch: lane.defaultBranch ?? state.defaultBranch,\n    upstreamAppId: lane.upstreamAppId ?? state.explicitRootBinding?.upstreamAppId ?? null,\n    threadId: lane.threadId ?? state.explicitRootBinding?.threadId ?? null\n  };\n}\nasync function ensureActiveLaneBinding(params) {\n  const resolved = await resolveActiveLaneBinding({\n    repoRoot: params.repoRoot,\n    api: params.api\n  });\n  if (resolved.status === \"resolved\") {\n    if (resolved.source === \"local\") {\n      return resolved.binding;\n    }\n    return persistResolvedLane(params.repoRoot, resolved.binding);\n  }\n  if (resolved.status === \"binding_conflict\") {\n    const serverAppId = resolved.resolvedLane.currentAppId ?? \"(unknown)\";\n    const operation = params.operation ?? \"this command\";\n    throw new RemixError(\"Current branch binding conflicts with the server-resolved Remix lane.\", {\n      exitCode: 2,\n      hint: `Local app ${resolved.binding.currentAppId}; server app ${serverAppId}. Repair the branch binding before running ${operation}.`\n    });\n  }\n  if (resolved.status === \"ambiguous_family_selection\") {\n    throw new RemixError(\"Multiple canonical Remix families match this repository.\", {\n      exitCode: 2,\n      hint: \"This checkout is not specific enough to choose a single family for the current branch. Continue from a checkout already bound to the intended family, or run `remix collab init --force-new` to create a new canonical family.\"\n    });\n  }\n  if (resolved.status === \"not_bound\") {\n    return null;\n  }\n  if (!resolved.currentBranch) {\n    throw new RemixError(\"Current branch is not yet bound to a Remix lane.\", {\n      exitCode: 2,\n      hint: `Switch to a named branch before running ${params.operation ?? \"this command\"}.`\n    });\n  }\n  throw new RemixError(\"Current branch is not yet bound to a Remix lane.\", {\n    exitCode: 2,\n    hint: `Run \\`remix collab init\\` on branch ${resolved.currentBranch} before running ${params.operation ?? \"this command\"}.`\n  });\n}\n\n// src/application/collab/collabDetectRepoState.ts\nfunction buildBaseState() {\n  return {\n    status: \"ready\",\n    repoState: null,\n    repoRoot: null,\n    binding: null,\n    currentBranch: null,\n    branchName: null,\n    localCommitHash: null,\n    currentSnapshotHash: null,\n    currentServerRevisionId: null,\n    currentServerTreeHash: null,\n    currentServerHeadHash: null,\n    currentServerHeadCommitId: null,\n    worktreeClean: false,\n    pendingFinalize: {\n      state: \"idle\",\n      activeJobCount: 0,\n      queuedJobCount: 0,\n      processingJobCount: 0,\n      retryScheduledJobCount: 0,\n      awaitingUsageJobCount: 0,\n      failedJobCount: 0,\n      oldestCapturedAt: null,\n      newestCapturedAt: null,\n      nextRetryAt: null,\n      latestError: null\n    },\n    pendingAsyncJobs: {\n      state: \"idle\",\n      activeJobCount: 0,\n      queuedJobCount: 0,\n      processingJobCount: 0,\n      failedJobCount: 0,\n      oldestCreatedAt: null,\n      newestCreatedAt: null,\n      latestError: null,\n      kinds: []\n    },\n    warnings: [],\n    hint: null,\n    metadataWarnings: [],\n    baseline: {\n      lastSnapshotId: null,\n      lastSnapshotHash: null,\n      lastServerRevisionId: null,\n      lastServerTreeHash: null,\n      lastServerHeadHash: null,\n      lastSeenLocalCommitHash: null\n    }\n  };\n}\nasync function refreshEquivalentRevisionBaseline(params) {\n  return writeLocalBaseline({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.binding.repoFingerprint,\n    laneId: params.binding.laneId,\n    currentAppId: params.binding.currentAppId,\n    branchName: params.binding.branchName,\n    lastSnapshotId: params.baseline.lastSnapshotId,\n    lastSnapshotHash: params.baseline.lastSnapshotHash,\n    lastServerRevisionId: params.appHead.headRevisionId ?? null,\n    lastServerTreeHash: params.appHead.treeHash ?? params.baseline.lastServerTreeHash ?? null,\n    lastServerHeadHash: params.appHead.headCommitHash,\n    lastSeenLocalCommitHash: params.baseline.lastSeenLocalCommitHash\n  });\n}\nasync function collabDetectRepoState(params) {\n  const detected = buildBaseState();\n  let repoRoot;\n  try {\n    repoRoot = await findGitRoot(params.cwd);\n  } catch (error) {\n    detected.status = \"not_git_repo\";\n    detected.hint = formatCliErrorDetail(error) ?? \"Not inside a git repository.\";\n    return detected;\n  }\n  detected.repoRoot = repoRoot;\n  const bindingResolution = await resolveActiveLaneBinding({ repoRoot, api: params.api ?? void 0 });\n  if (bindingResolution.status === \"not_bound\") {\n    detected.status = \"not_bound\";\n    detected.repoState = \"binding_problem\";\n    detected.hint = \"Run `remix collab init` first.\";\n    return detected;\n  }\n  if (bindingResolution.status === \"missing_branch_binding\") {\n    detected.status = \"branch_binding_missing\";\n    detected.repoState = \"binding_problem\";\n    detected.currentBranch = bindingResolution.currentBranch;\n    detected.branchName = bindingResolution.currentBranch;\n    detected.hint = `Current branch ${bindingResolution.currentBranch ?? \"(detached)\"} is not yet bound to a Remix lane.`;\n    return detected;\n  }\n  if (bindingResolution.status === \"ambiguous_family_selection\") {\n    detected.status = \"family_ambiguous\";\n    detected.repoState = \"binding_problem\";\n    detected.currentBranch = bindingResolution.currentBranch;\n    detected.branchName = bindingResolution.currentBranch;\n    detected.hint = \"Multiple canonical Remix families match this repository. Continue from a checkout already bound to the intended family, or run `remix collab init --force-new`.\";\n    return detected;\n  }\n  if (bindingResolution.status === \"binding_conflict\") {\n    const conflictBranch = bindingResolution.currentBranch ?? \"(detached)\";\n    const conflictLaneId = bindingResolution.resolvedLane.laneId ?? \"(unknown)\";\n    const conflictAppId = bindingResolution.resolvedLane.currentAppId ?? \"(unknown)\";\n    detected.status = \"metadata_conflict\";\n    detected.repoState = \"metadata_conflict\";\n    detected.binding = bindingResolution.binding;\n    detected.currentBranch = bindingResolution.currentBranch;\n    detected.branchName = bindingResolution.binding.branchName;\n    detected.hint = `Local binding for ${conflictBranch} points to app ${bindingResolution.binding.currentAppId}, but the server resolved lane ${conflictLaneId} / app ${conflictAppId}.`;\n    return detected;\n  }\n  const binding = bindingResolution.binding;\n  detected.binding = binding;\n  const [currentBranch, localCommitHash, worktreeStatus] = await Promise.all([\n    getCurrentBranch(repoRoot),\n    getHeadCommitHash(repoRoot),\n    getWorktreeStatus(repoRoot)\n  ]);\n  detected.currentBranch = currentBranch;\n  detected.branchName = binding.branchName ?? null;\n  detected.localCommitHash = localCommitHash;\n  detected.worktreeClean = worktreeStatus.isClean;\n  if (!localCommitHash) {\n    detected.status = \"missing_head\";\n    detected.repoState = \"binding_problem\";\n    detected.hint = \"Failed to resolve local HEAD commit.\";\n    return detected;\n  }\n  if (!params.allowBranchMismatch && !isBoundBranchMatch(currentBranch, binding.branchName ?? null)) {\n    detected.status = \"branch_mismatch\";\n    detected.repoState = \"binding_problem\";\n    detected.hint = buildBranchMismatchHint({ currentBranch, branchName: binding.branchName ?? null });\n    return detected;\n  }\n  if (!params.api) {\n    const asyncSummaryBranchName = binding.branchName ?? null;\n    const [inspection, pendingFinalize, pendingAsyncJobs] = await Promise.all([\n      inspectLocalSnapshot({\n        repoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branchName: binding.branchName,\n        persistBlobs: false\n      }),\n      summarizePendingFinalizeJobs({\n        repoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        currentAppId: binding.currentAppId,\n        laneId: binding.laneId\n      }),\n      summarizeAsyncJobs({ repoRoot, branchName: asyncSummaryBranchName })\n    ]);\n    detected.currentSnapshotHash = inspection.snapshotHash;\n    detected.pendingFinalize = pendingFinalize;\n    detected.pendingAsyncJobs = pendingAsyncJobs;\n    return detected;\n  }\n  try {\n    let baseline = await readLocalBaseline({\n      repoFingerprint: binding.repoFingerprint,\n      laneId: binding.laneId,\n      repoRoot\n    });\n    let ambiguousBaselineCandidateCount = null;\n    if (!baseline) {\n      const compatibleBaseline = await findCompatibleLocalBaseline({\n        repoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        currentAppId: binding.currentAppId,\n        branchName: binding.branchName\n      });\n      if (compatibleBaseline.status === \"found\") {\n        baseline = await writeLocalBaseline({\n          ...compatibleBaseline.baseline,\n          repoRoot,\n          repoFingerprint: binding.repoFingerprint,\n          laneId: binding.laneId,\n          currentAppId: binding.currentAppId,\n          branchName: binding.branchName\n        });\n        detected.warnings.push(\n          `Recovered local Remix baseline after lane id changed from ${compatibleBaseline.baseline.laneId ?? \"null\"} to ${binding.laneId ?? \"null\"} for app ${binding.currentAppId} on branch ${binding.branchName ?? \"(unknown)\"}.`\n        );\n      } else if (compatibleBaseline.status === \"ambiguous\") {\n        ambiguousBaselineCandidateCount = compatibleBaseline.candidateCount;\n      }\n    }\n    const hasFullBaseline = Boolean(baseline?.lastSnapshotHash && baseline?.lastServerHeadHash);\n    const metadataIdentityPromise = hasFullBaseline ? getAppDeltaCached(params.api, binding.currentAppId, {\n      baseHeadHash: baseline.lastServerHeadHash,\n      targetHeadHash: baseline.lastServerHeadHash,\n      repoFingerprint: binding.repoFingerprint ?? void 0,\n      remoteUrl: binding.remoteUrl ?? void 0,\n      defaultBranch: binding.defaultBranch ?? void 0\n    }) : Promise.resolve(null);\n    const asyncSummaryBranchName = binding.branchName ?? null;\n    const [headResp, inspection, parallelMetadataResp, pendingFinalize, pendingAsyncJobs] = await Promise.all([\n      getAppHeadCached(params.api, binding.currentAppId),\n      inspectLocalSnapshot({\n        repoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branchName: binding.branchName,\n        persistBlobs: false\n      }),\n      metadataIdentityPromise,\n      summarizePendingFinalizeJobs({\n        repoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        currentAppId: binding.currentAppId,\n        laneId: binding.laneId\n      }),\n      summarizeAsyncJobs({ repoRoot, branchName: asyncSummaryBranchName })\n    ]);\n    const appHead = unwrapResponseObject(headResp, \"app head\");\n    detected.currentServerRevisionId = appHead.headRevisionId ?? null;\n    detected.currentServerTreeHash = appHead.treeHash ?? null;\n    detected.currentServerHeadHash = appHead.headCommitHash;\n    detected.currentServerHeadCommitId = appHead.headCommitId;\n    detected.currentSnapshotHash = inspection.snapshotHash;\n    detected.pendingFinalize = pendingFinalize;\n    detected.pendingAsyncJobs = pendingAsyncJobs;\n    detected.baseline = {\n      lastSnapshotId: baseline?.lastSnapshotId ?? null,\n      lastSnapshotHash: baseline?.lastSnapshotHash ?? null,\n      lastServerRevisionId: baseline?.lastServerRevisionId ?? null,\n      lastServerTreeHash: baseline?.lastServerTreeHash ?? null,\n      lastServerHeadHash: baseline?.lastServerHeadHash ?? null,\n      lastSeenLocalCommitHash: baseline?.lastSeenLocalCommitHash ?? null\n    };\n    if (!baseline?.lastSnapshotHash || !baseline.lastServerHeadHash) {\n      if (detected.worktreeClean && localCommitHash && localCommitHash !== appHead.headCommitHash) {\n        try {\n          const bootstrapResp = await params.api.getAppDelta(binding.currentAppId, {\n            baseHeadHash: localCommitHash,\n            targetHeadHash: appHead.headCommitHash,\n            targetRevisionId: appHead.headRevisionId,\n            repoFingerprint: binding.repoFingerprint ?? void 0,\n            remoteUrl: binding.remoteUrl ?? void 0,\n            defaultBranch: binding.defaultBranch ?? void 0\n          });\n          const bootstrapDelta = unwrapResponseObject(bootstrapResp, \"app delta\");\n          detected.metadataWarnings = Array.from(/* @__PURE__ */ new Set([...detected.metadataWarnings, ...bootstrapDelta.warnings]));\n          detected.warnings.push(...bootstrapDelta.warnings);\n          if (bootstrapDelta.status === \"conflict_risk\") {\n            detected.status = \"metadata_conflict\";\n            detected.repoState = \"metadata_conflict\";\n            detected.hint = bootstrapDelta.warnings.join(\"\\n\") || \"Run the command from the correct bound repository.\";\n            return detected;\n          }\n          if (bootstrapDelta.status === \"delta_ready\" || bootstrapDelta.status === \"up_to_date\") {\n            detected.repoState = \"server_only_changed\";\n            detected.hint = \"This checkout has not stored a local Remix baseline yet, but its current Git HEAD is already known to Remix. Pull the server delta locally to create the first baseline for this checkout.\";\n            return detected;\n          }\n        } catch {\n        }\n      }\n      detected.repoState = \"external_local_base_changed\";\n      detected.hint = ambiguousBaselineCandidateCount !== null ? `No local Remix revision baseline exists for this lane, and multiple compatible local baselines were found (${ambiguousBaselineCandidateCount}). Run \\`remix collab status\\` or sync this lane to seed an unambiguous baseline.` : \"No local Remix revision baseline exists for this lane yet. Run `remix collab init` or sync this lane to seed the baseline.\";\n      return detected;\n    }\n    const localHeadMovedSinceBaseline = Boolean(baseline.lastSeenLocalCommitHash) && localCommitHash !== baseline.lastSeenLocalCommitHash;\n    if (localHeadMovedSinceBaseline) {\n      detected.warnings.push(\n        \"Local Git HEAD changed since the last Remix baseline. Remix will use the current workspace snapshot to detect divergence.\"\n      );\n    }\n    const metadataCheck = unwrapResponseObject(parallelMetadataResp, \"app delta metadata\");\n    detected.metadataWarnings = metadataCheck.warnings;\n    detected.warnings.push(...metadataCheck.warnings);\n    if (metadataCheck.status === \"conflict_risk\") {\n      detected.status = \"metadata_conflict\";\n      detected.repoState = \"metadata_conflict\";\n      detected.hint = metadataCheck.warnings.join(\"\\n\") || \"Run the command from the correct bound repository.\";\n      return detected;\n    }\n    const localChanged = inspection.snapshotHash !== baseline.lastSnapshotHash;\n    const serverHeadChanged = appHead.headCommitHash !== baseline.lastServerHeadHash;\n    const revisionChanged = Boolean(\n      baseline.lastServerRevisionId && (appHead.headRevisionId ?? null) !== baseline.lastServerRevisionId\n    );\n    const equivalentRevisionDrift = revisionChanged && !serverHeadChanged;\n    if (equivalentRevisionDrift) {\n      const refreshedBaseline = await refreshEquivalentRevisionBaseline({\n        repoRoot,\n        binding,\n        baseline,\n        appHead\n      });\n      detected.baseline.lastServerRevisionId = refreshedBaseline.lastServerRevisionId;\n      detected.baseline.lastServerTreeHash = refreshedBaseline.lastServerTreeHash;\n      detected.baseline.lastServerHeadHash = refreshedBaseline.lastServerHeadHash;\n    }\n    const serverChanged = serverHeadChanged;\n    if (!localChanged && !serverChanged) {\n      detected.repoState = \"idle\";\n      return detected;\n    }\n    if (localChanged && !serverChanged) {\n      detected.repoState = \"local_only_changed\";\n      return detected;\n    }\n    if (!localChanged && serverChanged) {\n      detected.repoState = \"server_only_changed\";\n      detected.hint = \"The server lane advanced since the last agreed baseline. Pull the server delta locally before continuing.\";\n      return detected;\n    }\n    detected.repoState = \"both_changed\";\n    detected.hint = \"Both the local workspace and the server lane changed since the last agreed baseline. Replay or reconcile is required before normal recording continues.\";\n    return detected;\n  } catch (error) {\n    detected.status = \"remote_error\";\n    detected.hint = formatCliErrorDetail(error) ?? \"Failed to detect the current Remix repo state.\";\n    return detected;\n  }\n}\n\n// src/infrastructure/git/gitEventHarvester.ts\nvar GIT_TIMEOUT_MS = 1e4;\nvar GIT_MAX_BUFFER = 64 * 1024 * 1024;\nvar MAX_COMMITS = 100;\nvar RECORD_SEPARATOR = \"\u001e\";\nvar FIELD_SEPARATOR = \"\u001f\";\nvar LOG_FORMAT = `${RECORD_SEPARATOR}%H${FIELD_SEPARATOR}%P${FIELD_SEPARATOR}%an${FIELD_SEPARATOR}%ae${FIELD_SEPARATOR}%cn${FIELD_SEPARATOR}%ce${FIELD_SEPARATOR}%aI${FIELD_SEPARATOR}%cI${FIELD_SEPARATOR}%s`;\nfunction buildGitEventStatusArgs() {\n  return [\"status\", \"--porcelain=v1\"];\n}\nfunction buildGitEventDiffNumstatArgs(params) {\n  if (params.kind === \"uncommitted\") {\n    return [\"diff\", \"--numstat\", \"HEAD\"];\n  }\n  return [\"diff\", \"--numstat\", \"--no-renames\", params.fromCommit, params.toCommit];\n}\nfunction buildGitEventReachabilityArgs(fromCommit, toCommit) {\n  return [\"merge-base\", \"--is-ancestor\", fromCommit, toCommit];\n}\nfunction buildGitEventLogArgs(fromCommit, toCommit) {\n  return [\n    \"log\",\n    \"--first-parent\",\n    \"-m\",\n    \"--numstat\",\n    \"--no-renames\",\n    `--format=${LOG_FORMAT}`,\n    `${fromCommit}..${toCommit}`\n  ];\n}\nfunction buildGitEventNameRevArgs(secondParent) {\n  return [\"name-rev\", \"--name-only\", \"--no-undefined\", secondParent];\n}\nfunction sanitizedEnv() {\n  const env = { ...process.env };\n  delete env.GIT_DIR;\n  delete env.GIT_WORK_TREE;\n  delete env.GIT_COMMON_DIR;\n  delete env.GIT_INDEX_FILE;\n  return env;\n}\nasync function runGitEvent(args, cwd, adapter = createSystemGitAdapter()) {\n  return adapter.run(\n    createGitCommandPlan({\n      args,\n      cwd,\n      env: sanitizedEnv(),\n      timeoutMs: GIT_TIMEOUT_MS,\n      maxBuffer: GIT_MAX_BUFFER\n    })\n  );\n}\nfunction parseNumstatLine(line) {\n  const tab1 = line.indexOf(\"\t\");\n  if (tab1 < 0) return null;\n  const tab2 = line.indexOf(\"\t\", tab1 + 1);\n  if (tab2 < 0) return null;\n  const addedRaw = line.slice(0, tab1);\n  const removedRaw = line.slice(tab1 + 1, tab2);\n  const filePath = line.slice(tab2 + 1);\n  if (!filePath) return null;\n  const added = addedRaw === \"-\" ? 0 : Number.parseInt(addedRaw, 10);\n  const removed = removedRaw === \"-\" ? 0 : Number.parseInt(removedRaw, 10);\n  return {\n    added: Number.isFinite(added) ? added : 0,\n    removed: Number.isFinite(removed) ? removed : 0,\n    path: filePath\n  };\n}\nfunction parseLogOutput(stdout) {\n  const records = [];\n  const parts = stdout.split(RECORD_SEPARATOR);\n  for (const part of parts) {\n    if (!part) continue;\n    const newlineIdx = part.indexOf(\"\\n\");\n    const metadataLine = newlineIdx === -1 ? part : part.slice(0, newlineIdx);\n    const rest = newlineIdx === -1 ? \"\" : part.slice(newlineIdx + 1);\n    const fields = metadataLine.split(FIELD_SEPARATOR);\n    if (fields.length < 9) continue;\n    const [hash, parentsField, authorName, authorEmail, committerName, committerEmail, authorDateIso, committerDateIso, subject] = fields;\n    const parents = parentsField ? parentsField.split(\" \").filter(Boolean) : [];\n    const commit = {\n      hash,\n      parents,\n      authorName,\n      authorEmail,\n      committerName,\n      committerEmail,\n      authorDateIso,\n      committerDateIso,\n      subject,\n      filesChanged: 0,\n      linesAdded: 0,\n      linesRemoved: 0\n    };\n    const touchedPaths = /* @__PURE__ */ new Set();\n    for (const rawLine of rest.split(\"\\n\")) {\n      if (!rawLine) continue;\n      const parsed = parseNumstatLine(rawLine);\n      if (!parsed) continue;\n      commit.linesAdded += parsed.added;\n      commit.linesRemoved += parsed.removed;\n      touchedPaths.add(parsed.path);\n    }\n    commit.filesChanged = touchedPaths.size;\n    records.push(commit);\n  }\n  return records;\n}\nfunction buildCommitEvent(raw) {\n  return {\n    hash: raw.hash,\n    shortHash: raw.hash.slice(0, 7),\n    isMerge: raw.parents.length >= 2,\n    parents: raw.parents,\n    author: { name: raw.authorName, email: raw.authorEmail },\n    committer: { name: raw.committerName, email: raw.committerEmail },\n    message: raw.subject,\n    timestamp: raw.authorDateIso,\n    filesChanged: raw.filesChanged,\n    linesAdded: raw.linesAdded,\n    linesRemoved: raw.linesRemoved\n  };\n}\nvar MERGE_BRANCH_REGEXES = [\n  /^Merge branch '([^']+)'(?: into .+)?$/,\n  /^Merge remote-tracking branch '([^']+)'(?: into .+)?$/,\n  /^Merge pull request #\\d+ from (\\S+)$/\n];\nfunction parseBranchFromMergeMessage(subject) {\n  for (const re of MERGE_BRANCH_REGEXES) {\n    const match = re.exec(subject);\n    if (!match) continue;\n    const raw = match[1];\n    if (!raw) continue;\n    return raw.startsWith(\"origin/\") ? raw.slice(\"origin/\".length) : raw;\n  }\n  return null;\n}\nasync function resolveBranchFromNameRev(secondParent, repoRoot, adapter) {\n  const res = await runGitEvent(\n    buildGitEventNameRevArgs(secondParent),\n    repoRoot,\n    adapter\n  );\n  if (res.exitCode !== 0 || res.timedOut) return null;\n  let name = res.stdout.trim();\n  if (!name) return null;\n  if (name.startsWith(\"remotes/origin/\")) name = name.slice(\"remotes/origin/\".length);\n  else if (name.startsWith(\"origin/\")) name = name.slice(\"origin/\".length);\n  if (name.includes(\"~\") || name.includes(\"^\") || name.startsWith(\"tags/\") || name === \"undefined\") return null;\n  return name;\n}\nfunction summarizePorcelainStatus(stdout) {\n  const summary = {\n    filesChanged: 0,\n    staged: 0,\n    unstaged: 0,\n    untracked: 0\n  };\n  const uniquePaths = /* @__PURE__ */ new Set();\n  for (const rawLine of stdout.split(\"\\n\")) {\n    if (!rawLine) continue;\n    if (rawLine.startsWith(\"??\")) {\n      summary.untracked += 1;\n      uniquePaths.add(rawLine.slice(3));\n      continue;\n    }\n    if (rawLine.length < 3) continue;\n    const indexCode = rawLine.charCodeAt(0);\n    const worktreeCode = rawLine.charCodeAt(1);\n    const indexCh = rawLine[0];\n    const worktreeCh = rawLine[1];\n    const pathPart = rawLine.slice(3);\n    if (indexCh !== \" \" && indexCode !== 63) summary.staged += 1;\n    if ((worktreeCh === \"M\" || worktreeCh === \"D\") && worktreeCode !== 63) summary.unstaged += 1;\n    uniquePaths.add(pathPart);\n  }\n  summary.filesChanged = uniquePaths.size;\n  return summary;\n}\nasync function collectUncommittedSummary(repoRoot, adapter) {\n  const summary = {\n    filesChanged: 0,\n    linesAdded: 0,\n    linesRemoved: 0,\n    staged: 0,\n    unstaged: 0,\n    untracked: 0\n  };\n  const statusRes = await runGitEvent(buildGitEventStatusArgs(), repoRoot, adapter);\n  if (statusRes.exitCode === 0 && !statusRes.timedOut) {\n    Object.assign(summary, summarizePorcelainStatus(statusRes.stdout));\n  }\n  const diffRes = await runGitEvent(buildGitEventDiffNumstatArgs({ kind: \"uncommitted\" }), repoRoot, adapter);\n  if (diffRes.exitCode === 0 && !diffRes.timedOut) {\n    for (const rawLine of diffRes.stdout.split(\"\\n\")) {\n      if (!rawLine) continue;\n      const parsed = parseNumstatLine(rawLine);\n      if (!parsed) continue;\n      summary.linesAdded += parsed.added;\n      summary.linesRemoved += parsed.removed;\n    }\n  }\n  return summary;\n}\nfunction buildEmptyPreTurnEvents(params) {\n  return {\n    commits: [],\n    merges: [],\n    uncommittedAtFinalize: params.uncommitted,\n    summary: {\n      totalCommits: 0,\n      totalMerges: 0,\n      totalFilesChanged: 0,\n      totalLinesAdded: 0,\n      totalLinesRemoved: 0,\n      elapsedMs: null,\n      truncated: false,\n      rewritten: params.rewritten\n    },\n    range: { fromCommit: params.fromCommit, toCommit: params.toCommit },\n    schemaVersion: 1\n  };\n}\nasync function collectPreTurnGitEvents(params) {\n  try {\n    const git = params.git ?? createSystemGitAdapter();\n    const uncommitted = await collectUncommittedSummary(params.repoRoot, git);\n    if (!params.fromCommit || params.fromCommit === params.toCommit) {\n      return buildEmptyPreTurnEvents({\n        fromCommit: params.fromCommit,\n        toCommit: params.toCommit,\n        uncommitted,\n        rewritten: false\n      });\n    }\n    const reachabilityRes = await runGitEvent(\n      buildGitEventReachabilityArgs(params.fromCommit, params.toCommit),\n      params.repoRoot,\n      git\n    );\n    if (reachabilityRes.timedOut) return null;\n    if (reachabilityRes.exitCode === 1) {\n      return buildEmptyPreTurnEvents({\n        fromCommit: null,\n        toCommit: params.toCommit,\n        uncommitted,\n        rewritten: true\n      });\n    }\n    if (reachabilityRes.exitCode !== 0) return null;\n    const logRes = await runGitEvent(\n      buildGitEventLogArgs(params.fromCommit, params.toCommit),\n      params.repoRoot,\n      git\n    );\n    if (logRes.timedOut || logRes.exitCode !== 0) return null;\n    const rawCommits = parseLogOutput(logRes.stdout);\n    const totalCommits = rawCommits.length;\n    const totalMerges = rawCommits.reduce((n, c) => n + (c.parents.length >= 2 ? 1 : 0), 0);\n    const ordered = [...rawCommits].reverse();\n    const truncated = ordered.length > MAX_COMMITS;\n    const kept = truncated ? ordered.slice(ordered.length - MAX_COMMITS) : ordered;\n    const commits = kept.map(buildCommitEvent);\n    const merges = [];\n    for (const raw of rawCommits) {\n      if (raw.parents.length < 2) continue;\n      const secondParent = raw.parents[1];\n      const fromBranchFromMessage = parseBranchFromMergeMessage(raw.subject);\n      const fromBranchFromNameRev = await resolveBranchFromNameRev(secondParent, params.repoRoot, git);\n      merges.push({\n        hash: raw.hash,\n        shortHash: raw.hash.slice(0, 7),\n        fromBranchFromMessage,\n        fromBranchFromNameRev,\n        fromCommit: secondParent,\n        filesChanged: raw.filesChanged,\n        linesAdded: raw.linesAdded,\n        linesRemoved: raw.linesRemoved,\n        message: raw.subject\n      });\n    }\n    let totalFilesChanged = 0;\n    let totalLinesAdded = 0;\n    let totalLinesRemoved = 0;\n    const diffRes = await runGitEvent(\n      buildGitEventDiffNumstatArgs({ kind: \"range\", fromCommit: params.fromCommit, toCommit: params.toCommit }),\n      params.repoRoot,\n      git\n    );\n    if (diffRes.exitCode === 0 && !diffRes.timedOut) {\n      const uniquePaths = /* @__PURE__ */ new Set();\n      for (const rawLine of diffRes.stdout.split(\"\\n\")) {\n        if (!rawLine) continue;\n        const parsed = parseNumstatLine(rawLine);\n        if (!parsed) continue;\n        uniquePaths.add(parsed.path);\n        totalLinesAdded += parsed.added;\n        totalLinesRemoved += parsed.removed;\n      }\n      totalFilesChanged = uniquePaths.size;\n    }\n    let elapsedMs = null;\n    if (rawCommits.length > 0) {\n      const committerTimes = rawCommits.map((c) => Date.parse(c.committerDateIso)).filter((t) => Number.isFinite(t));\n      if (committerTimes.length > 0) {\n        const min = Math.min(...committerTimes);\n        const max = Math.max(...committerTimes);\n        elapsedMs = max - min;\n      }\n    }\n    return {\n      // commits[] is a first-parent view: it contains the commits on the\n      // receiving branch plus merges as single entries. Commits that entered\n      // via merges are represented by the MergeEvent, not listed individually.\n      commits,\n      merges,\n      uncommittedAtFinalize: uncommitted,\n      summary: {\n        totalCommits,\n        totalMerges,\n        totalFilesChanged,\n        totalLinesAdded,\n        totalLinesRemoved,\n        elapsedMs,\n        truncated,\n        rewritten: false\n      },\n      range: { fromCommit: params.fromCommit, toCommit: params.toCommit },\n      schemaVersion: 1\n    };\n  } catch (err) {\n    console.warn(\n      `[remix-core] preTurnEvents harvester failed: ${err instanceof Error ? err.message : String(err)}`\n    );\n    return null;\n  }\n}\n\n// src/application/collab/jobRunner.ts\nasync function drainClaimedJobs(params) {\n  await params.prune();\n  const jobs = await params.list();\n  const results = [];\n  for (const listedJob of jobs) {\n    if (params.isTerminal(listedJob)) continue;\n    const claimed = await params.claim(listedJob);\n    if (!claimed) continue;\n    try {\n      const result = await params.process(claimed);\n      results.push(result);\n      await params.afterSuccess?.({ listedJob, job: claimed.job, result });\n    } catch (error) {\n      await claimed.release();\n      if (params.onError === \"throw\") throw error;\n    }\n  }\n  return results;\n}\n\n// src/application/collab/workflowState.ts\nfunction asyncJobWorkflowState(status) {\n  if (status === \"completed\" || status === \"failed\" || status === \"queued\") return status;\n  return \"processing\";\n}\nfunction planAsyncJobDrainTransition(job) {\n  const state = asyncJobWorkflowState(job.status);\n  if (state === \"completed\" || state === \"failed\") {\n    return { workflow: \"async_job_drain\", state, action: \"skip_terminal\", terminal: true };\n  }\n  return {\n    workflow: \"async_job_drain\",\n    state,\n    action: job.kind === \"init\" ? \"process_init\" : \"process_init_post\",\n    terminal: false\n  };\n}\nfunction planFinalizeQueueTransition(job) {\n  if (job.status === \"completed\" || job.status === \"failed\" && job.metadata.failureDisposition === \"terminal\") {\n    return { workflow: \"finalize\", state: job.status, action: \"skip_terminal\", terminal: true };\n  }\n  if (job.status === \"failed\") {\n    return { workflow: \"finalize\", state: \"retryable_failed\", action: \"claim_and_process\", terminal: false };\n  }\n  return { workflow: \"finalize\", state: job.status, action: \"claim_and_process\", terminal: false };\n}\nfunction planCheckoutWorkflowTransition(params) {\n  if (!params.appId?.trim()) {\n    return { workflow: \"checkout\", state: \"failed\", action: \"require_app\", terminal: true };\n  }\n  return { workflow: \"checkout\", state: \"selected\", action: \"checkout\", terminal: false };\n}\nfunction planApproveWorkflowTransition(params) {\n  if (params.mode === \"sync-target-repo\") {\n    return params.hasCwd ? { workflow: \"approve\", state: \"sync_target_repo\", action: \"sync_target_repo\", terminal: false } : { workflow: \"approve\", state: \"failed\", action: \"require_cwd\", terminal: true };\n  }\n  return { workflow: \"approve\", state: \"remote_only\", action: \"approve_remote\", terminal: false };\n}\nfunction planRequestMergeWorkflowTransition(params) {\n  if (!params.hasBinding) {\n    return { workflow: \"request_merge\", state: \"failed\", action: \"require_binding\", terminal: true };\n  }\n  if (params.hasPendingFinalize) {\n    return { workflow: \"request_merge\", state: \"pending_finalize\", action: \"require_finalize_drain\", terminal: true };\n  }\n  return { workflow: \"request_merge\", state: \"bound\", action: \"open_merge_request\", terminal: false };\n}\n\n// src/application/collab/finalizeQueueRunner.ts\nasync function drainPendingFinalizeQueueJobs(params) {\n  return drainClaimedJobs({\n    prune: prunePendingFinalizeJobs,\n    list: listPendingFinalizeJobs,\n    isTerminal: (job) => planFinalizeQueueTransition(job).terminal,\n    claim: (job) => claimPendingFinalizeJob(job.id),\n    process: (claimed) => params.processClaimedJob({\n      api: params.api,\n      job: claimed.job,\n      release: claimed.release\n    }),\n    afterSuccess: async ({ listedJob }) => {\n      await removePendingFinalizeJob(listedJob.id);\n    }\n  });\n}\n\n// src/application/collab/finalizeWorkspaceMetadata.ts\nfunction buildWorkspaceMetadata(params) {\n  const metadata = {\n    branch: params.branchName,\n    repoRoot: params.repoRoot,\n    remoteUrl: params.remoteUrl,\n    defaultBranch: params.defaultBranch,\n    recordingMode: \"boundary_delta\",\n    baselineSnapshotId: params.baselineSnapshotId,\n    currentSnapshotId: params.currentSnapshotId,\n    baselineServerRevisionId: params.baselineServerRevisionId ?? null,\n    baselineServerHeadHash: params.baselineServerHeadHash,\n    currentSnapshotHash: params.currentSnapshotHash,\n    localCommitHash: params.localCommitHash,\n    repoStateAtCapture: params.repoState,\n    replayedFromBaseHash: params.replayedFromBaseHash ?? null,\n    previousLocalCommitHash: params.previousLocalCommitHash ?? null\n  };\n  if (params.preTurnEvents) {\n    metadata.preTurnEvents = params.preTurnEvents;\n  }\n  if (params.turnUsage) {\n    metadata.turnUsage = params.turnUsage;\n  }\n  if (typeof params.promptedAt === \"string\" && params.promptedAt.trim()) {\n    metadata.promptedAt = params.promptedAt.trim();\n  }\n  return metadata;\n}\n\n// src/application/collab/finalizeDecision.ts\nvar FINALIZE_AUTO_TERMINAL_THRESHOLD = 5;\nvar FINALIZE_AUTO_TERMINAL_TOTAL_RETRY_THRESHOLD = 8;\nfunction classifyFinalizeError(error) {\n  const tagged = error;\n  return {\n    disposition: tagged.finalizeDisposition ?? \"retryable\",\n    reason: tagged.finalizeReason ?? \"unknown\",\n    message: error instanceof Error ? error.message : String(error)\n  };\n}\nfunction computeFailureEscalation(job, reason) {\n  const previousReason = job.metadata.consecutiveFailureReason;\n  const previousCountRaw = job.metadata.consecutiveFailures;\n  const previousCount = typeof previousCountRaw === \"number\" && Number.isFinite(previousCountRaw) && previousCountRaw > 0 ? Math.floor(previousCountRaw) : 0;\n  const previousTotalRaw = job.metadata.totalFailures;\n  const previousTotal = typeof previousTotalRaw === \"number\" && Number.isFinite(previousTotalRaw) && previousTotalRaw > 0 ? Math.floor(previousTotalRaw) : 0;\n  const sameReason = previousReason === reason;\n  const next = sameReason ? previousCount + 1 : 1;\n  const totalFailures = previousTotal + 1;\n  const consecutiveTripped = next >= FINALIZE_AUTO_TERMINAL_THRESHOLD;\n  const totalTripped = totalFailures >= FINALIZE_AUTO_TERMINAL_TOTAL_RETRY_THRESHOLD;\n  const escalationTrigger = consecutiveTripped ? \"consecutive_same_reason\" : totalTripped ? \"total_retries\" : \"none\";\n  return {\n    consecutiveFailures: next,\n    consecutiveFailureReason: reason,\n    totalFailures,\n    shouldEscalateToTerminal: consecutiveTripped || totalTripped,\n    escalationTrigger\n  };\n}\nfunction hasFinalizeBaselineDrifted(params) {\n  return params.liveSnapshotId !== params.jobSnapshotId || (params.jobServerRevisionId ? params.liveServerRevisionId !== params.jobServerRevisionId : false) || params.liveServerHeadHash !== params.jobServerHeadHash;\n}\nfunction canSalvageNoDiffFinalize(params) {\n  if (params.baselineDrifted && params.currentSnapshotHash !== params.liveBaselineSnapshotHash) return false;\n  return params.serverStillAtBaseline;\n}\nfunction classifyChangedFinalizeDrift(params) {\n  if (!params.baselineDrifted) return \"no_drift\";\n  return params.localBaselineAdvanced && params.serverHeadAdvanced ? \"consistent_advance\" : \"inconsistent_drift\";\n}\nfunction shouldReplayChangedFinalize(params) {\n  return params.currentServerHeadHash !== params.submissionBaseHeadHash || params.baselineDrifted;\n}\nfunction shouldAdoptExistingChangeStepBeforeReplay(params) {\n  return params.replayNeeded && Boolean(params.idempotencyKey?.trim());\n}\nfunction validateSucceededChangeStepForBaseline(params) {\n  const nextServerHeadHash = typeof params.headCommitHash === \"string\" ? params.headCommitHash.trim() : \"\";\n  if (!nextServerHeadHash) {\n    throw new RemixError(\"Backend returned a succeeded change step without a head commit hash.\", {\n      exitCode: 1,\n      hint: \"This is a backend invariant violation; retry will not help. Run `remix collab status` before trying again.\"\n    });\n  }\n  const nextServerRevisionId = typeof params.resultRevisionId === \"string\" ? params.resultRevisionId.trim() : \"\";\n  return {\n    nextServerHeadHash,\n    nextServerRevisionId: nextServerRevisionId || null,\n    needsFreshHeadVerification: !nextServerRevisionId\n  };\n}\n\n// src/infrastructure/collab/checkoutIdentityStore.ts\nimport { randomUUID as randomUUID4 } from \"crypto\";\nimport fs5 from \"fs/promises\";\nimport path6 from \"path\";\nfunction getCheckoutIdentityPath(params) {\n  return path6.join(getCollabStateRoot(), \"checkouts\", `${buildLaneStateKey(params)}.json`);\n}\nasync function getCheckoutIdentity(params) {\n  const filePath = getCheckoutIdentityPath(params);\n  try {\n    const raw = await fs5.readFile(filePath, \"utf8\");\n    const parsed = JSON.parse(raw);\n    const checkoutId = typeof parsed?.checkoutId === \"string\" ? parsed.checkoutId.trim() : \"\";\n    if (checkoutId) return checkoutId;\n  } catch {\n  }\n  const next = {\n    schemaVersion: 1,\n    checkoutId: randomUUID4(),\n    updatedAt: (/* @__PURE__ */ new Date()).toISOString()\n  };\n  await writeJsonAtomic(filePath, next);\n  return next.checkoutId;\n}\n\n// src/application/collab/localAlignmentReporting.ts\nfunction toCheckoutAction(action) {\n  if (action === \"pull\" || action === \"reconcile\" || action === \"await_finalize\" || action === \"record\") return action;\n  return \"no_action\";\n}\nfunction actionForRepoState(repoState) {\n  if (repoState === \"server_only_changed\") return \"pull\";\n  if (repoState === \"both_changed\" || repoState === \"external_local_base_changed\" || repoState === \"baseline_missing\") {\n    return \"reconcile\";\n  }\n  if (repoState === \"local_only_changed\") return \"record\";\n  return \"no_action\";\n}\nfunction alignmentRequiredForAction(action) {\n  if (action === \"pull\") return \"sync\";\n  if (action === \"reconcile\") return \"reconcile\";\n  if (action === \"await_finalize\") return \"finalize\";\n  if (action === \"record\") return \"record\";\n  return void 0;\n}\nasync function reportCheckoutState(params) {\n  try {\n    const checkoutId = await getCheckoutIdentity({\n      repoRoot: params.repoRoot,\n      repoFingerprint: params.repoFingerprint ?? null,\n      laneId: params.laneId ?? null\n    });\n    await params.api.reportLocalCheckoutState(params.appId, {\n      checkoutId,\n      collabLaneId: params.laneId ?? void 0,\n      branch: params.branch ?? void 0,\n      repoFingerprint: params.repoFingerprint ?? void 0,\n      localState: params.localState ?? void 0,\n      recommendedAction: params.recommendedAction,\n      materializationStatus: params.materializationStatus ?? void 0,\n      alignmentRequired: params.alignmentRequired ?? alignmentRequiredForAction(params.recommendedAction),\n      baselineRevisionId: params.baselineRevisionId,\n      localRevisionId: params.localRevisionId,\n      serverRevisionId: params.serverRevisionId,\n      localHeadHash: params.localHeadHash ?? void 0,\n      serverHeadCommitId: params.serverHeadCommitId,\n      serverHeadHash: params.serverHeadHash ?? void 0,\n      hasLocalChanges: params.hasLocalChanges,\n      hasUnrecordedChanges: params.hasUnrecordedChanges,\n      pendingFinalizeCount: params.pendingFinalizeCount,\n      metadata: params.metadata\n    });\n    return { warnings: [] };\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err ?? \"unknown error\");\n    return { warnings: [`Failed to report local checkout state: ${message}`] };\n  }\n}\nasync function reportCheckoutStateFromStatus(params) {\n  const { api, status } = params;\n  const repoRoot = status.repo.repoRoot;\n  const appId = status.binding.currentAppId;\n  if (!api || !repoRoot || !appId) return { warnings: [] };\n  return reportCheckoutState({\n    api,\n    appId,\n    repoRoot,\n    repoFingerprint: status.binding.repoFingerprint,\n    laneId: status.binding.laneId,\n    branch: status.repo.branch ?? status.binding.branchName,\n    localState: status.alignment.repoState,\n    recommendedAction: toCheckoutAction(status.recommendedAction),\n    materializationStatus: status.alignment.checked ? \"checked\" : void 0,\n    baselineRevisionId: status.alignment.baseline.lastServerRevisionId,\n    serverRevisionId: status.alignment.current.serverRevisionId,\n    localHeadHash: status.alignment.current.localCommitHash ?? status.repo.headCommitHash,\n    serverHeadCommitId: status.alignment.current.serverHeadCommitId,\n    serverHeadHash: status.alignment.current.serverHeadHash,\n    hasLocalChanges: status.alignment.repoState === \"local_only_changed\" || status.alignment.repoState === \"both_changed\",\n    hasUnrecordedChanges: status.alignment.repoState === \"local_only_changed\" || status.alignment.repoState === \"both_changed\",\n    pendingFinalizeCount: status.alignment.pendingFinalize.activeJobCount,\n    metadata: {\n      source: params.source,\n      branchMismatch: status.repo.branchMismatch\n    }\n  });\n}\nasync function reportAlignedCheckoutState(params) {\n  return reportCheckoutState({\n    api: params.api,\n    appId: params.appId,\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branch: params.branch,\n    localState: \"idle\",\n    recommendedAction: \"no_action\",\n    materializationStatus: \"applied\",\n    baselineRevisionId: params.baselineRevisionId,\n    serverRevisionId: params.serverRevisionId,\n    localHeadHash: params.localHeadHash,\n    serverHeadCommitId: params.serverHeadCommitId,\n    serverHeadHash: params.serverHeadHash,\n    hasLocalChanges: false,\n    hasUnrecordedChanges: false,\n    pendingFinalizeCount: 0,\n    metadata: { source: params.source }\n  });\n}\nasync function reportCheckoutStateFromFinalize(params) {\n  const recommendedAction = params.materializationStatus.startsWith(\"queued\") ? \"await_finalize\" : actionForRepoState(params.repoState);\n  const hasLocalChanges = params.repoState === \"local_only_changed\" || params.repoState === \"both_changed\";\n  return reportCheckoutState({\n    api: params.api,\n    appId: params.appId,\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branch: params.branch,\n    localState: params.repoState,\n    recommendedAction,\n    materializationStatus: params.materializationStatus,\n    alignmentRequired: params.alignmentRequired,\n    baselineRevisionId: params.baselineRevisionId,\n    serverRevisionId: params.serverRevisionId,\n    localHeadHash: params.localHeadHash,\n    serverHeadCommitId: params.serverHeadCommitId,\n    serverHeadHash: params.serverHeadHash,\n    hasLocalChanges,\n    hasUnrecordedChanges: recommendedAction === \"record\" || recommendedAction === \"reconcile\",\n    pendingFinalizeCount: params.pendingFinalizeCount,\n    metadata: { source: params.source }\n  });\n}\nasync function recordLocalAlignmentEvent(params) {\n  try {\n    await params.api.recordLocalAlignmentEvent(params.appId, {\n      eventKind: params.eventKind,\n      branch: params.branch,\n      collabLaneId: params.collabLaneId ?? void 0,\n      baseRevisionId: params.baseRevisionId,\n      targetRevisionId: params.targetRevisionId,\n      resultRevisionId: params.resultRevisionId,\n      baseHeadHash: params.baseHeadHash ?? void 0,\n      targetHeadCommitId: params.targetHeadCommitId,\n      targetHeadHash: params.targetHeadHash ?? void 0,\n      resultHeadHash: params.resultHeadHash ?? void 0,\n      changedFilesCount: params.changedFilesCount,\n      insertions: params.insertions,\n      deletions: params.deletions,\n      localCommitCount: params.localCommitCount,\n      summary: params.summary,\n      idempotencyKey: params.idempotencyKey,\n      metadata: { source: params.eventKind }\n    });\n    return { warnings: [] };\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err ?? \"unknown error\");\n    return { warnings: [`Failed to record local alignment event: ${message}`] };\n  }\n}\n\n// src/application/collab/collabFinalizeProcessing.ts\nvar FINALIZE_RETRY_BASE_DELAY_MS = 15e3;\nvar FINALIZE_RETRY_MAX_DELAY_MS = 5 * 60 * 1e3;\nvar FINALIZE_JOB_PROCESSING_TIMEOUT_MS_DEFAULT = 90 * 1e3;\nvar finalizeJobProcessingTimeoutMs = FINALIZE_JOB_PROCESSING_TIMEOUT_MS_DEFAULT;\nvar FINALIZE_LOCK_HEARTBEAT_MS = Math.max(15e3, Math.floor(FINALIZE_JOB_LOCK_STALE_MS / 3));\nfunction readMetadataString(job, key) {\n  const value = job.metadata[key];\n  return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\nfunction readMetadataActor(job) {\n  const actor = job.metadata.actor;\n  return actor && typeof actor === \"object\" ? actor : void 0;\n}\nfunction readMetadataTurnUsage(job) {\n  const value = job.metadata.turnUsage;\n  return value && typeof value === \"object\" ? value : null;\n}\nfunction buildNextRetryAt(retryCount) {\n  const exponent = Math.max(0, retryCount - 1);\n  const delayMs = Math.min(FINALIZE_RETRY_BASE_DELAY_MS * 2 ** exponent, FINALIZE_RETRY_MAX_DELAY_MS);\n  return new Date(Date.now() + delayMs).toISOString();\n}\nfunction buildFinalizeCliError(params) {\n  const error = new RemixError(params.message, {\n    exitCode: params.exitCode,\n    hint: params.hint\n  });\n  error.finalizeDisposition = params.disposition;\n  error.finalizeReason = params.reason;\n  return error;\n}\nfunction runWithFinalizeTimeout(work, jobId) {\n  let timer;\n  const cap = finalizeJobProcessingTimeoutMs;\n  const timeout = new Promise((_, reject) => {\n    timer = setTimeout(() => {\n      reject(\n        buildFinalizeCliError({\n          message: `Finalize job ${jobId} exceeded the ${Math.round(\n            cap / 1e3\n          )}s drainer wall-clock timeout. The slow request will be retried by a future drainer pass.`,\n          exitCode: 1,\n          hint: \"If this keeps recurring, run `remix collab finalize-queue list` to inspect the job, then `remix collab finalize-queue forget <id>` to drop it manually.\",\n          disposition: \"retryable\",\n          reason: \"processing_timeout\"\n        })\n      );\n    }, cap);\n    timer.unref?.();\n  });\n  return Promise.race([work, timeout]).finally(() => {\n    if (timer) clearTimeout(timer);\n  });\n}\nfunction startLockHeartbeat(jobId) {\n  const handle = setInterval(() => {\n    void heartbeatJobLock(jobId);\n  }, FINALIZE_LOCK_HEARTBEAT_MS);\n  handle.unref?.();\n  return () => clearInterval(handle);\n}\nasync function findExistingChangeStepByIdempotency(params) {\n  const idempotencyKey = params.idempotencyKey?.trim();\n  if (!idempotencyKey) return null;\n  const resp = await params.api.listChangeSteps(params.appId, { limit: 1, idempotencyKey });\n  const responseObject = unwrapResponseObject(\n    resp,\n    \"change step list\"\n  );\n  const steps = Array.isArray(responseObject) ? responseObject : Array.isArray(responseObject.items) ? responseObject.items : [];\n  return steps.find((step) => step.idempotencyKey === idempotencyKey) ?? null;\n}\nasync function writeBaselineFromSucceededChangeStep(params) {\n  let baselineAdvance;\n  try {\n    baselineAdvance = validateSucceededChangeStepForBaseline({\n      headCommitHash: params.changeStep.headCommitHash,\n      resultRevisionId: params.changeStep.resultRevisionId\n    });\n  } catch (error) {\n    if (error instanceof RemixError) {\n      throw buildFinalizeCliError({\n        message: error.message,\n        exitCode: error.exitCode,\n        hint: error.hint ?? void 0,\n        disposition: \"terminal\",\n        reason: \"missing_head_commit_hash\"\n      });\n    }\n    throw error;\n  }\n  const nextServerHeadHash = baselineAdvance.nextServerHeadHash;\n  let nextServerRevisionId = baselineAdvance.nextServerRevisionId ?? \"\";\n  let nextServerTreeHash = null;\n  if (baselineAdvance.needsFreshHeadVerification) {\n    const freshHeadResp = await params.api.getAppHead(params.job.currentAppId);\n    const freshHead = unwrapResponseObject(freshHeadResp, \"app head\");\n    if (freshHead.headCommitHash !== nextServerHeadHash || !freshHead.headRevisionId) {\n      throw buildFinalizeCliError({\n        message: \"Backend returned a succeeded change step without a matching result revision.\",\n        exitCode: 1,\n        hint: \"The local baseline was not advanced because the post-step revision could not be verified. Restart the backend/CLI and retry after checking `remix collab status`.\",\n        disposition: \"terminal\",\n        reason: \"missing_result_revision_id\"\n      });\n    }\n    nextServerRevisionId = freshHead.headRevisionId;\n    nextServerTreeHash = freshHead.treeHash ?? null;\n  }\n  await writeLocalBaseline({\n    repoRoot: params.job.repoRoot,\n    repoFingerprint: params.job.repoFingerprint,\n    laneId: params.job.laneId,\n    currentAppId: params.job.currentAppId,\n    branchName: params.job.branchName,\n    lastSnapshotId: params.snapshot.id,\n    lastSnapshotHash: params.snapshot.snapshotHash,\n    lastServerRevisionId: nextServerRevisionId,\n    lastServerTreeHash: nextServerTreeHash,\n    lastServerHeadHash: nextServerHeadHash,\n    lastSeenLocalCommitHash: params.snapshot.localCommitHash\n  });\n}\nasync function reportCompletedFinalizeCheckoutState(params) {\n  const result = await reportAlignedCheckoutState({\n    api: params.api,\n    appId: params.job.currentAppId,\n    repoRoot: params.job.repoRoot,\n    repoFingerprint: params.job.repoFingerprint,\n    laneId: params.job.laneId,\n    branch: params.job.branchName,\n    baselineRevisionId: params.serverRevisionId,\n    serverRevisionId: params.serverRevisionId,\n    localHeadHash: params.snapshot.localCommitHash,\n    serverHeadCommitId: params.serverHeadCommitId,\n    serverHeadHash: params.serverHeadHash,\n    source: params.source\n  });\n  return result.warnings;\n}\nasync function harvestPreTurnEvents(repoRoot, fromCommit, toCommit) {\n  if (!toCommit) return null;\n  try {\n    return await collectPreTurnGitEvents({ repoRoot, fromCommit, toCommit });\n  } catch (err) {\n    console.warn(\n      `[remix-core] preTurnEvents harvester threw: ${err instanceof Error ? err.message : String(err)}`\n    );\n    return null;\n  }\n}\nasync function processClaimedPendingFinalizeJob(params) {\n  const job = params.job;\n  const stopHeartbeat = startLockHeartbeat(job.id);\n  try {\n    return await runWithFinalizeTimeout(processClaimedPendingFinalizeJobInner(params), job.id);\n  } catch (error) {\n    const classified = classifyFinalizeError(error);\n    const escalation = computeFailureEscalation(job, classified.reason);\n    const finalDisposition = classified.disposition === \"terminal\" || escalation.shouldEscalateToTerminal ? \"terminal\" : \"retryable\";\n    const autoEscalated = finalDisposition === \"terminal\" && escalation.shouldEscalateToTerminal && classified.disposition !== \"terminal\";\n    let escalationSuffix = \"\";\n    if (autoEscalated) {\n      if (escalation.escalationTrigger === \"consecutive_same_reason\") {\n        escalationSuffix = ` (auto-escalated to terminal after ${escalation.consecutiveFailures} consecutive ${classified.reason} failures)`;\n      } else if (escalation.escalationTrigger === \"total_retries\") {\n        escalationSuffix = ` (auto-escalated to terminal after ${escalation.totalFailures} total retries with mixed failure reasons; latest=${classified.reason})`;\n      }\n    }\n    await updatePendingFinalizeJob(job.id, {\n      status: finalDisposition === \"terminal\" ? \"failed\" : \"queued\",\n      error: `${classified.message}${escalationSuffix}`,\n      nextRetryAt: finalDisposition === \"terminal\" ? null : buildNextRetryAt(job.retryCount),\n      metadata: {\n        failureDisposition: finalDisposition,\n        failureReason: classified.reason,\n        consecutiveFailures: escalation.consecutiveFailures,\n        consecutiveFailureReason: escalation.consecutiveFailureReason,\n        totalFailures: escalation.totalFailures\n      }\n    });\n    throw error;\n  } finally {\n    stopHeartbeat();\n    await params.release();\n  }\n}\nasync function processClaimedPendingFinalizeJobInner(params) {\n  const job = params.job;\n  const [snapshot, baseline, appHeadResp] = await Promise.all([\n    readLocalSnapshot(job.currentSnapshotId),\n    readLocalBaseline({\n      repoFingerprint: job.repoFingerprint,\n      laneId: job.laneId,\n      repoRoot: job.repoRoot\n    }),\n    getAppHeadCached(params.api, job.currentAppId)\n  ]);\n  if (!snapshot) {\n    throw buildFinalizeCliError({\n      message: \"Captured snapshot is missing from the local snapshot store.\",\n      exitCode: 1,\n      disposition: \"terminal\",\n      reason: \"snapshot_missing\"\n    });\n  }\n  if (!baseline) {\n    throw buildFinalizeCliError({\n      message: \"Local baseline is missing for this queued finalize job.\",\n      exitCode: 2,\n      hint: \"Run `remix collab init` to seed this checkout's revision baseline.\",\n      disposition: \"terminal\",\n      reason: \"baseline_missing\"\n    });\n  }\n  const baselineDrifted = hasFinalizeBaselineDrifted({\n    liveSnapshotId: baseline.lastSnapshotId,\n    jobSnapshotId: job.baselineSnapshotId,\n    liveServerRevisionId: baseline.lastServerRevisionId,\n    jobServerRevisionId: job.baselineServerRevisionId,\n    liveServerHeadHash: baseline.lastServerHeadHash,\n    jobServerHeadHash: job.baselineServerHeadHash\n  });\n  const appHead = unwrapResponseObject(appHeadResp, \"app head\");\n  const remoteUrl = readMetadataString(job, \"remoteUrl\");\n  const defaultBranch = readMetadataString(job, \"defaultBranch\");\n  const repoState = readMetadataString(job, \"repoState\");\n  const actor = readMetadataActor(job);\n  const turnUsage = readMetadataTurnUsage(job);\n  const promptedAt = readMetadataString(job, \"promptedAt\");\n  const previousLocalCommitHash = baseline.lastSeenLocalCommitHash ?? null;\n  const preTurnEvents = await harvestPreTurnEvents(\n    job.repoRoot,\n    previousLocalCommitHash,\n    snapshot.localCommitHash\n  );\n  const diffResult = await diffLocalSnapshots({\n    baseSnapshotId: job.baselineSnapshotId,\n    targetSnapshotId: job.currentSnapshotId\n  });\n  if (!diffResult.diff.trim()) {\n    const serverStillAtBaseline = job.baselineServerRevisionId ? appHead.headRevisionId === job.baselineServerRevisionId : appHead.headCommitHash === job.baselineServerHeadHash;\n    if (baselineDrifted && !canSalvageNoDiffFinalize({\n      baselineDrifted,\n      currentSnapshotHash: snapshot.snapshotHash,\n      liveBaselineSnapshotHash: baseline.lastSnapshotHash,\n      serverStillAtBaseline: true\n    })) {\n      throw buildFinalizeCliError({\n        message: \"Finalize queue baseline drifted before this job was processed.\",\n        exitCode: 1,\n        hint: \"Process queued finalize jobs in capture order, or run `remix collab init` to refresh the revision baseline before retrying.\",\n        disposition: \"terminal\",\n        reason: \"baseline_drifted\"\n      });\n    }\n    if (!canSalvageNoDiffFinalize({ baselineDrifted: false, currentSnapshotHash: \"\", liveBaselineSnapshotHash: \"\", serverStillAtBaseline })) {\n      throw buildFinalizeCliError({\n        message: \"Server lane changed before a no-diff turn could be recorded.\",\n        exitCode: 2,\n        hint: \"Pull the server changes locally before recording another no-diff turn.\",\n        disposition: \"terminal\",\n        reason: \"server_lane_changed\"\n      });\n    }\n    const collabTurnResp = await params.api.createCollabTurn(job.currentAppId, {\n      threadId: job.threadId ?? void 0,\n      collabLaneId: job.laneId ?? void 0,\n      prompt: job.prompt,\n      assistantResponse: job.assistantResponse,\n      actor,\n      sourceConversation: job.sourceConversation ?? void 0,\n      workspaceMetadata: buildWorkspaceMetadata({\n        repoRoot: job.repoRoot,\n        branchName: job.branchName,\n        remoteUrl,\n        defaultBranch,\n        baselineSnapshotId: job.baselineSnapshotId,\n        currentSnapshotId: job.currentSnapshotId,\n        baselineServerRevisionId: job.baselineServerRevisionId,\n        baselineServerHeadHash: job.baselineServerHeadHash,\n        currentSnapshotHash: snapshot.snapshotHash,\n        localCommitHash: snapshot.localCommitHash,\n        repoState,\n        previousLocalCommitHash,\n        preTurnEvents,\n        turnUsage,\n        promptedAt\n      }),\n      idempotencyKey: job.idempotencyKey ?? void 0\n    });\n    const collabTurn = unwrapResponseObject(collabTurnResp, \"collab turn\");\n    await writeLocalBaseline({\n      repoRoot: job.repoRoot,\n      repoFingerprint: job.repoFingerprint,\n      laneId: job.laneId,\n      currentAppId: job.currentAppId,\n      branchName: job.branchName,\n      lastSnapshotId: snapshot.id,\n      lastSnapshotHash: snapshot.snapshotHash,\n      lastServerRevisionId: appHead.headRevisionId ?? null,\n      lastServerTreeHash: appHead.treeHash ?? null,\n      lastServerHeadHash: appHead.headCommitHash,\n      lastSeenLocalCommitHash: snapshot.localCommitHash\n    });\n    await updatePendingFinalizeJob(job.id, {\n      status: \"completed\",\n      metadata: { collabTurnId: collabTurn.id }\n    });\n    const reportWarnings2 = await reportCompletedFinalizeCheckoutState({\n      api: params.api,\n      job,\n      snapshot,\n      serverRevisionId: appHead.headRevisionId ?? null,\n      serverHeadCommitId: appHead.headCommitId,\n      serverHeadHash: appHead.headCommitHash,\n      source: \"finalize_no_diff_turn\"\n    });\n    return {\n      mode: \"no_diff_turn\",\n      idempotencyKey: job.idempotencyKey ?? \"\",\n      queued: false,\n      jobId: job.id,\n      repoState,\n      changeStep: null,\n      collabTurn,\n      autoSync: null,\n      warnings: reportWarnings2\n    };\n  }\n  const localBaselineAdvanced = baseline.lastSnapshotId !== job.baselineSnapshotId;\n  const serverHeadAdvanced = job.baselineServerRevisionId ? appHead.headRevisionId !== job.baselineServerRevisionId : appHead.headCommitHash !== job.baselineServerHeadHash;\n  const changedDrift = classifyChangedFinalizeDrift({ baselineDrifted, localBaselineAdvanced, serverHeadAdvanced });\n  if (changedDrift !== \"no_drift\") {\n    if (changedDrift === \"inconsistent_drift\") {\n      throw buildFinalizeCliError({\n        message: `Finalize queue baseline advanced inconsistently before this job was processed (localBaselineAdvanced=${localBaselineAdvanced}, serverHeadAdvanced=${serverHeadAdvanced}, jobBaselineSnapshotId=${job.baselineSnapshotId ?? \"null\"}, liveBaselineSnapshotId=${baseline.lastSnapshotId ?? \"null\"}, jobBaselineServerHeadHash=${job.baselineServerHeadHash ?? \"null\"}, liveBaselineServerHeadHash=${baseline.lastServerHeadHash ?? \"null\"}, currentAppHeadHash=${appHead.headCommitHash}). This indicates local Remix state diverged from the backend in a way that should not be reachable in normal operation; please report this as a bug.`,\n        exitCode: 1,\n        hint: \"Run `remix collab status` to inspect, then sync or reconcile before retrying.\",\n        disposition: \"terminal\",\n        reason: \"baseline_drifted\"\n      });\n    }\n  }\n  let submissionDiff = diffResult.diff;\n  let submissionBaseHeadHash = job.baselineServerHeadHash;\n  let submissionBaseRevisionId = job.baselineServerRevisionId;\n  let replayedFromBaseHash = null;\n  if (!submissionBaseHeadHash) {\n    throw buildFinalizeCliError({\n      message: \"Baseline server head is missing for this finalize job.\",\n      exitCode: 1,\n      disposition: \"terminal\",\n      reason: \"baseline_server_head_missing\"\n    });\n  }\n  const replayNeeded = shouldReplayChangedFinalize({\n    currentServerHeadHash: appHead.headCommitHash,\n    submissionBaseHeadHash,\n    baselineDrifted\n  });\n  if (shouldAdoptExistingChangeStepBeforeReplay({ replayNeeded, idempotencyKey: job.idempotencyKey })) {\n    const existingChangeStep = await findExistingChangeStepByIdempotency({\n      api: params.api,\n      appId: job.currentAppId,\n      idempotencyKey: job.idempotencyKey\n    });\n    if (existingChangeStep) {\n      const changeStep2 = existingChangeStep.status === \"succeeded\" ? existingChangeStep : await pollChangeStep(params.api, job.currentAppId, existingChangeStep.id);\n      invalidateAppHeadCache(job.currentAppId);\n      invalidateAppDeltaCacheForApp(job.currentAppId);\n      await writeBaselineFromSucceededChangeStep({ api: params.api, job, snapshot, changeStep: changeStep2 });\n      await updatePendingFinalizeJob(job.id, {\n        status: \"completed\",\n        metadata: {\n          changeStepId: String(changeStep2.id ?? \"\")\n        }\n      });\n      const reportWarnings2 = await reportCompletedFinalizeCheckoutState({\n        api: params.api,\n        job,\n        snapshot,\n        serverRevisionId: String(changeStep2.resultRevisionId ?? \"\") || null,\n        serverHeadCommitId: String(changeStep2.commitId ?? \"\") || null,\n        serverHeadHash: String(changeStep2.headCommitHash ?? \"\") || null,\n        source: \"finalize_changed_turn\"\n      });\n      return {\n        mode: \"changed_turn\",\n        idempotencyKey: job.idempotencyKey ?? \"\",\n        queued: false,\n        jobId: job.id,\n        repoState,\n        changeStep: changeStep2,\n        collabTurn: null,\n        autoSync: null,\n        warnings: reportWarnings2\n      };\n    }\n  }\n  if (replayNeeded) {\n    try {\n      const replayResp = await params.api.startChangeStepReplay(job.currentAppId, {\n        prompt: job.prompt,\n        assistantResponse: job.assistantResponse,\n        diff: diffResult.diff,\n        baseCommitHash: submissionBaseHeadHash,\n        baseRevisionId: job.baselineServerRevisionId,\n        targetHeadCommitHash: appHead.headCommitHash,\n        targetRevisionId: appHead.headRevisionId,\n        expectedPaths: diffResult.changedPaths,\n        actor,\n        workspaceMetadata: buildWorkspaceMetadata({\n          repoRoot: job.repoRoot,\n          branchName: job.branchName,\n          remoteUrl,\n          defaultBranch,\n          baselineSnapshotId: job.baselineSnapshotId,\n          currentSnapshotId: job.currentSnapshotId,\n          baselineServerRevisionId: job.baselineServerRevisionId,\n          baselineServerHeadHash: job.baselineServerHeadHash,\n          currentSnapshotHash: snapshot.snapshotHash,\n          localCommitHash: snapshot.localCommitHash,\n          repoState,\n          previousLocalCommitHash,\n          preTurnEvents,\n          turnUsage,\n          promptedAt\n        }),\n        idempotencyKey: buildDeterministicIdempotencyKey({\n          kind: \"collab_finalize_turn_replay_v1\",\n          appId: job.currentAppId,\n          baseCommitHash: submissionBaseHeadHash,\n          targetHeadCommitHash: appHead.headCommitHash,\n          currentSnapshotId: job.currentSnapshotId,\n          diffSha256: diffResult.diffSha256\n        })\n      });\n      const replayStart = unwrapResponseObject(replayResp, \"change step replay\");\n      const replay = await pollChangeStepReplay(params.api, job.currentAppId, String(replayStart.id));\n      const replayDiffResp = await params.api.getChangeStepReplayDiff(job.currentAppId, replay.id);\n      const replayDiff = unwrapResponseObject(replayDiffResp, \"change step replay diff\");\n      submissionDiff = replayDiff.diff;\n      replayedFromBaseHash = submissionBaseHeadHash;\n      submissionBaseHeadHash = appHead.headCommitHash;\n      submissionBaseRevisionId = appHead.headRevisionId;\n    } catch (error) {\n      if (error instanceof RemixError && error.finalizeDisposition === void 0) {\n        const detail = error.hint ? `${error.message} (${error.hint})` : error.message;\n        throw buildFinalizeCliError({\n          message: \"Server-side replay could not adapt the captured diff to the current server head: \" + detail,\n          exitCode: 1,\n          hint: error.hint ?? void 0,\n          disposition: \"terminal\",\n          reason: \"replay_unrecoverable\"\n        });\n      }\n      throw error;\n    }\n  }\n  const changeStepResp = await params.api.createChangeStep(job.currentAppId, {\n    threadId: job.threadId ?? void 0,\n    collabLaneId: job.laneId ?? void 0,\n    prompt: job.prompt,\n    assistantResponse: job.assistantResponse,\n    diff: submissionDiff,\n    baseCommitHash: submissionBaseHeadHash,\n    baseRevisionId: submissionBaseRevisionId,\n    headCommitHash: submissionBaseHeadHash,\n    changedFilesCount: diffResult.stats.changedFilesCount,\n    insertions: diffResult.stats.insertions,\n    deletions: diffResult.stats.deletions,\n    actor,\n    sourceConversation: job.sourceConversation ?? void 0,\n    workspaceMetadata: buildWorkspaceMetadata({\n      repoRoot: job.repoRoot,\n      branchName: job.branchName,\n      remoteUrl,\n      defaultBranch,\n      baselineSnapshotId: job.baselineSnapshotId,\n      currentSnapshotId: job.currentSnapshotId,\n      baselineServerRevisionId: job.baselineServerRevisionId,\n      baselineServerHeadHash: job.baselineServerHeadHash,\n      currentSnapshotHash: snapshot.snapshotHash,\n      localCommitHash: snapshot.localCommitHash,\n      repoState,\n      replayedFromBaseHash,\n      previousLocalCommitHash,\n      preTurnEvents,\n      turnUsage,\n      promptedAt\n    }),\n    idempotencyKey: job.idempotencyKey ?? void 0\n  });\n  const createdStep = unwrapResponseObject(changeStepResp, \"change step\");\n  const changeStep = await pollChangeStep(params.api, job.currentAppId, String(createdStep.id));\n  invalidateAppHeadCache(job.currentAppId);\n  invalidateAppDeltaCacheForApp(job.currentAppId);\n  await writeBaselineFromSucceededChangeStep({ api: params.api, job, snapshot, changeStep });\n  await updatePendingFinalizeJob(job.id, {\n    status: \"completed\",\n    metadata: {\n      changeStepId: String(changeStep.id ?? \"\")\n    }\n  });\n  const reportWarnings = await reportCompletedFinalizeCheckoutState({\n    api: params.api,\n    job,\n    snapshot,\n    serverRevisionId: String(changeStep.resultRevisionId ?? \"\") || null,\n    serverHeadCommitId: String(changeStep.commitId ?? \"\") || null,\n    serverHeadHash: String(changeStep.headCommitHash ?? \"\") || null,\n    source: \"finalize_changed_turn\"\n  });\n  return {\n    mode: \"changed_turn\",\n    idempotencyKey: job.idempotencyKey ?? \"\",\n    queued: false,\n    jobId: job.id,\n    repoState,\n    changeStep,\n    collabTurn: null,\n    autoSync: null,\n    warnings: reportWarnings\n  };\n}\nasync function processPendingFinalizeJob(params) {\n  const claimed = await claimPendingFinalizeJob(params.jobId);\n  if (!claimed) {\n    const job = await readPendingFinalizeJob(params.jobId);\n    if (job?.status === \"processing\") {\n      throw new RemixError(\"Finalize job is already being processed.\", { exitCode: 1 });\n    }\n    if (job?.status === \"failed\") {\n      throw new RemixError(\"Finalize job failed permanently and will not retry automatically.\", {\n        exitCode: 1,\n        hint: job.error ?? \"Review the local finalize queue and record a fresh Remix turn if needed.\"\n      });\n    }\n    throw new RemixError(\"Finalize job was not found.\", { exitCode: 1 });\n  }\n  return processClaimedPendingFinalizeJob({ api: params.api, job: claimed.job, release: claimed.release });\n}\nasync function enqueueCapturedFinalizeTurn(params) {\n  return enqueuePendingFinalizeJob({\n    status: \"queued\",\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    currentAppId: params.currentAppId,\n    laneId: params.laneId,\n    threadId: params.threadId,\n    sourceConversation: params.sourceConversation ?? null,\n    branchName: params.branchName,\n    prompt: params.prompt,\n    assistantResponse: params.assistantResponse,\n    baselineSnapshotId: params.baselineSnapshotId,\n    baselineServerRevisionId: params.baselineServerRevisionId ?? null,\n    baselineServerHeadHash: params.baselineServerHeadHash,\n    currentSnapshotId: params.currentSnapshotId,\n    idempotencyKey: params.idempotencyKey,\n    error: null,\n    retryCount: 0,\n    lastAttemptAt: null,\n    nextRetryAt: params.nextRetryAt ?? null,\n    metadata: params.metadata ?? {}\n  });\n}\nasync function drainPendingFinalizeQueue(params) {\n  return drainPendingFinalizeQueueJobs({\n    api: params.api,\n    processClaimedJob: processClaimedPendingFinalizeJob\n  });\n}\n\n// src/application/collab/collabFinalizeTurn.ts\nvar FINALIZE_AWAIT_INIT_POST_TIMEOUT_MS = 6e4;\nvar FINALIZE_UNALIGNED_DRAIN_TIMEOUT_MS = 1e4;\nfunction collectWarnings(value) {\n  if (!Array.isArray(value)) return [];\n  return value.filter((entry) => typeof entry === \"string\" && entry.trim().length > 0);\n}\nfunction throwBlockingDetectedStatus(detected) {\n  if (detected.status === \"not_bound\") {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      code: \"not_bound\",\n      exitCode: 2,\n      hint: detected.hint\n    });\n  }\n  if (detected.status === \"branch_binding_missing\") {\n    throw new RemixError(detected.hint || \"Current branch is not ready for Remix recording.\", {\n      code: detected.status,\n      exitCode: 2,\n      hint: detected.hint\n    });\n  }\n  if (detected.status === \"family_ambiguous\") {\n    throw new RemixError(detected.hint || \"Current branch is not ready for Remix recording.\", {\n      code: detected.status,\n      exitCode: 2,\n      hint: detected.hint\n    });\n  }\n  if (detected.status === \"metadata_conflict\" || detected.status === \"branch_mismatch\") {\n    throw new RemixError(\"Repository must be realigned before finalizing the turn.\", {\n      code: detected.status,\n      exitCode: 2,\n      hint: detected.hint\n    });\n  }\n  if (detected.status === \"remote_error\") {\n    const message = detected.hint || \"Failed to determine the current repo state.\";\n    throw new RemixError(message, {\n      code: detected.status,\n      exitCode: 1,\n      hint: detected.hint\n    });\n  }\n}\nfunction withTimeout(work, timeoutMs, message) {\n  let timer;\n  const timeout = new Promise((_, reject) => {\n    timer = setTimeout(() => reject(new Error(message)), timeoutMs);\n    timer.unref?.();\n  });\n  return Promise.race([work, timeout]).finally(() => {\n    if (timer) clearTimeout(timer);\n  });\n}\nasync function drainPendingFinalizeBeforeUnalignedFallback(params) {\n  const summary = await summarizePendingFinalizeJobs({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    currentAppId: params.currentAppId,\n    laneId: params.laneId\n  });\n  if (summary.activeJobCount <= 0) {\n    return { attempted: false, warnings: [] };\n  }\n  const warnings = [];\n  try {\n    await withTimeout(\n      drainPendingFinalizeQueue({ api: params.api }),\n      FINALIZE_UNALIGNED_DRAIN_TIMEOUT_MS,\n      `Timed out waiting ${Math.round(\n        FINALIZE_UNALIGNED_DRAIN_TIMEOUT_MS / 1e3\n      )}s for pending Remix turn recording to advance the local baseline.`\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    warnings.push(`Pending Remix turn recording could not be drained before this turn was captured: ${message}`);\n  } finally {\n    invalidateAppHeadCache(params.currentAppId);\n    invalidateAppDeltaCacheForApp(params.currentAppId);\n  }\n  return { attempted: true, warnings };\n}\nvar FINALIZE_QUEUED_WARNING = \"Queued only: the local Remix turn was captured, but no remote change step or collab turn exists yet. Drain or await finalize before merge-related flows.\";\nvar CONVERSATION_ONLY_WARNING = \"Recorded conversation only: this turn was not materialized into a change step.\";\nfunction buildConversationOnlyWorkspaceMetadata(params) {\n  const metadata = {\n    branch: params.branchName,\n    repoRoot: params.repoRoot,\n    remoteUrl: params.remoteUrl,\n    defaultBranch: params.defaultBranch,\n    recordingMode: \"conversation_only\",\n    materializationStatus: params.materializationStatus,\n    alignmentRequired: params.alignmentRequired,\n    baselineSnapshotId: params.baselineSnapshotId,\n    baselineServerRevisionId: params.baselineServerRevisionId,\n    baselineServerHeadHash: params.baselineServerHeadHash,\n    currentServerRevisionId: params.currentServerRevisionId,\n    currentServerHeadHash: params.currentServerHeadHash,\n    currentServerHeadCommitId: params.currentServerHeadCommitId,\n    localCommitHash: params.localCommitHash,\n    repoStateAtCapture: params.repoState,\n    actor: params.actor ?? null\n  };\n  if (params.turnUsage) {\n    metadata.turnUsage = params.turnUsage;\n  }\n  if (typeof params.promptedAt === \"string\" && params.promptedAt.trim()) {\n    metadata.promptedAt = params.promptedAt.trim();\n  }\n  return metadata;\n}\nasync function recordConversationOnlyTurn(params) {\n  const idempotencyKey = params.explicitIdempotencyKey?.trim() || buildDeterministicIdempotencyKey({\n    kind: \"collab_finalize_turn_conversation_only_v1\",\n    appId: params.binding.currentAppId,\n    laneId: params.binding.laneId,\n    materializationStatus: params.materializationStatus,\n    alignmentRequired: params.alignmentRequired,\n    baselineSnapshotId: params.baselineSnapshotId ?? null,\n    baselineServerRevisionId: params.baselineServerRevisionId ?? null,\n    baselineServerHeadHash: params.baselineServerHeadHash ?? null,\n    currentServerRevisionId: params.currentServerRevisionId ?? null,\n    currentServerHeadHash: params.currentServerHeadHash ?? null,\n    currentServerHeadCommitId: params.currentServerHeadCommitId ?? null,\n    localCommitHash: params.localCommitHash ?? null,\n    repoState: params.repoState,\n    prompt: params.prompt,\n    assistantResponse: params.assistantResponse,\n    sourceConversation: params.sourceConversation ?? null\n  });\n  const collabTurnResp = await params.api.createCollabTurn(params.binding.currentAppId, {\n    threadId: params.binding.threadId ?? void 0,\n    collabLaneId: params.binding.laneId ?? void 0,\n    prompt: params.prompt,\n    assistantResponse: params.assistantResponse,\n    actor: params.actor,\n    sourceConversation: params.sourceConversation ?? void 0,\n    workspaceMetadata: buildConversationOnlyWorkspaceMetadata({\n      repoRoot: params.repoRoot,\n      branchName: params.binding.branchName,\n      remoteUrl: params.binding.remoteUrl,\n      defaultBranch: params.binding.defaultBranch,\n      baselineSnapshotId: params.baselineSnapshotId ?? null,\n      baselineServerRevisionId: params.baselineServerRevisionId ?? null,\n      baselineServerHeadHash: params.baselineServerHeadHash ?? null,\n      currentServerRevisionId: params.currentServerRevisionId ?? null,\n      currentServerHeadHash: params.currentServerHeadHash ?? null,\n      currentServerHeadCommitId: params.currentServerHeadCommitId ?? null,\n      localCommitHash: params.localCommitHash ?? null,\n      repoState: params.repoState,\n      materializationStatus: params.materializationStatus,\n      alignmentRequired: params.alignmentRequired,\n      actor: params.actor ?? null,\n      turnUsage: params.turnUsage ?? null,\n      promptedAt: params.promptedAt\n    }),\n    idempotencyKey\n  });\n  const collabTurn = unwrapResponseObject(collabTurnResp, \"collab turn\");\n  const reportResult = await reportCheckoutStateFromFinalize({\n    api: params.api,\n    appId: params.binding.currentAppId,\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.binding.repoFingerprint,\n    laneId: params.binding.laneId,\n    branch: params.binding.branchName,\n    repoState: params.repoState,\n    materializationStatus: params.materializationStatus,\n    alignmentRequired: params.alignmentRequired,\n    baselineRevisionId: params.baselineServerRevisionId,\n    serverRevisionId: params.currentServerRevisionId,\n    localHeadHash: params.localCommitHash,\n    serverHeadCommitId: params.currentServerHeadCommitId,\n    serverHeadHash: params.currentServerHeadHash,\n    source: \"finalize_conversation_only\"\n  });\n  return {\n    mode: \"conversation_only\",\n    idempotencyKey,\n    queued: false,\n    jobId: null,\n    repoState: params.repoState,\n    changeStep: null,\n    collabTurn,\n    autoSync: null,\n    warnings: [CONVERSATION_ONLY_WARNING, ...collectWarnings(params.warnings ?? []), ...reportResult.warnings]\n  };\n}\nasync function collabFinalizeTurn(params) {\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await ensureActiveLaneBinding({\n    repoRoot,\n    api: params.api,\n    operation: \"`remix collab finalize-turn`\"\n  });\n  if (!binding) {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` first.\"\n    });\n  }\n  const prompt = params.prompt.trim();\n  const assistantResponse = params.assistantResponse.trim();\n  const sourceConversation = params.sourceConversation ? SourceConversationSchema.parse(params.sourceConversation) : null;\n  if (!prompt) throw new RemixError(\"Prompt is required.\", { exitCode: 2 });\n  if (!assistantResponse) throw new RemixError(\"Assistant response is required.\", { exitCode: 2 });\n  if (params.diff?.trim()) {\n    throw new RemixError(\"External diff submission is no longer supported for `finalize_turn`.\", {\n      exitCode: 2,\n      hint: \"Finalize turns now capture the real workspace boundary from the local snapshot store.\"\n    });\n  }\n  const pendingInit = await findPendingAsyncJob({\n    repoRoot,\n    branchName: binding.branchName ?? null,\n    kind: \"init\"\n  });\n  if (pendingInit) {\n    throw new RemixError(\"Cannot finalize a turn while the initial Remix import is still processing.\", {\n      exitCode: 2,\n      hint: `Init job ${pendingInit.id} is still in the background queue. Run \\`remix collab status\\` to check progress.`\n    });\n  }\n  const failedInitPost = await findFailedAsyncJob({\n    repoRoot,\n    branchName: binding.branchName ?? null,\n    kind: \"init_post\"\n  });\n  if (failedInitPost) {\n    throw new RemixError(\"The initial Remix import failed; this turn cannot be recorded.\", {\n      exitCode: 2,\n      hint: (failedInitPost.error ? `Last error: ${failedInitPost.error}\n\n` : \"\") + \"Run `remix collab init` again to retry \\u2014 the post-init drainer cleared the local binding so this is safe.\"\n    });\n  }\n  const pendingInitPost = await findPendingAsyncJob({\n    repoRoot,\n    branchName: binding.branchName ?? null,\n    kind: \"init_post\"\n  });\n  if (pendingInitPost) {\n    const initPostTimeoutMs = params.initPostAwaitTimeoutMs ?? FINALIZE_AWAIT_INIT_POST_TIMEOUT_MS;\n    const result = await awaitAsyncJob({\n      jobId: pendingInitPost.id,\n      timeoutMs: initPostTimeoutMs,\n      pollIntervalMs: 500\n    });\n    if (result.status !== \"completed\") {\n      if (result.status === \"failed\") {\n        throw new RemixError(\"The initial Remix import failed; this turn cannot be recorded.\", {\n          exitCode: 2,\n          hint: (result.job?.error ? `Last error: ${result.job.error}\n\n` : \"\") + \"Run `remix collab init` again to retry \\u2014 the post-init drainer cleared the local binding so this is safe.\"\n        });\n      }\n      try {\n        return await recordConversationOnlyTurn({\n          api: params.api,\n          binding,\n          repoRoot,\n          prompt,\n          assistantResponse,\n          explicitIdempotencyKey: params.idempotencyKey,\n          actor: params.actor,\n          sourceConversation,\n          turnUsage: params.turnUsage,\n          promptedAt: params.promptedAt,\n          repoState: \"init_post_pending\",\n          materializationStatus: \"skipped_init_post_pending\",\n          alignmentRequired: \"init_post\",\n          warnings: [`Init post job ${pendingInitPost.id} is still pending; recorded conversation only.`]\n        });\n      } catch {\n      }\n      throw new RemixError(\"Timed out waiting for the initial Remix import to finish provisioning.\", {\n        exitCode: 2,\n        hint: `Init post job ${pendingInitPost.id} did not complete within ${Math.round(\n          initPostTimeoutMs / 1e3\n        )}s. Run \\`remix collab status\\` to check progress, then retry once it reports ready.`\n      });\n    }\n  }\n  let detected = await collabDetectRepoState({\n    api: params.api,\n    cwd: repoRoot,\n    allowBranchMismatch: params.allowBranchMismatch\n  });\n  throwBlockingDetectedStatus(detected);\n  let pendingFinalizeDrainWarnings = [];\n  if (detected.repoState === \"server_only_changed\" || detected.repoState === \"both_changed\") {\n    const recovery = await drainPendingFinalizeBeforeUnalignedFallback({\n      api: params.api,\n      repoRoot,\n      repoFingerprint: binding.repoFingerprint,\n      currentAppId: binding.currentAppId,\n      laneId: binding.laneId\n    });\n    if (recovery.attempted) {\n      pendingFinalizeDrainWarnings = recovery.warnings;\n      detected = await collabDetectRepoState({\n        api: params.api,\n        cwd: repoRoot,\n        allowBranchMismatch: params.allowBranchMismatch\n      });\n      throwBlockingDetectedStatus(detected);\n    }\n  }\n  if (detected.status === \"missing_head\") {\n    return recordConversationOnlyTurn({\n      api: params.api,\n      binding,\n      repoRoot,\n      prompt,\n      assistantResponse,\n      explicitIdempotencyKey: params.idempotencyKey,\n      actor: params.actor,\n      sourceConversation,\n      turnUsage: params.turnUsage,\n      promptedAt: params.promptedAt,\n      repoState: \"missing_head\",\n      materializationStatus: \"skipped_missing_head\",\n      alignmentRequired: \"head\",\n      localCommitHash: null,\n      warnings: [...pendingFinalizeDrainWarnings, ...detected.warnings]\n    });\n  }\n  if (detected.repoState === \"server_only_changed\" || detected.repoState === \"both_changed\") {\n    return recordConversationOnlyTurn({\n      api: params.api,\n      binding,\n      repoRoot,\n      prompt,\n      assistantResponse,\n      explicitIdempotencyKey: params.idempotencyKey,\n      actor: params.actor,\n      sourceConversation,\n      turnUsage: params.turnUsage,\n      promptedAt: params.promptedAt,\n      repoState: detected.repoState,\n      materializationStatus: \"skipped_unaligned\",\n      alignmentRequired: detected.repoState === \"both_changed\" ? \"reconcile\" : \"sync\",\n      baselineSnapshotId: detected.baseline.lastSnapshotId,\n      baselineServerRevisionId: detected.baseline.lastServerRevisionId,\n      baselineServerHeadHash: detected.baseline.lastServerHeadHash,\n      currentServerRevisionId: detected.currentServerRevisionId,\n      currentServerHeadHash: detected.currentServerHeadHash,\n      currentServerHeadCommitId: detected.currentServerHeadCommitId,\n      localCommitHash: detected.localCommitHash,\n      warnings: [...pendingFinalizeDrainWarnings, ...detected.warnings]\n    });\n  }\n  if (detected.repoState === \"external_local_base_changed\") {\n    return recordConversationOnlyTurn({\n      api: params.api,\n      binding,\n      repoRoot,\n      prompt,\n      assistantResponse,\n      explicitIdempotencyKey: params.idempotencyKey,\n      actor: params.actor,\n      sourceConversation,\n      turnUsage: params.turnUsage,\n      promptedAt: params.promptedAt,\n      repoState: \"external_local_base_changed\",\n      materializationStatus: \"skipped_baseline_missing\",\n      alignmentRequired: \"baseline\",\n      baselineSnapshotId: detected.baseline.lastSnapshotId,\n      baselineServerRevisionId: detected.baseline.lastServerRevisionId,\n      baselineServerHeadHash: detected.baseline.lastServerHeadHash,\n      currentServerRevisionId: detected.currentServerRevisionId,\n      currentServerHeadHash: detected.currentServerHeadHash,\n      currentServerHeadCommitId: detected.currentServerHeadCommitId,\n      localCommitHash: detected.localCommitHash,\n      warnings: [...pendingFinalizeDrainWarnings, ...detected.warnings]\n    });\n  }\n  const baseline = await readLocalBaseline({\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    repoRoot\n  });\n  if (!baseline) {\n    return recordConversationOnlyTurn({\n      api: params.api,\n      binding,\n      repoRoot,\n      prompt,\n      assistantResponse,\n      explicitIdempotencyKey: params.idempotencyKey,\n      actor: params.actor,\n      sourceConversation,\n      turnUsage: params.turnUsage,\n      promptedAt: params.promptedAt,\n      repoState: \"baseline_missing\",\n      materializationStatus: \"skipped_baseline_missing\",\n      alignmentRequired: \"baseline\",\n      baselineSnapshotId: detected.baseline.lastSnapshotId,\n      baselineServerRevisionId: detected.baseline.lastServerRevisionId,\n      baselineServerHeadHash: detected.baseline.lastServerHeadHash,\n      currentServerRevisionId: detected.currentServerRevisionId,\n      currentServerHeadHash: detected.currentServerHeadHash,\n      currentServerHeadCommitId: detected.currentServerHeadCommitId,\n      localCommitHash: detected.localCommitHash,\n      warnings: [...pendingFinalizeDrainWarnings, ...detected.warnings]\n    });\n  }\n  const snapshot = await captureLocalSnapshot({\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    branchName: binding.branchName\n  });\n  const mode = snapshot.snapshotHash === baseline.lastSnapshotHash ? \"no_diff_turn\" : \"changed_turn\";\n  const idempotencyKey = params.idempotencyKey?.trim() || buildDeterministicIdempotencyKey({\n    kind: \"collab_finalize_turn_boundary_v2\",\n    appId: binding.currentAppId,\n    laneId: binding.laneId,\n    baselineSnapshotId: baseline.lastSnapshotId,\n    baselineServerRevisionId: baseline.lastServerRevisionId,\n    baselineServerHeadHash: baseline.lastServerHeadHash,\n    currentSnapshotId: snapshot.id,\n    currentSnapshotHash: snapshot.snapshotHash,\n    repoState: detected.repoState,\n    prompt,\n    assistantResponse,\n    sourceConversation\n  });\n  const awaitingDeadlineMs = typeof params.awaitingUsageDeadlineMs === \"number\" && params.awaitingUsageDeadlineMs > 0 ? params.awaitingUsageDeadlineMs : null;\n  const nextRetryAt = awaitingDeadlineMs === null ? null : new Date(Date.now() + awaitingDeadlineMs).toISOString();\n  const job = await enqueueCapturedFinalizeTurn({\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    currentAppId: binding.currentAppId,\n    laneId: binding.laneId,\n    threadId: binding.threadId,\n    sourceConversation,\n    branchName: binding.branchName,\n    prompt,\n    assistantResponse,\n    baselineSnapshotId: baseline.lastSnapshotId,\n    baselineServerRevisionId: baseline.lastServerRevisionId,\n    baselineServerHeadHash: baseline.lastServerHeadHash,\n    currentSnapshotId: snapshot.id,\n    idempotencyKey,\n    metadata: {\n      remoteUrl: binding.remoteUrl,\n      defaultBranch: binding.defaultBranch,\n      actor: params.actor ?? null,\n      sourceConversation,\n      repoState: detected.repoState,\n      turnUsage: params.turnUsage ?? null,\n      promptedAt: typeof params.promptedAt === \"string\" && params.promptedAt.trim() ? params.promptedAt.trim() : null\n    },\n    nextRetryAt\n  });\n  const reportResult = await reportCheckoutStateFromFinalize({\n    api: params.api,\n    appId: binding.currentAppId,\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    branch: binding.branchName,\n    repoState: detected.repoState,\n    materializationStatus: \"queued_finalize\",\n    alignmentRequired: \"finalize\",\n    baselineRevisionId: baseline.lastServerRevisionId,\n    serverRevisionId: detected.currentServerRevisionId,\n    localHeadHash: snapshot.localCommitHash,\n    serverHeadCommitId: detected.currentServerHeadCommitId,\n    serverHeadHash: detected.currentServerHeadHash,\n    pendingFinalizeCount: 1,\n    source: \"finalize_queue\"\n  });\n  return {\n    mode,\n    idempotencyKey,\n    queued: true,\n    jobId: job.id,\n    repoState: detected.repoState,\n    changeStep: null,\n    collabTurn: null,\n    autoSync: null,\n    warnings: [FINALIZE_QUEUED_WARNING, ...collectWarnings([...pendingFinalizeDrainWarnings, ...detected.warnings]), ...reportResult.warnings]\n  };\n}\n\n// src/application/collab/finalizePreflightCodes.ts\nvar FINALIZE_PREFLIGHT_FAILURE_CODES = [\n  // Repo has no .remix/ binding at all. Fix: `remix collab init`.\n  \"not_bound\",\n  // Binding file exists but the current branch has no entry. Fix: same as\n  // not_bound — `remix collab init` records this branch into the binding.\n  \"branch_binding_missing\",\n  // Branch matches multiple lane families (very rare race). Fix: human\n  // investigation; auto-fixers should treat as warn-only.\n  \"family_ambiguous\",\n  // Local-vs-server metadata diverged on app id / lane id. Fix: human\n  // investigation; auto-fixers should treat as warn-only.\n  \"metadata_conflict\",\n  // Currently checked-out branch differs from the one in the binding.\n  // Fix: human (either checkout the recorded branch or update binding).\n  \"branch_mismatch\",\n  // HEAD ref unreadable / git reports an error. Fix: human investigation.\n  \"missing_head\",\n  \"remote_error\",\n  // Server has commits we don't. Fix: `remix collab sync` (safe to\n  // auto-run for fast-forward; non-FF refused by the command itself).\n  \"pull_required\",\n  // Both local and server changed. Fix: inspect and apply reconcile.\n  \"reconcile_required\",\n  // Local revision baseline is missing. Fix: `remix collab init` or sync.\n  \"baseline_missing\"\n];\nvar CODE_SET = new Set(FINALIZE_PREFLIGHT_FAILURE_CODES);\nfunction isFinalizePreflightFailureCode(value) {\n  return typeof value === \"string\" && CODE_SET.has(value);\n}\n\n// src/application/collab/recordingPreflight.ts\nfunction mapDetectedRepoStateToRecordingPreflight(detected) {\n  if (detected.status === \"not_git_repo\") {\n    return {\n      status: \"not_git_repo\",\n      repoState: detected.repoState,\n      repoRoot: null,\n      appId: null,\n      currentBranch: null,\n      branchName: null,\n      headCommitHash: null,\n      worktreeClean: false,\n      syncStatus: null,\n      syncTargetCommitHash: null,\n      syncTargetCommitId: null,\n      reconcileTargetHeadCommitHash: null,\n      reconcileTargetHeadCommitId: null,\n      warnings: detected.warnings,\n      hint: detected.hint\n    };\n  }\n  const syncTargetCommitHash = detected.currentServerHeadHash;\n  const syncTargetCommitId = detected.currentServerHeadCommitId;\n  const base = {\n    repoState: detected.repoState,\n    repoRoot: detected.repoRoot,\n    appId: detected.binding?.currentAppId ?? null,\n    currentBranch: detected.currentBranch,\n    branchName: detected.branchName,\n    headCommitHash: detected.localCommitHash,\n    worktreeClean: detected.worktreeClean,\n    syncStatus: detected.repoState === \"server_only_changed\" ? \"delta_ready\" : detected.status === \"metadata_conflict\" ? \"conflict_risk\" : null,\n    syncTargetCommitHash,\n    syncTargetCommitId,\n    reconcileTargetHeadCommitHash: detected.currentServerHeadHash,\n    reconcileTargetHeadCommitId: detected.currentServerHeadCommitId,\n    warnings: detected.warnings,\n    hint: detected.hint\n  };\n  if (detected.status === \"not_bound\") return { status: \"not_bound\", ...base };\n  if (detected.status === \"branch_binding_missing\") return { status: \"branch_binding_missing\", ...base };\n  if (detected.status === \"family_ambiguous\") return { status: \"family_ambiguous\", ...base };\n  if (detected.status === \"metadata_conflict\") return { status: \"metadata_conflict\", ...base };\n  if (detected.status === \"missing_head\") return { status: \"missing_head\", ...base };\n  if (detected.status === \"branch_mismatch\") return { status: \"branch_mismatch\", ...base };\n  if (detected.repoState === \"server_only_changed\") return { status: \"pull_required\", ...base };\n  if (detected.repoState === \"both_changed\") return { status: \"reconcile_required\", ...base };\n  if (detected.repoState === \"external_local_base_changed\") return { status: \"baseline_missing\", ...base };\n  return { status: \"ready\", ...base };\n}\nasync function collabRecordingPreflight(params) {\n  const detected = await collabDetectRepoState({\n    api: params.api,\n    cwd: params.cwd,\n    allowBranchMismatch: params.allowBranchMismatch\n  });\n  return mapDetectedRepoStateToRecordingPreflight(detected);\n}\n\n// src/infrastructure/locking/repoMutationLock.ts\nimport fs6 from \"fs/promises\";\nimport os3 from \"os\";\nimport path7 from \"path\";\nvar DEFAULT_ACQUIRE_TIMEOUT_MS = 15e3;\nvar DEFAULT_STALE_MS = 45e3;\nvar DEFAULT_HEARTBEAT_MS = 5e3;\nvar RETRY_DELAY_MS = 250;\nvar heldLocks = /* @__PURE__ */ new Map();\nfunction sleep2(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\nfunction createOwner(params) {\n  const now = (/* @__PURE__ */ new Date()).toISOString();\n  return {\n    operation: params.operation,\n    repoRoot: params.repoRoot,\n    pid: process.pid,\n    hostname: os3.hostname(),\n    startedAt: now,\n    heartbeatAt: now,\n    version: process.version,\n    requestId: params.requestId?.trim() || null\n  };\n}\nasync function writeOwnerMetadata(ownerPath, owner) {\n  await fs6.writeFile(ownerPath, `${JSON.stringify(owner, null, 2)}\n`, \"utf8\");\n}\nasync function readOwnerMetadata(ownerPath) {\n  try {\n    const raw = await fs6.readFile(ownerPath, \"utf8\");\n    const parsed = JSON.parse(raw);\n    if (!parsed || typeof parsed !== \"object\") return null;\n    if (!parsed.operation || !parsed.repoRoot || typeof parsed.pid !== \"number\" || !parsed.startedAt || !parsed.heartbeatAt) {\n      return null;\n    }\n    return {\n      operation: parsed.operation,\n      repoRoot: parsed.repoRoot,\n      pid: parsed.pid,\n      hostname: typeof parsed.hostname === \"string\" ? parsed.hostname : \"unknown\",\n      startedAt: parsed.startedAt,\n      heartbeatAt: parsed.heartbeatAt,\n      version: typeof parsed.version === \"string\" ? parsed.version : \"unknown\",\n      requestId: typeof parsed.requestId === \"string\" ? parsed.requestId : null\n    };\n  } catch {\n    return null;\n  }\n}\nasync function isProcessAlive(owner) {\n  if (!owner) return null;\n  if (owner.hostname !== os3.hostname()) return null;\n  try {\n    process.kill(owner.pid, 0);\n    return true;\n  } catch (error) {\n    if (error?.code === \"EPERM\") return true;\n    if (error?.code === \"ESRCH\") return false;\n    return null;\n  }\n}\nasync function getLastKnownUpdateMs(lockDir, ownerPath, owner) {\n  const heartbeatMs = owner ? Date.parse(owner.heartbeatAt) : Number.NaN;\n  if (Number.isFinite(heartbeatMs)) return heartbeatMs;\n  const startedMs = owner ? Date.parse(owner.startedAt) : Number.NaN;\n  if (Number.isFinite(startedMs)) return startedMs;\n  const stat = await fs6.stat(ownerPath).catch(() => null);\n  if (stat) return stat.mtimeMs;\n  const dirStat = await fs6.stat(lockDir).catch(() => null);\n  if (dirStat) return dirStat.mtimeMs;\n  return 0;\n}\nasync function ensureLockDir(lockDir) {\n  await fs6.mkdir(path7.dirname(lockDir), { recursive: true });\n}\nasync function tryAcquireLock(lockDir, ownerPath, owner) {\n  try {\n    await ensureLockDir(lockDir);\n    await fs6.mkdir(lockDir);\n    try {\n      await writeOwnerMetadata(ownerPath, owner);\n    } catch (error) {\n      await fs6.rm(lockDir, { recursive: true, force: true }).catch(() => void 0);\n      throw error;\n    }\n    return true;\n  } catch (error) {\n    if (error?.code === \"EEXIST\") return false;\n    throw error;\n  }\n}\nfunction formatLockHint(params) {\n  const lines = [\n    /* v8 ignore next -- observed-held diagnostic only appears after a timed wait. */\n    params.observedHeldLock ? `Observed lock state: ${REMIX_ERROR_CODES.REPO_LOCK_HELD}.` : null,\n    params.owner ? `Active operation: ${params.owner.operation}` : \"Active operation: unknown\",\n    params.owner ? `Repo root: ${params.owner.repoRoot}` : null,\n    params.owner ? `Owner: pid=${params.owner.pid} host=${params.owner.hostname}` : null,\n    params.owner ? `Started at: ${params.owner.startedAt}` : null,\n    params.owner ? `Heartbeat at: ${params.owner.heartbeatAt}` : null,\n    `Waited ${params.waitedMs}ms for the repo mutation lock.`,\n    `Stale lock threshold: ${params.staleMs}ms.`,\n    \"Retry after the active operation finishes. If the process crashed, wait for stale lock recovery or remove the stale lock manually if necessary.\"\n  ];\n  return lines.filter(Boolean).join(\"\\n\");\n}\nfunction formatOwnerSummary(owner) {\n  if (!owner) {\n    return \"unknown owner\";\n  }\n  return `operation=${owner.operation} pid=${owner.pid} host=${owner.hostname} startedAt=${owner.startedAt} heartbeatAt=${owner.heartbeatAt}`;\n}\nfunction buildStaleRecoveryNotice(owner) {\n  return {\n    code: REMIX_ERROR_CODES.REPO_LOCK_STALE_RECOVERED,\n    owner,\n    message: `[${REMIX_ERROR_CODES.REPO_LOCK_STALE_RECOVERED}] Recovered a stale Remix repo mutation lock (${formatOwnerSummary(owner)}).`\n  };\n}\nasync function acquirePhysicalLock(lockDir, ownerPath, owner, options) {\n  const startedAt = Date.now();\n  const notices = [];\n  let observedHeldLock = false;\n  while (Date.now() - startedAt < options.acquireTimeoutMs) {\n    if (await tryAcquireLock(lockDir, ownerPath, owner)) return notices;\n    const currentOwner2 = await readOwnerMetadata(ownerPath);\n    observedHeldLock = true;\n    const lastUpdateMs = await getLastKnownUpdateMs(lockDir, ownerPath, currentOwner2);\n    const ageMs = Math.max(0, Date.now() - lastUpdateMs);\n    const alive = await isProcessAlive(currentOwner2);\n    if (ageMs >= options.staleMs && alive !== true) {\n      notices.push(buildStaleRecoveryNotice(currentOwner2));\n      await fs6.rm(lockDir, { recursive: true, force: true }).catch(() => void 0);\n      continue;\n    }\n    await sleep2(RETRY_DELAY_MS);\n  }\n  const currentOwner = await readOwnerMetadata(ownerPath);\n  throw new RemixError(\"Repository is busy with another Remix mutation.\", {\n    code: REMIX_ERROR_CODES.REPO_LOCK_TIMEOUT,\n    exitCode: 2,\n    hint: formatLockHint({\n      owner: currentOwner,\n      waitedMs: Date.now() - startedAt,\n      staleMs: options.staleMs,\n      observedHeldLock\n    })\n  });\n}\nfunction startHeartbeat(lockDir, ownerPath, owner, heartbeatMs) {\n  return setInterval(() => {\n    const nextOwner = {\n      ...owner,\n      heartbeatAt: (/* @__PURE__ */ new Date()).toISOString()\n    };\n    owner.heartbeatAt = nextOwner.heartbeatAt;\n    void writeOwnerMetadata(ownerPath, nextOwner).catch(() => void 0);\n    void fs6.utimes(lockDir, /* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()).catch(() => void 0);\n  }, heartbeatMs);\n}\nasync function releaseReentrantLock(lockDir) {\n  const held = heldLocks.get(lockDir);\n  if (!held) return;\n  held.count -= 1;\n  if (held.count > 0) return;\n  clearInterval(held.heartbeatTimer);\n  heldLocks.delete(lockDir);\n  await fs6.rm(lockDir, { recursive: true, force: true }).catch(() => void 0);\n}\nasync function withRepoMutationLock(options, fn) {\n  const repoRoot = await findGitRoot(options.cwd);\n  const gitCommonDir = await getGitCommonDir(repoRoot);\n  const lockDir = path7.join(gitCommonDir, \"remix\", \"locks\", \"repo-mutation.lock\");\n  const owner = createOwner({\n    operation: options.operation,\n    repoRoot,\n    requestId: options.requestId\n  });\n  const heartbeatMs = options.heartbeatMs ?? DEFAULT_HEARTBEAT_MS;\n  const acquireTimeoutMs = options.acquireTimeoutMs ?? DEFAULT_ACQUIRE_TIMEOUT_MS;\n  const staleMs = options.staleMs ?? DEFAULT_STALE_MS;\n  const existing = heldLocks.get(lockDir);\n  let notices = [];\n  if (!existing) {\n    notices = await acquirePhysicalLock(lockDir, path7.join(lockDir, \"owner.json\"), owner, {\n      acquireTimeoutMs,\n      staleMs\n    });\n    const ownerPath = path7.join(lockDir, \"owner.json\");\n    heldLocks.set(lockDir, {\n      count: 1,\n      lockDir,\n      ownerPath,\n      owner,\n      heartbeatTimer: startHeartbeat(lockDir, ownerPath, owner, heartbeatMs)\n    });\n  } else {\n    existing.count += 1;\n  }\n  try {\n    return await fn({\n      repoRoot,\n      gitCommonDir,\n      lockDir,\n      notices,\n      warnings: notices.map((notice) => notice.message)\n    });\n  } finally {\n    await releaseReentrantLock(lockDir);\n  }\n}\n\n// src/application/collab/workspaceBaseline.ts\nasync function ensureWorkspaceMatchesBaseline(params) {\n  const baseline = await readLocalBaseline({\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    repoRoot: params.repoRoot\n  });\n  if (!baseline?.lastSnapshotHash || !baseline.lastServerHeadHash) {\n    throw new RemixError(\"Local Remix baseline is missing for this lane.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` or sync from a checkout with a valid revision baseline before applying server changes.\"\n    });\n  }\n  const inspection = await inspectLocalSnapshot({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branchName: params.branchName,\n    persistBlobs: false\n  });\n  if (inspection.snapshotHash !== baseline.lastSnapshotHash) {\n    throw new RemixError(`Local boundary changes must be recorded or discarded before running ${params.operation}.`, {\n      exitCode: 2,\n      hint: \"This checkout contains workspace changes that are not part of the current Remix baseline. Record them first, or restore the workspace back to the last agreed baseline before retrying.\"\n    });\n  }\n  return { baseline, inspection };\n}\n\n// src/application/collab/collabSync.ts\nasync function collabSync(params) {\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await ensureActiveLaneBinding({\n    repoRoot,\n    api: params.api,\n    operation: \"`remix collab sync`\"\n  });\n  if (!binding) {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` first.\"\n    });\n  }\n  const detected = await collabDetectRepoState({\n    api: params.api,\n    cwd: repoRoot,\n    allowBranchMismatch: params.allowBranchMismatch\n  });\n  if (!detected.binding) {\n    throw new RemixError(\"Repository is not bound to Remix.\", { exitCode: 2, hint: detected.hint });\n  }\n  if (detected.repoState === \"idle\") {\n    const headCommitHash2 = await getHeadCommitHash(repoRoot);\n    const branch2 = await requireCurrentBranch(repoRoot);\n    if (!detected.currentServerHeadHash || !detected.currentServerHeadCommitId) {\n      throw new RemixError(\"Failed to resolve the current Remix server head for this lane.\", {\n        exitCode: 1,\n        hint: \"Run `remix collab status` and retry after the repository is fully connected to Remix.\"\n      });\n    }\n    return {\n      status: \"up_to_date\",\n      branch: branch2,\n      repoRoot,\n      baseCommitHash: detected.currentServerHeadHash,\n      targetCommitHash: detected.currentServerHeadHash,\n      targetCommitId: detected.currentServerHeadCommitId,\n      stats: { changedFilesCount: 0, insertions: 0, deletions: 0 },\n      localCommitHash: headCommitHash2,\n      applied: false,\n      dryRun: params.dryRun\n    };\n  }\n  if (detected.repoState !== \"server_only_changed\") {\n    throw new RemixError(\"A direct pull is only available when the server changed and the local workspace did not.\", {\n      exitCode: 2,\n      hint: detected.hint\n    });\n  }\n  const branch = await requireCurrentBranch(repoRoot);\n  const headCommitHash = await getHeadCommitHash(repoRoot);\n  const repoSnapshot = await captureRepoSnapshot(repoRoot, { includeWorkspaceDiffHash: true });\n  const bootstrapFromLocalHead = !detected.baseline.lastSnapshotHash || !detected.baseline.lastServerHeadHash;\n  let baselineServerHeadHash;\n  let baselineServerRevisionId = null;\n  if (bootstrapFromLocalHead) {\n    if (!headCommitHash) {\n      throw new RemixError(\"Failed to resolve local HEAD commit for the initial sync bootstrap.\", {\n        exitCode: 1,\n        hint: \"Retry after Git HEAD is available, or run `remix collab init` to seed this checkout's revision baseline.\"\n      });\n    }\n    baselineServerHeadHash = headCommitHash;\n  } else {\n    const { baseline } = await ensureWorkspaceMatchesBaseline({\n      repoRoot,\n      repoFingerprint: binding.repoFingerprint,\n      laneId: binding.laneId,\n      branchName: binding.branchName,\n      operation: \"`remix collab sync`\"\n    });\n    if (!baseline.lastServerHeadHash) {\n      throw new RemixError(\"Local Remix baseline is missing the last acknowledged server head.\", {\n        exitCode: 2,\n        hint: \"Run `remix collab init` or sync from a checkout with a valid revision baseline before pulling server changes.\"\n      });\n    }\n    baselineServerHeadHash = baseline.lastServerHeadHash;\n    baselineServerRevisionId = baseline.lastServerRevisionId;\n  }\n  const deltaResp = await params.api.getAppDelta(binding.currentAppId, {\n    baseHeadHash: baselineServerHeadHash,\n    baseRevisionId: baselineServerRevisionId,\n    repoFingerprint: binding.repoFingerprint ?? void 0,\n    remoteUrl: binding.remoteUrl ?? void 0,\n    defaultBranch: binding.defaultBranch ?? void 0\n  });\n  const delta = unwrapResponseObject(deltaResp, \"app delta\");\n  if (delta.status === \"conflict_risk\") {\n    throw new RemixError(\"Local repository metadata conflicts with the bound Remix app.\", {\n      exitCode: 2,\n      hint: delta.warnings.join(\"\\n\") || \"Run the command from the correct bound repository.\"\n    });\n  }\n  const previewResult = {\n    status: delta.status === \"content_equivalent\" ? \"base_unknown\" : delta.status,\n    branch,\n    repoRoot,\n    baseCommitHash: baselineServerHeadHash,\n    targetCommitHash: delta.targetHeadHash,\n    targetCommitId: delta.targetHeadCommitId,\n    stats: delta.stats,\n    localCommitHash: headCommitHash,\n    applied: false,\n    dryRun: params.dryRun\n  };\n  if (params.dryRun) {\n    return previewResult;\n  }\n  if (delta.status === \"up_to_date\") {\n    if (!bootstrapFromLocalHead) {\n      return previewResult;\n    }\n    return withRepoMutationLock(\n      {\n        cwd: repoRoot,\n        operation: \"collabSync\"\n      },\n      async ({ repoRoot: lockedRepoRoot, warnings }) => {\n        await assertRepoSnapshotUnchanged(lockedRepoRoot, repoSnapshot, {\n          operation: \"`remix collab sync`\",\n          recoveryHint: \"The repository changed before the first local Remix baseline could be created. Review the local changes and rerun `remix collab sync`.\"\n        });\n        const snapshot = await captureLocalSnapshot({\n          repoRoot: lockedRepoRoot,\n          repoFingerprint: binding.repoFingerprint,\n          laneId: binding.laneId,\n          branchName: binding.branchName\n        });\n        await writeLocalBaseline({\n          repoRoot: lockedRepoRoot,\n          repoFingerprint: binding.repoFingerprint,\n          laneId: binding.laneId,\n          currentAppId: binding.currentAppId,\n          branchName: binding.branchName,\n          lastSnapshotId: snapshot.id,\n          lastSnapshotHash: snapshot.snapshotHash,\n          lastServerRevisionId: delta.targetRevisionId ?? null,\n          lastServerTreeHash: delta.targetTreeHash ?? null,\n          lastServerHeadHash: delta.targetHeadHash,\n          lastSeenLocalCommitHash: snapshot.localCommitHash\n        });\n        const reportResult = await reportAlignedCheckoutState({\n          api: params.api,\n          appId: binding.currentAppId,\n          repoRoot: lockedRepoRoot,\n          repoFingerprint: binding.repoFingerprint,\n          laneId: binding.laneId,\n          branch,\n          baselineRevisionId: delta.targetRevisionId ?? null,\n          serverRevisionId: delta.targetRevisionId ?? null,\n          localHeadHash: snapshot.localCommitHash,\n          serverHeadCommitId: delta.targetHeadCommitId,\n          serverHeadHash: delta.targetHeadHash,\n          source: \"sync_apply\"\n        });\n        return {\n          ...previewResult,\n          localCommitHash: snapshot.localCommitHash,\n          ...[...warnings, ...reportResult.warnings].length > 0 ? { warnings: [...warnings, ...reportResult.warnings] } : {}\n        };\n      }\n    );\n  }\n  if (delta.status === \"base_unknown\") {\n    throw new RemixError(\"Direct pull is unavailable because Remix can no longer diff from the last acknowledged server head.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab reconcile --dry-run` to inspect recovery options before retrying. If this checkout has no local Remix baseline yet for this lane, run `remix collab init` to seed one.\"\n    });\n  }\n  if (delta.status !== \"delta_ready\") {\n    throw new RemixError(\"Direct pull is not available for the current repository state.\", {\n      exitCode: 2,\n      hint: delta.warnings.join(\"\\n\") || \"Run `remix collab status` to inspect the current alignment state.\"\n    });\n  }\n  return withRepoMutationLock(\n    {\n      cwd: repoRoot,\n      operation: \"collabSync\"\n    },\n    async ({ repoRoot: lockedRepoRoot, warnings }) => {\n      if (bootstrapFromLocalHead) {\n        await assertRepoSnapshotUnchanged(lockedRepoRoot, repoSnapshot, {\n          operation: \"`remix collab sync`\",\n          recoveryHint: \"The repository changed before the first local Remix baseline could be created. Review the local changes and rerun `remix collab sync`.\"\n        });\n      } else {\n        await ensureWorkspaceMatchesBaseline({\n          repoRoot: lockedRepoRoot,\n          repoFingerprint: binding.repoFingerprint,\n          laneId: binding.laneId,\n          branchName: binding.branchName,\n          operation: \"`remix collab sync`\"\n        });\n      }\n      await applyUnifiedDiffToWorktree(lockedRepoRoot, delta.diff, \"`remix collab pull`\");\n      const snapshot = await captureLocalSnapshot({\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branchName: binding.branchName\n      });\n      await writeLocalBaseline({\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        currentAppId: binding.currentAppId,\n        branchName: binding.branchName,\n        lastSnapshotId: snapshot.id,\n        lastSnapshotHash: snapshot.snapshotHash,\n        lastServerRevisionId: delta.targetRevisionId ?? null,\n        lastServerTreeHash: delta.targetTreeHash ?? null,\n        lastServerHeadHash: delta.targetHeadHash,\n        lastSeenLocalCommitHash: snapshot.localCommitHash\n      });\n      const reportResult = await reportAlignedCheckoutState({\n        api: params.api,\n        appId: binding.currentAppId,\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branch,\n        baselineRevisionId: delta.targetRevisionId ?? null,\n        serverRevisionId: delta.targetRevisionId ?? null,\n        localHeadHash: snapshot.localCommitHash,\n        serverHeadCommitId: delta.targetHeadCommitId,\n        serverHeadHash: delta.targetHeadHash,\n        source: \"sync_apply\"\n      });\n      const eventResult = await recordLocalAlignmentEvent({\n        api: params.api,\n        appId: binding.currentAppId,\n        eventKind: \"sync_local\",\n        branch,\n        collabLaneId: binding.laneId,\n        baseRevisionId: baselineServerRevisionId,\n        targetRevisionId: delta.targetRevisionId ?? null,\n        resultRevisionId: delta.targetRevisionId ?? null,\n        baseHeadHash: baselineServerHeadHash,\n        targetHeadCommitId: delta.targetHeadCommitId,\n        targetHeadHash: delta.targetHeadHash,\n        resultHeadHash: delta.targetHeadHash,\n        changedFilesCount: delta.stats.changedFilesCount,\n        insertions: delta.stats.insertions,\n        deletions: delta.stats.deletions,\n        localCommitCount: 0,\n        summary: \"Synced local checkout with Remix.\",\n        idempotencyKey: buildDeterministicIdempotencyKey({\n          kind: \"collab_sync_local_alignment_v1\",\n          appId: binding.currentAppId,\n          laneId: binding.laneId,\n          baseRevisionId: baselineServerRevisionId,\n          targetRevisionId: delta.targetRevisionId ?? null,\n          baseHeadHash: baselineServerHeadHash,\n          targetHeadHash: delta.targetHeadHash,\n          diffSha256: delta.diffSha256\n        })\n      });\n      return {\n        ...previewResult,\n        status: \"delta_ready\",\n        localCommitHash: snapshot.localCommitHash,\n        applied: true,\n        dryRun: false,\n        ...[...warnings, ...reportResult.warnings, ...eventResult.warnings].length > 0 ? { warnings: [...warnings, ...reportResult.warnings, ...eventResult.warnings] } : {}\n      };\n    }\n  );\n}\n\n// src/application/collab/collabApprove.ts\nasync function collabApprove(params) {\n  const approvePayload = {\n    status: \"approved\",\n    ...params.approvalStrategy ? { approvalStrategy: params.approvalStrategy } : {}\n  };\n  const transition = planApproveWorkflowTransition({\n    mode: params.mode,\n    hasCwd: Boolean(params.cwd?.trim())\n  });\n  if (transition.action === \"sync_target_repo\") {\n    return withRepoMutationLock(\n      {\n        cwd: params.cwd ?? \"\",\n        operation: \"collabApproveSyncTarget\"\n      },\n      async ({ repoRoot, warnings }) => {\n        const binding = await ensureActiveLaneBinding({\n          repoRoot,\n          api: params.api,\n          operation: \"`remix collab approve --sync-target-repo`\"\n        });\n        if (!binding) {\n          throw new RemixError(\"Repository is not bound to Remix.\", {\n            exitCode: 2,\n            hint: \"Run `remix collab init` first, or use `--remote-only`.\"\n          });\n        }\n        await ensureCleanWorktree(repoRoot, \"`remix collab approve --sync-target-repo`\");\n        const branch = await requireCurrentBranch(repoRoot);\n        assertBoundBranchMatch({\n          currentBranch: branch,\n          branchName: binding.branchName,\n          allowBranchMismatch: params.allowBranchMismatch,\n          operation: \"`remix collab approve --sync-target-repo`\"\n        });\n        const mrResp = await params.api.getMergeRequest(params.mrId);\n        const mergeRequest = unwrapMergeRequest(mrResp);\n        const targetAppId = mergeRequest.targetAppId;\n        if (binding.currentAppId !== targetAppId) {\n          throw new RemixError(\"Current repository is not the merge target for this merge request.\", {\n            exitCode: 2,\n            hint: `Run the command from the repository bound to app ${targetAppId}, or use --remote-only.`\n          });\n        }\n        const resp2 = await params.api.updateMergeRequest(params.mrId, approvePayload);\n        const approvedMergeRequest2 = unwrapMergeRequest(resp2);\n        const completedMergeRequest2 = await pollMergeRequestCompletion(params.api, params.mrId, {\n          targetAppId: targetAppId ?? approvedMergeRequest2.targetAppId\n        });\n        const localSync = await collabSync({\n          api: params.api,\n          cwd: repoRoot,\n          dryRun: false,\n          allowBranchMismatch: params.allowBranchMismatch\n        });\n        const localSyncWarnings = Array.isArray(localSync.warnings) ? localSync.warnings ?? [] : [];\n        return {\n          mode: params.mode,\n          mergeRequestId: completedMergeRequest2.id,\n          terminalStatus: completedMergeRequest2.status,\n          targetAppId: completedMergeRequest2.targetAppId,\n          mergeRequest: completedMergeRequest2,\n          repoRoot,\n          localSync,\n          ...warnings.length > 0 || localSyncWarnings.length > 0 ? {\n            warnings: Array.from(/* @__PURE__ */ new Set([...warnings, ...localSyncWarnings]))\n          } : {}\n        };\n      }\n    );\n  }\n  if (transition.action === \"require_cwd\") {\n    throw new RemixError(\"Working directory is required for `--sync-target-repo`.\", {\n      exitCode: 2\n    });\n  }\n  const resp = await params.api.updateMergeRequest(params.mrId, approvePayload);\n  const approvedMergeRequest = unwrapMergeRequest(resp);\n  const completedMergeRequest = await pollMergeRequestCompletion(params.api, params.mrId, {\n    targetAppId: approvedMergeRequest.targetAppId\n  });\n  return {\n    mode: params.mode,\n    mergeRequestId: completedMergeRequest.id,\n    terminalStatus: completedMergeRequest.status,\n    targetAppId: completedMergeRequest.targetAppId,\n    mergeRequest: completedMergeRequest\n  };\n}\n\n// src/application/collab/checkoutWorkspace.ts\nimport fs7 from \"fs/promises\";\nimport os4 from \"os\";\nimport path8 from \"path\";\nasync function pathExists(targetPath) {\n  try {\n    await fs7.access(targetPath);\n    return true;\n  } catch {\n    return false;\n  }\n}\nasync function statIsDirectory(targetPath) {\n  const stats = await fs7.stat(targetPath).catch(() => null);\n  return Boolean(stats?.isDirectory());\n}\nasync function findContainingGitRoot(startPath) {\n  let current = path8.resolve(startPath);\n  while (true) {\n    if (await pathExists(path8.join(current, \".git\"))) return current;\n    const parent = path8.dirname(current);\n    if (parent === current) return null;\n    current = parent;\n  }\n}\nfunction isSubpath(parentPath, candidatePath) {\n  const relative = path8.relative(parentPath, candidatePath);\n  return relative === \"\" || !relative.startsWith(\"..\") && !path8.isAbsolute(relative);\n}\nasync function resolveCheckoutDestination(params) {\n  if (params.outputDir?.trim()) {\n    const preferredRepoRoot = path8.resolve(params.outputDir.trim());\n    const parentDir2 = path8.dirname(preferredRepoRoot);\n    if (!await statIsDirectory(parentDir2)) {\n      throw new RemixError(\"Remix output parent directory does not exist.\", {\n        exitCode: 2,\n        hint: `Create the directory first: ${parentDir2}`\n      });\n    }\n    return {\n      preferredRepoRoot,\n      parentDir: parentDir2,\n      explicitOutputDir: true\n    };\n  }\n  const parentDir = path8.resolve(params.cwd);\n  if (!await statIsDirectory(parentDir)) {\n    throw new RemixError(\"Remix output parent directory does not exist.\", {\n      exitCode: 2,\n      hint: `Create the directory first: ${parentDir}`\n    });\n  }\n  return {\n    preferredRepoRoot: path8.join(parentDir, params.defaultDirName),\n    parentDir,\n    explicitOutputDir: false\n  };\n}\nasync function assertSafeCheckoutDestination(params) {\n  const callerGitRoot = await findContainingGitRoot(params.cwd);\n  if (callerGitRoot && isSubpath(callerGitRoot, params.repoRoot)) {\n    throw new RemixError(\"Refusing to create a remix checkout inside an existing git repository.\", {\n      exitCode: 2,\n      hint: params.explicitOutputDir ? `Choose a destination outside ${callerGitRoot}.` : `Pass --output-dir outside ${callerGitRoot}.`\n    });\n  }\n  const parentGitRoot = await findContainingGitRoot(params.parentDir);\n  if (parentGitRoot && isSubpath(parentGitRoot, params.repoRoot)) {\n    throw new RemixError(\"Refusing to create a remix checkout inside an existing git repository.\", {\n      exitCode: 2,\n      hint: params.explicitOutputDir ? `Choose a destination outside ${parentGitRoot}.` : `Pass --output-dir outside ${parentGitRoot}.`\n    });\n  }\n}\nasync function materializeAppCheckout(params) {\n  const destination = await resolveCheckoutDestination({\n    cwd: params.cwd,\n    outputDir: params.outputDir ?? null,\n    defaultDirName: params.defaultDirName\n  });\n  await assertSafeCheckoutDestination({\n    cwd: params.cwd,\n    repoRoot: destination.preferredRepoRoot,\n    parentDir: destination.parentDir,\n    explicitOutputDir: destination.explicitOutputDir\n  });\n  const repoRoot = destination.explicitOutputDir ? await reserveDirectory(destination.preferredRepoRoot) : await reserveAvailableDirPath(destination.preferredRepoRoot);\n  const bundleTempDir = await fs7.mkdtemp(path8.join(os4.tmpdir(), \"remix-checkout-\"));\n  const bundlePath = path8.join(bundleTempDir, \"repository.bundle\");\n  const phase = (next) => {\n    try {\n      params.onPhase?.(next);\n    } catch {\n    }\n  };\n  try {\n    phase(\"downloading\");\n    const bundle = await params.api.downloadAppBundle(params.appId);\n    phase(\"unpacking\");\n    await fs7.writeFile(bundlePath, bundle.data);\n    await cloneGitBundleToDirectory(bundlePath, repoRoot);\n    phase(\"finalizing\");\n    if (params.expectedBranchName?.trim()) {\n      await checkoutLocalBranch(repoRoot, params.expectedBranchName.trim());\n    }\n    if (params.expectedRemoteUrl?.trim()) {\n      await setRemoteOriginUrl(repoRoot, params.expectedRemoteUrl);\n    }\n    await ensureGitInfoExcludeEntries(repoRoot, [\".remix/\"]);\n  } catch (err) {\n    await fs7.rm(repoRoot, { recursive: true, force: true }).catch(() => {\n    });\n    throw err;\n  } finally {\n    await fs7.rm(bundleTempDir, { recursive: true, force: true });\n  }\n  const branchName = await getCurrentBranch(repoRoot) ?? params.expectedBranchName?.trim() ?? null;\n  const remoteUrl = normalizeGitRemote(params.expectedRemoteUrl ?? await getRemoteOriginUrl(repoRoot));\n  const defaultBranch = params.expectedDefaultBranch?.trim() ?? await getDefaultBranch(repoRoot) ?? branchName ?? null;\n  const repoFingerprint = remoteUrl ? await buildRepoFingerprint({ gitRoot: repoRoot, remoteUrl, defaultBranch }) : null;\n  return {\n    repoRoot,\n    remoteUrl,\n    defaultBranch,\n    branchName,\n    repoFingerprint\n  };\n}\n\n// src/application/collab/collabCheckout.ts\nasync function collabCheckout(params) {\n  const transition = planCheckoutWorkflowTransition({ appId: params.appId });\n  if (transition.action === \"require_app\") {\n    throw new RemixError(\"No app selected.\", {\n      exitCode: 2,\n      hint: \"Pass the app id to checkout.\"\n    });\n  }\n  const appId = params.appId?.trim() ?? \"\";\n  const app = await pollAppReady(params.api, appId);\n  const collab = app.collab && typeof app.collab === \"object\" ? app.collab : null;\n  const source = app.source && typeof app.source === \"object\" ? app.source : null;\n  const authoritativeBranchName = typeof collab?.branchName === \"string\" && collab.branchName.trim() || typeof source?.branch === \"string\" && source.branch.trim() || typeof source?.defaultBranch === \"string\" && source.defaultBranch.trim() || null;\n  const authoritativeRemoteUrl = typeof source?.remoteUrl === \"string\" && source.remoteUrl.trim() || null;\n  const authoritativeDefaultBranch = typeof source?.defaultBranch === \"string\" && source.defaultBranch.trim() || null;\n  const checkout = await materializeAppCheckout({\n    api: params.api,\n    cwd: params.cwd,\n    appId: String(app.id),\n    outputDir: params.outputDir ?? null,\n    defaultDirName: sanitizeCheckoutDirName(String(app.name || app.id)),\n    expectedBranchName: authoritativeBranchName,\n    expectedRemoteUrl: authoritativeRemoteUrl,\n    expectedDefaultBranch: authoritativeDefaultBranch,\n    onPhase: params.onPhase\n  });\n  const upstreamAppId = String(app.forkedFromAppId ?? app.id);\n  const laneId = typeof collab?.laneId === \"string\" ? collab.laneId : null;\n  const repoFingerprint = typeof source?.repoFingerprint === \"string\" ? source.repoFingerprint : checkout.repoFingerprint;\n  const remoteUrl = typeof source?.remoteUrl === \"string\" ? source.remoteUrl : checkout.remoteUrl;\n  const defaultBranch = typeof source?.defaultBranch === \"string\" ? source.defaultBranch : checkout.defaultBranch;\n  const branchName = authoritativeBranchName ?? checkout.branchName;\n  const authoritativeLane = await resolveProjectLaneIfAuthoritative(params.api, {\n    projectId: String(app.projectId),\n    repoFingerprint,\n    remoteUrl,\n    defaultBranch,\n    branchName,\n    currentAppId: String(app.id),\n    expectedUpstreamAppId: upstreamAppId,\n    createIfMissing: !params.skipLaneMaterialization,\n    seedAppId: params.skipLaneMaterialization ? null : String(app.id)\n  });\n  const bindingPath = await writeCollabBinding(checkout.repoRoot, {\n    projectId: authoritativeLane?.projectId ?? String(app.projectId),\n    currentAppId: authoritativeLane?.currentAppId ?? String(app.id),\n    upstreamAppId: authoritativeLane?.upstreamAppId ?? upstreamAppId,\n    threadId: authoritativeLane?.threadId ?? (app.threadId ? String(app.threadId) : null),\n    repoFingerprint: authoritativeLane?.repoFingerprint ?? repoFingerprint,\n    remoteUrl: authoritativeLane?.remoteUrl ?? remoteUrl,\n    defaultBranch: authoritativeLane?.defaultBranch ?? defaultBranch,\n    laneId: authoritativeLane?.laneId ?? laneId,\n    branchName: authoritativeLane?.branchName ?? branchName,\n    bindingMode: \"lane\"\n  });\n  const currentAppId = authoritativeLane?.currentAppId ?? String(app.id);\n  const repoFingerprintForBaseline = authoritativeLane?.repoFingerprint ?? repoFingerprint;\n  const laneIdForBaseline = authoritativeLane?.laneId ?? laneId;\n  const branchNameForBaseline = authoritativeLane?.branchName ?? branchName;\n  const appHead = unwrapResponseObject(\n    await params.api.getAppHead(currentAppId),\n    \"app head\"\n  );\n  const snapshot = await captureLocalSnapshot({\n    repoRoot: checkout.repoRoot,\n    repoFingerprint: repoFingerprintForBaseline,\n    laneId: laneIdForBaseline,\n    branchName: branchNameForBaseline\n  });\n  await writeLocalBaseline({\n    repoRoot: checkout.repoRoot,\n    repoFingerprint: repoFingerprintForBaseline,\n    laneId: laneIdForBaseline,\n    currentAppId,\n    branchName: branchNameForBaseline,\n    lastSnapshotId: snapshot.id,\n    lastSnapshotHash: snapshot.snapshotHash,\n    lastServerRevisionId: appHead.headRevisionId ?? null,\n    lastServerTreeHash: appHead.treeHash ?? null,\n    lastServerHeadHash: appHead.headCommitHash,\n    lastSeenLocalCommitHash: snapshot.localCommitHash\n  });\n  return {\n    appId: currentAppId,\n    dashboardUrl: buildDashboardAppUrl(currentAppId),\n    projectId: authoritativeLane?.projectId ?? String(app.projectId),\n    upstreamAppId: authoritativeLane?.upstreamAppId ?? upstreamAppId,\n    bindingPath,\n    repoRoot: checkout.repoRoot\n  };\n}\n\n// src/application/collab/collabListMergeRequests.ts\nvar APP_SCOPED_QUEUES = /* @__PURE__ */ new Set([\"app_reviewable\", \"app_outgoing\", \"app_related_visible\"]);\nasync function resolveQueueAppId(params) {\n  if (!APP_SCOPED_QUEUES.has(params.queue)) {\n    return params.appId ?? void 0;\n  }\n  if (params.appId?.trim()) {\n    return params.appId.trim();\n  }\n  if (!params.cwd?.trim()) {\n    throw new RemixError(\"An app-scoped merge-request queue requires either `appId` or `cwd`.\", {\n      exitCode: 2,\n      hint: \"Pass `appId` explicitly, or run the request from a Remix-bound checkout with `cwd` set.\"\n    });\n  }\n  const repoRoot = await findGitRoot(params.cwd);\n  const bindingResolution = await resolveActiveLaneBinding({ repoRoot });\n  if (bindingResolution.status === \"not_bound\") {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Bind the repository first or pass `appId` explicitly for the app-scoped merge-request queue.\"\n    });\n  }\n  if (bindingResolution.status === \"missing_branch_binding\") {\n    throw new RemixError(\"Current branch is not yet bound to a Remix lane.\", {\n      exitCode: 2,\n      hint: `Switch back to a bound branch, or run \\`remix collab init\\` on ${bindingResolution.currentBranch ?? \"this branch\"} before listing merge requests.`\n    });\n  }\n  if (bindingResolution.status === \"binding_conflict\") {\n    throw new RemixError(\"Current branch binding conflicts with the server-resolved Remix lane.\", {\n      exitCode: 2,\n      hint: `Local app ${bindingResolution.binding.currentAppId}; server app ${bindingResolution.resolvedLane.currentAppId ?? \"(unknown)\"}.`\n    });\n  }\n  if (bindingResolution.status === \"ambiguous_family_selection\") {\n    throw new RemixError(\"Multiple canonical Remix families match this repository.\", {\n      exitCode: 2,\n      hint: \"This checkout does not identify a single canonical family. Continue from a checkout already bound to the intended family, or pass `appId` explicitly for the queue request.\"\n    });\n  }\n  return bindingResolution.binding.currentAppId;\n}\nasync function collabListMergeRequests(params) {\n  const appId = await resolveQueueAppId({\n    cwd: params.cwd,\n    appId: params.appId,\n    queue: params.queue\n  });\n  const pageRequest = normalizePagination(params);\n  const resp = await params.api.listMergeRequests({\n    queue: params.queue,\n    appId,\n    status: params.status,\n    kind: params.kind ?? \"merge\",\n    limit: pageRequest.limit + 1,\n    offset: pageRequest.offset\n  });\n  const mergeRequests = unwrapResponseObject(resp, \"merge requests\");\n  const page = paginateOverfetchedItems(mergeRequests, params);\n  return {\n    queue: params.queue,\n    appId: appId ?? null,\n    mergeRequests: page.items,\n    pagination: page.pagination\n  };\n}\n\n// src/application/collab/resolveScopeTarget.ts\nasync function resolveScopeTarget(params) {\n  if (params.targetId?.trim()) return params.targetId.trim();\n  const repoRoot = await findGitRoot(params.cwd);\n  const bindingResolution = await resolveActiveLaneBinding({ repoRoot, api: params.api });\n  if (bindingResolution.status === \"not_bound\") {\n    throw new RemixError(\"Repository is not bound to Remix and no explicit target id was provided.\", { exitCode: 2 });\n  }\n  if (bindingResolution.status === \"missing_branch_binding\") {\n    throw new RemixError(\"Current branch is not yet bound to a Remix lane and no explicit target id was provided.\", {\n      exitCode: 2\n    });\n  }\n  if (bindingResolution.status === \"binding_conflict\") {\n    throw new RemixError(\"Current branch binding conflicts with the server-resolved Remix lane.\", {\n      exitCode: 2,\n      hint: `Local app ${bindingResolution.binding.currentAppId}; server app ${bindingResolution.resolvedLane.currentAppId ?? \"(unknown)\"}.`\n    });\n  }\n  if (bindingResolution.status === \"ambiguous_family_selection\") {\n    throw new RemixError(\"Multiple canonical Remix families match this repository and no explicit target id was provided.\", {\n      exitCode: 2,\n      hint: \"This checkout does not identify a single canonical family. Continue from a checkout already bound to the intended family, or pass `targetId` explicitly.\"\n    });\n  }\n  const binding = bindingResolution.binding;\n  if (params.scope === \"project\") {\n    if (!binding.projectId) {\n      throw new RemixError(\"Could not resolve the project for the current repository binding.\", { exitCode: 2 });\n    }\n    return binding.projectId;\n  }\n  if (params.scope === \"app\") return binding.currentAppId;\n  if (!binding.projectId) {\n    throw new RemixError(\"Could not resolve the project for the current repository binding.\", { exitCode: 2 });\n  }\n  const project = unwrapResponseObject(await params.api.getProject(binding.projectId), \"project\");\n  const organizationId = typeof project.organizationId === \"string\" ? project.organizationId : null;\n  if (!organizationId) {\n    throw new RemixError(\"Could not resolve the organization for the current repository binding.\", { exitCode: 2 });\n  }\n  return organizationId;\n}\n\n// src/application/collab/collabMembers.ts\nvar ORGANIZATION_MEMBER_ROLES = [\"owner\", \"admin\", \"member\", \"viewer\"];\nvar WORKFLOW_MEMBER_ROLES = [\"owner\", \"maintainer\", \"editor\", \"viewer\"];\nfunction getMemberRolesForScope(scope) {\n  return scope === \"organization\" ? ORGANIZATION_MEMBER_ROLES : WORKFLOW_MEMBER_ROLES;\n}\nfunction validateMemberRole(scope, role) {\n  const normalized = role.trim().toLowerCase();\n  if (getMemberRolesForScope(scope).includes(normalized)) return normalized;\n  throw new RemixError(`Invalid ${scope} member role.`, {\n    exitCode: 2,\n    hint: `Allowed roles: ${getMemberRolesForScope(scope).join(\", \")}`\n  });\n}\nasync function collabListMembers(params) {\n  const targetId = await resolveScopeTarget({\n    api: params.api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId\n  });\n  const pageRequest = normalizePagination(params);\n  const resp = params.scope === \"organization\" ? await params.api.listOrganizationMembers(targetId, {\n    limit: pageRequest.limit + 1,\n    offset: pageRequest.offset\n  }) : params.scope === \"project\" ? await params.api.listProjectMembers(targetId, {\n    limit: pageRequest.limit + 1,\n    offset: pageRequest.offset\n  }) : await params.api.listAppMembers(targetId, {\n    limit: pageRequest.limit + 1,\n    offset: pageRequest.offset\n  });\n  const members = params.scope === \"organization\" ? unwrapResponseObject(resp, \"members\") : params.scope === \"project\" ? unwrapResponseObject(resp, \"members\") : unwrapResponseObject(resp, \"members\");\n  const page = paginateOverfetchedItems(members, params);\n  return {\n    scopeType: params.scope,\n    targetId,\n    members: page.items,\n    pagination: page.pagination\n  };\n}\nasync function collabUpdateMemberRole(params) {\n  const targetId = await resolveScopeTarget({\n    api: params.api,\n    cwd: params.cwd,\n    scope: params.scope,\n    targetId: params.targetId\n  });\n  const role = validateMemberRole(params.scope, params.role);\n  const resp = params.scope === \"organization\" ? await params.api.updateOrganizationMember(targetId, params.userId, { role }) : params.scope === \"project\" ? await params.api.updateProjectMember(targetId, params.userId, { role }) : await params.api.updateAppMember(targetId, params.userId, { role });\n  const member = params.scope === \"organization\" ? unwrapResponseObject(resp, \"member\") : params.scope === \"project\" ? unwrapResponseObject(resp, \"member\") : unwrapResponseObject(resp, \"member\");\n  return {\n    scopeType: params.scope,\n    targetId,\n    member\n  };\n}\n\n// src/application/collab/collabInit.ts\nimport fs12 from \"fs/promises\";\nimport path11 from \"path\";\n\n// src/shared/hash.ts\nimport crypto from \"crypto\";\nimport fs8 from \"fs\";\nasync function sha256FileHex(filePath) {\n  const hash = crypto.createHash(\"sha256\");\n  await new Promise((resolve, reject) => {\n    const stream = fs8.createReadStream(filePath);\n    stream.on(\"data\", (chunk) => hash.update(chunk));\n    stream.on(\"error\", reject);\n    stream.on(\"end\", () => resolve());\n  });\n  return hash.digest(\"hex\");\n}\n\n// src/application/collab/collabInitDecision.ts\nfunction shouldRequireCleanWorktreeForInit(params) {\n  return Boolean(params.forceNew) || !params.hasExistingBinding;\n}\nfunction classifyExistingInitBaseline(baseline) {\n  return baseline?.lastSnapshotHash && (baseline.lastServerRevisionId || baseline.lastServerHeadHash) ? \"existing\" : null;\n}\nfunction classifyInitBaselineDelta(params) {\n  if (params.equivalentBaselineStatus) return params.equivalentBaselineStatus;\n  if (params.deltaStatus === \"content_equivalent\") return \"seeded\";\n  if (params.deltaStatus === \"up_to_date\" || params.deltaStatus === \"delta_ready\") return \"requires_sync\";\n  return null;\n}\nfunction canSeedEquivalentBranchBaseline(params) {\n  if (!params.branchName || !params.defaultBranch || params.branchName === params.defaultBranch) return false;\n  if (!params.defaultBranchCurrentAppId) return false;\n  if (params.upstreamAppId && params.defaultBranchCurrentAppId !== params.upstreamAppId) return false;\n  if (!params.defaultBaselineSnapshotHash || !params.defaultBaselineServerHeadHash) return false;\n  if (params.defaultBaselineServerHeadHash !== params.appHeadHash) return false;\n  return params.localSnapshotHash === params.defaultBaselineSnapshotHash || params.localCommitHash === params.defaultBaselineLocalCommitHash;\n}\nfunction resolveStoredBindingAnchor(params) {\n  const currentBranchBinding = params.currentBranch ? params.state.branchBindings[params.currentBranch] ?? null : null;\n  if (currentBranchBinding?.currentAppId) {\n    return { binding: currentBranchBinding, branchName: params.currentBranch };\n  }\n  const defaultBranchBinding = params.defaultBranch ? params.state.branchBindings[params.defaultBranch] ?? null : null;\n  if (defaultBranchBinding?.currentAppId) {\n    return { binding: defaultBranchBinding, branchName: params.defaultBranch };\n  }\n  return null;\n}\nfunction shouldReplaceAsyncInitJobs(params) {\n  return Boolean(params.forceNew);\n}\nfunction shouldReturnPendingAsyncInit(params) {\n  return !params.forceNew && params.pendingJobFound;\n}\n\n// src/application/collab/collabInitBaseline.ts\nasync function trySeedEquivalentBranchBaseline(params) {\n  if (!params.branchName || !params.defaultBranch || params.branchName === params.defaultBranch) {\n    return null;\n  }\n  const bindingState = await readCollabBindingState(params.repoRoot);\n  const defaultBranchBinding = params.defaultBranch ? bindingState?.branchBindings[params.defaultBranch] ?? null : null;\n  if (!defaultBranchBinding?.currentAppId) {\n    return null;\n  }\n  if (params.upstreamAppId && defaultBranchBinding.currentAppId !== params.upstreamAppId) {\n    return null;\n  }\n  const defaultBaseline = await readLocalBaseline({\n    repoFingerprint: params.repoFingerprint,\n    laneId: defaultBranchBinding.laneId,\n    repoRoot: params.repoRoot\n  });\n  if (!defaultBaseline?.lastSnapshotHash || !defaultBaseline.lastServerHeadHash) {\n    return null;\n  }\n  if (defaultBaseline.lastServerHeadHash !== params.appHeadHash) {\n    return null;\n  }\n  const inspection = await inspectLocalSnapshot({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branchName: params.branchName,\n    persistBlobs: false\n  });\n  if (!canSeedEquivalentBranchBaseline({\n    branchName: params.branchName,\n    defaultBranch: params.defaultBranch,\n    upstreamAppId: params.upstreamAppId,\n    defaultBranchCurrentAppId: defaultBranchBinding?.currentAppId ?? null,\n    defaultBaselineSnapshotHash: defaultBaseline?.lastSnapshotHash ?? null,\n    defaultBaselineServerHeadHash: defaultBaseline?.lastServerHeadHash ?? null,\n    defaultBaselineLocalCommitHash: defaultBaseline?.lastSeenLocalCommitHash ?? null,\n    appHeadHash: params.appHeadHash,\n    localSnapshotHash: inspection.snapshotHash,\n    localCommitHash: inspection.localCommitHash\n  })) {\n    return null;\n  }\n  await writeLocalBaseline({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    currentAppId: params.currentAppId,\n    branchName: params.branchName,\n    lastSnapshotId: defaultBaseline.lastSnapshotId,\n    lastSnapshotHash: defaultBaseline.lastSnapshotHash,\n    lastServerRevisionId: params.appHeadRevisionId,\n    lastServerTreeHash: params.appTreeHash,\n    lastServerHeadHash: params.appHeadHash,\n    lastSeenLocalCommitHash: inspection.localCommitHash\n  });\n  return \"seeded\";\n}\nasync function resolveInitBaselineStatus(params) {\n  const baseline = await readLocalBaseline({\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    repoRoot: params.repoRoot\n  });\n  const existingBaselineStatus = classifyExistingInitBaseline(baseline);\n  if (existingBaselineStatus) return existingBaselineStatus;\n  const localHeadCommitHash = await getHeadCommitHash(params.repoRoot);\n  if (!localHeadCommitHash) return \"baseline_missing\";\n  const appHead = unwrapResponseObject(\n    await params.api.getAppHead(params.currentAppId),\n    \"app head\"\n  );\n  if (localHeadCommitHash === appHead.headCommitHash) {\n    await seedImportedInitBaseline({\n      api: params.api,\n      repoRoot: params.repoRoot,\n      repoFingerprint: params.repoFingerprint,\n      laneId: params.laneId,\n      currentAppId: params.currentAppId,\n      branchName: params.branchName\n    });\n    return \"seeded\";\n  }\n  const localSnapshotHash = params.branchName && params.defaultBranch && params.branchName !== params.defaultBranch ? (await inspectLocalSnapshot({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branchName: params.branchName,\n    persistBlobs: false\n  })).snapshotHash : void 0;\n  try {\n    const deltaResp = await params.api.getAppDelta(params.currentAppId, {\n      baseHeadHash: localHeadCommitHash,\n      targetHeadHash: appHead.headCommitHash,\n      targetRevisionId: appHead.headRevisionId,\n      localSnapshotHash,\n      repoFingerprint: params.repoFingerprint,\n      remoteUrl: params.remoteUrl ?? void 0,\n      defaultBranch: params.defaultBranch ?? void 0\n    });\n    const delta = unwrapResponseObject(deltaResp, \"app delta\");\n    if (delta.status === \"up_to_date\" || delta.status === \"delta_ready\") {\n      const equivalentBaseline = await trySeedEquivalentBranchBaseline({\n        repoRoot: params.repoRoot,\n        repoFingerprint: params.repoFingerprint,\n        laneId: params.laneId,\n        currentAppId: params.currentAppId,\n        upstreamAppId: params.upstreamAppId ?? null,\n        branchName: params.branchName,\n        defaultBranch: params.defaultBranch,\n        appHeadHash: appHead.headCommitHash,\n        appHeadRevisionId: appHead.headRevisionId ?? null,\n        appTreeHash: appHead.treeHash ?? null\n      });\n      if (equivalentBaseline) {\n        return equivalentBaseline;\n      }\n      return classifyInitBaselineDelta({ deltaStatus: delta.status }) ?? \"baseline_missing\";\n    }\n    if (delta.status === \"content_equivalent\") {\n      await seedImportedInitBaseline({\n        api: params.api,\n        repoRoot: params.repoRoot,\n        repoFingerprint: params.repoFingerprint,\n        laneId: params.laneId,\n        currentAppId: params.currentAppId,\n        branchName: params.branchName\n      });\n      return classifyInitBaselineDelta({ deltaStatus: delta.status }) ?? \"baseline_missing\";\n    }\n    if (delta.status === \"base_unknown\") {\n      const equivalentBaseline = await trySeedEquivalentBranchBaseline({\n        repoRoot: params.repoRoot,\n        repoFingerprint: params.repoFingerprint,\n        laneId: params.laneId,\n        currentAppId: params.currentAppId,\n        upstreamAppId: params.upstreamAppId ?? null,\n        branchName: params.branchName,\n        defaultBranch: params.defaultBranch,\n        appHeadHash: appHead.headCommitHash,\n        appHeadRevisionId: appHead.headRevisionId ?? null,\n        appTreeHash: appHead.treeHash ?? null\n      });\n      if (equivalentBaseline) {\n        return equivalentBaseline;\n      }\n    }\n  } catch {\n  }\n  return \"baseline_missing\";\n}\nasync function seedImportedInitBaseline(params) {\n  const appHead = unwrapResponseObject(\n    await params.api.getAppHead(params.currentAppId),\n    \"app head\"\n  );\n  const snapshot = await captureLocalSnapshot({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    branchName: params.branchName\n  });\n  await writeLocalBaseline({\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    laneId: params.laneId,\n    currentAppId: params.currentAppId,\n    branchName: params.branchName,\n    lastSnapshotId: snapshot.id,\n    lastSnapshotHash: snapshot.snapshotHash,\n    lastServerRevisionId: appHead.headRevisionId ?? null,\n    lastServerTreeHash: appHead.treeHash ?? null,\n    lastServerHeadHash: appHead.headCommitHash,\n    lastSeenLocalCommitHash: snapshot.localCommitHash\n  });\n  return \"seeded\";\n}\n\n// src/application/collab/collabInitBinding.ts\nfunction requireResolvedLaneBinding(lane, params) {\n  if (lane.status === \"resolved\" && lane.currentAppId && lane.upstreamAppId) {\n    return lane;\n  }\n  const branchLabel = params.branchName ?? \"the current branch\";\n  const laneStatus = String(lane.status ?? \"\");\n  throw new RemixError(`Failed to resolve a Remix lane for ${branchLabel}.`, {\n    exitCode: 1,\n    hint: laneStatus === \"binding_not_found\" ? `Run ${params.operation} again after the repository has been initialized.` : laneStatus === \"ambiguous_family_selection\" ? \"Multiple canonical Remix families match this repository. Continue from a checkout already bound to the intended family, or rerun with `--force-new` to create a new family.\" : `Remix did not return complete lane metadata for ${branchLabel}.`\n  });\n}\nfunction resolveProjectBindingResult(response) {\n  const payload = response?.responseObject;\n  if (!payload || typeof payload !== \"object\") {\n    return { status: \"not_found\" };\n  }\n  if (payload.status === \"ambiguous_family_selection\") {\n    const projectIds = Array.isArray(payload.projectIds) ? payload.projectIds.filter((value) => typeof value === \"string\" && value.trim().length > 0) : [];\n    return {\n      status: \"ambiguous_family_selection\",\n      candidateCount: typeof payload.candidateCount === \"number\" && Number.isFinite(payload.candidateCount) ? payload.candidateCount : projectIds.length,\n      projectIds\n    };\n  }\n  if (payload.projectId && payload.appId) {\n    return {\n      status: \"resolved\",\n      projectId: String(payload.projectId),\n      appId: String(payload.appId),\n      upstreamAppId: String(payload.upstreamAppId ?? payload.appId),\n      threadId: payload.threadId ? String(payload.threadId) : null\n    };\n  }\n  return { status: \"not_found\" };\n}\nfunction throwAmbiguousFamilyError(params) {\n  const familyCount = params.candidateCount || params.projectIds.length;\n  const projectHint = params.projectIds.length > 0 ? ` Matching project ids: ${params.projectIds.join(\", \")}.` : \"\";\n  const remoteHint = params.remoteUrl ? ` (${params.remoteUrl})` : \"\";\n  throw new RemixError(\"Multiple canonical Remix families already match this repository.\", {\n    exitCode: 2,\n    hint: `Plain \\`remix collab init\\` cannot safely choose among ${familyCount} matching canonical families for repo fingerprint ${params.repoFingerprint}${remoteHint}.${projectHint} Run \\`remix collab init --force-new\\` to create a new canonical family, or continue from a checkout already bound to the intended family.`\n  });\n}\nasync function resolveOrEnsureLaneBinding(params) {\n  const resolvePayload = {\n    projectId: params.projectId ?? void 0,\n    repoFingerprint: params.repoFingerprint,\n    remoteUrl: params.remoteUrl ?? void 0,\n    defaultBranch: params.defaultBranch ?? void 0,\n    branchName: params.branchName\n  };\n  let lane = unwrapResponseObject(\n    await params.api.resolveProjectLaneBinding(resolvePayload),\n    \"project lane binding\"\n  );\n  if (lane.status !== \"resolved\") {\n    lane = unwrapResponseObject(\n      await params.api.ensureProjectLaneBinding({\n        ...resolvePayload,\n        seedAppId: params.seedAppId ?? void 0,\n        seedHeadCommitHash: params.seedHeadCommitHash ?? void 0\n      }),\n      \"project lane binding\"\n    );\n  }\n  return requireResolvedLaneBinding(lane, {\n    branchName: params.branchName,\n    operation: params.operation\n  });\n}\nfunction branchBindingFromLane(lane, mode, fallback) {\n  return {\n    projectId: lane.projectId ?? fallback.projectId,\n    currentAppId: lane.currentAppId ?? fallback.currentAppId,\n    upstreamAppId: lane.upstreamAppId ?? fallback.upstreamAppId,\n    threadId: lane.threadId ?? fallback.threadId,\n    laneId: lane.laneId ?? null,\n    bindingMode: mode\n  };\n}\n\n// src/application/collab/collabInitAsync.ts\nimport { randomUUID as randomUUID5 } from \"crypto\";\n\n// src/infrastructure/collab/drainerLog.ts\nimport fs9 from \"fs/promises\";\nimport path9 from \"path\";\nasync function logDrainerEvent(jobId, event, fields = {}) {\n  const entry = {\n    ts: (/* @__PURE__ */ new Date()).toISOString(),\n    jobId,\n    event,\n    ...fields\n  };\n  try {\n    await fs9.mkdir(getLogsRoot(), { recursive: true });\n    await fs9.appendFile(getDrainerLogPath(), `${JSON.stringify(entry)}\n`, \"utf8\");\n  } catch {\n  }\n}\nfunction drainerLogPath() {\n  return getDrainerLogPath();\n}\n\n// src/application/collab/collabInitAsync.ts\nasync function resolvePendingAsyncInitResult(params) {\n  if (shouldReplaceAsyncInitJobs({ forceNew: params.forceNew })) {\n    for (const kind of [\"init\", \"init_post\"]) {\n      const existing = await listAsyncJobsForRepo({ repoRoot: params.repoRoot, branchName: params.branchName, kind });\n      for (const job of existing) {\n        await deleteAsyncJob(job.id);\n        await logDrainerEvent(job.id, \"replaced\", {\n          kind,\n          reason: \"force_new\",\n          previousStatus: job.status,\n          previousError: job.error\n        });\n      }\n    }\n    return null;\n  }\n  const pendingPost = await findPendingAsyncJob({ repoRoot: params.repoRoot, branchName: params.branchName, kind: \"init_post\" });\n  const pending = pendingPost ?? await findPendingAsyncJob({ repoRoot: params.repoRoot, branchName: params.branchName, kind: \"init\" });\n  if (!shouldReturnPendingAsyncInit({ forceNew: params.forceNew, pendingJobFound: Boolean(pending) }) || !pending) {\n    return null;\n  }\n  const existingBinding = await readCollabBinding(params.repoRoot);\n  if (existingBinding && existingBinding.currentAppId) {\n    return {\n      queued: true,\n      jobId: pending.id,\n      repoRoot: params.repoRoot,\n      projectId: existingBinding.projectId ?? \"\",\n      appId: existingBinding.currentAppId,\n      upstreamAppId: existingBinding.upstreamAppId ?? existingBinding.currentAppId,\n      dashboardUrl: buildDashboardAppUrl(existingBinding.currentAppId),\n      bindingPath: getCollabBindingPath(params.repoRoot),\n      repoFingerprint: existingBinding.repoFingerprint ?? params.repoFingerprint,\n      bindingMode: existingBinding.bindingMode,\n      createdCanonicalFamily: false,\n      remoteUrl: existingBinding.remoteUrl ?? params.remoteUrl,\n      defaultBranch: existingBinding.defaultBranch ?? params.defaultBranch ?? null,\n      ...params.warnings.length > 0 ? { warnings: params.warnings } : {}\n    };\n  }\n  return {\n    queued: true,\n    jobId: pending.id,\n    repoRoot: params.repoRoot,\n    projectId: \"\",\n    appId: \"\",\n    upstreamAppId: \"\",\n    dashboardUrl: \"\",\n    bindingPath: getCollabBindingPath(params.repoRoot),\n    repoFingerprint: params.repoFingerprint,\n    bindingMode: \"lane\",\n    createdCanonicalFamily: false,\n    remoteUrl: params.remoteUrl,\n    defaultBranch: params.defaultBranch ?? null,\n    ...params.warnings.length > 0 ? { warnings: params.warnings } : {}\n  };\n}\nasync function clearFailedAsyncInitJobs(params) {\n  if (params.forceNew) return;\n  const failed = await findFailedAsyncJob({ repoRoot: params.repoRoot, branchName: params.branchName, kind: \"init\" });\n  if (failed) {\n    await deleteAsyncJob(failed.id);\n  }\n  const failedPost = await findFailedAsyncJob({ repoRoot: params.repoRoot, branchName: params.branchName, kind: \"init_post\" });\n  if (failedPost) {\n    await deleteAsyncJob(failedPost.id);\n  }\n}\nasync function enqueueInitPostJob(params) {\n  const job = await enqueueAsyncJob({\n    id: randomUUID5(),\n    kind: \"init_post\",\n    status: \"queued\",\n    repoRoot: params.repoRoot,\n    repoFingerprint: params.repoFingerprint,\n    branchName: params.branchName,\n    laneId: params.laneId,\n    retryCount: 0,\n    error: null,\n    idempotencyKey: null,\n    payload: {\n      appId: params.appId,\n      syncPhaseStartedAt: params.syncPhaseStartedAt,\n      syncPhaseFinishedAt: params.syncPhaseFinishedAt\n    }\n  });\n  await logDrainerEvent(job.id, \"submitted\", {\n    kind: \"init_post\",\n    appId: params.appId,\n    [\"init.sync_phase_ms\"]: params.syncPhaseFinishedAt - params.syncPhaseStartedAt\n  });\n  return job;\n}\n\n// src/application/collab/collabInitImport.ts\nimport fs11 from \"fs/promises\";\nimport path10 from \"path\";\n\n// src/shared/upload.ts\nimport fs10 from \"fs\";\nimport { PassThrough } from \"stream\";\nasync function uploadPresigned(params) {\n  const stats = await fs10.promises.stat(params.filePath).catch(() => null);\n  if (!stats || !stats.isFile()) {\n    throw new RemixError(\"Upload file not found.\", { exitCode: 2 });\n  }\n  const totalBytes = stats.size;\n  const fileStream = fs10.createReadStream(params.filePath);\n  const pass = new PassThrough();\n  let sentBytes = 0;\n  fileStream.on(\"data\", (chunk) => {\n    sentBytes += chunk.length;\n    params.onProgress?.({ sentBytes, totalBytes });\n  });\n  fileStream.on(\"error\", (err) => pass.destroy(err));\n  fileStream.pipe(pass);\n  const response = await fetch(params.uploadUrl, {\n    method: \"PUT\",\n    headers: params.headers,\n    body: pass,\n    duplex: \"half\"\n  });\n  if (!response.ok) {\n    const text = await response.text().catch(() => \"\");\n    throw new RemixError(\"Upload failed.\", {\n      exitCode: 1,\n      hint: `Status: ${response.status}\n${text}`.trim() || null\n    });\n  }\n}\n\n// src/application/collab/collabInitImport.ts\nasync function uploadInitBundle(params) {\n  const bundleName = params.bundleName ?? path10.basename(params.bundlePath);\n  const bundleSize = (await fs11.stat(params.bundlePath)).size;\n  const presignResp = await params.api.presignImportUploadFirstParty({\n    file: {\n      name: bundleName,\n      mimeType: \"application/x-git-bundle\",\n      size: bundleSize,\n      checksumSha256: params.bundleSha\n    }\n  });\n  const presign = unwrapResponseObject(presignResp, \"upload\");\n  await uploadPresigned({\n    uploadUrl: String(presign.uploadUrl),\n    headers: presign.headers ?? {},\n    filePath: params.bundlePath\n  });\n  return String(presign.uploadId);\n}\nasync function importUploadedInitBundle(params) {\n  const importPayload = {\n    uploadId: params.uploadId,\n    appName: params.appName,\n    platform: \"generic\",\n    profile: params.profile ?? void 0,\n    isPublic: false,\n    branch: params.branch ?? void 0,\n    remoteUrl: params.remoteUrl ?? void 0,\n    defaultBranch: params.defaultBranch ?? void 0,\n    repoFingerprint: params.repoFingerprint,\n    headCommitHash: params.headCommitHash,\n    forceNew: params.forceNew\n  };\n  if (\"path\" in params) {\n    importPayload.path = params.path?.trim() || void 0;\n  }\n  const importResp = await params.api.importFromUploadFirstParty(importPayload);\n  return unwrapResponseObject(importResp, \"import\");\n}\n\n// src/application/collab/collabInit.ts\nasync function collabInit(params) {\n  return withRepoMutationLock(\n    {\n      cwd: params.cwd,\n      operation: \"collabInit\"\n    },\n    async ({ repoRoot, warnings }) => {\n      await ensureGitInfoExcludeEntries(repoRoot, [\".remix/\"]);\n      if (params.path?.trim()) {\n        throw new RemixError(\"`remix collab init --path` is not supported.\", {\n          exitCode: 2,\n          hint: \"History-preserving init imports the full git repository. Run the command from the repository root without --path.\"\n        });\n      }\n      const localBindingState = await readCollabBindingState(repoRoot, { persist: true });\n      const hasExistingBinding = localBindingState != null && Object.keys(localBindingState.branchBindings ?? {}).length > 0;\n      if (shouldRequireCleanWorktreeForInit({ forceNew: params.forceNew, hasExistingBinding })) {\n        await ensureCleanWorktree(repoRoot, \"`remix collab init`\");\n      }\n      const persistedRemoteUrl = normalizeGitRemote(localBindingState?.remoteUrl ?? null);\n      const currentBranch = await getCurrentBranch(repoRoot);\n      const defaultBranch = localBindingState?.defaultBranch ?? await getDefaultBranch(repoRoot) ?? currentBranch;\n      const branchName = currentBranch ?? defaultBranch ?? null;\n      const localHeadCommitHash = await getHeadCommitHash(repoRoot);\n      const remoteUrl = persistedRemoteUrl ?? normalizeGitRemote(await getRemoteOriginUrl(repoRoot));\n      const repoFingerprint = localBindingState?.repoFingerprint ?? await buildRepoFingerprint({ gitRoot: repoRoot, remoteUrl, defaultBranch });\n      const repoSnapshot = await captureRepoSnapshot(repoRoot);\n      if (params.asyncSubmit) {\n        const pendingResult = await resolvePendingAsyncInitResult({\n          forceNew: params.forceNew,\n          repoRoot,\n          branchName,\n          repoFingerprint,\n          remoteUrl,\n          defaultBranch: defaultBranch ?? null,\n          warnings\n        });\n        if (pendingResult) {\n          return pendingResult;\n        }\n      }\n      if (!params.forceNew && localBindingState?.explicitRootBinding && branchName) {\n        const explicitRoot = localBindingState.explicitRootBinding;\n        const explicitProjectId = explicitRoot.projectId ?? localBindingState.projectId;\n        let canonicalLane2 = null;\n        let boundProjectId2 = explicitProjectId;\n        let boundCurrentAppId2 = explicitRoot.currentAppId;\n        let boundUpstreamAppId2 = explicitRoot.upstreamAppId;\n        let boundThreadId2 = explicitRoot.threadId;\n        let boundLaneId2 = explicitRoot.laneId;\n        if (defaultBranch && branchName !== defaultBranch) {\n          canonicalLane2 = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: explicitProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName: defaultBranch,\n            operation: \"`remix collab init`\"\n          });\n          const lane = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: canonicalLane2.projectId ?? explicitProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            seedHeadCommitHash: localHeadCommitHash,\n            operation: \"`remix collab init`\"\n          });\n          boundProjectId2 = lane.projectId ?? boundProjectId2;\n          boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n          boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n          boundThreadId2 = lane.threadId ?? boundThreadId2;\n          boundLaneId2 = lane.laneId ?? null;\n        } else {\n          canonicalLane2 = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: explicitProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            operation: \"`remix collab init`\"\n          });\n          boundProjectId2 = canonicalLane2.projectId ?? boundProjectId2;\n          boundCurrentAppId2 = canonicalLane2.currentAppId ?? boundCurrentAppId2;\n          boundUpstreamAppId2 = canonicalLane2.upstreamAppId ?? boundUpstreamAppId2;\n          boundThreadId2 = canonicalLane2.threadId ?? boundThreadId2;\n          boundLaneId2 = canonicalLane2.laneId ?? null;\n        }\n        const readyApp = await pollAppImported(params.api, boundCurrentAppId2);\n        boundProjectId2 = String(readyApp.projectId ?? boundProjectId2);\n        boundThreadId2 = readyApp.threadId ? String(readyApp.threadId) : boundThreadId2;\n        await assertRepoSnapshotUnchanged(repoRoot, repoSnapshot, {\n          operation: \"`remix collab init`\",\n          recoveryHint: \"The repository changed while the local binding was being initialized. Review the local changes and rerun `remix collab init`.\"\n        });\n        await writeCollabBinding(repoRoot, {\n          projectId: canonicalLane2?.projectId ?? explicitProjectId ?? null,\n          currentAppId: canonicalLane2?.currentAppId ?? explicitRoot.currentAppId,\n          upstreamAppId: canonicalLane2?.upstreamAppId ?? canonicalLane2?.currentAppId ?? explicitRoot.upstreamAppId ?? explicitRoot.currentAppId,\n          threadId: canonicalLane2?.threadId ?? explicitRoot.threadId,\n          repoFingerprint: canonicalLane2?.repoFingerprint ?? explicitRoot.repoFingerprint ?? repoFingerprint,\n          remoteUrl: canonicalLane2?.remoteUrl ?? explicitRoot.remoteUrl ?? remoteUrl,\n          defaultBranch: canonicalLane2?.defaultBranch ?? explicitRoot.defaultBranch ?? defaultBranch ?? null,\n          laneId: canonicalLane2?.laneId ?? explicitRoot.laneId,\n          branchName: defaultBranch,\n          bindingMode: \"explicit_root\"\n        });\n        if (defaultBranch && branchName !== defaultBranch) {\n          await writeCollabBinding(repoRoot, {\n            projectId: boundProjectId2,\n            currentAppId: boundCurrentAppId2,\n            upstreamAppId: boundUpstreamAppId2,\n            threadId: boundThreadId2,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch: defaultBranch ?? null,\n            laneId: boundLaneId2,\n            branchName,\n            bindingMode: \"lane\"\n          });\n        }\n        return {\n          reused: true,\n          projectId: boundProjectId2 ?? explicitProjectId ?? \"\",\n          appId: boundCurrentAppId2,\n          dashboardUrl: buildDashboardAppUrl(boundCurrentAppId2),\n          upstreamAppId: boundUpstreamAppId2,\n          bindingPath: path11.join(repoRoot, \".remix\", \"config.json\"),\n          repoRoot,\n          repoFingerprint,\n          bindingMode: defaultBranch && branchName !== defaultBranch ? \"lane\" : \"explicit_root\",\n          createdCanonicalFamily: false,\n          baselineStatus: await resolveInitBaselineStatus({\n            api: params.api,\n            repoRoot,\n            repoFingerprint,\n            laneId: boundLaneId2,\n            currentAppId: boundCurrentAppId2,\n            upstreamAppId: boundUpstreamAppId2,\n            branchName,\n            remoteUrl,\n            defaultBranch\n          }),\n          ...warnings.length > 0 ? { warnings } : {}\n        };\n      }\n      const storedBindingAnchor = localBindingState && branchName ? resolveStoredBindingAnchor({\n        state: localBindingState,\n        currentBranch,\n        defaultBranch\n      }) : null;\n      if (!params.forceNew && localBindingState && storedBindingAnchor && branchName) {\n        const existingBinding = storedBindingAnchor.binding;\n        const existingProjectId = existingBinding.projectId ?? localBindingState.projectId;\n        let canonicalLane2 = null;\n        let boundProjectId2 = existingProjectId;\n        let boundCurrentAppId2 = existingBinding.currentAppId;\n        let boundUpstreamAppId2 = existingBinding.upstreamAppId;\n        let boundThreadId2 = existingBinding.threadId;\n        let boundLaneId2 = existingBinding.laneId;\n        if (defaultBranch && branchName !== defaultBranch) {\n          canonicalLane2 = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: existingProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName: defaultBranch,\n            operation: \"`remix collab init`\"\n          });\n          const lane = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: canonicalLane2.projectId ?? existingProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            seedHeadCommitHash: localHeadCommitHash,\n            operation: \"`remix collab init`\"\n          });\n          boundProjectId2 = lane.projectId ?? boundProjectId2;\n          boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n          boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n          boundThreadId2 = lane.threadId ?? boundThreadId2;\n          boundLaneId2 = lane.laneId ?? null;\n        } else {\n          canonicalLane2 = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: existingProjectId ?? void 0,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            operation: \"`remix collab init`\"\n          });\n          boundProjectId2 = canonicalLane2.projectId ?? boundProjectId2;\n          boundCurrentAppId2 = canonicalLane2.currentAppId ?? boundCurrentAppId2;\n          boundUpstreamAppId2 = canonicalLane2.upstreamAppId ?? boundUpstreamAppId2;\n          boundThreadId2 = canonicalLane2.threadId ?? boundThreadId2;\n          boundLaneId2 = canonicalLane2.laneId ?? null;\n        }\n        const readyApp = await pollAppImported(params.api, boundCurrentAppId2);\n        boundProjectId2 = String(readyApp.projectId ?? boundProjectId2);\n        boundThreadId2 = readyApp.threadId ? String(readyApp.threadId) : boundThreadId2;\n        await assertRepoSnapshotUnchanged(repoRoot, repoSnapshot, {\n          operation: \"`remix collab init`\",\n          recoveryHint: \"The repository changed while the local binding was being initialized. Review the local changes and rerun `remix collab init`.\"\n        });\n        if (canonicalLane2 && defaultBranch && branchName !== defaultBranch) {\n          await writeCollabBinding(repoRoot, {\n            projectId: canonicalLane2.projectId ?? existingProjectId ?? null,\n            currentAppId: canonicalLane2.currentAppId ?? existingBinding.currentAppId,\n            upstreamAppId: canonicalLane2.upstreamAppId ?? canonicalLane2.currentAppId ?? existingBinding.upstreamAppId ?? existingBinding.currentAppId,\n            threadId: canonicalLane2.threadId ?? existingBinding.threadId,\n            repoFingerprint: canonicalLane2.repoFingerprint ?? localBindingState.repoFingerprint ?? repoFingerprint,\n            remoteUrl: canonicalLane2.remoteUrl ?? localBindingState.remoteUrl ?? remoteUrl,\n            defaultBranch: canonicalLane2.defaultBranch ?? localBindingState.defaultBranch ?? defaultBranch ?? null,\n            laneId: canonicalLane2.laneId ?? null,\n            branchName: defaultBranch,\n            bindingMode: \"lane\"\n          });\n        }\n        const bindingPath2 = await writeCollabBinding(repoRoot, {\n          projectId: boundProjectId2,\n          currentAppId: boundCurrentAppId2,\n          upstreamAppId: boundUpstreamAppId2,\n          threadId: boundThreadId2,\n          repoFingerprint,\n          remoteUrl,\n          defaultBranch: defaultBranch ?? null,\n          laneId: boundLaneId2,\n          branchName,\n          bindingMode: \"lane\"\n        });\n        return {\n          reused: true,\n          projectId: boundProjectId2 ?? existingProjectId ?? \"\",\n          appId: boundCurrentAppId2,\n          dashboardUrl: buildDashboardAppUrl(boundCurrentAppId2),\n          upstreamAppId: boundUpstreamAppId2,\n          bindingPath: bindingPath2,\n          repoRoot,\n          repoFingerprint,\n          bindingMode: \"lane\",\n          createdCanonicalFamily: false,\n          baselineStatus: await resolveInitBaselineStatus({\n            api: params.api,\n            repoRoot,\n            repoFingerprint,\n            laneId: boundLaneId2,\n            currentAppId: boundCurrentAppId2,\n            upstreamAppId: boundUpstreamAppId2,\n            branchName,\n            remoteUrl,\n            defaultBranch\n          }),\n          ...warnings.length > 0 ? { warnings } : {}\n        };\n      }\n      if (!params.forceNew) {\n        const bindingResolution = resolveProjectBindingResult(\n          await params.api.resolveProjectBinding({\n            repoFingerprint,\n            remoteUrl: remoteUrl ?? void 0,\n            branchName: branchName ?? void 0\n          })\n        );\n        if (bindingResolution.status === \"ambiguous_family_selection\") {\n          throwAmbiguousFamilyError({\n            repoFingerprint,\n            remoteUrl,\n            projectIds: bindingResolution.projectIds,\n            candidateCount: bindingResolution.candidateCount\n          });\n        }\n        if (bindingResolution.status === \"resolved\") {\n          const initialProjectId = bindingResolution.projectId;\n          const initialCurrentAppId = bindingResolution.appId;\n          const initialUpstreamAppId = bindingResolution.upstreamAppId;\n          const initialThreadId = bindingResolution.threadId;\n          let boundProjectId2 = initialProjectId;\n          let boundCurrentAppId2 = initialCurrentAppId;\n          let boundUpstreamAppId2 = initialUpstreamAppId;\n          let boundThreadId2 = initialThreadId;\n          let boundLaneId2 = null;\n          let canonicalLane2 = null;\n          if (branchName) {\n            if (defaultBranch && branchName !== defaultBranch) {\n              canonicalLane2 = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName: defaultBranch,\n                seedAppId: initialCurrentAppId,\n                operation: \"`remix collab init`\"\n              });\n              const lane = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                projectId: canonicalLane2.projectId ?? void 0,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName,\n                seedHeadCommitHash: localHeadCommitHash,\n                operation: \"`remix collab init`\"\n              });\n              boundProjectId2 = lane.projectId ?? boundProjectId2;\n              boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n              boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n              boundThreadId2 = lane.threadId ?? boundThreadId2;\n              boundLaneId2 = lane.laneId ?? null;\n            } else {\n              const lane = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName,\n                seedAppId: initialCurrentAppId,\n                operation: \"`remix collab init`\"\n              });\n              canonicalLane2 = lane;\n              boundProjectId2 = lane.projectId ?? boundProjectId2;\n              boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n              boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n              boundThreadId2 = lane.threadId ?? boundThreadId2;\n              boundLaneId2 = lane.laneId ?? null;\n            }\n          }\n          if (boundCurrentAppId2) {\n            const readyApp = await pollAppImported(params.api, boundCurrentAppId2);\n            boundProjectId2 = String(readyApp.projectId ?? boundProjectId2);\n            boundThreadId2 = readyApp.threadId ? String(readyApp.threadId) : boundThreadId2;\n          }\n          await assertRepoSnapshotUnchanged(repoRoot, repoSnapshot, {\n            operation: \"`remix collab init`\",\n            recoveryHint: \"The repository changed while the local binding was being initialized. Review the local changes and rerun `remix collab init`.\"\n          });\n          if (canonicalLane2 && defaultBranch && branchName && branchName !== defaultBranch) {\n            await writeCollabBinding(repoRoot, {\n              projectId: canonicalLane2.projectId ?? null,\n              currentAppId: canonicalLane2.currentAppId ?? boundCurrentAppId2,\n              upstreamAppId: canonicalLane2.upstreamAppId ?? canonicalLane2.currentAppId ?? boundCurrentAppId2,\n              threadId: canonicalLane2.threadId ?? null,\n              repoFingerprint: canonicalLane2.repoFingerprint ?? repoFingerprint,\n              remoteUrl: canonicalLane2.remoteUrl ?? remoteUrl,\n              defaultBranch: canonicalLane2.defaultBranch ?? defaultBranch,\n              laneId: canonicalLane2.laneId ?? null,\n              branchName: defaultBranch,\n              bindingMode: \"lane\"\n            });\n          }\n          const bindingPath2 = await writeCollabBinding(repoRoot, {\n            projectId: boundProjectId2,\n            currentAppId: boundCurrentAppId2,\n            upstreamAppId: boundUpstreamAppId2,\n            threadId: boundThreadId2,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch: defaultBranch ?? null,\n            laneId: boundLaneId2,\n            branchName,\n            bindingMode: \"lane\"\n          });\n          return {\n            reused: true,\n            projectId: boundProjectId2,\n            appId: boundCurrentAppId2,\n            dashboardUrl: buildDashboardAppUrl(boundCurrentAppId2),\n            upstreamAppId: boundUpstreamAppId2,\n            bindingPath: bindingPath2,\n            repoRoot,\n            repoFingerprint,\n            bindingMode: \"lane\",\n            createdCanonicalFamily: false,\n            baselineStatus: await resolveInitBaselineStatus({\n              api: params.api,\n              repoRoot,\n              repoFingerprint,\n              laneId: boundLaneId2,\n              currentAppId: boundCurrentAppId2,\n              upstreamAppId: boundUpstreamAppId2,\n              branchName,\n              remoteUrl,\n              defaultBranch\n            }),\n            ...warnings.length > 0 ? { warnings } : {}\n          };\n        }\n      }\n      if (params.asyncSubmit) {\n        await clearFailedAsyncInitJobs({ forceNew: params.forceNew, repoRoot, branchName });\n        const syncPhaseStartedAt = Date.now();\n        const { bundlePath: bundleFilePath, headCommitHash: bundledHeadCommitHash } = await createGitBundle(\n          repoRoot,\n          \"repository.bundle\"\n        );\n        const tmpBundleDir = path11.dirname(bundleFilePath);\n        try {\n          const bundleSha2 = await sha256FileHex(bundleFilePath);\n          const uploadId2 = await uploadInitBundle({\n            api: params.api,\n            bundlePath: bundleFilePath,\n            bundleSha: bundleSha2,\n            bundleName: \"repository.bundle\"\n          });\n          const imported2 = await importUploadedInitBundle({\n            api: params.api,\n            uploadId: uploadId2,\n            appName: params.appName?.trim() || path11.basename(repoRoot),\n            profile: params.profile ?? void 0,\n            branch: defaultBranch && branchName && branchName !== defaultBranch ? defaultBranch : currentBranch ?? void 0,\n            remoteUrl,\n            defaultBranch: defaultBranch ?? null,\n            repoFingerprint,\n            headCommitHash: bundledHeadCommitHash,\n            forceNew: params.forceNew\n          });\n          const importedAppId = String(imported2.appId);\n          let boundProjectId2 = String(imported2.projectId ?? \"\");\n          let boundCurrentAppId2 = importedAppId;\n          let boundUpstreamAppId2 = importedAppId;\n          let boundThreadId2 = imported2.threadId ? String(imported2.threadId) : null;\n          let boundLaneId2 = null;\n          let canonicalLane2 = null;\n          if (branchName) {\n            if (defaultBranch && branchName !== defaultBranch) {\n              canonicalLane2 = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                projectId: boundProjectId2 || void 0,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName: defaultBranch,\n                seedAppId: importedAppId,\n                operation: \"`remix collab init`\"\n              });\n              const lane = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                projectId: canonicalLane2.projectId ?? boundProjectId2 ?? void 0,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName,\n                seedHeadCommitHash: bundledHeadCommitHash,\n                operation: \"`remix collab init`\"\n              });\n              boundProjectId2 = lane.projectId ?? boundProjectId2;\n              boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n              boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n              boundThreadId2 = lane.threadId ?? boundThreadId2;\n              boundLaneId2 = lane.laneId ?? null;\n            } else {\n              const lane = await resolveOrEnsureLaneBinding({\n                api: params.api,\n                projectId: boundProjectId2 || void 0,\n                repoFingerprint,\n                remoteUrl,\n                defaultBranch,\n                branchName,\n                seedAppId: importedAppId,\n                operation: \"`remix collab init`\"\n              });\n              canonicalLane2 = lane;\n              boundProjectId2 = lane.projectId ?? boundProjectId2;\n              boundCurrentAppId2 = lane.currentAppId ?? boundCurrentAppId2;\n              boundUpstreamAppId2 = lane.upstreamAppId ?? boundUpstreamAppId2;\n              boundThreadId2 = lane.threadId ?? boundThreadId2;\n              boundLaneId2 = lane.laneId ?? null;\n            }\n          }\n          await assertRepoSnapshotUnchanged(repoRoot, repoSnapshot, {\n            operation: \"`remix collab init`\",\n            recoveryHint: \"The repository changed before the Remix binding was written. Review the local changes and rerun `remix collab init`.\"\n          });\n          const bindingMode2 = defaultBranch && branchName !== defaultBranch ? \"lane\" : \"explicit_root\";\n          let bindingPath2;\n          if (params.forceNew && defaultBranch && canonicalLane2) {\n            const canonicalBinding = branchBindingFromLane(canonicalLane2, \"explicit_root\", {\n              projectId: canonicalLane2.projectId ?? boundProjectId2,\n              currentAppId: canonicalLane2.currentAppId ?? boundCurrentAppId2,\n              upstreamAppId: canonicalLane2.upstreamAppId ?? canonicalLane2.currentAppId ?? boundCurrentAppId2,\n              threadId: canonicalLane2.threadId ?? boundThreadId2\n            });\n            const branchBindings = {\n              [defaultBranch]: canonicalBinding\n            };\n            if (branchName && branchName !== defaultBranch) {\n              branchBindings[branchName] = {\n                projectId: boundProjectId2,\n                currentAppId: boundCurrentAppId2,\n                upstreamAppId: boundUpstreamAppId2,\n                threadId: boundThreadId2,\n                laneId: boundLaneId2,\n                bindingMode: \"lane\"\n              };\n            }\n            bindingPath2 = await writeCollabBindingSnapshot({\n              repoRoot,\n              repoFingerprint,\n              remoteUrl,\n              defaultBranch,\n              branchBindings,\n              explicitRootBinding: canonicalBinding\n            });\n          } else {\n            if (canonicalLane2 && defaultBranch && branchName && branchName !== defaultBranch) {\n              await writeCollabBinding(repoRoot, {\n                projectId: canonicalLane2.projectId ?? null,\n                currentAppId: canonicalLane2.currentAppId ?? boundCurrentAppId2,\n                upstreamAppId: canonicalLane2.upstreamAppId ?? canonicalLane2.currentAppId ?? boundCurrentAppId2,\n                threadId: canonicalLane2.threadId ?? null,\n                repoFingerprint: canonicalLane2.repoFingerprint ?? repoFingerprint,\n                remoteUrl: canonicalLane2.remoteUrl ?? remoteUrl,\n                defaultBranch: canonicalLane2.defaultBranch ?? defaultBranch,\n                laneId: canonicalLane2.laneId ?? null,\n                branchName: defaultBranch,\n                // This branch is reached only when the CURRENT branch is\n                // not the default branch — so the binding being written\n                // here is for the DEFAULT branch (the canonical/main app).\n                // It must always be `explicit_root` regardless of\n                // `forceNew`; the previous `forceNew ? ... : \"lane\"`\n                // produced a `lane`-marked default-branch binding for\n                // every plain init, which silently disabled the\n                // history-import auto-spawn.\n                bindingMode: \"explicit_root\"\n              });\n            }\n            bindingPath2 = await writeCollabBinding(repoRoot, {\n              projectId: boundProjectId2,\n              currentAppId: boundCurrentAppId2,\n              upstreamAppId: boundUpstreamAppId2,\n              threadId: boundThreadId2,\n              repoFingerprint,\n              remoteUrl,\n              defaultBranch: defaultBranch ?? null,\n              laneId: boundLaneId2,\n              branchName,\n              bindingMode: bindingMode2\n            });\n          }\n          const syncPhaseFinishedAt = Date.now();\n          const job = await enqueueInitPostJob({\n            repoRoot,\n            repoFingerprint,\n            branchName,\n            laneId: boundLaneId2,\n            appId: boundCurrentAppId2,\n            syncPhaseStartedAt,\n            syncPhaseFinishedAt\n          });\n          return {\n            queued: true,\n            jobId: job.id,\n            repoRoot,\n            projectId: boundProjectId2,\n            appId: boundCurrentAppId2,\n            upstreamAppId: boundUpstreamAppId2,\n            dashboardUrl: buildDashboardAppUrl(boundCurrentAppId2),\n            bindingPath: bindingPath2,\n            repoFingerprint,\n            bindingMode: bindingMode2,\n            createdCanonicalFamily: Boolean(params.forceNew),\n            remoteUrl,\n            defaultBranch,\n            ...warnings.length > 0 ? { warnings } : {}\n          };\n        } finally {\n          await fs12.rm(tmpBundleDir, { recursive: true, force: true }).catch(() => void 0);\n        }\n      }\n      const { bundlePath, headCommitHash } = await createGitBundle(repoRoot, \"repository.bundle\");\n      const bundleSha = await sha256FileHex(bundlePath);\n      const uploadId = await uploadInitBundle({\n        api: params.api,\n        bundlePath,\n        bundleSha,\n        bundleName: \"repository.bundle\"\n      });\n      const imported = await importUploadedInitBundle({\n        api: params.api,\n        uploadId,\n        appName: params.appName?.trim() || path11.basename(repoRoot),\n        path: params.path?.trim() || void 0,\n        profile: params.profile ?? void 0,\n        branch: defaultBranch && branchName && branchName !== defaultBranch ? defaultBranch : currentBranch ?? void 0,\n        remoteUrl,\n        defaultBranch: defaultBranch ?? null,\n        repoFingerprint,\n        headCommitHash,\n        forceNew: params.forceNew\n      });\n      const app = await pollAppImported(params.api, String(imported.appId));\n      let boundProjectId = String(app.projectId);\n      let boundCurrentAppId = String(app.id);\n      let boundUpstreamAppId = String(app.id);\n      let boundThreadId = app.threadId ? String(app.threadId) : null;\n      let boundLaneId = null;\n      let canonicalLane = null;\n      if (branchName) {\n        if (defaultBranch && branchName !== defaultBranch) {\n          canonicalLane = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: boundProjectId,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName: defaultBranch,\n            seedAppId: String(app.id),\n            operation: \"`remix collab init`\"\n          });\n          const lane = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: canonicalLane.projectId ?? boundProjectId,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            seedHeadCommitHash: headCommitHash,\n            operation: \"`remix collab init`\"\n          });\n          boundProjectId = lane.projectId ?? boundProjectId;\n          boundCurrentAppId = lane.currentAppId ?? boundCurrentAppId;\n          boundUpstreamAppId = lane.upstreamAppId ?? boundUpstreamAppId;\n          boundThreadId = lane.threadId ?? boundThreadId;\n          boundLaneId = lane.laneId ?? null;\n        } else {\n          const lane = await resolveOrEnsureLaneBinding({\n            api: params.api,\n            projectId: boundProjectId,\n            repoFingerprint,\n            remoteUrl,\n            defaultBranch,\n            branchName,\n            seedAppId: String(app.id),\n            operation: \"`remix collab init`\"\n          });\n          canonicalLane = lane;\n          boundProjectId = lane.projectId ?? boundProjectId;\n          boundCurrentAppId = lane.currentAppId ?? boundCurrentAppId;\n          boundUpstreamAppId = lane.upstreamAppId ?? boundUpstreamAppId;\n          boundThreadId = lane.threadId ?? boundThreadId;\n          boundLaneId = lane.laneId ?? null;\n        }\n      }\n      if (boundCurrentAppId) {\n        const readyApp = await pollAppImported(params.api, boundCurrentAppId);\n        boundProjectId = String(readyApp.projectId ?? boundProjectId);\n        boundThreadId = readyApp.threadId ? String(readyApp.threadId) : boundThreadId;\n      }\n      await assertRepoSnapshotUnchanged(repoRoot, repoSnapshot, {\n        operation: \"`remix collab init`\",\n        recoveryHint: \"The repository changed before the Remix binding was written. Review the local changes and rerun `remix collab init`.\"\n      });\n      const bindingMode = defaultBranch && branchName !== defaultBranch ? \"lane\" : \"explicit_root\";\n      let bindingPath;\n      if (params.forceNew && defaultBranch && canonicalLane) {\n        const canonicalBinding = branchBindingFromLane(canonicalLane, \"explicit_root\", {\n          projectId: canonicalLane.projectId ?? boundProjectId,\n          currentAppId: canonicalLane.currentAppId ?? boundCurrentAppId,\n          upstreamAppId: canonicalLane.upstreamAppId ?? canonicalLane.currentAppId ?? boundCurrentAppId,\n          threadId: canonicalLane.threadId ?? boundThreadId\n        });\n        const branchBindings = {\n          [defaultBranch]: canonicalBinding\n        };\n        if (branchName && branchName !== defaultBranch) {\n          branchBindings[branchName] = {\n            projectId: boundProjectId,\n            currentAppId: boundCurrentAppId,\n            upstreamAppId: boundUpstreamAppId,\n            threadId: boundThreadId,\n            laneId: boundLaneId,\n            bindingMode: \"lane\"\n          };\n        }\n        bindingPath = await writeCollabBindingSnapshot({\n          repoRoot,\n          repoFingerprint,\n          remoteUrl,\n          defaultBranch,\n          branchBindings,\n          explicitRootBinding: canonicalBinding\n        });\n      } else {\n        if (canonicalLane && defaultBranch && branchName && branchName !== defaultBranch) {\n          await writeCollabBinding(repoRoot, {\n            projectId: canonicalLane.projectId ?? null,\n            currentAppId: canonicalLane.currentAppId ?? boundCurrentAppId,\n            upstreamAppId: canonicalLane.upstreamAppId ?? canonicalLane.currentAppId ?? boundCurrentAppId,\n            threadId: canonicalLane.threadId ?? null,\n            repoFingerprint: canonicalLane.repoFingerprint ?? repoFingerprint,\n            remoteUrl: canonicalLane.remoteUrl ?? remoteUrl,\n            defaultBranch: canonicalLane.defaultBranch ?? defaultBranch,\n            laneId: canonicalLane.laneId ?? null,\n            branchName: defaultBranch,\n            // Same reasoning as the queued-path default-branch write\n            // above: this is the canonical/main-app binding for the\n            // default branch and must be `explicit_root`, otherwise the\n            // history-import auto-spawn (gated on explicit_root) will\n            // silently no-op for every plain init.\n            bindingMode: \"explicit_root\"\n          });\n        }\n        bindingPath = await writeCollabBinding(repoRoot, {\n          projectId: boundProjectId,\n          currentAppId: boundCurrentAppId,\n          upstreamAppId: boundUpstreamAppId,\n          threadId: boundThreadId,\n          repoFingerprint,\n          remoteUrl,\n          defaultBranch: defaultBranch ?? null,\n          laneId: boundLaneId,\n          branchName,\n          bindingMode\n        });\n      }\n      const baselineStatus = await seedImportedInitBaseline({\n        api: params.api,\n        repoRoot,\n        repoFingerprint,\n        laneId: boundLaneId,\n        currentAppId: boundCurrentAppId,\n        branchName\n      });\n      return {\n        reused: false,\n        projectId: boundProjectId,\n        appId: boundCurrentAppId,\n        dashboardUrl: buildDashboardAppUrl(boundCurrentAppId),\n        upstreamAppId: boundUpstreamAppId,\n        bindingPath,\n        repoRoot,\n        repoFingerprint,\n        bindingMode,\n        createdCanonicalFamily: Boolean(params.forceNew),\n        baselineStatus,\n        remoteUrl,\n        defaultBranch,\n        ...warnings.length > 0 ? { warnings } : {}\n      };\n    }\n  );\n}\nasync function collabInitSubmit(params) {\n  return collabInit({ ...params, asyncSubmit: true });\n}\n\n// src/application/collab/collabInvite.ts\nasync function collabInvite(params) {\n  const scope = params.scope ?? \"project\";\n  const targetId = await resolveScopeTarget({\n    api: params.api,\n    cwd: params.cwd,\n    scope,\n    targetId: params.targetId\n  });\n  const payload = {\n    email: params.email,\n    role: params.role?.trim() || (scope === \"organization\" ? \"member\" : \"viewer\"),\n    ttlDays: params.ttlDays\n  };\n  const resp = scope === \"organization\" ? await params.api.createOrganizationInvite(targetId, payload) : scope === \"project\" ? await params.api.createProjectInvite(targetId, payload) : await params.api.createAppInvite(targetId, payload);\n  const invite = unwrapResponseObject(resp, \"invite\");\n  return {\n    ...invite,\n    scopeType: scope,\n    targetId\n  };\n}\n\n// src/application/collab/collabList.ts\nasync function collabList(params) {\n  const pageRequest = normalizePagination(params);\n  const resp = await params.api.listApps({\n    ownership: params.ownership ?? \"all\",\n    accessScope: params.accessScope ?? \"explicit_member\",\n    createdBy: params.createdBy,\n    forked: params.forked ?? \"all\",\n    limit: pageRequest.limit + 1,\n    offset: pageRequest.offset\n  });\n  const apps = unwrapResponseObject(resp, \"apps\");\n  const page = paginateOverfetchedItems(apps, params);\n  return {\n    apps: page.items,\n    pagination: page.pagination\n  };\n}\n\n// src/application/collab/collabReconcile.ts\nimport fs13 from \"fs/promises\";\nimport os5 from \"os\";\nimport path12 from \"path\";\nimport { execa as execa2 } from \"execa\";\n\n// src/application/collab/pendingFinalize.ts\nfunction hasPendingFinalize(summary) {\n  return Boolean(summary && summary.state !== \"idle\" && summary.activeJobCount > 0);\n}\nfunction buildPendingFinalizeHint() {\n  return \"Drain or await the local finalize queue first, then retry after the queued Remix turn finishes recording remotely.\";\n}\n\n// src/application/collab/reconcileDecision.ts\nfunction classifyReconcileDelta(delta) {\n  if (delta.status === \"conflict_risk\") {\n    return {\n      action: \"metadata_conflict\",\n      message: \"Local repository metadata conflicts with the bound Remix app.\",\n      exitCode: 2,\n      hint: delta.warnings.join(\"\\n\") || \"Run the command from the correct bound repository.\"\n    };\n  }\n  if (delta.status === \"base_unknown\") {\n    return {\n      action: \"base_unknown\",\n      message: \"Reconcile cannot pull the newer server state from the last acknowledged baseline.\",\n      exitCode: 2,\n      hint: \"Run `remix collab init` to seed a fresh revision baseline for this checkout before retrying.\"\n    };\n  }\n  if (delta.status !== \"delta_ready\" && delta.status !== \"up_to_date\") {\n    return {\n      action: \"unsupported_delta\",\n      message: \"Reconcile could not determine the server delta for this lane.\",\n      exitCode: 1,\n      hint: delta.warnings.join(\"\\n\") || \"Run `remix collab status` and retry once the lane is healthy.\"\n    };\n  }\n  return { action: \"ready\" };\n}\nfunction classifyReconcileDetectedState(detected) {\n  if (detected.status === \"metadata_conflict\" || detected.status === \"branch_mismatch\") {\n    return { action: \"realign\", hint: detected.hint };\n  }\n  if (detected.repoState === \"server_only_changed\" || detected.repoState === \"idle\") return { action: \"sync_instead\" };\n  if (detected.repoState === \"both_changed\") return { action: \"reconcile\" };\n  if (detected.repoState === \"external_local_base_changed\") {\n    return { action: \"external_local_base_changed\", hint: detected.hint };\n  }\n  if (detected.repoState === \"local_only_changed\") return { action: \"local_only_finalize\" };\n  return { action: \"not_reconcilable\", hint: detected.hint };\n}\nfunction shouldApplyServerDeltaBeforeReplay(params) {\n  return params.deltaStatus === \"delta_ready\" && params.diff.trim().length > 0;\n}\n\n// src/application/collab/collabReconcile.ts\nasync function reconcileBothChanged(params) {\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await ensureActiveLaneBinding({\n    repoRoot,\n    api: params.api,\n    operation: \"`remix collab reconcile`\"\n  });\n  if (!binding) {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` first.\"\n    });\n  }\n  const branch = await requireCurrentBranch(repoRoot);\n  const baseline = await readLocalBaseline({\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    repoRoot\n  });\n  if (!baseline?.lastSnapshotId || !baseline.lastServerHeadHash) {\n    throw new RemixError(\"Local Remix baseline is missing for this lane.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` or sync from a checkout with a valid revision baseline first.\"\n    });\n  }\n  const currentSnapshot = await captureLocalSnapshot({\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    branchName: binding.branchName\n  });\n  const diffResult = await diffLocalSnapshots({\n    baseSnapshotId: baseline.lastSnapshotId,\n    targetSnapshotId: currentSnapshot.id\n  });\n  if (!diffResult.diff.trim()) {\n    throw new RemixError(\"No local boundary delta was found to reconcile.\", {\n      exitCode: 2,\n      hint: \"Pull the server delta locally, or make local changes before running `remix collab reconcile`.\"\n    });\n  }\n  const [appHeadResp, deltaResp, repoSnapshot] = await Promise.all([\n    params.api.getAppHead(binding.currentAppId),\n    params.api.getAppDelta(binding.currentAppId, {\n      baseHeadHash: baseline.lastServerHeadHash,\n      baseRevisionId: baseline.lastServerRevisionId,\n      repoFingerprint: binding.repoFingerprint ?? void 0,\n      remoteUrl: binding.remoteUrl ?? void 0,\n      defaultBranch: binding.defaultBranch ?? void 0\n    }),\n    captureRepoSnapshot(repoRoot, { includeWorkspaceDiffHash: true })\n  ]);\n  const appHead = unwrapResponseObject(appHeadResp, \"app head\");\n  const delta = unwrapResponseObject(deltaResp, \"app delta\");\n  const deltaDecision = classifyReconcileDelta(delta);\n  if (deltaDecision.action !== \"ready\") {\n    throw new RemixError(deltaDecision.message, {\n      exitCode: deltaDecision.exitCode,\n      hint: deltaDecision.hint\n    });\n  }\n  const preview = {\n    status: \"ready_to_reconcile\",\n    repoRoot,\n    branch,\n    currentAppId: binding.currentAppId,\n    localHeadCommitHash: currentSnapshot.localCommitHash,\n    baseHeadCommitHash: baseline.lastServerHeadHash,\n    targetHeadCommitHash: appHead.headCommitHash,\n    targetHeadCommitId: appHead.headCommitId,\n    stats: diffResult.stats,\n    warnings: delta.warnings,\n    applied: false,\n    dryRun: params.dryRun\n  };\n  if (params.dryRun) {\n    return preview;\n  }\n  const replayResp = await params.api.startChangeStepReplay(binding.currentAppId, {\n    prompt: \"Reconcile local boundary delta onto the latest server head.\",\n    assistantResponse: \"Replay the local boundary delta onto the latest server head without recording a new change step.\",\n    diff: diffResult.diff,\n    baseCommitHash: baseline.lastServerHeadHash,\n    baseRevisionId: baseline.lastServerRevisionId,\n    targetHeadCommitHash: appHead.headCommitHash,\n    targetRevisionId: appHead.headRevisionId,\n    expectedPaths: diffResult.changedPaths,\n    workspaceMetadata: {\n      recordingMode: \"boundary_delta\",\n      repoRoot,\n      branch,\n      baselineSnapshotId: baseline.lastSnapshotId,\n      currentSnapshotId: currentSnapshot.id,\n      baselineServerRevisionId: baseline.lastServerRevisionId,\n      baselineServerHeadHash: baseline.lastServerHeadHash,\n      currentSnapshotHash: currentSnapshot.snapshotHash,\n      localCommitHash: currentSnapshot.localCommitHash,\n      repoStateAtCapture: \"both_changed\"\n    },\n    idempotencyKey: buildDeterministicIdempotencyKey({\n      kind: \"collab_reconcile_replay_v1\",\n      appId: binding.currentAppId,\n      baseCommitHash: baseline.lastServerHeadHash,\n      targetHeadCommitHash: appHead.headCommitHash,\n      currentSnapshotId: currentSnapshot.id,\n      diffSha256: diffResult.diffSha256\n    })\n  });\n  const replayStart = unwrapResponseObject(replayResp, \"change step replay\");\n  const replay = await pollChangeStepReplay(params.api, binding.currentAppId, String(replayStart.id));\n  const replayDiffResp = await params.api.getChangeStepReplayDiff(binding.currentAppId, replay.id);\n  const replayDiff = unwrapResponseObject(replayDiffResp, \"change step replay diff\");\n  const tempRoot = await fs13.mkdtemp(path12.join(os5.tmpdir(), \"remix-reconcile-\"));\n  let serverHeadSnapshot = null;\n  let mergedSnapshot = null;\n  try {\n    const tempRepoRoot = path12.join(tempRoot, \"repo\");\n    await fs13.mkdir(tempRepoRoot, { recursive: true });\n    await execa2(\"git\", [\"init\"], { cwd: tempRepoRoot, stderr: \"ignore\" });\n    await materializeLocalSnapshot(baseline.lastSnapshotId, tempRepoRoot);\n    if (shouldApplyServerDeltaBeforeReplay({ deltaStatus: delta.status, diff: delta.diff })) {\n      await applyUnifiedDiffToWorktree(tempRepoRoot, delta.diff, \"`remix collab reconcile`\");\n    }\n    serverHeadSnapshot = await captureLocalSnapshot({\n      repoRoot: tempRepoRoot,\n      repoFingerprint: binding.repoFingerprint,\n      laneId: binding.laneId,\n      branchName: binding.branchName\n    });\n    if (replayDiff.diff.trim()) {\n      await applyUnifiedDiffToWorktree(tempRepoRoot, replayDiff.diff, \"`remix collab reconcile`\");\n    }\n    mergedSnapshot = await captureLocalSnapshot({\n      repoRoot: tempRepoRoot,\n      repoFingerprint: binding.repoFingerprint,\n      laneId: binding.laneId,\n      branchName: binding.branchName\n    });\n  } finally {\n    await fs13.rm(tempRoot, { recursive: true, force: true }).catch(() => void 0);\n  }\n  if (!serverHeadSnapshot || !mergedSnapshot) {\n    throw new RemixError(\"Failed to materialize the reconciled local workspace.\", { exitCode: 1 });\n  }\n  const workspaceChanged = currentSnapshot.snapshotHash !== mergedSnapshot.snapshotHash;\n  return withRepoMutationLock(\n    {\n      cwd: repoRoot,\n      operation: \"collabReconcile\"\n    },\n    async ({ repoRoot: lockedRepoRoot, warnings }) => {\n      await assertRepoSnapshotUnchanged(lockedRepoRoot, repoSnapshot, {\n        operation: \"`remix collab reconcile`\",\n        recoveryHint: \"The repository changed while reconcile was preparing the replay. Review the local changes and rerun `remix collab reconcile`.\"\n      });\n      await restoreLocalSnapshotToWorktree(mergedSnapshot.id, lockedRepoRoot);\n      const restoredSnapshot = await captureLocalSnapshot({\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branchName: binding.branchName\n      });\n      if (restoredSnapshot.snapshotHash !== mergedSnapshot.snapshotHash) {\n        throw new RemixError(\"Failed to restore the reconciled workspace into the local checkout.\", {\n          exitCode: 1,\n          hint: \"The local worktree did not match the reconciled snapshot after restore.\"\n        });\n      }\n      await writeLocalBaseline({\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        currentAppId: binding.currentAppId,\n        branchName: binding.branchName,\n        lastSnapshotId: serverHeadSnapshot.id,\n        lastSnapshotHash: serverHeadSnapshot.snapshotHash,\n        lastServerRevisionId: appHead.headRevisionId ?? null,\n        lastServerTreeHash: appHead.treeHash ?? null,\n        lastServerHeadHash: appHead.headCommitHash,\n        lastSeenLocalCommitHash: restoredSnapshot.localCommitHash\n      });\n      const reportResult = await reportAlignedCheckoutState({\n        api: params.api,\n        appId: binding.currentAppId,\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branch,\n        baselineRevisionId: appHead.headRevisionId ?? null,\n        serverRevisionId: appHead.headRevisionId ?? null,\n        localHeadHash: restoredSnapshot.localCommitHash,\n        serverHeadCommitId: appHead.headCommitId,\n        serverHeadHash: appHead.headCommitHash,\n        source: \"reconcile_apply\"\n      });\n      const eventResult = await recordLocalAlignmentEvent({\n        api: params.api,\n        appId: binding.currentAppId,\n        eventKind: \"reconcile_local\",\n        branch,\n        collabLaneId: binding.laneId,\n        baseRevisionId: baseline.lastServerRevisionId,\n        targetRevisionId: appHead.headRevisionId ?? null,\n        resultRevisionId: appHead.headRevisionId ?? null,\n        baseHeadHash: baseline.lastServerHeadHash,\n        targetHeadCommitId: appHead.headCommitId,\n        targetHeadHash: appHead.headCommitHash,\n        resultHeadHash: appHead.headCommitHash,\n        changedFilesCount: diffResult.stats.changedFilesCount,\n        insertions: diffResult.stats.insertions,\n        deletions: diffResult.stats.deletions,\n        localCommitCount: 0,\n        summary: \"Reconciled local checkout with Remix.\",\n        idempotencyKey: buildDeterministicIdempotencyKey({\n          kind: \"collab_reconcile_local_alignment_v1\",\n          appId: binding.currentAppId,\n          laneId: binding.laneId,\n          baseRevisionId: baseline.lastServerRevisionId,\n          targetRevisionId: appHead.headRevisionId ?? null,\n          baseHeadHash: baseline.lastServerHeadHash,\n          targetHeadHash: appHead.headCommitHash,\n          localDiffSha256: diffResult.diffSha256,\n          replayId: replay.id\n        })\n      });\n      const mergedWarnings = Array.from(/* @__PURE__ */ new Set([...delta.warnings, ...warnings, ...reportResult.warnings, ...eventResult.warnings]));\n      return {\n        ...preview,\n        status: \"reconciled\",\n        localHeadCommitHash: restoredSnapshot.localCommitHash,\n        applied: workspaceChanged,\n        dryRun: false,\n        ...mergedWarnings.length > 0 ? { warnings: mergedWarnings } : {}\n      };\n    }\n  );\n}\nasync function collabReconcile(params) {\n  const detected = await collabDetectRepoState({\n    api: params.api,\n    cwd: params.cwd,\n    allowBranchMismatch: params.allowBranchMismatch\n  });\n  const detectedDecision = classifyReconcileDetectedState({\n    status: detected.status,\n    repoState: detected.repoState,\n    hint: detected.hint\n  });\n  if (detectedDecision.action === \"realign\") {\n    throw new RemixError(\"Repository must be realigned before reconciliation.\", {\n      exitCode: 2,\n      hint: detectedDecision.hint\n    });\n  }\n  if (detectedDecision.action === \"sync_instead\") {\n    return collabSync(params);\n  }\n  if (detectedDecision.action === \"reconcile\") {\n    return reconcileBothChanged(params);\n  }\n  if (detectedDecision.action === \"external_local_base_changed\") {\n    throw new RemixError(\"This checkout needs a local Remix revision baseline before reconciliation.\", {\n      exitCode: 2,\n      hint: detectedDecision.hint || \"Run `remix collab init` or `remix collab sync` to seed the baseline.\"\n    });\n  }\n  if (detectedDecision.action === \"local_only_finalize\") {\n    if (hasPendingFinalize(detected.pendingFinalize)) {\n      throw new RemixError(\"Reconcile is not needed while queued Remix turn recording is still processing.\", {\n        exitCode: 2,\n        hint: buildPendingFinalizeHint()\n      });\n    }\n    throw new RemixError(\"Reconcile is not needed while only local boundary changes are pending.\", {\n      exitCode: 2,\n      hint: \"Record the local work with `remix collab finalize-turn` instead.\"\n    });\n  }\n  throw new RemixError(detected.hint || \"Repository is not ready for reconciliation.\", {\n    exitCode: 2,\n    hint: detected.hint\n  });\n}\n\n// src/application/collab/collabReject.ts\nasync function collabReject(params) {\n  const resp = await params.api.updateMergeRequest(params.mrId, { status: \"rejected\" });\n  return unwrapResponseObject(resp, \"merge request\");\n}\n\n// src/application/collab/collabRemix.ts\nasync function collabRemix(params) {\n  const sourceAppId = params.appId?.trim() || null;\n  if (!sourceAppId) {\n    throw new RemixError(\"No source app selected.\", {\n      exitCode: 2,\n      hint: \"Pass the source app id to remix.\"\n    });\n  }\n  const sourceApp = await pollAppReady(params.api, sourceAppId);\n  const sourceCollab = sourceApp.collab && typeof sourceApp.collab === \"object\" ? sourceApp.collab : null;\n  const sourceSource = sourceApp.source && typeof sourceApp.source === \"object\" ? sourceApp.source : null;\n  const sourceBranchName = typeof sourceCollab?.branchName === \"string\" && sourceCollab.branchName.trim() || typeof sourceSource?.branch === \"string\" && sourceSource.branch.trim() || typeof sourceSource?.defaultBranch === \"string\" && sourceSource.defaultBranch.trim() || void 0;\n  const forkResp = await params.api.forkApp(sourceAppId, {\n    name: params.name?.trim() || void 0,\n    platform: \"generic\",\n    branchName: sourceBranchName\n  });\n  const forked = unwrapResponseObject(forkResp, \"fork\");\n  const app = await pollAppReady(params.api, String(forked.id));\n  const collab = app.collab && typeof app.collab === \"object\" ? app.collab : null;\n  const source = app.source && typeof app.source === \"object\" ? app.source : null;\n  const authoritativeBranchName = typeof collab?.branchName === \"string\" && collab.branchName.trim() || typeof source?.branch === \"string\" && source.branch.trim() || typeof source?.defaultBranch === \"string\" && source.defaultBranch.trim() || sourceBranchName || null;\n  const authoritativeRemoteUrl = typeof source?.remoteUrl === \"string\" && source.remoteUrl.trim() || null;\n  const authoritativeDefaultBranch = typeof source?.defaultBranch === \"string\" && source.defaultBranch.trim() || null;\n  const checkout = await materializeAppCheckout({\n    api: params.api,\n    cwd: params.cwd,\n    appId: String(app.id),\n    outputDir: params.outputDir ?? null,\n    defaultDirName: sanitizeCheckoutDirName(String(params.name?.trim() || app.name || app.id)),\n    expectedBranchName: authoritativeBranchName,\n    expectedRemoteUrl: authoritativeRemoteUrl,\n    expectedDefaultBranch: authoritativeDefaultBranch,\n    onPhase: params.onPhase\n  });\n  const laneId = typeof collab?.laneId === \"string\" ? collab.laneId : null;\n  const repoFingerprint = typeof source?.repoFingerprint === \"string\" ? source.repoFingerprint : checkout.repoFingerprint;\n  const remoteUrl = typeof source?.remoteUrl === \"string\" ? source.remoteUrl : checkout.remoteUrl;\n  const defaultBranch = typeof source?.defaultBranch === \"string\" ? source.defaultBranch : checkout.defaultBranch;\n  const branchName = authoritativeBranchName ?? checkout.branchName;\n  const authoritativeLane = await resolveProjectLaneIfAuthoritative(params.api, {\n    projectId: String(app.projectId),\n    repoFingerprint,\n    remoteUrl,\n    defaultBranch,\n    branchName,\n    currentAppId: String(app.id),\n    expectedUpstreamAppId: String(app.forkedFromAppId ?? sourceAppId),\n    createIfMissing: true,\n    seedAppId: String(app.id)\n  });\n  const bindingPath = await writeCollabBinding(checkout.repoRoot, {\n    projectId: authoritativeLane?.projectId ?? String(app.projectId),\n    currentAppId: authoritativeLane?.currentAppId ?? String(app.id),\n    upstreamAppId: authoritativeLane?.upstreamAppId ?? String(app.forkedFromAppId ?? sourceAppId),\n    threadId: authoritativeLane?.threadId ?? (app.threadId ? String(app.threadId) : null),\n    repoFingerprint: authoritativeLane?.repoFingerprint ?? repoFingerprint,\n    remoteUrl: authoritativeLane?.remoteUrl ?? remoteUrl,\n    defaultBranch: authoritativeLane?.defaultBranch ?? defaultBranch,\n    laneId: authoritativeLane?.laneId ?? laneId,\n    branchName: authoritativeLane?.branchName ?? branchName,\n    bindingMode: \"lane\"\n  });\n  const currentAppId = authoritativeLane?.currentAppId ?? String(app.id);\n  const repoFingerprintForBaseline = authoritativeLane?.repoFingerprint ?? repoFingerprint;\n  const laneIdForBaseline = authoritativeLane?.laneId ?? laneId;\n  const branchNameForBaseline = authoritativeLane?.branchName ?? branchName;\n  const appHead = unwrapResponseObject(\n    await params.api.getAppHead(currentAppId),\n    \"app head\"\n  );\n  const snapshot = await captureLocalSnapshot({\n    repoRoot: checkout.repoRoot,\n    repoFingerprint: repoFingerprintForBaseline,\n    laneId: laneIdForBaseline,\n    branchName: branchNameForBaseline\n  });\n  await writeLocalBaseline({\n    repoRoot: checkout.repoRoot,\n    repoFingerprint: repoFingerprintForBaseline,\n    laneId: laneIdForBaseline,\n    currentAppId,\n    branchName: branchNameForBaseline,\n    lastSnapshotId: snapshot.id,\n    lastSnapshotHash: snapshot.snapshotHash,\n    lastServerRevisionId: appHead.headRevisionId ?? null,\n    lastServerTreeHash: appHead.treeHash ?? null,\n    lastServerHeadHash: appHead.headCommitHash,\n    lastSeenLocalCommitHash: snapshot.localCommitHash\n  });\n  return {\n    appId: currentAppId,\n    dashboardUrl: buildDashboardAppUrl(currentAppId),\n    projectId: authoritativeLane?.projectId ?? String(app.projectId),\n    upstreamAppId: authoritativeLane?.upstreamAppId ?? String(app.forkedFromAppId ?? sourceAppId),\n    bindingPath,\n    repoRoot: checkout.repoRoot\n  };\n}\n\n// src/infrastructure/collab/localStateRepository.ts\nvar defaultLocalStateRepository = {\n  baselines: {\n    read: readLocalBaseline,\n    write: writeLocalBaseline,\n    clear: clearLocalBaseline\n  },\n  snapshots: {\n    inspect: inspectLocalSnapshot,\n    capture: captureLocalSnapshot,\n    read: readLocalSnapshot,\n    materialize: materializeLocalSnapshot,\n    restoreToWorktree: restoreLocalSnapshotToWorktree,\n    diff: diffLocalSnapshots\n  },\n  asyncJobs: {\n    enqueue: enqueueAsyncJob,\n    read: readAsyncJob,\n    list: listAsyncJobs,\n    listForRepo: listAsyncJobsForRepo,\n    findPending: findPendingAsyncJob,\n    findFailed: findFailedAsyncJob,\n    update: updateAsyncJob,\n    delete: deleteAsyncJob,\n    claim: claimAsyncJob,\n    summarize: summarizeAsyncJobs,\n    pruneTerminal: pruneTerminalAsyncJobs,\n    getBundleFilePath: getAsyncJobBundleFilePath,\n    await: awaitAsyncJob\n  },\n  finalizeJobs: {\n    enqueue: enqueuePendingFinalizeJob,\n    read: readPendingFinalizeJob,\n    list: listPendingFinalizeJobs,\n    update: updatePendingFinalizeJob,\n    claim: claimPendingFinalizeJob,\n    remove: removePendingFinalizeJob,\n    forget: forgetPendingFinalizeJob,\n    requeue: requeuePendingFinalizeJob,\n    heartbeatLock: heartbeatJobLock,\n    cleanStaleLocks: cleanStaleFinalizeJobLocks,\n    prune: prunePendingFinalizeJobs,\n    summarize: summarizePendingFinalizeJobs\n  },\n  bindings: {\n    getPath: getCollabBindingPath,\n    read: readCollabBinding,\n    readState: readCollabBindingState,\n    write: writeCollabBinding,\n    writeSnapshot: writeCollabBindingSnapshot\n  }\n};\nfunction createLocalStateRepository(overrides = {}) {\n  return {\n    baselines: {\n      ...defaultLocalStateRepository.baselines,\n      ...overrides.baselines\n    },\n    snapshots: {\n      ...defaultLocalStateRepository.snapshots,\n      ...overrides.snapshots\n    },\n    asyncJobs: {\n      ...defaultLocalStateRepository.asyncJobs,\n      ...overrides.asyncJobs\n    },\n    finalizeJobs: {\n      ...defaultLocalStateRepository.finalizeJobs,\n      ...overrides.finalizeJobs\n    },\n    bindings: {\n      ...defaultLocalStateRepository.bindings,\n      ...overrides.bindings\n    }\n  };\n}\n\n// src/application/collab/collabRequestMerge.ts\nvar localState = createLocalStateRepository();\nasync function collabRequestMerge(params) {\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await ensureActiveLaneBinding({\n    repoRoot,\n    api: params.api,\n    operation: \"`remix collab request-merge`\"\n  });\n  if (!binding) {\n    const transition2 = planRequestMergeWorkflowTransition({ hasBinding: false, hasPendingFinalize: false });\n    if (transition2.action === \"require_binding\") {\n      throw new RemixError(\"Repository is not bound to Remix.\", { exitCode: 2 });\n    }\n    throw new RemixError(\"Repository is not bound to Remix.\", { exitCode: 2 });\n  }\n  const pendingFinalize = await localState.finalizeJobs.summarize({\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    currentAppId: binding.currentAppId,\n    laneId: binding.laneId\n  });\n  const transition = planRequestMergeWorkflowTransition({\n    hasBinding: true,\n    hasPendingFinalize: hasPendingFinalize(pendingFinalize)\n  });\n  if (transition.action === \"require_finalize_drain\") {\n    throw new RemixError(\"Pending Remix turn recording still processing.\", {\n      exitCode: 2,\n      hint: buildPendingFinalizeHint()\n    });\n  }\n  const resp = await params.api.openMergeRequest(binding.currentAppId);\n  return unwrapResponseObject(resp, \"merge request\");\n}\n\n// src/application/collab/collabStatus.ts\nfunction isFinalizeQueueBlocking(state) {\n  return state === \"queued\" || state === \"processing\" || state === \"retry_scheduled\" || state === \"awaiting_usage\";\n}\nfunction createBaseStatus() {\n  return {\n    schemaVersion: 1,\n    repo: {\n      isGitRepo: false,\n      repoRoot: null,\n      branch: null,\n      branchMismatch: false,\n      headCommitHash: null,\n      worktree: {\n        isClean: true,\n        entryCount: 0,\n        hasTrackedChanges: false,\n        hasUntrackedFiles: false,\n        preview: []\n      }\n    },\n    binding: {\n      isBound: false,\n      path: null,\n      projectId: null,\n      currentAppId: null,\n      upstreamAppId: null,\n      isRemix: null,\n      threadId: null,\n      repoFingerprint: null,\n      remoteUrl: null,\n      dashboardUrl: null,\n      defaultBranch: null,\n      laneId: null,\n      branchName: null,\n      bindingMode: null\n    },\n    remote: {\n      checked: false,\n      error: null,\n      appStatus: null,\n      incomingOpenMergeRequestCount: null,\n      outgoingOpenMergeRequestCount: null\n    },\n    sync: {\n      checked: false,\n      error: null,\n      canApply: false,\n      status: \"not_available\",\n      blockedReasons: [],\n      warnings: [],\n      targetCommitHash: null,\n      targetCommitId: null,\n      stats: null\n    },\n    reconcile: {\n      checked: false,\n      error: null,\n      canApply: false,\n      status: \"not_available\",\n      blockedReasons: [],\n      warnings: [],\n      targetHeadCommitHash: null,\n      targetHeadCommitId: null\n    },\n    alignment: {\n      checked: false,\n      error: null,\n      repoState: null,\n      canRecordTurn: false,\n      pendingFinalize: {\n        state: \"idle\",\n        activeJobCount: 0,\n        queuedJobCount: 0,\n        processingJobCount: 0,\n        retryScheduledJobCount: 0,\n        awaitingUsageJobCount: 0,\n        failedJobCount: 0,\n        oldestCapturedAt: null,\n        newestCapturedAt: null,\n        nextRetryAt: null,\n        latestError: null\n      },\n      baseline: {\n        lastSnapshotId: null,\n        lastSnapshotHash: null,\n        lastServerRevisionId: null,\n        lastServerTreeHash: null,\n        lastServerHeadHash: null,\n        lastSeenLocalCommitHash: null\n      },\n      current: {\n        snapshotHash: null,\n        serverRevisionId: null,\n        serverTreeHash: null,\n        serverHeadHash: null,\n        serverHeadCommitId: null,\n        localCommitHash: null\n      }\n    },\n    recommendedAction: \"no_action\",\n    warnings: []\n  };\n}\nfunction addWarning(status, message) {\n  const value = String(message ?? \"\").trim();\n  if (!value || status.warnings.includes(value)) return;\n  status.warnings.push(value);\n}\nfunction addBlockedReason(target, reason) {\n  if (!target.blockedReasons.includes(reason)) target.blockedReasons.push(reason);\n}\nfunction countMergeRequests(payload) {\n  if (Array.isArray(payload)) return payload.length;\n  if (!payload || typeof payload !== \"object\") return 0;\n  let total = 0;\n  for (const value of Object.values(payload)) {\n    if (Array.isArray(value)) total += value.length;\n  }\n  return total;\n}\nasync function collabStatus(params) {\n  const status = createBaseStatus();\n  let repoRoot;\n  try {\n    repoRoot = await findGitRoot(params.cwd);\n  } catch (err) {\n    addBlockedReason(status.sync, \"not_git_repo\");\n    addBlockedReason(status.reconcile, \"not_git_repo\");\n    addWarning(status, formatCliErrorDetail(err));\n    return status;\n  }\n  status.repo.isGitRepo = true;\n  status.repo.repoRoot = repoRoot;\n  const [branch, headCommitHash, worktreeStatus, detected] = await Promise.all([\n    getCurrentBranch(repoRoot),\n    getHeadCommitHash(repoRoot),\n    getWorktreeStatus(repoRoot),\n    collabDetectRepoState({ api: params.api ?? void 0, cwd: repoRoot })\n  ]);\n  status.repo.branch = branch;\n  status.repo.headCommitHash = headCommitHash;\n  status.repo.worktree = {\n    isClean: worktreeStatus.isClean,\n    entryCount: worktreeStatus.entries.length,\n    hasTrackedChanges: worktreeStatus.entries.some((entry) => !entry.startsWith(\"??\")),\n    hasUntrackedFiles: worktreeStatus.entries.some((entry) => entry.startsWith(\"??\")),\n    preview: worktreeStatus.entries.slice(0, 10)\n  };\n  if (!status.repo.worktree.isClean) addWarning(status, \"Working tree has local changes.\");\n  if (!branch) addWarning(status, \"Repository is in a detached HEAD state.\");\n  if (!headCommitHash) addWarning(status, \"Failed to resolve local HEAD commit.\");\n  if (detected.binding) {\n    status.binding = {\n      isBound: true,\n      path: getCollabBindingPath(repoRoot),\n      projectId: detected.binding.projectId,\n      currentAppId: detected.binding.currentAppId,\n      upstreamAppId: detected.binding.upstreamAppId,\n      isRemix: detected.binding.currentAppId !== detected.binding.upstreamAppId,\n      threadId: detected.binding.threadId,\n      repoFingerprint: detected.binding.repoFingerprint,\n      remoteUrl: detected.binding.remoteUrl,\n      // Dashboard URL is derived (not stored on the binding) — compute it\n      // here so every status caller, including MCP/agent tools, gets it\n      // alongside `remoteUrl` without having to know the URL convention.\n      dashboardUrl: detected.binding.currentAppId ? buildDashboardAppUrl(detected.binding.currentAppId) : null,\n      defaultBranch: detected.binding.defaultBranch,\n      laneId: detected.binding.laneId,\n      branchName: detected.binding.branchName,\n      bindingMode: detected.binding.bindingMode\n    };\n    status.repo.branchMismatch = branch !== detected.binding.branchName;\n  }\n  status.alignment.checked = Boolean(params.api);\n  status.alignment.repoState = detected.repoState;\n  status.alignment.error = detected.status === \"remote_error\" ? detected.hint : null;\n  status.alignment.pendingFinalize = detected.pendingFinalize;\n  status.alignment.baseline = detected.baseline;\n  status.alignment.current = {\n    snapshotHash: detected.currentSnapshotHash,\n    serverRevisionId: detected.currentServerRevisionId,\n    serverTreeHash: detected.currentServerTreeHash,\n    serverHeadHash: detected.currentServerHeadHash,\n    serverHeadCommitId: detected.currentServerHeadCommitId,\n    localCommitHash: detected.localCommitHash\n  };\n  status.alignment.canRecordTurn = !isFinalizeQueueBlocking(detected.pendingFinalize.state) && (detected.repoState === \"idle\" || detected.repoState === \"local_only_changed\");\n  switch (detected.status) {\n    case \"not_bound\":\n      addBlockedReason(status.sync, \"not_bound\");\n      addBlockedReason(status.reconcile, \"not_bound\");\n      status.recommendedAction = \"init\";\n      break;\n    case \"branch_binding_missing\":\n      addBlockedReason(status.sync, \"branch_binding_missing\");\n      addBlockedReason(status.reconcile, \"branch_binding_missing\");\n      status.recommendedAction = \"init\";\n      break;\n    case \"family_ambiguous\":\n      addBlockedReason(status.sync, \"family_ambiguous\");\n      addBlockedReason(status.reconcile, \"family_ambiguous\");\n      status.recommendedAction = \"choose_family\";\n      break;\n    case \"missing_head\":\n      addBlockedReason(status.sync, \"missing_head\");\n      addBlockedReason(status.reconcile, \"missing_head\");\n      break;\n    case \"branch_mismatch\":\n      addBlockedReason(status.sync, \"branch_mismatch\");\n      addBlockedReason(status.reconcile, \"branch_mismatch\");\n      break;\n    case \"metadata_conflict\":\n      addBlockedReason(status.sync, \"metadata_conflict\");\n      addBlockedReason(status.reconcile, \"metadata_conflict\");\n      status.sync.checked = true;\n      status.sync.status = \"conflict_risk\";\n      status.sync.warnings = detected.metadataWarnings;\n      status.reconcile.checked = true;\n      status.reconcile.status = \"metadata_conflict\";\n      status.reconcile.warnings = detected.metadataWarnings;\n      break;\n    case \"remote_error\":\n      addBlockedReason(status.sync, \"remote_error\");\n      addBlockedReason(status.reconcile, \"remote_error\");\n      status.sync.error = detected.hint;\n      status.reconcile.error = detected.hint;\n      break;\n    default:\n      break;\n  }\n  if (detected.repoState === \"server_only_changed\") {\n    status.sync.checked = true;\n    status.sync.status = \"delta_ready\";\n    status.sync.targetCommitHash = detected.currentServerHeadHash;\n    status.sync.targetCommitId = detected.currentServerHeadCommitId;\n    status.sync.canApply = !status.repo.branchMismatch;\n    status.recommendedAction = \"pull\";\n  } else if (detected.repoState === \"both_changed\") {\n    status.reconcile.checked = true;\n    status.reconcile.status = \"ready_to_reconcile\";\n    status.reconcile.targetHeadCommitHash = detected.currentServerHeadHash;\n    status.reconcile.targetHeadCommitId = detected.currentServerHeadCommitId;\n    status.reconcile.canApply = !status.repo.branchMismatch;\n    status.recommendedAction = \"reconcile\";\n  } else if (detected.repoState === \"external_local_base_changed\") {\n    status.recommendedAction = \"init\";\n    addBlockedReason(status.sync, \"baseline_missing\");\n    addBlockedReason(status.reconcile, \"baseline_missing\");\n  } else if (detected.repoState === \"local_only_changed\") {\n    status.recommendedAction = isFinalizeQueueBlocking(detected.pendingFinalize.state) ? \"await_finalize\" : \"record\";\n  } else if (detected.repoState === \"idle\") {\n    status.recommendedAction = isFinalizeQueueBlocking(detected.pendingFinalize.state) ? \"await_finalize\" : \"no_action\";\n  }\n  if (isFinalizeQueueBlocking(detected.pendingFinalize.state) && detected.status === \"ready\" && status.recommendedAction !== \"init\" && status.recommendedAction !== \"choose_family\") {\n    status.recommendedAction = \"await_finalize\";\n    addWarning(\n      status,\n      \"A captured Remix turn is still pending locally. Drain or await finalize before opening a merge request or starting another recovery flow.\"\n    );\n    addWarning(status, detected.pendingFinalize.latestError);\n  }\n  if (detected.pendingFinalize.failedJobCount > 0) {\n    addWarning(\n      status,\n      \"One or more queued finalize jobs failed permanently and will not retry automatically. Review the local finalize queue state before relying on those older captured turns.\"\n    );\n    addWarning(status, detected.pendingFinalize.latestError);\n  }\n  if (params.api && status.binding.currentAppId) {\n    const [appResult, incomingResult, outgoingResult] = await Promise.allSettled([\n      params.api.getApp(status.binding.currentAppId),\n      params.api.listMergeRequests({ queue: \"app_reviewable\", appId: status.binding.currentAppId, status: \"open\", kind: \"merge\" }),\n      params.api.listMergeRequests({ queue: \"app_outgoing\", appId: status.binding.currentAppId, status: \"open\", kind: \"merge\" })\n    ]);\n    const remoteErrors = [];\n    if (appResult.status === \"fulfilled\") {\n      const app = unwrapResponseObject(appResult.value, \"app\");\n      status.remote.appStatus = typeof app.status === \"string\" ? app.status : null;\n    } else {\n      remoteErrors.push(formatCliErrorDetail(appResult.reason) ?? \"Failed to fetch app status.\");\n    }\n    if (incomingResult.status === \"fulfilled\") {\n      status.remote.incomingOpenMergeRequestCount = countMergeRequests(\n        unwrapResponseObject(incomingResult.value, \"merge requests\")\n      );\n    } else {\n      remoteErrors.push(formatCliErrorDetail(incomingResult.reason) ?? \"Failed to fetch incoming merge requests.\");\n    }\n    if (outgoingResult.status === \"fulfilled\") {\n      status.remote.outgoingOpenMergeRequestCount = countMergeRequests(\n        unwrapResponseObject(outgoingResult.value, \"merge requests\")\n      );\n    } else {\n      remoteErrors.push(formatCliErrorDetail(outgoingResult.reason) ?? \"Failed to fetch outgoing merge requests.\");\n    }\n    status.remote.checked = remoteErrors.length === 0;\n    status.remote.error = remoteErrors.length > 0 ? remoteErrors.join(\"\\n\\n\") : null;\n  }\n  addWarning(status, detected.hint);\n  addWarning(status, status.remote.error);\n  for (const warning of detected.warnings) addWarning(status, warning);\n  for (const warning of status.sync.warnings) addWarning(status, warning);\n  for (const warning of status.reconcile.warnings) addWarning(status, warning);\n  if ((status.remote.incomingOpenMergeRequestCount ?? 0) > 0 && status.recommendedAction === \"no_action\") {\n    status.recommendedAction = \"review_queue\";\n  }\n  const reportResult = await reportCheckoutStateFromStatus({ api: params.api, status, source: \"status\" });\n  for (const warning of reportResult.warnings) addWarning(status, warning);\n  return status;\n}\n\n// src/application/collab/collabSyncUpstream.ts\nasync function collabSyncUpstream(params) {\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await ensureActiveLaneBinding({\n    repoRoot,\n    api: params.api,\n    operation: \"`remix collab sync-upstream`\"\n  });\n  if (!binding) {\n    throw new RemixError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` first.\"\n    });\n  }\n  await ensureWorkspaceMatchesBaseline({\n    repoRoot,\n    repoFingerprint: binding.repoFingerprint,\n    laneId: binding.laneId,\n    branchName: binding.branchName,\n    operation: \"`remix collab sync-upstream`\"\n  });\n  await requireCurrentBranch(repoRoot);\n  const repoSnapshot = await captureRepoSnapshot(repoRoot);\n  if (binding.currentAppId === binding.upstreamAppId) {\n    throw new RemixError(\"Current repository is not bound to a remix/fork app.\", {\n      exitCode: 2,\n      hint: \"`remix collab sync-upstream` only applies to remixes/forks that have an upstream app.\"\n    });\n  }\n  const currentAppResp = await params.api.getApp(binding.currentAppId);\n  const currentApp = unwrapResponseObject(currentAppResp, \"app\");\n  const initialHeadCommitId = typeof currentApp.headCommitId === \"string\" ? currentApp.headCommitId : null;\n  const initialStatus = typeof currentApp.status === \"string\" ? currentApp.status : null;\n  const resp = await params.api.syncUpstreamApp(binding.currentAppId);\n  const syncUpstream = unwrapResponseObject(resp, \"upstream sync\");\n  if (syncUpstream.status === \"up-to-date\") {\n    return {\n      status: syncUpstream.status,\n      repoRoot,\n      appId: binding.currentAppId,\n      upstreamAppId: binding.upstreamAppId,\n      localUpdated: false\n    };\n  }\n  const completedApp = await pollUpstreamSyncCompletion(params.api, binding.currentAppId, {\n    initialHeadCommitId,\n    initialStatus\n  });\n  const localSyncResult = await withRepoMutationLock(\n    {\n      cwd: repoRoot,\n      operation: \"collabSyncUpstream\"\n    },\n    async ({ repoRoot: lockedRepoRoot, warnings }) => {\n      await assertRepoSnapshotUnchanged(lockedRepoRoot, repoSnapshot, {\n        operation: \"`remix collab sync-upstream`\",\n        recoveryHint: \"The repository changed while upstream sync was in progress. Review the local changes and rerun `remix collab sync-upstream`.\"\n      });\n      await ensureWorkspaceMatchesBaseline({\n        repoRoot: lockedRepoRoot,\n        repoFingerprint: binding.repoFingerprint,\n        laneId: binding.laneId,\n        branchName: binding.branchName,\n        operation: \"`remix collab sync-upstream`\"\n      });\n      await requireCurrentBranch(lockedRepoRoot);\n      const localSync = await collabSync({\n        api: params.api,\n        cwd: lockedRepoRoot,\n        dryRun: false\n      });\n      const localSyncWarnings = Array.isArray(localSync.warnings) ? localSync.warnings ?? [] : [];\n      return {\n        ...localSync,\n        ...warnings.length > 0 || localSyncWarnings.length > 0 ? {\n          warnings: Array.from(/* @__PURE__ */ new Set([...warnings, ...localSyncWarnings]))\n        } : {}\n      };\n    }\n  );\n  return {\n    status: syncUpstream.status,\n    mergeRequestId: syncUpstream.mergeRequestId ?? null,\n    repoRoot,\n    appId: binding.currentAppId,\n    upstreamAppId: binding.upstreamAppId,\n    remoteHeadCommitId: typeof completedApp.headCommitId === \"string\" ? completedApp.headCommitId : null,\n    localSync: localSyncResult,\n    localUpdated: true,\n    ...Array.isArray(localSyncResult.warnings) && (localSyncResult.warnings?.length ?? 0) > 0 ? { warnings: localSyncResult.warnings } : {}\n  };\n}\n\n// src/application/collab/collabView.ts\nasync function collabView(params) {\n  const resp = await params.api.getMergeRequestReview(params.mrId);\n  return unwrapMergeRequestReview(resp);\n}\n\n// src/application/collab/collabAsyncProcessing.ts\nimport fs14 from \"fs/promises\";\nimport path13 from \"path\";\n\n// src/application/collab/collabDependencies.ts\nimport { randomUUID as randomUUID6 } from \"crypto\";\nfunction isFullLocalStateRepository(value) {\n  return typeof value.bindings?.getPath === \"function\" && typeof value.bindings.read === \"function\" && typeof value.bindings.readState === \"function\" && typeof value.bindings.write === \"function\" && typeof value.bindings.writeSnapshot === \"function\" && typeof value.baselines?.read === \"function\" && typeof value.baselines.write === \"function\" && typeof value.baselines.clear === \"function\" && typeof value.snapshots?.inspect === \"function\" && typeof value.snapshots.capture === \"function\" && typeof value.snapshots.read === \"function\" && typeof value.snapshots.materialize === \"function\" && typeof value.snapshots.restoreToWorktree === \"function\" && typeof value.snapshots.diff === \"function\" && typeof value.asyncJobs?.enqueue === \"function\" && typeof value.asyncJobs.read === \"function\" && typeof value.asyncJobs.list === \"function\" && typeof value.asyncJobs.listForRepo === \"function\" && typeof value.asyncJobs.findPending === \"function\" && typeof value.asyncJobs.findFailed === \"function\" && typeof value.asyncJobs.update === \"function\" && typeof value.asyncJobs.delete === \"function\" && typeof value.asyncJobs.claim === \"function\" && typeof value.asyncJobs.summarize === \"function\" && typeof value.asyncJobs.pruneTerminal === \"function\" && typeof value.asyncJobs.getBundleFilePath === \"function\" && typeof value.asyncJobs.await === \"function\" && typeof value.finalizeJobs?.enqueue === \"function\" && typeof value.finalizeJobs.read === \"function\" && typeof value.finalizeJobs.list === \"function\" && typeof value.finalizeJobs.update === \"function\" && typeof value.finalizeJobs.claim === \"function\" && typeof value.finalizeJobs.remove === \"function\" && typeof value.finalizeJobs.forget === \"function\" && typeof value.finalizeJobs.requeue === \"function\" && typeof value.finalizeJobs.heartbeatLock === \"function\" && typeof value.finalizeJobs.cleanStaleLocks === \"function\" && typeof value.finalizeJobs.prune === \"function\" && typeof value.finalizeJobs.summarize === \"function\";\n}\nfunction createCollabDependencies(overrides = {}) {\n  const defaultClock = {\n    now: () => Date.now(),\n    isoNow: () => (/* @__PURE__ */ new Date()).toISOString()\n  };\n  const defaultTimers = {\n    sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms))\n  };\n  const localState3 = overrides.localState ? isFullLocalStateRepository(overrides.localState) ? overrides.localState : createLocalStateRepository(overrides.localState) : createLocalStateRepository();\n  return {\n    clock: { ...defaultClock, ...overrides.clock },\n    ids: { randomUUID: randomUUID6, ...overrides.ids },\n    timers: { ...defaultTimers, ...overrides.timers },\n    git: overrides.git ?? createSystemGitAdapter(),\n    localState: localState3,\n    uploadPresigned: overrides.uploadPresigned ?? uploadPresigned\n  };\n}\n\n// src/application/collab/errorTaxonomy.ts\nvar TRANSIENT_NETWORK_CODES = /* @__PURE__ */ new Set([\n  \"ECONNREFUSED\",\n  \"ECONNRESET\",\n  \"ETIMEDOUT\",\n  \"EAI_AGAIN\",\n  \"ENOTFOUND\",\n  \"ENETUNREACH\",\n  \"EHOSTUNREACH\",\n  \"EPIPE\",\n  \"UND_ERR_SOCKET\",\n  \"UND_ERR_CONNECT_TIMEOUT\",\n  \"UND_ERR_HEADERS_TIMEOUT\",\n  \"UND_ERR_BODY_TIMEOUT\"\n]);\nfunction formatWorkflowError(error) {\n  if (error instanceof RemixError) {\n    return [error.message, error.hint].filter(Boolean).join(\"\\n\\n\") || error.message || \"Unknown error.\";\n  }\n  if (error instanceof Error) {\n    return error.message || \"Unknown error.\";\n  }\n  if (typeof error === \"string\") return error;\n  try {\n    return JSON.stringify(error);\n  } catch {\n    return \"Unknown error.\";\n  }\n}\nfunction readNumberCandidate(error, key) {\n  if (!error || typeof error !== \"object\") return null;\n  const value = error[key];\n  if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  return null;\n}\nfunction readStringCandidate(error, key) {\n  if (!error || typeof error !== \"object\") return null;\n  const value = error[key];\n  if (typeof value === \"string\" && value.length > 0) return value;\n  return null;\n}\nfunction buildClassification(category, retryable) {\n  return {\n    category,\n    retryable,\n    terminal: !retryable,\n    disposition: retryable ? \"transient\" : \"jobSpecific\"\n  };\n}\nfunction classifyWorkflowError(error) {\n  const candidates = [error];\n  if (error && typeof error === \"object\" && \"cause\" in error) {\n    candidates.push(error.cause);\n  }\n  for (const candidate of candidates) {\n    const status = readNumberCandidate(candidate, \"status\") ?? readNumberCandidate(candidate, \"statusCode\");\n    if (status !== null) {\n      if (status === 401 || status === 403) return buildClassification(\"transient_backend\", true);\n      if (status >= 500 && status < 600) return buildClassification(\"transient_backend\", true);\n      if (status >= 400 && status < 500) return buildClassification(\"backend_contract_failure\", false);\n    }\n    const code = readStringCandidate(candidate, \"code\");\n    if (code && TRANSIENT_NETWORK_CODES.has(code)) return buildClassification(\"transient_network\", true);\n    if (code === \"ENOENT\" || code === \"EACCES\") return buildClassification(\"persisted_state_corruption\", false);\n    const name = readStringCandidate(candidate, \"name\");\n    if (name === \"AbortError\" || name === \"TimeoutError\") return buildClassification(\"transient_network\", true);\n    if (name === \"SyntaxError\") return buildClassification(\"backend_contract_failure\", false);\n  }\n  if (error instanceof RemixError) return buildClassification(\"user_action_needed\", false);\n  return buildClassification(\"backend_contract_failure\", false);\n}\n\n// src/application/collab/workflowEvents.ts\nasync function logDrainerWorkflowEvent(jobId, event, fields = {}) {\n  await logDrainerEvent(jobId, event, fields);\n}\n\n// src/application/collab/collabAsyncProcessing.ts\nvar MAX_TRANSIENT_RETRIES = 5;\nvar collabDependencies = createCollabDependencies();\nvar localState2 = collabDependencies.localState;\nasync function handleProcessError(job, error) {\n  const message = formatWorkflowError(error);\n  const { disposition: kind } = classifyWorkflowError(error);\n  if (kind === \"transient\") {\n    const nextRetry = (job.retryCount ?? 0) + 1;\n    if (nextRetry < MAX_TRANSIENT_RETRIES) {\n      await localState2.asyncJobs.update(job.id, {\n        status: \"queued\",\n        retryCount: nextRetry,\n        error: message\n      });\n      await logDrainerWorkflowEvent(job.id, \"retrying\", {\n        kind: job.kind,\n        retryCount: nextRetry,\n        error: message\n      });\n      return { status: \"retry_scheduled\", jobId: job.id, error: message, retryCount: nextRetry };\n    }\n    const finalMessage = `exceeded retry limit (${MAX_TRANSIENT_RETRIES} attempts). Last error: ${message}`;\n    await localState2.asyncJobs.update(job.id, { status: \"failed\", error: finalMessage, retryCount: nextRetry });\n    await logDrainerWorkflowEvent(job.id, \"failed\", { kind: job.kind, error: finalMessage, retryCount: nextRetry });\n    return { status: \"failed\", jobId: job.id, error: finalMessage };\n  }\n  await localState2.asyncJobs.update(job.id, { status: \"failed\", error: message });\n  await logDrainerWorkflowEvent(job.id, \"failed\", { kind: job.kind, error: message });\n  return { status: \"failed\", jobId: job.id, error: message };\n}\nasync function processInitJob(job, api) {\n  if (job.kind !== \"init\") return { status: \"skipped\", jobId: job.id };\n  const startedAt = collabDependencies.clock.now();\n  try {\n    await localState2.asyncJobs.update(job.id, { status: \"submitting\", error: null });\n    await logDrainerWorkflowEvent(job.id, \"claimed\", { kind: \"init\" });\n    const bundleStat = await fs14.stat(job.payload.bundlePath);\n    const presignResp = await api.presignImportUploadFirstParty({\n      file: {\n        name: path13.basename(job.payload.bundlePath),\n        mimeType: \"application/x-git-bundle\",\n        size: bundleStat.size,\n        checksumSha256: job.payload.bundleSha256\n      }\n    });\n    const presign = unwrapResponseObject(presignResp, \"upload\");\n    await localState2.asyncJobs.update(job.id, { status: \"uploading\" });\n    await logDrainerWorkflowEvent(job.id, \"uploading\", { kind: \"init\" });\n    await collabDependencies.uploadPresigned({\n      uploadUrl: String(presign.uploadUrl),\n      headers: presign.headers ?? {},\n      filePath: job.payload.bundlePath\n    });\n    await localState2.asyncJobs.update(job.id, { status: \"server_processing\" });\n    const importResp = await api.importFromUploadFirstParty({\n      uploadId: String(presign.uploadId),\n      appName: job.payload.appName?.trim() || path13.basename(job.repoRoot),\n      platform: \"generic\",\n      isPublic: false,\n      branch: job.payload.defaultBranch && job.branchName && job.branchName !== job.payload.defaultBranch ? job.payload.defaultBranch : job.branchName ?? void 0,\n      remoteUrl: job.payload.remoteUrl ?? void 0,\n      defaultBranch: job.payload.defaultBranch ?? void 0,\n      repoFingerprint: job.repoFingerprint ?? void 0,\n      headCommitHash: job.payload.headCommitHash\n    });\n    const imported = unwrapResponseObject(importResp, \"import\");\n    await logDrainerWorkflowEvent(job.id, \"server_accepted\", {\n      kind: \"init\",\n      appId: String(imported.appId ?? \"\")\n    });\n    const app = await pollAppReady(api, String(imported.appId), {\n      clock: collabDependencies.clock,\n      timers: collabDependencies.timers\n    });\n    let boundProjectId = String(app.projectId);\n    let boundCurrentAppId = String(app.id);\n    let boundUpstreamAppId = String(app.id);\n    let boundThreadId = app.threadId ? String(app.threadId) : null;\n    let boundLaneId = null;\n    let canonicalLane = null;\n    const branchName = job.branchName;\n    const defaultBranch = job.payload.defaultBranch;\n    const repoRoot = job.repoRoot;\n    const repoFingerprint = job.repoFingerprint;\n    const remoteUrl = job.payload.remoteUrl;\n    const headCommitHash = job.payload.headCommitHash;\n    if (branchName) {\n      if (defaultBranch && branchName !== defaultBranch) {\n        canonicalLane = await resolveOrEnsureLaneBinding({\n          api,\n          projectId: boundProjectId,\n          repoFingerprint: repoFingerprint ?? \"\",\n          remoteUrl,\n          defaultBranch,\n          branchName: defaultBranch,\n          seedAppId: String(app.id),\n          operation: \"`remix collab init` (background)\"\n        });\n        const lane = await resolveOrEnsureLaneBinding({\n          api,\n          projectId: canonicalLane.projectId ?? boundProjectId,\n          repoFingerprint: repoFingerprint ?? \"\",\n          remoteUrl,\n          defaultBranch,\n          branchName,\n          seedHeadCommitHash: headCommitHash,\n          operation: \"`remix collab init` (background)\"\n        });\n        boundProjectId = lane.projectId ?? boundProjectId;\n        boundCurrentAppId = lane.currentAppId ?? boundCurrentAppId;\n        boundUpstreamAppId = lane.upstreamAppId ?? boundUpstreamAppId;\n        boundThreadId = lane.threadId ?? boundThreadId;\n        boundLaneId = lane.laneId ?? null;\n      } else {\n        const lane = await resolveOrEnsureLaneBinding({\n          api,\n          projectId: boundProjectId,\n          repoFingerprint: repoFingerprint ?? \"\",\n          remoteUrl,\n          defaultBranch,\n          branchName,\n          seedAppId: String(app.id),\n          operation: \"`remix collab init` (background)\"\n        });\n        canonicalLane = lane;\n        boundProjectId = lane.projectId ?? boundProjectId;\n        boundCurrentAppId = lane.currentAppId ?? boundCurrentAppId;\n        boundUpstreamAppId = lane.upstreamAppId ?? boundUpstreamAppId;\n        boundThreadId = lane.threadId ?? boundThreadId;\n        boundLaneId = lane.laneId ?? null;\n      }\n    }\n    if (boundCurrentAppId) {\n      const readyApp = await pollAppReady(api, boundCurrentAppId, {\n        clock: collabDependencies.clock,\n        timers: collabDependencies.timers\n      });\n      boundProjectId = String(readyApp.projectId ?? boundProjectId);\n      boundThreadId = readyApp.threadId ? String(readyApp.threadId) : boundThreadId;\n    }\n    const bindingMode = defaultBranch && branchName !== defaultBranch ? \"lane\" : \"explicit_root\";\n    if (job.payload.forceNew && defaultBranch && canonicalLane) {\n      const canonicalBinding = branchBindingFromLane(canonicalLane, \"explicit_root\", {\n        projectId: canonicalLane.projectId ?? boundProjectId,\n        currentAppId: canonicalLane.currentAppId ?? boundCurrentAppId,\n        upstreamAppId: canonicalLane.upstreamAppId ?? canonicalLane.currentAppId ?? boundCurrentAppId,\n        threadId: canonicalLane.threadId ?? boundThreadId\n      });\n      const branchBindings = { [defaultBranch]: canonicalBinding };\n      if (branchName && branchName !== defaultBranch) {\n        branchBindings[branchName] = {\n          projectId: boundProjectId,\n          currentAppId: boundCurrentAppId,\n          upstreamAppId: boundUpstreamAppId,\n          threadId: boundThreadId,\n          laneId: boundLaneId,\n          bindingMode: \"lane\"\n        };\n      }\n      await localState2.bindings.writeSnapshot({\n        repoRoot,\n        repoFingerprint: repoFingerprint ?? \"\",\n        remoteUrl,\n        defaultBranch,\n        branchBindings,\n        explicitRootBinding: canonicalBinding\n      });\n    } else {\n      if (canonicalLane && defaultBranch && branchName && branchName !== defaultBranch) {\n        await localState2.bindings.write(repoRoot, {\n          projectId: canonicalLane.projectId ?? null,\n          currentAppId: canonicalLane.currentAppId ?? boundCurrentAppId,\n          upstreamAppId: canonicalLane.upstreamAppId ?? canonicalLane.currentAppId ?? boundCurrentAppId,\n          threadId: canonicalLane.threadId ?? null,\n          repoFingerprint: canonicalLane.repoFingerprint ?? repoFingerprint ?? \"\",\n          remoteUrl: canonicalLane.remoteUrl ?? remoteUrl,\n          defaultBranch: canonicalLane.defaultBranch ?? defaultBranch,\n          laneId: canonicalLane.laneId ?? null,\n          branchName: defaultBranch,\n          // This branch is reached only when the current branch is NOT\n          // the default branch — so the binding being written here is\n          // for the DEFAULT branch (the canonical/main app). It must\n          // always be `explicit_root` so the history-import auto-spawn\n          // can fire on first-ever inits (see autoSpawnHistoryImport.ts).\n          bindingMode: \"explicit_root\"\n        });\n      }\n      await localState2.bindings.write(repoRoot, {\n        projectId: boundProjectId,\n        currentAppId: boundCurrentAppId,\n        upstreamAppId: boundUpstreamAppId,\n        threadId: boundThreadId,\n        repoFingerprint: repoFingerprint ?? \"\",\n        remoteUrl,\n        defaultBranch: defaultBranch ?? null,\n        laneId: boundLaneId,\n        branchName,\n        bindingMode\n      });\n    }\n    await seedImportedInitBaseline({\n      api,\n      repoRoot,\n      repoFingerprint: repoFingerprint ?? \"\",\n      laneId: boundLaneId,\n      currentAppId: boundCurrentAppId,\n      branchName\n    });\n    await logDrainerWorkflowEvent(job.id, \"server_completed\", {\n      kind: \"init\",\n      appId: boundCurrentAppId,\n      dashboardUrl: buildDashboardAppUrl(boundCurrentAppId),\n      durationMs: collabDependencies.clock.now() - startedAt\n    });\n    await localState2.asyncJobs.update(job.id, { status: \"completed\", error: null });\n    await logDrainerWorkflowEvent(job.id, \"completed\", { kind: \"init\", durationMs: collabDependencies.clock.now() - startedAt });\n    return { status: \"completed\", jobId: job.id };\n  } catch (error) {\n    return await handleProcessError(job, error);\n  }\n}\nasync function processInitPostJob(job, api) {\n  if (job.kind !== \"init_post\") return { status: \"skipped\", jobId: job.id };\n  const startedAt = collabDependencies.clock.now();\n  const syncPhaseMs = Math.max(0, job.payload.syncPhaseFinishedAt - job.payload.syncPhaseStartedAt);\n  try {\n    await localState2.asyncJobs.update(job.id, { status: \"server_processing\", error: null });\n    await logDrainerWorkflowEvent(job.id, \"claimed\", {\n      kind: \"init_post\",\n      appId: job.payload.appId,\n      syncPhaseMs\n    });\n    await pollAppReady(api, job.payload.appId, {\n      clock: collabDependencies.clock,\n      timers: collabDependencies.timers\n    });\n    await seedImportedInitBaseline({\n      api,\n      repoRoot: job.repoRoot,\n      repoFingerprint: job.repoFingerprint ?? \"\",\n      laneId: job.laneId,\n      currentAppId: job.payload.appId,\n      branchName: job.branchName\n    });\n    const asyncPhaseMs = collabDependencies.clock.now() - startedAt;\n    await localState2.asyncJobs.update(job.id, { status: \"completed\", error: null });\n    await logDrainerWorkflowEvent(job.id, \"completed\", {\n      kind: \"init_post\",\n      appId: job.payload.appId,\n      durationMs: asyncPhaseMs,\n      // Top-level metrics requested in the rollout PR description so the\n      // sync vs async timing breakdown is grep-able in one place.\n      [\"init.sync_phase_ms\"]: syncPhaseMs,\n      [\"init.async_phase_ms\"]: asyncPhaseMs,\n      [\"init.total_ms\"]: syncPhaseMs + asyncPhaseMs\n    });\n    return { status: \"completed\", jobId: job.id };\n  } catch (error) {\n    const outcome = await handleProcessError(job, error);\n    if (outcome.status === \"failed\") {\n      const bindingPath = localState2.bindings.getPath(job.repoRoot);\n      try {\n        await fs14.unlink(bindingPath);\n        await logDrainerWorkflowEvent(job.id, \"binding_cleared\", {\n          kind: \"init_post\",\n          appId: job.payload.appId,\n          repoRoot: job.repoRoot,\n          bindingPath,\n          reason: \"init_post_terminal_failure\"\n        });\n      } catch (cleanupError) {\n        await logDrainerWorkflowEvent(job.id, \"binding_cleared\", {\n          kind: \"init_post\",\n          appId: job.payload.appId,\n          repoRoot: job.repoRoot,\n          bindingPath,\n          reason: \"init_post_terminal_failure\",\n          cleanupError: formatWorkflowError(cleanupError)\n        });\n      }\n    }\n    return outcome;\n  }\n}\nasync function collabInitProcess(jobId, opts) {\n  const claim = await localState2.asyncJobs.claim(jobId);\n  if (!claim) {\n    const job = await localState2.asyncJobs.read(jobId);\n    if (!job) return { status: \"skipped\", jobId };\n    return { status: \"skipped\", jobId };\n  }\n  try {\n    if (claim.job.kind !== \"init\") return { status: \"skipped\", jobId };\n    return await processInitJob(claim.job, opts.api);\n  } finally {\n    await claim.release();\n  }\n}\nasync function collabInitPostProcess(jobId, opts) {\n  const claim = await localState2.asyncJobs.claim(jobId);\n  if (!claim) {\n    const job = await localState2.asyncJobs.read(jobId);\n    if (!job) return { status: \"skipped\", jobId };\n    return { status: \"skipped\", jobId };\n  }\n  try {\n    if (claim.job.kind !== \"init_post\") return { status: \"skipped\", jobId };\n    return await processInitPostJob(claim.job, opts.api);\n  } finally {\n    await claim.release();\n  }\n}\nasync function acquireDrainerPidLock() {\n  const pidPath = getDrainerPidPath();\n  await fs14.mkdir(path13.dirname(pidPath), { recursive: true });\n  try {\n    const existing = await fs14.readFile(pidPath, \"utf8\").catch(() => \"\");\n    const existingPid = parseInt(existing.trim(), 10);\n    if (Number.isFinite(existingPid) && existingPid > 0 && existingPid !== process.pid) {\n      try {\n        process.kill(existingPid, 0);\n        return null;\n      } catch (error) {\n        if (error?.code !== \"ESRCH\") return null;\n      }\n    }\n    await fs14.writeFile(pidPath, String(process.pid), \"utf8\");\n    return {\n      release: async () => {\n        try {\n          const current = (await fs14.readFile(pidPath, \"utf8\")).trim();\n          if (current === String(process.pid)) {\n            await fs14.unlink(pidPath).catch(() => void 0);\n          }\n        } catch {\n        }\n      }\n    };\n  } catch {\n    return null;\n  }\n}\nasync function drainAsyncJobs(opts) {\n  const lockHandle = opts.respectPidLock === false ? null : await acquireDrainerPidLock();\n  if (opts.respectPidLock !== false && !lockHandle) return [];\n  try {\n    return await drainClaimedJobs({\n      prune: async () => {\n        try {\n          await localState2.asyncJobs.pruneTerminal();\n        } catch {\n        }\n      },\n      list: () => localState2.asyncJobs.list(),\n      isTerminal: (job) => planAsyncJobDrainTransition(job).terminal,\n      claim: async (job) => ({\n        job,\n        /* v8 ignore next -- async job processors perform their own claim/release cycle. */\n        release: async () => void 0\n      }),\n      process: async ({ job }) => {\n        const transition = planAsyncJobDrainTransition(job);\n        return transition.action === \"process_init\" ? collabInitProcess(job.id, { api: opts.api }) : collabInitPostProcess(job.id, { api: opts.api });\n      },\n      onError: \"throw\"\n    });\n  } finally {\n    if (lockHandle) await lockHandle.release();\n  }\n}\nexport {\n  FINALIZE_JOB_LOCK_STALE_MS,\n  FINALIZE_PREFLIGHT_FAILURE_CODES,\n  SourceConversationSchema,\n  awaitAsyncJob,\n  cleanStaleFinalizeJobLocks,\n  collabApprove,\n  collabCheckout,\n  collabFinalizeTurn,\n  collabInit,\n  collabInitProcess,\n  collabInitSubmit,\n  collabInvite,\n  collabList,\n  collabListMembers,\n  collabListMergeRequests,\n  collabReconcile,\n  collabRecordingPreflight,\n  collabReject,\n  collabRemix,\n  collabRequestMerge,\n  collabStatus,\n  collabSync,\n  collabSyncUpstream,\n  collabUpdateMemberRole,\n  collabView,\n  deleteAsyncJob,\n  drainAsyncJobs,\n  drainPendingFinalizeQueue,\n  drainerLogPath,\n  findFailedAsyncJob,\n  findPendingAsyncJob,\n  forgetPendingFinalizeJob,\n  getDrainerLogPath,\n  getDrainerPidPath,\n  getMemberRolesForScope,\n  isFinalizePreflightFailureCode,\n  listAsyncJobs,\n  listAsyncJobsForRepo,\n  listPendingFinalizeJobs,\n  processPendingFinalizeJob,\n  pruneTerminalAsyncJobs,\n  readAsyncJob,\n  readLocalSnapshot,\n  readPendingFinalizeJob,\n  requeuePendingFinalizeJob,\n  summarizeAsyncJobs,\n  updatePendingFinalizeJob,\n  validateMemberRole\n};\n","import fs from \"node:fs/promises\";\nimport { spawn } from \"node:child_process\";\n\nimport pc from \"picocolors\";\nimport {\n  awaitAsyncJob,\n  drainerLogPath,\n  getDrainerPidPath,\n  listAsyncJobsForRepo,\n  type AsyncJob,\n  type AwaitAsyncJobResult,\n} from \"@remixhq/core/collab\";\n\nconst STUCK_QUEUED_MS = 5 * 60 * 1000;\nconst STUCK_SUBMITTING_MS = 30 * 60 * 1000;\n\nlet warnedAboutAsyncJobsThisProcess = false;\nlet printedDeprecationHintThisProcess = false;\n\nfunction fmtAge(ms: number): string {\n  if (ms < 0) ms = 0;\n  if (ms < 1000) return `${ms}ms`;\n  const sec = Math.floor(ms / 1000);\n  if (sec < 60) return `${sec}s`;\n  const min = Math.floor(sec / 60);\n  if (min < 60) return `${min}m`;\n  const hr = Math.floor(min / 60);\n  if (hr < 24) return `${hr}h`;\n  return `${Math.floor(hr / 24)}d`;\n}\n\nfunction firstLine(value: string | null | undefined, max = 200): string {\n  if (!value) return \"\";\n  const line = value.split(\"\\n\", 1)[0] ?? \"\";\n  return line.length > max ? `${line.slice(0, max)}…` : line;\n}\n\nfunction isPidAlive(pid: number): boolean {\n  // Use process.kill(pid, 0) — cross-platform in Node. Do NOT shell out to\n  // `kill -0`; that fails on Windows and adds a process spawn for nothing.\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (error) {\n    const code = (error as NodeJS.ErrnoException)?.code;\n    return code === \"EPERM\"; // alive but inaccessible — still alive.\n  }\n}\n\nasync function readDrainerPidFreshness(): Promise<{ pidFileExists: boolean; alive: boolean; pid: number | null }> {\n  const pidPath = getDrainerPidPath();\n  try {\n    const raw = await fs.readFile(pidPath, \"utf8\");\n    const pid = parseInt(raw.trim(), 10);\n    if (!Number.isFinite(pid) || pid <= 0) {\n      return { pidFileExists: true, alive: false, pid: null };\n    }\n    return { pidFileExists: true, alive: isPidAlive(pid), pid };\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n      return { pidFileExists: false, alive: false, pid: null };\n    }\n    return { pidFileExists: true, alive: false, pid: null };\n  }\n}\n\nasync function tailLatestDrainerError(): Promise<string | null> {\n  // drainer.log is JSON-lines. Walk lines from the end and pick the most recent\n  // event of an error-bearing kind (failed, retrying). A literal tail -1 might\n  // surface a \"started\"/\"uploading\" line and produce a confusing warning.\n  try {\n    const raw = await fs.readFile(drainerLogPath(), \"utf8\");\n    const lines = raw.split(\"\\n\").filter((line) => line.length > 0);\n    for (let i = lines.length - 1; i >= 0; i--) {\n      try {\n        const entry = JSON.parse(lines[i]!) as { event?: string; error?: string };\n        if (entry.event === \"failed\" || entry.event === \"retrying\") {\n          if (typeof entry.error === \"string\" && entry.error.length > 0) {\n            return firstLine(entry.error, 160);\n          }\n        }\n      } catch {\n        continue;\n      }\n    }\n  } catch {\n    // ignore — log not present yet, or unreadable\n  }\n  return null;\n}\n\nexport type PendingAsyncJobsCounts = {\n  failed: number;\n  queued: number;\n  // Roll-up of submitting + uploading + server_processing.\n  processing: number;\n};\n\nfunction emptyCounts(): PendingAsyncJobsCounts {\n  return { failed: 0, queued: 0, processing: 0 };\n}\n\nasync function readJobsForRepoSafe(repoRoot: string): Promise<AsyncJob[]> {\n  try {\n    return await listAsyncJobsForRepo({ repoRoot });\n  } catch {\n    return [];\n  }\n}\n\nexport async function pendingAsyncJobsCounts(repoRoot: string): Promise<PendingAsyncJobsCounts> {\n  const jobs = await readJobsForRepoSafe(repoRoot);\n  const counts = emptyCounts();\n  for (const job of jobs) {\n    if (job.status === \"completed\") continue;\n    if (job.status === \"failed\") counts.failed += 1;\n    else if (job.status === \"queued\") counts.queued += 1;\n    else counts.processing += 1; // submitting | uploading | server_processing\n  }\n  return counts;\n}\n\n// Attaches `pendingAsyncJobs` counts to a service result without changing the\n// service's exported return type. Mutates and returns the same object so call\n// sites can stay one-liner.\nexport async function attachPendingAsyncJobs<T extends object>(result: T, repoRoot: string): Promise<T> {\n  if (result === null || typeof result !== \"object\") return result;\n  try {\n    const counts = await pendingAsyncJobsCounts(repoRoot);\n    Object.assign(result as object, { pendingAsyncJobs: counts });\n  } catch {\n    // best-effort — never fail the actual command because we couldn't read job state\n  }\n  return result;\n}\n\ntype AsyncJobIssue = {\n  kind: \"failed\" | \"stuck\";\n  job: AsyncJob;\n  ageMs: number;\n  hedge?: string;\n};\n\nasync function collectIssues(repoRoot: string): Promise<AsyncJobIssue[]> {\n  const jobs = await readJobsForRepoSafe(repoRoot);\n  const now = Date.now();\n  const issues: AsyncJobIssue[] = [];\n  for (const job of jobs) {\n    const updated = Date.parse(job.updatedAt);\n    const ageMs = Number.isFinite(updated) ? now - updated : 0;\n    if (job.status === \"failed\") {\n      issues.push({ kind: \"failed\", job, ageMs });\n      continue;\n    }\n    if (job.status === \"queued\" && ageMs >= STUCK_QUEUED_MS) {\n      issues.push({ kind: \"stuck\", job, ageMs });\n      continue;\n    }\n    if (\n      (job.status === \"submitting\" || job.status === \"uploading\" || job.status === \"server_processing\") &&\n      ageMs >= STUCK_SUBMITTING_MS\n    ) {\n      issues.push({\n        kind: \"stuck\",\n        job,\n        ageMs,\n        hedge: \" (or upload in progress on a slow connection)\",\n      });\n    }\n  }\n  return issues;\n}\n\n// Surfaces async-job failures and stuck-drainer hints on stderr exactly once\n// per process. JSON callers should still see counts in the envelope (the\n// helper also handles those — see attachPendingAsyncJobs).\nexport async function warnAboutAsyncJobIssues(repoRoot: string, json: boolean): Promise<void> {\n  if (warnedAboutAsyncJobsThisProcess) return;\n  warnedAboutAsyncJobsThisProcess = true;\n  if (json) return;\n  try {\n    const issues = await collectIssues(repoRoot);\n    if (issues.length === 0) return;\n\n    const failedCount = issues.filter((i) => i.kind === \"failed\").length;\n    const stuckCount = issues.length - failedCount;\n\n    const parts: string[] = [];\n    if (failedCount > 0) parts.push(`${failedCount} failed`);\n    if (stuckCount > 0) parts.push(`${stuckCount} stuck`);\n    const summary = parts.join(\", \");\n\n    const tail = await tailLatestDrainerError();\n    const pidInfo = await readDrainerPidFreshness();\n    const pidHint =\n      pidInfo.pidFileExists && !pidInfo.alive\n        ? \" Drainer pid file exists but process is gone (stale lock — will self-clear on next spawn).\"\n        : \"\";\n\n    const tailHint = tail ? ` Last drainer error: ${tail}.` : \"\";\n    process.stderr.write(\n      pc.yellow(\n        `! Async job issues: ${summary}.${pidHint}${tailHint} Run \\`remix collab status\\` for details, or \\`remix collab drain-async-jobs\\` to retry.\\n`,\n      ),\n    );\n  } catch {\n    // never block the actual command on a warning failure\n  }\n}\n\nexport function printDeprecationHintOnce(): void {\n  if (printedDeprecationHintThisProcess) return;\n  printedDeprecationHintThisProcess = true;\n  process.stderr.write(\n    pc.dim(\n      \"Hint: pass --queue to return immediately and process the bundle upload in the background. The default will switch to --queue in the next release.\\n\",\n    ),\n  );\n}\n\nexport async function awaitAsyncJobById(params: {\n  jobId: string;\n  timeoutMs: number;\n}): Promise<AwaitAsyncJobResult> {\n  return await awaitAsyncJob({ jobId: params.jobId, timeoutMs: params.timeoutMs });\n}\n\nexport function printAwaitResult(result: AwaitAsyncJobResult, jobId: string): void {\n  if (result.status === \"completed\") {\n    console.log(pc.green(`Job ${jobId} completed.`));\n    return;\n  }\n  if (result.status === \"failed\") {\n    const error = result.job.error ? ` ${firstLine(result.job.error)}` : \"\";\n    process.stderr.write(pc.red(`Job ${jobId} failed.${error}\\n`));\n    return;\n  }\n  const currentStatus = result.job?.status ?? \"queued\";\n  console.log(\n    pc.yellow(\n      `Job ${jobId} still running (status=${currentStatus}). Returning early; check \\`remix collab status\\` for progress.`,\n    ),\n  );\n}\n\n// Prints \"Waiting for job <id> to finish (timeout in <s>s)…\" then a dot every\n// 10 seconds until the await resolves. The caller awaits the returned promise.\nexport async function awaitWithProgress(params: {\n  jobId: string;\n  timeoutMs: number;\n  json: boolean;\n}): Promise<AwaitAsyncJobResult> {\n  if (!params.json) {\n    const seconds = Math.max(1, Math.round(params.timeoutMs / 1000));\n    process.stderr.write(\n      pc.dim(\n        `Waiting for job ${params.jobId} to finish (timeout in ${seconds}s)… Ctrl-C exits the wait but does not cancel the job.\\n`,\n      ),\n    );\n  }\n  let progressTimer: NodeJS.Timeout | null = null;\n  if (!params.json) {\n    progressTimer = setInterval(() => {\n      process.stderr.write(\".\");\n    }, 10_000);\n    progressTimer.unref?.();\n  }\n  try {\n    return await awaitAsyncJobById({ jobId: params.jobId, timeoutMs: params.timeoutMs });\n  } finally {\n    if (progressTimer) {\n      clearInterval(progressTimer);\n      if (!params.json) process.stderr.write(\"\\n\");\n    }\n  }\n}\n\n// Spawn a detached background drainer. Mirrors spawnFinalizeQueueDrainer in\n// services/collab.ts (same args shape, same env passthrough). The drainer's\n// pid lock in core makes a missed spawn harmless — just exits.\nexport function spawnAsyncJobsDrainer(cwd: string): void {\n  try {\n    const entrypoint = process.argv[1];\n    if (!entrypoint) return;\n    const child = spawn(\n      process.execPath,\n      [...process.execArgv, entrypoint, \"collab\", \"drain-async-jobs\", \"--cwd\", cwd, \"--silent\"],\n      {\n        detached: true,\n        stdio: \"ignore\",\n        env: process.env,\n        windowsHide: true,\n      },\n    );\n    child.unref();\n  } catch {\n    // best-effort\n  }\n}\n","import { Option, type Command } from \"commander\";\n\nimport { mobileShellInit } from \"../services/mobileShellInit.js\";\n\nexport function registerMobileCommands(program: Command) {\n  const mobile = program.command(\"mobile\").description(\"Mobile app shell and runtime workflows\");\n  const shell = mobile.command(\"shell\").description(\"Generate and manage Remix mobile shell host apps\");\n\n  shell\n    .command(\"init\")\n    .description(\"Initialize a repo-bound Remix mobile shell app for the current Expo project\")\n    .option(\"--out <dir>\", \"Output directory for the shell host app\", \"remix-shell\")\n    .option(\"--package-manager <pm>\", \"Override package manager detection (pnpm|npm|yarn|bun)\")\n    .addOption(new Option(\"--path <subdir>\", \"Unsupported: mobile shell init imports the full Git repository\").hideHelp())\n    .addOption(new Option(\"--no-include-dotenv\", \"Unsupported: manage secrets with gitignore or Remix env variables\").hideHelp())\n    .option(\"--force-new\", \"Create and bind to a new Remix app family even if a matching binding exists\", false)\n    .option(\"--regenerate-shell\", \"Regenerate the shell output directory when it already exists\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await mobileShellInit({\n        appKey: \"MicroMain\",\n        outDir: opts.out ? String(opts.out) : \"remix-shell\",\n        packageManager: opts.packageManager ? String(opts.packageManager) : null,\n        subdir: opts.path ? String(opts.path) : null,\n        includeDotenv: Boolean(opts.includeDotenv),\n        forceNew: Boolean(opts.forceNew),\n        regenerateShell: Boolean(opts.regenerateShell),\n        yes: Boolean(opts.yes),\n        json: Boolean(opts.json),\n      });\n\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import path from \"node:path\";\n\nimport type { ApiClient } from \"@remixhq/core\";\nimport pc from \"picocolors\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport {\n  multiSelectWithContinue,\n  MultiSelectCancelledError,\n} from \"../utils/multiSelectWithContinue.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport { collabCheckout, collabInit, collabList, collabRemix } from \"./collab.js\";\nimport { ensureClaudePluginInstalled, getClaudePluginStatus, type ClaudePluginInstallResult } from \"./setupClaude.js\";\nimport { detectCursorInstall } from \"./setupCursor.js\";\nimport { ensureCursorPluginInstalled, getCursorPluginStatus, type CursorPluginInstallResult } from \"./setupCursorPlugin.js\";\nimport {\n  checkSetupPrerequisites,\n  detectClaudeBinary,\n  type SetupPrerequisiteSummary,\n} from \"./setupPrereqs.js\";\nimport {\n  createAuthedApi,\n  loadBindingContext,\n  type JsonRecord,\n  unwrapResponseObject,\n} from \"./serviceHelpers.js\";\nimport {\n  REMIX_CLAUDE_PLUGIN,\n  REMIX_CURSOR_PLUGIN,\n  type ClaudePluginAction,\n  type ClaudePluginScope,\n  type CursorPluginAction,\n  type SetupAgent,\n  type SetupWorkflow,\n} from \"./setupMetadata.js\";\nimport { refreshSetupMetadata } from \"./setupMetadataResolver.js\";\nimport { selectWorkingDirectory } from \"./setupWorkingDir.js\";\n\ntype VisibleApp = {\n  id: string;\n  name: string | null;\n  status: string | null;\n  projectId: string | null;\n  forkedFromAppId: string | null;\n};\n\nexport type SetupAuthResult = {\n  status: \"authenticated\";\n  user: {\n    id: string | null;\n    name: string | null;\n    email: string | null;\n    organizationId: string | null;\n  };\n};\n\nexport type SetupAgentResult = {\n  selectedAgent: SetupAgent;\n  selectedAgents: SetupAgent[];\n  claude: ClaudePluginInstallResult | null;\n  cursor: CursorPluginInstallResult | null;\n};\n\nexport type SetupSelectedWorkflow = {\n  workflow: SetupWorkflow;\n  appId: string | null;\n  outputDir: string | null;\n  remixName: string | null;\n};\n\nexport type SetupWorkingDirectoryResult = {\n  // Directory the user was in when `remix setup` started (or the explicit\n  // --cwd value passed on the command line).\n  originalCwd: string;\n  // Directory the user picked during the \"confirm working folder\" step. Same\n  // as originalCwd when the user accepted the default or the prompt was\n  // skipped (--cwd / --yes / non-interactive).\n  selectedCwd: string;\n  // True iff the user actively chose a different folder during the prompt.\n  // Drives the final `cd` hint in printSetupSummary.\n  changed: boolean;\n};\n\nexport type SetupResult = {\n  auth: SetupAuthResult;\n  prerequisites: SetupPrerequisiteSummary;\n  agentSetup: SetupAgentResult;\n  workingDirectory: SetupWorkingDirectoryResult;\n  selectedWorkflow: SetupSelectedWorkflow;\n  workflowResult: JsonRecord | null;\n  warnings: string[];\n  recommendedNextSteps: string[];\n};\n\nexport type SetupParams = {\n  cwd: string;\n  // True when `--cwd` was passed on the command line. We use this to skip the\n  // \"confirm working folder\" prompt — an explicit flag means the user has\n  // already told us where to operate.\n  cwdExplicit?: boolean;\n  json: boolean;\n  yes: boolean;\n  agent?: SetupAgent | null;\n  workflow?: SetupWorkflow | null;\n  appId?: string | null;\n  outputDir?: string | null;\n  name?: string | null;\n  skipPluginInstall?: boolean;\n  // Forwarded to `collabCheckout` for `workflow === \"checkout\"`.\n  // Skips the backend's \"ensure project lane\" call so an app-scope\n  // invitee lands inside the single fork they were invited to,\n  // instead of getting a per-user canonical/fork lane minted on top.\n  skipLaneMaterialization?: boolean;\n  claudePluginAction?: ClaudePluginAction;\n  claudePluginScope?: ClaudePluginScope;\n  cursorPluginAction?: CursorPluginAction;\n  cursorPluginDestination?: string;\n  remixCliPath?: string | null;\n};\n\nfunction isExplicitClaudePluginAction(action: ClaudePluginAction | undefined): boolean {\n  return action === \"install\" || action === \"update\" || action === \"reinstall\";\n}\n\nfunction isExplicitCursorPluginAction(action: CursorPluginAction | undefined): boolean {\n  return action === \"install\" || action === \"update\" || action === \"reinstall\";\n}\n\nfunction extractWarnings(value: unknown): string[] {\n  if (!value || typeof value !== \"object\") return [];\n  const warnings = (value as { warnings?: unknown }).warnings;\n  if (!Array.isArray(warnings)) return [];\n  return warnings.filter((entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0);\n}\n\nfunction throwCancelled(): never {\n  throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n}\n\n// Prominent banner shown when the Claude Code CLI binary is missing. We\n// print rather than throw because the user can still legitimately want to\n// finish auth + workflow setup without the plugin (e.g. they're on a\n// machine where they only run `remix collab` commands manually). The\n// install command + docs URL match Anthropic's published guidance — keep\n// them in sync if Anthropic ever changes the canonical install path.\nfunction printClaudeMissingNotice(): void {\n  console.log(\"\");\n  console.log(pc.yellow(pc.bold(\"You must first install Claude Code.\")));\n  console.log(\n    pc.yellow(\n      \"The Remix Claude plugin runs inside the `claude` CLI, which isn't on your PATH right now.\",\n    ),\n  );\n  console.log(\"\");\n  console.log(\"Install it with:\");\n  console.log(pc.bold(\"  npm install -g @anthropic-ai/claude-code\"));\n  console.log(\"Or follow the official guide:\");\n  console.log(pc.bold(\"  https://docs.claude.com/en/docs/claude-code/setup\"));\n  console.log(\"\");\n  console.log(pc.dim(\"After installing Claude, re-run `remix setup` to configure the plugin.\"));\n  console.log(\"\");\n}\n\nasync function confirmClaudeHardRepairDuringSetup(yes: boolean): Promise<void> {\n  if (yes) return;\n  if (!isInteractive()) {\n    throw new CliError(\"Hard repair needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: \"Re-run `remix setup` with `--yes` to confirm the Remix-scoped Claude cache cleanup.\",\n    });\n  }\n\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: \"Claude needs a hard repair to clear stale Remix-specific marketplace and plugin caches. Continue?\",\n      initial: false,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  if (!answer.confirmed) {\n    throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n  }\n}\n\nfunction ensureNoBlockingPrereqs(summary: SetupPrerequisiteSummary): void {\n  if (summary.blocking.length === 0) return;\n  const message =\n    summary.blocking.length === 1\n      ? `${summary.blocking[0].label}: ${summary.blocking[0].reason ?? \"Blocked.\"}`\n      : `Setup is blocked by ${summary.blocking.length} prerequisite checks.`;\n  const hint = summary.blocking\n    .map((item) => [item.label, item.reason, item.remediationHint].filter(Boolean).join(\": \"))\n    .join(\"\\n\");\n  throw new CliError(message, {\n    exitCode: 2,\n    hint: hint || undefined,\n  });\n}\n\nasync function selectAgents(params: {\n  agent?: SetupAgent | null;\n  yes: boolean;\n}): Promise<SetupAgent[]> {\n  if (params.agent) return [params.agent];\n  if (params.yes || !isInteractive()) return [REMIX_CLAUDE_PLUGIN.agent];\n\n  // Detect installed agents in parallel before rendering the picker so\n  // we can auto-check the rows that are already on the user's machine.\n  // Both helpers are designed to fail soft (return \"not detected\"\n  // rather than throw), so even a transient failure here just leaves\n  // the matching row un-checked instead of breaking the prompt.\n  const [claudeProbe, cursorProbe] = await Promise.all([\n    detectClaudeBinary(),\n    detectCursorInstall(),\n  ]);\n\n  const claudeBadge = claudeProbe.available\n    ? claudeProbe.version\n      ? `installed · ${claudeProbe.version}`\n      : \"installed\"\n    : \"not detected\";\n  const cursorBadge = cursorProbe.available\n    ? cursorProbe.source === \"app\"\n      ? \"installed\"\n      : cursorProbe.details\n        ? `installed · ${cursorProbe.details}`\n        : \"installed\"\n    : \"not detected\";\n\n  let result: { selected: SetupAgent[] };\n  try {\n    result = await multiSelectWithContinue<SetupAgent>({\n      message: \"Which coding agents do you use?\",\n      hint: \"↑/↓ navigate · space to toggle · enter on Continue when ready\",\n      items: [\n        {\n          value: REMIX_CLAUDE_PLUGIN.agent,\n          title: REMIX_CLAUDE_PLUGIN.agentLabel,\n          description: \"Install the Remix Claude Code plugin and hooks.\",\n          selected: claudeProbe.available,\n          badge: claudeBadge,\n        },\n        {\n          value: REMIX_CURSOR_PLUGIN.agent,\n          title: REMIX_CURSOR_PLUGIN.agentLabel,\n          description: \"Install the Remix Cursor plugin and MCP server.\",\n          selected: cursorProbe.available,\n          badge: cursorBadge,\n        },\n      ],\n      summary: (selected) =>\n        selected.length === 0\n          ? pc.dim(\"(none)\")\n          : selected.map((item) => item.title).join(\", \"),\n    });\n  } catch (error) {\n    if (error instanceof MultiSelectCancelledError) throwCancelled();\n    throw error;\n  }\n\n  return result.selected.length > 0 ? result.selected : [REMIX_CLAUDE_PLUGIN.agent];\n}\n\nasync function selectClaudePluginAction(params: {\n  requestedAction: ClaudePluginAction;\n  skipPluginInstall: boolean;\n  scope: ClaudePluginScope;\n  yes: boolean;\n}): Promise<ClaudePluginAction> {\n  if (params.skipPluginInstall) return \"skip\";\n  if (params.requestedAction !== \"auto\") return params.requestedAction;\n\n  const claudeStatus = await getClaudePluginStatus({ scope: params.scope });\n\n  if (params.yes || !isInteractive()) {\n    if (claudeStatus.status === \"missing\") return \"install\";\n    if (claudeStatus.status === \"outdated\") return \"update\";\n    if (claudeStatus.status === \"broken\" && !claudeStatus.claudeBinaryAvailable) return \"skip\";\n    return \"auto\";\n  }\n\n  // Build the per-branch choice list together with the initial cursor index.\n  // We keep them paired so the default selection always points at a real\n  // entry in `choices` — when we add or remove options below the indices\n  // stay in sync.\n  const installedVersion = claudeStatus.installedVersion ?? null;\n  const installedTag = pc.dim(\n    installedVersion ? `(already installed: v${installedVersion})` : \"(already installed)\",\n  );\n\n  let choices: { title: string; description: string; value: ClaudePluginAction }[];\n  let initialIndex: number;\n  let fallbackAction: ClaudePluginAction;\n\n  if (claudeStatus.status === \"missing\") {\n    choices = [\n      {\n        title: \"Install the plugin\",\n        description: \"Add the Remix marketplace and install the Claude Code plugin.\",\n        value: \"install\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Claude Code.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"install\";\n  } else if (claudeStatus.status === \"outdated\") {\n    choices = [\n      {\n        title: \"Update the plugin\",\n        description: `Install the expected Remix Claude plugin version ${claudeStatus.expectedVersion ?? REMIX_CLAUDE_PLUGIN.version}.`,\n        value: \"update\",\n      },\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Uninstall and reinstall the Remix Claude plugin in Claude Code.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Claude Code.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"update\";\n  } else if (claudeStatus.status === \"broken\" && !claudeStatus.claudeBinaryAvailable) {\n    // Claude Code itself isn't installed. We don't try to install it for the\n    // user — that's an Anthropic-managed binary outside our scope — but we\n    // also don't want to silently fall through to a single \"Skip\" choice\n    // (which is what the previous flow did). Print a prominent, actionable\n    // message so the requirement and the fix are unmissable, then offer Skip\n    // as the only choice (re-run after installing Claude to actually\n    // configure the plugin).\n    printClaudeMissingNotice();\n    choices = [\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Claude Code. Re-run `remix setup` after installing Claude.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"skip\";\n  } else if (claudeStatus.status === \"stale_or_unverified\" || claudeStatus.status === \"broken\") {\n    choices = [\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Rebuild the Remix Claude plugin installation before continuing setup.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Claude Code.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"reinstall\";\n  } else {\n    // Healthy: the plugin is already installed at the expected version. The\n    // \"Use the installed plugin\" option is functionally a no-op (it just\n    // proceeds with what's already there), so to avoid users idly hitting\n    // Enter and triggering a redundant verify pass, we:\n    //   1. Tag the no-op choice with \"(already installed: v<ver>)\" so the\n    //      state is obvious at a glance.\n    //   2. Default the cursor to \"Skip plugin installation\", which is the\n    //      semantically equivalent fast path for a fully healthy install.\n    choices = [\n      {\n        title: `Use the installed plugin ${installedTag}`,\n        description: \"Keep the current Remix Claude plugin and continue.\",\n        value: \"auto\",\n      },\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Uninstall and reinstall the Remix Claude plugin in Claude Code.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Claude Code.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = choices.findIndex((c) => c.value === \"skip\");\n    if (initialIndex < 0) initialIndex = 0;\n    fallbackAction = \"auto\";\n  }\n\n  const answer = await prompts(\n    {\n      type: \"select\",\n      name: \"pluginAction\",\n      message: \"How should Remix configure the Claude Code plugin?\",\n      choices,\n      initial: initialIndex,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  return (answer.pluginAction as ClaudePluginAction | undefined) ?? fallbackAction;\n}\n\nasync function selectCursorPluginAction(params: {\n  requestedAction: CursorPluginAction;\n  skipPluginInstall: boolean;\n  destination?: string;\n  yes: boolean;\n}): Promise<CursorPluginAction> {\n  if (params.skipPluginInstall) return \"skip\";\n  if (params.requestedAction !== \"auto\") return params.requestedAction;\n\n  const cursorStatus = await getCursorPluginStatus({ destination: params.destination });\n\n  if (params.yes || !isInteractive()) {\n    if (cursorStatus.status === \"missing\") return \"install\";\n    if (cursorStatus.status === \"outdated\") return \"update\";\n    return \"auto\";\n  }\n\n  const installedTag = pc.dim(\n    cursorStatus.installedVersion ? `(already installed: v${cursorStatus.installedVersion})` : \"(already installed)\",\n  );\n\n  let choices: { title: string; description: string; value: CursorPluginAction }[];\n  let initialIndex: number;\n  let fallbackAction: CursorPluginAction;\n\n  if (cursorStatus.status === \"missing\") {\n    choices = [\n      {\n        title: \"Install the plugin\",\n        description: \"Install the configured Remix Cursor plugin from npm.\",\n        value: \"install\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Cursor.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"install\";\n  } else if (cursorStatus.status === \"outdated\") {\n    choices = [\n      {\n        title: \"Update the plugin\",\n        description: `Install the configured Remix Cursor plugin version ${cursorStatus.expectedVersion ?? \"from npm\"}.`,\n        value: \"update\",\n      },\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Replace the local Cursor plugin directory with a fresh npm package.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Cursor.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"update\";\n  } else if (cursorStatus.status === \"stale_or_unverified\" || cursorStatus.status === \"broken\") {\n    choices = [\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Replace the local Cursor plugin directory with a fresh npm package.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Cursor.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = 0;\n    fallbackAction = \"reinstall\";\n  } else {\n    choices = [\n      {\n        title: `Use the installed plugin ${installedTag}`,\n        description: \"Keep the current Remix Cursor plugin and continue.\",\n        value: \"auto\",\n      },\n      {\n        title: \"Reinstall the plugin\",\n        description: \"Replace the local Cursor plugin directory with a fresh npm package.\",\n        value: \"reinstall\",\n      },\n      {\n        title: \"Skip plugin installation\",\n        description: \"Continue setup without changing Cursor.\",\n        value: \"skip\",\n      },\n    ];\n    initialIndex = choices.findIndex((c) => c.value === \"skip\");\n    if (initialIndex < 0) initialIndex = 0;\n    fallbackAction = \"auto\";\n  }\n\n  const answer = await prompts(\n    {\n      type: \"select\",\n      name: \"pluginAction\",\n      message: \"How should Remix configure the Cursor plugin?\",\n      choices,\n      initial: initialIndex,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  return (answer.pluginAction as CursorPluginAction | undefined) ?? fallbackAction;\n}\n\nasync function selectWorkflow(params: {\n  workflow?: SetupWorkflow | null;\n  yes: boolean;\n}): Promise<SetupWorkflow> {\n  if (params.workflow) return params.workflow;\n  if (params.yes || !isInteractive()) return \"none\";\n\n  const answer = await prompts(\n    {\n      type: \"select\",\n      name: \"workflow\",\n      message: \"What do you want to work on right now?\",\n      choices: [\n        {\n          title: \"Initialize this local repository in Remix\",\n          description: \"Bind the current git repository to a new or existing Remix app.\",\n          value: \"init\",\n        },\n        {\n          title: \"Check out an existing Remix app locally\",\n          description: \"Create a local checkout for an app you can already access.\",\n          value: \"checkout\",\n        },\n        {\n          title: \"Create a remix from an existing app locally\",\n          description: \"Fork an app into a new local Remix checkout.\",\n          value: \"remix\",\n        },\n        {\n          title: \"Stop after setup\",\n          description: \"Finish authentication and agent setup without starting a repo workflow.\",\n          value: \"none\",\n        },\n      ],\n      initial: 0,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  return (answer.workflow as SetupWorkflow | undefined) ?? \"none\";\n}\n\nfunction normalizeVisibleApps(value: unknown): VisibleApp[] {\n  if (!value || typeof value !== \"object\") return [];\n  const apps = (value as { apps?: unknown }).apps;\n  if (!Array.isArray(apps)) return [];\n  return apps\n    .map((entry) => {\n      if (!entry || typeof entry !== \"object\") return null;\n      const item = entry as Record<string, unknown>;\n      const id = typeof item.id === \"string\" ? item.id : null;\n      if (!id) return null;\n      return {\n        id,\n        name: typeof item.name === \"string\" ? item.name : null,\n        status: typeof item.status === \"string\" ? item.status : null,\n        projectId: typeof item.projectId === \"string\" ? item.projectId : null,\n        forkedFromAppId: typeof item.forkedFromAppId === \"string\" ? item.forkedFromAppId : null,\n      };\n    })\n    .filter((entry): entry is VisibleApp => entry !== null);\n}\n\n// Result of resolving the app for a checkout/remix flow. We surface the\n// app's display `name` alongside the id so callers can drive UX that\n// depends on the human-readable label (e.g. previewing the destination\n// folder) without paying for a second API round-trip.\ntype SelectedApp = {\n  id: string;\n  // `null` when we couldn't recover the name — happens if the explicit\n  // `--app-id` lookup fails (network/permission) or we never fetched\n  // the apps list. Callers must tolerate this and fall back to a\n  // placeholder.\n  name: string | null;\n};\n\n// Pull the human-readable `name` out of a `getApp` response so the\n// preview path can show what `materializeAppCheckout` would actually\n// create. Tolerates the various shapes the API has used over time\n// (`{ name }` at the root, or nested under `app`).\nfunction extractAppNameFromGetAppResponse(record: JsonRecord): string | null {\n  const direct = typeof record.name === \"string\" ? record.name : null;\n  if (direct) return direct;\n  const nested = record.app;\n  if (nested && typeof nested === \"object\") {\n    const inner = (nested as Record<string, unknown>).name;\n    if (typeof inner === \"string\") return inner;\n  }\n  return null;\n}\n\nasync function selectApp(params: {\n  appId?: string | null;\n  workflow: SetupWorkflow;\n  yes: boolean;\n  // Authed API client. When provided, we use it to resolve the app's\n  // display name on the explicit `--app-id` path so the working-dir\n  // preview can show the real folder name instead of `<your-checkout>`.\n  // Optional so any future caller without an API instance still works\n  // (it just falls back to `name: null`).\n  api?: ApiClient;\n}): Promise<SelectedApp | null> {\n  if (params.workflow !== \"checkout\" && params.workflow !== \"remix\") return null;\n  const explicitId = params.appId?.trim();\n  // Explicit `--app-id` short-circuits the interactive picker. We do\n  // make one targeted `getApp` call (when `api` is available) so the\n  // downstream working-dir preview can show the real folder name. The\n  // lookup is best-effort: any failure (network, permissions, deleted\n  // app) falls back to `name: null` and the placeholder rendering — we\n  // don't want to block a perfectly valid `--app-id` invocation on a\n  // cosmetic preview.\n  if (explicitId) {\n    let resolvedName: string | null = null;\n    if (params.api) {\n      try {\n        const record = unwrapResponseObject<JsonRecord>(await params.api.getApp(explicitId), \"app\");\n        resolvedName = extractAppNameFromGetAppResponse(record);\n      } catch {\n        resolvedName = null;\n      }\n    }\n    return { id: explicitId, name: resolvedName };\n  }\n\n  const result = await collabList({\n    json: true,\n    yes: params.yes,\n    ownership: \"all\",\n    accessScope: \"explicit_member\",\n  });\n  const apps = normalizeVisibleApps(result);\n  if (apps.length === 0) {\n    throw new CliError(\"No Remix apps are available for checkout or remix.\", {\n      exitCode: 1,\n      hint: \"Ask a teammate to invite you to an app, or initialize a repository with `remix collab init` first.\",\n    });\n  }\n  if (apps.length === 1) return { id: apps[0].id, name: apps[0].name };\n  if (params.yes || !isInteractive()) {\n    throw new CliError(`Multiple apps are available. Pass --app-id when using --workflow ${params.workflow}.`, {\n      exitCode: 2,\n      hint: \"Use `remix collab list --json` to inspect visible apps and choose one explicitly.\",\n    });\n  }\n\n  const answer = await prompts(\n    {\n      type: \"select\",\n      name: \"appId\",\n      message: params.workflow === \"checkout\" ? \"Which app should Remix check out locally?\" : \"Which app should Remix fork locally?\",\n      choices: apps.map((app) => ({\n        title: app.name ? `${app.name}` : app.id,\n        description: [app.id, app.status ? `status=${app.status}` : null, app.forkedFromAppId ? `forkOf=${app.forkedFromAppId}` : \"original\"]\n          .filter(Boolean)\n          .join(\"  \"),\n        value: app.id,\n      })),\n      initial: 0,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  const pickedId = typeof answer.appId === \"string\" ? answer.appId : null;\n  if (!pickedId) return null;\n  const picked = apps.find((app) => app.id === pickedId) ?? null;\n  return { id: pickedId, name: picked?.name ?? null };\n}\n\nasync function selectRemixName(params: {\n  workflow: SetupWorkflow;\n  name?: string | null;\n  yes: boolean;\n}): Promise<string | null> {\n  if (params.workflow !== \"remix\") return null;\n  if (params.name?.trim()) return params.name.trim();\n  if (params.yes || !isInteractive()) return null;\n\n  const answer = await prompts(\n    {\n      type: \"text\",\n      name: \"remixName\",\n      message: \"Optional name for the new remix checkout\",\n    },\n    { onCancel: throwCancelled },\n  );\n\n  const remixName = typeof answer.remixName === \"string\" ? answer.remixName.trim() : \"\";\n  return remixName.length > 0 ? remixName : null;\n}\n\nfunction buildRecommendedNextSteps(params: {\n  workflow: SetupWorkflow;\n  claudePluginResult: ClaudePluginInstallResult | null;\n  cursorPluginResult: CursorPluginInstallResult | null;\n  workflowResult: JsonRecord | null;\n  workingDirectory: SetupWorkingDirectoryResult;\n}): string[] {\n  const nextSteps: string[] = [];\n  if (params.claudePluginResult) {\n    nextSteps.push(...params.claudePluginResult.recommendedNextSteps);\n  }\n  if (params.cursorPluginResult) {\n    nextSteps.push(...params.cursorPluginResult.recommendedNextSteps);\n  }\n\n  if (params.workflow === \"none\") {\n    nextSteps.push(\"Run `remix setup` again when you are ready to bind, check out, or remix a repository.\");\n    return Array.from(new Set(nextSteps));\n  }\n\n  // Decide which directory the user should `cd` into next. For checkout /\n  // remix it's the freshly created repoRoot; for init it's the picked\n  // working folder iff they changed it (otherwise their shell is already\n  // there). `null` means no `cd` is needed. We only emit the cd line when\n  // it's actually different from the parent shell's cwd to avoid noise.\n  const repoRoot = getWorkflowRepoRoot(params.workflowResult);\n  const targetCwd =\n    params.workflow === \"checkout\" || params.workflow === \"remix\"\n      ? repoRoot\n      : params.workingDirectory.changed\n        ? params.workingDirectory.selectedCwd\n        : null;\n  if (targetCwd) {\n    nextSteps.push(`cd ${targetCwd}`);\n  }\n  // Tell the user to open their coding agent next. We mention the agents\n  // we just configured so the hint is concrete (\"open Claude Code or\n  // Cursor\") rather than vague. Falls back to a generic phrase if we\n  // don't have a healthy plugin to recommend.\n  nextSteps.push(`Then open ${describeInstalledAgentsForHint(params)} to work with Remix.`);\n\n  return Array.from(new Set(nextSteps));\n}\n\n// Render a human-readable list of the coding agents that ended up with a\n// healthy Remix plugin after setup. Used by both the printed summary and\n// the structured `recommendedNextSteps` so the two surfaces stay in\n// sync. Returns a generic placeholder when nothing is healthy so the\n// surrounding sentence still reads correctly.\nfunction describeInstalledAgentsForHint(params: {\n  claudePluginResult: ClaudePluginInstallResult | null;\n  cursorPluginResult: CursorPluginInstallResult | null;\n}): string {\n  const labels: string[] = [];\n  if (params.claudePluginResult && params.claudePluginResult.status === \"healthy\") {\n    labels.push(REMIX_CLAUDE_PLUGIN.agentLabel);\n  }\n  if (params.cursorPluginResult && params.cursorPluginResult.status === \"healthy\") {\n    labels.push(REMIX_CURSOR_PLUGIN.agentLabel);\n  }\n  if (labels.length === 0) return \"your coding agent\";\n  if (labels.length === 1) return labels[0];\n  return `${labels.slice(0, -1).join(\", \")} or ${labels[labels.length - 1]}`;\n}\n\nfunction getWorkflowRepoRoot(workflowResult: JsonRecord | null): string | null {\n  return typeof workflowResult?.repoRoot === \"string\" ? workflowResult.repoRoot : null;\n}\n\nfunction printSetupSummary(result: SetupResult): void {\n  const claude = result.agentSetup.claude;\n  const cursor = result.agentSetup.cursor;\n  const repoRoot = getWorkflowRepoRoot(result.workflowResult);\n\n  if (claude?.changed && claude.status === \"healthy\") {\n    const actionLabel =\n      claude.action === \"install\"\n        ? \"Installed\"\n        : claude.action === \"update\"\n          ? \"Updated\"\n          : claude.action === \"reinstall\"\n            ? \"Reinstalled\"\n            : claude.action === \"repair\"\n              ? \"Repaired\"\n              : null;\n    if (actionLabel) {\n      console.log(pc.green(`${actionLabel} the Remix Claude plugin.`));\n    }\n  }\n\n  if (cursor?.changed && cursor.status === \"healthy\") {\n    const actionLabel =\n      cursor.action === \"install\"\n        ? \"Installed\"\n        : cursor.action === \"update\"\n          ? \"Updated\"\n          : cursor.action === \"reinstall\"\n            ? \"Reinstalled\"\n            : null;\n    if (actionLabel) {\n      console.log(pc.green(`${actionLabel} the Remix Cursor plugin.`));\n      console.log(pc.dim(\"If Cursor is already open, run `Developer: Reload Window`.\"));\n    }\n  }\n\n  if (result.selectedWorkflow.workflow === \"none\") {\n    console.log(pc.green(\"Remix setup is ready.\"));\n    return;\n  }\n\n  if (result.selectedWorkflow.workflow === \"init\") {\n    console.log(pc.green(\"Initialized this repository in Remix.\"));\n    // Mirror the invite hint emitted by `remix collab init`'s direct CLI\n    // path. Setup invokes collabInit with json:true (so it can attach the\n    // structured workflowResult), which suppresses the inner printer — we\n    // re-print the hint here so setup users see the same guidance. Only on\n    // a brand-new init: when reused=true the project already exists with\n    // its own collaborators.\n    const wf = result.workflowResult as { reused?: unknown } | null;\n    if (wf && wf.reused !== true) {\n      console.log(\n        pc.dim(\n          \"Invite teammates anytime: ask your agent to invite their email, or run `remix collab invite <email>`.\",\n        ),\n      );\n    }\n    // For init we only need a `cd` when the user picked a different\n    // working folder during setup; otherwise their shell is already in\n    // the right place and a cd line would be confusing.\n    printOpenAgentNextSteps(result, result.workingDirectory.changed ? result.workingDirectory.selectedCwd : null);\n    return;\n  }\n\n  if (result.selectedWorkflow.workflow === \"checkout\") {\n    console.log(pc.green(`Checked out the app to ${repoRoot ?? \"the target directory\"}.`));\n    printOpenAgentNextSteps(result, repoRoot);\n    return;\n  }\n\n  console.log(pc.green(`Created a remix at ${repoRoot ?? \"the target directory\"}.`));\n  printOpenAgentNextSteps(result, repoRoot);\n}\n\n// Render the post-setup \"what to do next\" block: a `cd` line (when\n// needed) followed by a separate line telling the user to open their\n// coding agent. Mentions the agents that ended up with a healthy Remix\n// plugin so the instruction is concrete. Mirrors the structured\n// `recommendedNextSteps` produced by `buildRecommendedNextSteps`.\nfunction printOpenAgentNextSteps(result: SetupResult, targetCwd: string | null): void {\n  const agentLabel = describeInstalledAgentsForHint({\n    claudePluginResult: result.agentSetup.claude,\n    cursorPluginResult: result.agentSetup.cursor,\n  });\n  console.log(\"\");\n  console.log(pc.cyan(pc.bold(\"▸ Next steps:\")));\n  if (targetCwd) {\n    console.log(`  ${pc.bold(`cd ${targetCwd}`)}`);\n  }\n  console.log(`  Then open ${pc.bold(agentLabel)} to start working with Remix.`);\n}\n\n// \"Fast path\" applies when the user runs `remix setup --workflow checkout`\n// AND already has at least one Remix agent plugin installed (Claude or\n// Cursor). In that case we treat the user as already-configured: we skip\n// every plugin-related prompt (agent picker, install/update/reinstall\n// chooser) and force the plugin actions to \"skip\", so we land directly on\n// the \"confirm working folder\" step. The signal here is intentionally weak\n// (one installed plugin is enough) because the only thing that breaks if\n// we're wrong is that the user has to re-run setup without --workflow\n// checkout to fix their plugin install — a much smaller annoyance than\n// re-prompting on every checkout.\ntype CheckoutFastPathResult = {\n  selectedAgents: SetupAgent[];\n  installed: { claude: boolean; cursor: boolean };\n};\n\nasync function maybeCheckoutFastPath(params: {\n  workflow: SetupWorkflow | null | undefined;\n  agentOverride: SetupAgent | null;\n  claudePluginScope: ClaudePluginScope;\n  cursorPluginDestination?: string;\n  claudePluginAction?: ClaudePluginAction;\n  cursorPluginAction?: CursorPluginAction;\n  skipPluginInstall: boolean;\n}): Promise<CheckoutFastPathResult | null> {\n  if (params.workflow !== \"checkout\") return null;\n  // If the user explicitly asked us to install/update/reinstall a plugin,\n  // honor that intent — they're using checkout but they also told us to\n  // touch the plugin, so don't silently swallow that request.\n  if (isExplicitClaudePluginAction(params.claudePluginAction)) return null;\n  if (isExplicitCursorPluginAction(params.cursorPluginAction)) return null;\n\n  // Probe both plugins in parallel. Both helpers fail soft (return a\n  // result describing the broken state rather than throwing), but wrap\n  // them in catch() anyway so a transient failure here can't block the\n  // checkout the user is trying to run.\n  const [claudeStatus, cursorStatus] = await Promise.all([\n    getClaudePluginStatus({ scope: params.claudePluginScope }).catch(() => null),\n    getCursorPluginStatus({ destination: params.cursorPluginDestination }).catch(() => null),\n  ]);\n\n  const installed = {\n    claude: Boolean(claudeStatus?.pluginInstalled),\n    cursor: Boolean(cursorStatus?.pluginInstalled),\n  };\n  if (!installed.claude && !installed.cursor) return null;\n\n  // selectedAgents drives `shouldConfigureClaude/Cursor` further down,\n  // which in turn controls whether ensureClaudePluginInstalled /\n  // ensureCursorPluginInstalled run at all (they're already no-ops with\n  // action: \"skip\", but skipping the call entirely is cleaner). If the\n  // user explicitly named an agent, honor it; otherwise default to the\n  // set of agents that are actually installed on this machine.\n  if (params.agentOverride) {\n    return { selectedAgents: [params.agentOverride], installed };\n  }\n  const selectedAgents: SetupAgent[] = [];\n  if (installed.claude) selectedAgents.push(REMIX_CLAUDE_PLUGIN.agent);\n  if (installed.cursor) selectedAgents.push(REMIX_CURSOR_PLUGIN.agent);\n  return { selectedAgents, installed };\n}\n\nfunction printCheckoutFastPathNotice(installed: { claude: boolean; cursor: boolean }): void {\n  const parts: string[] = [];\n  if (installed.claude) parts.push(REMIX_CLAUDE_PLUGIN.agentLabel);\n  if (installed.cursor) parts.push(REMIX_CURSOR_PLUGIN.agentLabel);\n  const list = parts.length === 2 ? `${parts[0]} and ${parts[1]}` : parts[0] ?? \"Remix\";\n  console.log(pc.dim(`Detected ${list} plugin already installed — skipping plugin checks for checkout.`));\n}\n\nexport async function setupRemix(params: SetupParams): Promise<SetupResult> {\n  await refreshSetupMetadata({ yes: params.yes });\n\n  const claudePluginScope = params.claudePluginScope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n\n  const fastPath = await maybeCheckoutFastPath({\n    workflow: params.workflow,\n    agentOverride: params.agent ?? null,\n    claudePluginScope,\n    cursorPluginDestination: params.cursorPluginDestination,\n    claudePluginAction: params.claudePluginAction,\n    cursorPluginAction: params.cursorPluginAction,\n    skipPluginInstall: Boolean(params.skipPluginInstall),\n  });\n  if (fastPath && !params.json) {\n    printCheckoutFastPathNotice(fastPath.installed);\n  }\n\n  const selectedAgents = fastPath\n    ? fastPath.selectedAgents\n    : await selectAgents({ agent: params.agent, yes: params.yes });\n  const selectedAgent = selectedAgents[0] ?? REMIX_CLAUDE_PLUGIN.agent;\n  const shouldConfigureClaude = selectedAgents.includes(REMIX_CLAUDE_PLUGIN.agent);\n  const shouldConfigureCursor = selectedAgents.includes(REMIX_CURSOR_PLUGIN.agent);\n  const claudePluginAction: ClaudePluginAction = fastPath\n    ? \"skip\"\n    : shouldConfigureClaude\n      ? await selectClaudePluginAction({\n          requestedAction: params.skipPluginInstall ? \"skip\" : (params.claudePluginAction ?? \"auto\"),\n          skipPluginInstall: Boolean(params.skipPluginInstall),\n          scope: claudePluginScope,\n          yes: params.yes,\n        })\n      : \"skip\";\n  const cursorPluginAction: CursorPluginAction = fastPath\n    ? \"skip\"\n    : shouldConfigureCursor\n      ? await selectCursorPluginAction({\n          requestedAction: params.skipPluginInstall ? \"skip\" : (params.cursorPluginAction ?? \"auto\"),\n          skipPluginInstall: Boolean(params.skipPluginInstall),\n          destination: params.cursorPluginDestination,\n          yes: params.yes,\n        })\n      : \"skip\";\n\n  const genericPrereqs = await checkSetupPrerequisites({\n    cwd: params.cwd,\n    yes: params.yes,\n    agent: selectedAgents,\n    pluginAction: claudePluginAction,\n    cursorPluginAction,\n  });\n  ensureNoBlockingPrereqs(genericPrereqs);\n\n  const api = await createAuthedApi({ yes: params.yes, json: params.json });\n  const me = unwrapResponseObject<JsonRecord>(await api.getMe(), \"current user\");\n\n  const auth: SetupAuthResult = {\n    status: \"authenticated\",\n    user: {\n      id: typeof me.id === \"string\" ? me.id : null,\n      name: typeof me.name === \"string\" ? me.name : null,\n      email: typeof me.email === \"string\" ? me.email : null,\n      organizationId: typeof me.organizationId === \"string\" ? me.organizationId : null,\n    },\n  };\n\n  const claude =\n    shouldConfigureClaude\n      ? await ensureClaudePluginInstalled({\n          action: claudePluginAction,\n          scope: claudePluginScope,\n          remixCliPath: params.remixCliPath,\n          confirmAutoHardRepair: () => confirmClaudeHardRepairDuringSetup(params.yes),\n        })\n      : null;\n  const cursor =\n    shouldConfigureCursor\n      ? await ensureCursorPluginInstalled({\n          action: cursorPluginAction,\n          destination: params.cursorPluginDestination,\n          remixCliPath: params.remixCliPath,\n        })\n      : null;\n\n  if (!params.skipPluginInstall && claude && isExplicitClaudePluginAction(claudePluginAction) && claude.status !== \"healthy\") {\n    throw new CliError(`Claude plugin ${claudePluginAction} failed.`, {\n      exitCode: 2,\n      hint:\n        claude.remediationHint ??\n        claude.recommendedNextSteps.join(\"\\n\") ??\n        \"Inspect the Claude plugin status with `remix claude status` and retry once the issue is resolved.\",\n    });\n  }\n  if (!params.skipPluginInstall && cursor && isExplicitCursorPluginAction(cursorPluginAction) && cursor.status !== \"healthy\") {\n    throw new CliError(`Cursor plugin ${cursorPluginAction} failed.`, {\n      exitCode: 2,\n      hint:\n        cursor.remediationHint ??\n        cursor.recommendedNextSteps.join(\"\\n\") ??\n        \"Inspect the Cursor plugin status with `remix cursor status` and retry once the issue is resolved.\",\n    });\n  }\n\n  // System-level questions (agent, plugin) are done. Switch to repo-level\n  // questions.\n  //\n  // Question order matters here. The \"which folder?\" prompt previously\n  // came first, but for `checkout` / `remix` flows the picked folder is\n  // the *parent* of a new subfolder Remix will create, and the name of\n  // that subfolder is derived from the chosen app (or `--name`). Asking\n  // for the folder before resolving the app meant we could only render\n  // a `<your-checkout>` placeholder in the preview — leaving users to\n  // wonder \"didn't we already know what this was going to be called?\".\n  //\n  // We now resolve workflow → app → name *first*, then ask the working\n  // dir question with the real `previewName` plumbed through. For\n  // `init` / `none` (or unknown) the order is functionally equivalent\n  // because no child folder is created and the preview is suppressed.\n  // None of `selectWorkflow` / `selectApp` / `selectRemixName` depends\n  // on the cwd, so reordering is a pure UX win.\n  const workflow = await selectWorkflow({\n    workflow: params.workflow,\n    yes: params.yes,\n  });\n  const selectedApp = await selectApp({\n    appId: params.appId,\n    workflow,\n    yes: params.yes,\n    // Plumb the authed client through so explicit `--app-id` invocations\n    // can resolve the real app name for the preview line. Without this\n    // the explicit path would always fall back to `<your-checkout>`.\n    api,\n  });\n  const appId = selectedApp?.id ?? null;\n  const remixName = await selectRemixName({\n    workflow,\n    name: params.name,\n    yes: params.yes,\n  });\n\n  // Preview-name resolution: the `remix` workflow honors `--name` first\n  // (that's what `materializeAppCheckout` does too), falling back to the\n  // app's own name. `checkout` always uses the app name. Anything else\n  // gets `null` and the preview helper renders nothing for those flows.\n  const previewName =\n    workflow === \"remix\"\n      ? remixName ?? selectedApp?.name ?? null\n      : workflow === \"checkout\"\n        ? selectedApp?.name ?? null\n        : null;\n\n  // Skip the \"confirm working folder\" prompt when the user picked\n  // \"Stop after setup\" (workflow === \"none\"). No checkout/init runs in\n  // that case, so asking which folder to operate against is pure noise —\n  // the answer is \"doesn't matter\" and the prompt makes the flow feel\n  // unfinished after the user explicitly said they're done.\n  const dirChoice =\n    workflow === \"none\"\n      ? { cwd: path.resolve(params.cwd), changed: false }\n      : await selectWorkingDirectory({\n          cwd: params.cwd,\n          cwdExplicit: Boolean(params.cwdExplicit),\n          yes: params.yes,\n          workflow,\n          outputDir: params.outputDir ?? null,\n          previewName,\n        });\n  if (dirChoice.changed) {\n    process.chdir(dirChoice.cwd);\n  }\n  const workingCwd = dirChoice.cwd;\n  const workingDirectory: SetupWorkingDirectoryResult = {\n    originalCwd: params.cwd,\n    selectedCwd: workingCwd,\n    changed: dirChoice.changed,\n  };\n\n  const finalPrereqs = await checkSetupPrerequisites({\n    cwd: workingCwd,\n    yes: params.yes,\n    workflow,\n    agent: selectedAgents,\n    pluginAction: claudePluginAction,\n    cursorPluginAction,\n  });\n  ensureNoBlockingPrereqs(finalPrereqs);\n\n  let workflowResult: JsonRecord | null = null;\n  if (workflow === \"init\") {\n    workflowResult = (await collabInit({\n      cwd: workingCwd,\n      appName: null,\n      forceNew: false,\n      json: true,\n      yes: params.yes,\n    })) as JsonRecord;\n  } else if (workflow === \"checkout\") {\n    workflowResult = (await collabCheckout({\n      cwd: workingCwd,\n      outputDir: params.outputDir ?? null,\n      appId,\n      skipLaneMaterialization: params.skipLaneMaterialization ?? false,\n      json: true,\n      yes: params.yes,\n    })) as JsonRecord;\n  } else if (workflow === \"remix\") {\n    workflowResult = (await collabRemix({\n      cwd: workingCwd,\n      outputDir: params.outputDir ?? null,\n      appId,\n      json: true,\n      yes: params.yes,\n      name: remixName,\n    })) as JsonRecord;\n  }\n\n  const warnings = Array.from(\n    new Set([\n      ...finalPrereqs.warnings,\n      ...(claude?.warnings ?? []),\n      ...(cursor?.warnings ?? []),\n      ...extractWarnings(workflowResult),\n      ...(claude?.remediationHint ? [claude.remediationHint] : []),\n      ...(cursor?.remediationHint ? [cursor.remediationHint] : []),\n    ].filter(Boolean)),\n  );\n\n  const result: SetupResult = {\n    auth,\n    prerequisites: finalPrereqs,\n    agentSetup: {\n      selectedAgent,\n      selectedAgents,\n      claude,\n      cursor,\n    },\n    workingDirectory,\n    selectedWorkflow: {\n      workflow,\n      appId,\n      outputDir: params.outputDir ?? null,\n      remixName,\n    },\n    workflowResult,\n    warnings,\n    recommendedNextSteps: buildRecommendedNextSteps({\n      workflow,\n      claudePluginResult: claude,\n      cursorPluginResult: cursor,\n      workflowResult,\n      workingDirectory,\n    }),\n  };\n\n  if (!params.json) {\n    printSetupSummary(result);\n  }\n\n  return result;\n}\n","import readline from \"node:readline\";\nimport pc from \"picocolors\";\n\n// A small interactive multi-select picker that renders a list of\n// toggleable items followed by a literal \"Continue\" footer item.\n//\n// Why we don't reuse `prompts.multiselect` here: the standard\n// multi-select control puts the \"press enter to submit\" affordance in a\n// hint line above/below the list. Some flows want the submit affordance\n// to live *inside* the list as a focusable row (so users can navigate to\n// it with the same arrow keys they use for items). This helper provides\n// that shape without bringing in another dependency.\n//\n// Controls:\n//   ↑/↓ or j/k : move the cursor between rows (items + Continue)\n//   space      : toggle the item under the cursor (no-op on Continue)\n//   enter      : on an item → toggle; on Continue → submit\n//   esc / ^C   : cancel (rejects with `MultiSelectCancelledError`)\n\nexport type MultiSelectItem<T> = {\n  value: T;\n  title: string;\n  description?: string;\n  selected?: boolean;\n  // When true the item renders dimmed and cannot be toggled. We keep the\n  // row visible (so the user sees what's coming) but don't let them\n  // select it. Useful for \"coming soon\" entries.\n  disabled?: boolean;\n  // Optional trailing tag rendered after the title (e.g. \"coming soon\").\n  // Purely cosmetic — does not affect selection logic.\n  badge?: string;\n};\n\nexport type MultiSelectResult<T> = {\n  selected: T[];\n};\n\nexport class MultiSelectCancelledError extends Error {\n  constructor() {\n    super(\"Cancelled by user.\");\n    this.name = \"MultiSelectCancelledError\";\n  }\n}\n\nexport type MultiSelectOptions<T> = {\n  message: string;\n  items: MultiSelectItem<T>[];\n  // Optional one-line hint shown under the question. Defaults to a\n  // standard \"↑/↓ navigate · space toggle · enter Continue\" line.\n  hint?: string;\n  continueLabel?: string;\n  // Optional summary builder for the post-submit one-liner. Receives the\n  // values that ended up selected. When omitted we render the titles\n  // joined with commas.\n  summary?: (selected: MultiSelectItem<T>[]) => string;\n};\n\nexport async function multiSelectWithContinue<T>(\n  options: MultiSelectOptions<T>,\n): Promise<MultiSelectResult<T>> {\n  const items = options.items.map((item) => ({\n    ...item,\n    selected: Boolean(item.selected),\n  }));\n  const continueLabel = options.continueLabel ?? \"Continue\";\n  const hint =\n    options.hint ?? \"↑/↓ navigate · space toggle · enter to confirm Continue\";\n\n  if (!process.stdin.isTTY || !process.stdout.isTTY) {\n    // Defensive: callers are expected to gate this behind isInteractive(),\n    // but if we ever land here non-interactively just return whatever was\n    // pre-selected so we don't hang forever waiting for keypresses.\n    return {\n      selected: items.filter((item) => item.selected).map((item) => item.value),\n    };\n  }\n\n  // Default focus to the Continue row. Combined with auto-pre-checked\n  // items, this lets a user whose detected/intended selection is\n  // already correct simply press Enter to proceed; arrow keys take\n  // them into the list when they actually need to toggle something.\n  let cursor = items.length;\n\n  const stdout = process.stdout;\n  const stdin = process.stdin;\n  let lastRenderedLines = 0;\n\n  function renderFrame(): string[] {\n    const lines: string[] = [];\n    lines.push(`${pc.cyan(\"?\")} ${pc.bold(options.message)}`);\n    lines.push(pc.dim(hint));\n\n    items.forEach((item, index) => {\n      const isFocused = index === cursor;\n      const pointer = isFocused ? pc.cyan(\"›\") : \" \";\n      const checkbox = item.selected\n        ? pc.green(\"◉\")\n        : item.disabled\n          ? pc.dim(\"◯\")\n          : pc.dim(\"◯\");\n      const titleColor = item.disabled\n        ? pc.dim\n        : isFocused\n          ? (text: string) => pc.cyan(pc.bold(text))\n          : (text: string) => text;\n      const badge = item.badge\n        ? ` ${pc.dim(`(${item.badge})`)}`\n        : \"\";\n      const descLine =\n        item.description && (isFocused || item.selected)\n          ? `\\n    ${pc.dim(item.description)}`\n          : \"\";\n      lines.push(\n        `${pointer} ${checkbox} ${titleColor(item.title)}${badge}${descLine}`,\n      );\n    });\n\n    const continueIdx = items.length;\n    const continueFocused = cursor === continueIdx;\n    const continuePointer = continueFocused ? pc.cyan(\"›\") : \" \";\n    const continueText = continueFocused\n      ? pc.cyan(pc.bold(continueLabel))\n      : pc.bold(continueLabel);\n    const arrow = continueFocused ? pc.cyan(\"→\") : pc.dim(\"→\");\n    lines.push(`${continuePointer} ${arrow} ${continueText}`);\n\n    return lines;\n  }\n\n  function clearPreviousRender(): void {\n    if (lastRenderedLines === 0) return;\n    // After the previous paint we wrote a trailing newline, so the\n    // cursor sits one line *below* the last rendered row. Walk upward\n    // one row at a time, clearing as we go, until every previously\n    // rendered line is gone.\n    for (let i = 0; i < lastRenderedLines; i += 1) {\n      stdout.write(\"\\x1b[1A\");\n      stdout.write(\"\\x1b[2K\");\n    }\n    stdout.write(\"\\r\");\n  }\n\n  function paint(): void {\n    clearPreviousRender();\n    const lines = renderFrame();\n    // Each entry in `lines` may itself contain newlines (when we render a\n    // description on a sub-line); count the rendered terminal rows so the\n    // next clear knows how far to walk back.\n    const rendered = lines.join(\"\\n\");\n    stdout.write(`${rendered}\\n`);\n    lastRenderedLines = rendered.split(\"\\n\").length;\n  }\n\n  // Hide the cursor while the picker is on screen — keeps the output\n  // visually steady when arrow keys move focus.\n  stdout.write(\"\\x1b[?25l\");\n\n  readline.emitKeypressEvents(stdin);\n  const wasRaw = stdin.isRaw;\n  if (typeof stdin.setRawMode === \"function\") stdin.setRawMode(true);\n  stdin.resume();\n\n  return await new Promise<MultiSelectResult<T>>((resolve, reject) => {\n    function moveCursor(delta: number): void {\n      const total = items.length + 1;\n      cursor = (cursor + delta + total) % total;\n    }\n\n    function toggleCurrent(): void {\n      if (cursor >= items.length) return;\n      const target = items[cursor];\n      if (target.disabled) return;\n      target.selected = !target.selected;\n    }\n\n    function cleanup(): void {\n      stdin.removeListener(\"keypress\", onKeypress);\n      if (typeof stdin.setRawMode === \"function\") stdin.setRawMode(wasRaw);\n      stdin.pause();\n      stdout.write(\"\\x1b[?25h\");\n    }\n\n    function finish(): void {\n      const finalSelected = items.filter((item) => item.selected);\n      const summaryText = options.summary\n        ? options.summary(finalSelected)\n        : finalSelected.length > 0\n          ? finalSelected.map((item) => item.title).join(\", \")\n          : pc.dim(\"(none)\");\n      clearPreviousRender();\n      stdout.write(\n        `${pc.green(\"✔\")} ${pc.bold(options.message)} ${pc.dim(\"·\")} ${summaryText}\\n`,\n      );\n      lastRenderedLines = 0;\n      cleanup();\n      resolve({ selected: finalSelected.map((item) => item.value) });\n    }\n\n    function cancel(): void {\n      clearPreviousRender();\n      stdout.write(`${pc.red(\"✖\")} ${pc.bold(options.message)}\\n`);\n      lastRenderedLines = 0;\n      cleanup();\n      reject(new MultiSelectCancelledError());\n    }\n\n    function onKeypress(_str: string, key: readline.Key | undefined): void {\n      if (!key) return;\n      if (key.ctrl && key.name === \"c\") {\n        cancel();\n        return;\n      }\n      if (key.name === \"escape\") {\n        cancel();\n        return;\n      }\n      if (key.name === \"up\" || key.name === \"k\") {\n        moveCursor(-1);\n        paint();\n        return;\n      }\n      if (key.name === \"down\" || key.name === \"j\") {\n        moveCursor(1);\n        paint();\n        return;\n      }\n      if (key.name === \"home\") {\n        cursor = 0;\n        paint();\n        return;\n      }\n      if (key.name === \"end\") {\n        cursor = items.length;\n        paint();\n        return;\n      }\n      if (key.name === \"space\") {\n        toggleCurrent();\n        paint();\n        return;\n      }\n      if (key.name === \"return\" || key.name === \"enter\") {\n        if (cursor === items.length) {\n          finish();\n          return;\n        }\n        toggleCurrent();\n        paint();\n        return;\n      }\n    }\n\n    stdin.on(\"keypress\", onKeypress);\n    paint();\n  });\n}\n","import fs from \"node:fs/promises\";\nimport { readFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { execa } from \"execa\";\nimport pc from \"picocolors\";\n\nimport type { JsonRecord } from \"./serviceHelpers.js\";\nimport { findClaudeBinary, type ClaudeBinarySource } from \"./claudeBinary.js\";\nimport { resolveNodeRuntime, type NodeRuntime } from \"./nodeRuntime.js\";\nimport { detectClaudeBinary } from \"./setupPrereqs.js\";\nimport {\n  REMIX_CLAUDE_PLUGIN,\n  type ClaudePluginAction,\n  type ClaudePluginScope,\n} from \"./setupMetadata.js\";\nimport { refreshSetupMetadata } from \"./setupMetadataResolver.js\";\n\ntype ClaudeMarketplace = JsonRecord & {\n  name?: string;\n  source?: string;\n  repo?: string;\n  installLocation?: string;\n};\n\ntype ClaudeCommandResult = {\n  ok: boolean;\n  stdout: string;\n  stderr: string;\n  exitCode: number;\n};\n\ntype ClaudeJsonArrayResult = {\n  items: JsonRecord[];\n  error: string | null;\n};\n\ntype ClaudePluginInspection = {\n  claudeBinaryAvailable: boolean;\n  claudeVersion: string | null;\n  /** Where `claude` was discovered. Null when `available` is false. */\n  claudeBinarySource: ClaudeBinarySource | null;\n  /**\n   * Absolute path of the resolved Claude binary, included so the\n   * `remix claude status --json` output can show users exactly which\n   * binary the lifecycle is acting on (essential when multiple\n   * Claude installs coexist on the same machine). Null when none.\n   */\n  claudeBinaryArgv0: string | null;\n  marketplaceConfigured: boolean;\n  marketplaceSource: string | null;\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string | null;\n  pluginScope: string | null;\n  scopeMatchesRequested: boolean | null;\n  status: ClaudePluginHealthStatus;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n  details: JsonRecord | null;\n  doctorSummary: ClaudeDoctorSummary | null;\n  marketplaceEntry: JsonRecord | null;\n  pluginEntry: JsonRecord | null;\n};\n\ntype MarketplaceRefreshResult = {\n  ok: boolean;\n  marketplaceConfigured: boolean;\n  marketplaceSource: string | null;\n  warnings: string[];\n  remediationHint: string | null;\n};\n\ntype RepairPath = {\n  label: string;\n  path: string;\n};\n\ntype ClaudeRuntimePatchResult = {\n  runtime: NodeRuntime;\n  changed: boolean;\n  patchedFiles: string[];\n  warnings: string[];\n};\n\ntype RemixCliPathPatchResult = {\n  path: string;\n  envFile: string;\n  changed: boolean;\n};\n\nexport type ClaudePluginHealthStatus = \"healthy\" | \"missing\" | \"outdated\" | \"stale_or_unverified\" | \"broken\" | \"skipped\";\n\nexport type ClaudeDoctorSummary = {\n  attempted: boolean;\n  ok: boolean;\n  exitCode: number | null;\n  stdout: string | null;\n  stderr: string | null;\n  json: JsonRecord | null;\n};\n\nexport type ClaudePluginLifecycleAction = ClaudePluginAction | \"status\" | \"repair\" | \"uninstall\";\n\nexport type ClaudePluginLifecycleResult = {\n  action: ClaudePluginLifecycleAction;\n  status: ClaudePluginHealthStatus;\n  scope: ClaudePluginScope;\n  changed: boolean;\n  claudeBinaryAvailable: boolean;\n  claudeVersion: string | null;\n  /**\n   * Discovery provenance for the resolved Claude binary. Mirrored\n   * out of the inspection so JSON consumers (including the desktop\n   * app and `remix claude probe`) get a stable key without having\n   * to dig into `details`.\n   */\n  claudeBinarySource: ClaudeBinarySource | null;\n  claudeBinaryArgv0: string | null;\n  marketplaceConfigured: boolean;\n  marketplaceSource: string | null;\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string | null;\n  pluginScope: string | null;\n  scopeMatchesRequested: boolean | null;\n  doctorSummary: ClaudeDoctorSummary | null;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n  details?: JsonRecord | null;\n};\n\nexport type ClaudePluginInstallResult = ClaudePluginLifecycleResult;\ntype ConfirmAutoHardRepair = () => Promise<void>;\n\nfunction parseJsonArray(stdout: string): JsonRecord[] {\n  try {\n    const parsed = JSON.parse(stdout);\n    return Array.isArray(parsed) ? parsed.filter((entry) => entry && typeof entry === \"object\") : [];\n  } catch {\n    return [];\n  }\n}\n\nfunction parseJsonObject(stdout: string): JsonRecord | null {\n  try {\n    const parsed = JSON.parse(stdout);\n    return parsed && typeof parsed === \"object\" && !Array.isArray(parsed) ? (parsed as JsonRecord) : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction extractString(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction extractNestedString(value: unknown, keys: string[]): string | null {\n  if (!value || typeof value !== \"object\") return null;\n  const record = value as Record<string, unknown>;\n  for (const key of keys) {\n    const candidate = extractString(record[key]);\n    if (candidate) return candidate;\n  }\n  return null;\n}\n\nfunction normalizeScope(value: string | null | undefined): ClaudePluginScope | null {\n  if (value === \"user\" || value === \"project\" || value === \"local\") return value;\n  return null;\n}\n\nfunction matchesClaudePlugin(value: JsonRecord): boolean {\n  const candidates = [\n    extractString(value.name),\n    extractString(value.id),\n    extractString(value.plugin),\n    extractString(value.pluginName),\n    extractString(value.identifier),\n  ].filter(Boolean) as string[];\n  return candidates.some((candidate) => candidate === REMIX_CLAUDE_PLUGIN.pluginName || candidate.startsWith(`${REMIX_CLAUDE_PLUGIN.pluginName}@`));\n}\n\nfunction getPluginVersion(value: JsonRecord): string | null {\n  return (\n    extractString(value.version) ??\n    extractString(value.pluginVersion) ??\n    extractString(value.installedVersion) ??\n    null\n  );\n}\n\nfunction getPluginScope(value: JsonRecord): string | null {\n  return (\n    extractString(value.scope) ??\n    extractString(value.installScope) ??\n    extractString(value.installedScope) ??\n    null\n  );\n}\n\nfunction normalizeMarketplaceSourceCandidate(value: string | null): string | null {\n  const normalized = value?.trim() ?? \"\";\n  if (!normalized) return null;\n\n  const lower = normalized.toLowerCase();\n  if (\n    lower === \"git\" ||\n    normalized.startsWith(\"/\") ||\n    normalized.startsWith(\"~/\") ||\n    /^[A-Za-z]:[\\\\/]/.test(normalized)\n  ) {\n    return null;\n  }\n\n  try {\n    const parsed = new URL(normalized);\n    parsed.hash = \"\";\n    parsed.search = \"\";\n    parsed.hostname = parsed.hostname.toLowerCase();\n    parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\").replace(/\\.git$/i, \"\");\n    return parsed.toString().replace(/\\/$/, \"\");\n  } catch {\n    return normalized.replace(/\\/+$/, \"\").replace(/\\.git$/i, \"\");\n  }\n}\n\nfunction getMarketplaceSource(value: JsonRecord): string | null {\n  return normalizeMarketplaceSourceCandidate(\n    extractString(value.repo) ??\n      extractString((value as Record<string, unknown>).url) ??\n      extractNestedString(value.source, [\"url\", \"repo\", \"source\"]) ??\n      extractString(value.source) ??\n      null,\n  );\n}\n\nfunction getRepairPaths(): RepairPath[] {\n  const home = os.homedir();\n  return [\n    {\n      label: \"plugin cache\",\n      path: path.join(home, \".claude\", \"plugins\", \"cache\", REMIX_CLAUDE_PLUGIN.marketplaceName),\n    },\n    {\n      label: \"plugin npm cache\",\n      path: path.join(home, \".claude\", \"plugins\", \"npm-cache\", \"node_modules\", ...REMIX_CLAUDE_PLUGIN.npmPackage.split(\"/\")),\n    },\n    {\n      label: \"marketplace cache\",\n      path: path.join(home, \".claude\", \"plugins\", \"marketplaces\", REMIX_CLAUDE_PLUGIN.marketplaceName),\n    },\n  ];\n}\n\nfunction buildStatusRecommendedNextSteps(status: ClaudePluginHealthStatus, scope: ClaudePluginScope): string[] {\n  if (status === \"healthy\") {\n    return [\n      \"If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code when you need the latest plugin state loaded.\",\n    ];\n  }\n  if (status === \"missing\") {\n    return [`Run \\`remix claude install --scope ${scope}\\` to install the Remix Claude plugin.`];\n  }\n  if (status === \"outdated\") {\n    return [`Run \\`remix claude update --scope ${scope}\\` to install the expected Remix Claude plugin version.`];\n  }\n  if (status === \"stale_or_unverified\") {\n    return [\n      `Run \\`remix claude reinstall --scope ${scope}\\` to rebuild the Remix Claude plugin installation.`,\n      `If stale state persists, run \\`remix claude repair --hard --scope ${scope}\\`.`,\n      \"If Claude Code is already open, restart it or run `/reload-plugins` after the reinstall or repair.\",\n    ];\n  }\n  if (status === \"broken\") {\n    return [\n      \"Install Claude Code and ensure `claude` is available on PATH before retrying Remix Claude plugin commands.\",\n    ];\n  }\n  return [\n    \"Rerun `remix setup` or `remix claude install` when you want to configure the Claude Code integration.\",\n  ];\n}\n\nfunction usedAutomaticHardRepair(result: ClaudePluginLifecycleResult): boolean {\n  return Boolean(result.details && typeof result.details === \"object\" && \"automaticHardRepair\" in result.details);\n}\n\nfunction describeLifecycleOutcome(result: ClaudePluginLifecycleResult): { headline: string; detail: string | null; action: string | null } {\n  const versionDetail =\n    result.installedVersion && result.pluginScope\n      ? `version ${result.installedVersion} at ${result.pluginScope} scope`\n      : result.installedVersion\n        ? `version ${result.installedVersion}`\n        : result.pluginScope\n          ? `${result.pluginScope} scope`\n          : null;\n\n  if (result.status === \"healthy\") {\n    if (result.action === \"status\") {\n      return {\n        headline: \"Remix Claude plugin is ready.\",\n        detail: versionDetail,\n        action: null,\n      };\n    }\n    if (result.action === \"install\") {\n      return {\n        headline: \"Installed the Remix Claude plugin.\",\n        detail: versionDetail,\n        action: usedAutomaticHardRepair(result)\n          ? \"Claude kept reporting a stale Remix plugin version, so Remix ran a hard repair automatically. If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\"\n          : \"If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\",\n      };\n    }\n    if (result.action === \"update\") {\n      return {\n        headline: result.changed ? \"Updated the Remix Claude plugin.\" : \"Remix Claude plugin is already up to date.\",\n        detail: versionDetail,\n        action: result.changed\n          ? usedAutomaticHardRepair(result)\n            ? \"Claude kept reporting a stale Remix plugin version, so Remix ran a hard repair automatically. If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\"\n            : \"If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\"\n          : null,\n      };\n    }\n    if (result.action === \"reinstall\") {\n      return {\n        headline: \"Reinstalled the Remix Claude plugin.\",\n        detail: versionDetail,\n        action: usedAutomaticHardRepair(result)\n          ? \"Claude kept reporting a stale Remix plugin version, so Remix ran a hard repair automatically. If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\"\n          : \"If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\",\n      };\n    }\n    if (result.action === \"repair\") {\n      return {\n        headline: \"Repaired the Remix Claude plugin installation.\",\n        detail: versionDetail,\n        action: \"If Claude Code is already open, run `/reload-plugins`; otherwise restart Claude Code.\",\n      };\n    }\n  }\n\n  // Uninstall flips the success criteria: the plugin should be GONE\n  // (status=\"missing\") for the operation to be considered successful.\n  // Anything else means Claude still reports a Remix plugin installed,\n  // which is a real failure for an uninstall.\n  if (result.action === \"uninstall\") {\n    if (result.status === \"missing\" || (result.status === \"broken\" && !result.claudeBinaryAvailable)) {\n      const purged = Boolean(\n        result.details && typeof result.details === \"object\" && \"clearedPaths\" in result.details,\n      );\n      return {\n        headline: result.changed\n          ? purged\n            ? \"Uninstalled the Remix Claude plugin and cleared cached files.\"\n            : \"Uninstalled the Remix Claude plugin.\"\n          : \"Remix Claude plugin was not installed.\",\n        detail: null,\n        action:\n          result.status === \"broken\"\n            ? null\n            : \"If Claude Code is already open, restart it so the unloaded plugin is no longer referenced.\",\n      };\n    }\n    return {\n      headline: \"Failed to uninstall the Remix Claude plugin.\",\n      detail:\n        result.remediationHint ??\n        (result.installedVersion ? `Claude still reports version ${result.installedVersion}.` : null),\n      action: result.recommendedNextSteps[0] ?? null,\n    };\n  }\n\n  if (result.status === \"skipped\") {\n    return {\n      headline: \"Skipped Claude plugin setup.\",\n      detail: null,\n      action: null,\n    };\n  }\n\n  return {\n    headline: \"Remix Claude plugin needs attention.\",\n    detail:\n      result.remediationHint ??\n      result.warnings[0] ??\n      (result.installedVersion ? `Claude still reports version ${result.installedVersion}.` : null),\n    action: result.recommendedNextSteps[0] ?? null,\n  };\n}\n\nfunction canRecoverWithUpdate(inspection: ClaudePluginInspection): boolean {\n  if (inspection.status !== \"stale_or_unverified\") return false;\n  if (!inspection.pluginInstalled) return false;\n\n  const hasExpectedVersion = inspection.installedVersion === REMIX_CLAUDE_PLUGIN.version;\n  if (!hasExpectedVersion) return false;\n\n  return (\n    !inspection.marketplaceConfigured ||\n    inspection.marketplaceSource !== REMIX_CLAUDE_PLUGIN.marketplaceSource ||\n    inspection.scopeMatchesRequested === false\n  );\n}\n\nfunction shouldAutoRepairAfterMutation(params: {\n  action: ClaudePluginLifecycleAction;\n  inspection: ClaudePluginInspection;\n}): boolean {\n  if (params.action === \"status\" || params.action === \"skip\" || params.action === \"auto\" || params.action === \"repair\") {\n    return false;\n  }\n\n  return params.inspection.status === \"outdated\" && params.inspection.pluginInstalled && Boolean(params.inspection.installedVersion);\n}\n\nfunction withAction(\n  inspection: ClaudePluginInspection,\n  params: {\n    action: ClaudePluginLifecycleAction;\n    scope: ClaudePluginScope;\n    changed: boolean;\n    warnings?: string[];\n    remediationHint?: string | null;\n    recommendedNextSteps?: string[];\n    status?: ClaudePluginHealthStatus;\n    details?: JsonRecord | null;\n  },\n): ClaudePluginLifecycleResult {\n  const warnings = [...inspection.warnings, ...(params.warnings ?? [])].filter(Boolean);\n  return {\n    action: params.action,\n    status: params.status ?? inspection.status,\n    scope: params.scope,\n    changed: params.changed,\n    claudeBinaryAvailable: inspection.claudeBinaryAvailable,\n    claudeVersion: inspection.claudeVersion,\n    claudeBinarySource: inspection.claudeBinarySource,\n    claudeBinaryArgv0: inspection.claudeBinaryArgv0,\n    marketplaceConfigured: inspection.marketplaceConfigured,\n    marketplaceSource: inspection.marketplaceSource,\n    pluginInstalled: inspection.pluginInstalled,\n    installedVersion: inspection.installedVersion,\n    expectedVersion: inspection.expectedVersion,\n    pluginScope: inspection.pluginScope,\n    scopeMatchesRequested: inspection.scopeMatchesRequested,\n    doctorSummary: inspection.doctorSummary,\n    warnings: Array.from(new Set(warnings)),\n    remediationHint: params.remediationHint ?? inspection.remediationHint,\n    recommendedNextSteps: Array.from(new Set(params.recommendedNextSteps ?? inspection.recommendedNextSteps)),\n    details: params.details ?? inspection.details,\n  };\n}\n\nasync function runClaudeCommand(args: string[]): Promise<ClaudeCommandResult> {\n  // Resolves the Claude binary via the discovery ladder in\n  // `claudeBinary.ts` — never spawns the bare string `\"claude\"`. That\n  // distinction is the whole point of Phase 1: a user with only the\n  // Claude Desktop app installed has no `claude` on PATH but a\n  // perfectly functional engine at\n  // `~/Library/Application Support/Claude/claude-code/<ver>/...`,\n  // and the discovery ladder finds it. Memoized for the lifetime of\n  // the process inside `findClaudeBinary()`.\n  //\n  // We deliberately let env-override CliErrors bubble up instead of\n  // catching them: a broken `REMIX_CLAUDE_BINARY` should fail loudly\n  // with the actionable \"points at \\`X\\` but no such file exists\"\n  // message, not silently degrade to \"Claude Code is not installed.\"\n  // The probe command (`claude probe`) catches it separately so the\n  // desktop's boot-time poll stays read-only.\n  const binary = await findClaudeBinary();\n  if (!binary) {\n    return {\n      ok: false,\n      stdout: \"\",\n      stderr: \"Claude Code is not installed.\",\n      exitCode: 127,\n    };\n  }\n  try {\n    const result = await execa(binary.argv0, args, { reject: false });\n    return {\n      ok: result.exitCode === 0,\n      stdout: result.stdout,\n      stderr: result.stderr,\n      exitCode: result.exitCode ?? 0,\n    };\n  } catch (error) {\n    return {\n      ok: false,\n      stdout: \"\",\n      stderr: error instanceof Error ? error.message : \"Claude command failed.\",\n      exitCode: 1,\n    };\n  }\n}\n\nasync function runClaudeJsonArrayCommand(args: string[]): Promise<ClaudeJsonArrayResult> {\n  const result = await runClaudeCommand(args);\n  if (!result.ok) {\n    return {\n      items: [],\n      error: result.stderr.trim() || result.stdout.trim() || `Claude command failed: claude ${args.join(\" \")}`,\n    };\n  }\n  return {\n    items: parseJsonArray(result.stdout),\n    error: null,\n  };\n}\n\nasync function runClaudeDoctor(includeDoctor: boolean): Promise<ClaudeDoctorSummary | null> {\n  if (!includeDoctor) return null;\n  const jsonResult = await runClaudeCommand([\"doctor\", \"--json\"]);\n  const json = parseJsonObject(jsonResult.stdout);\n  if (jsonResult.ok && json) {\n    return {\n      attempted: true,\n      ok: true,\n      exitCode: jsonResult.exitCode,\n      stdout: jsonResult.stdout,\n      stderr: jsonResult.stderr || null,\n      json,\n    };\n  }\n  const textResult = await runClaudeCommand([\"doctor\"]);\n  return {\n    attempted: true,\n    ok: textResult.ok,\n    exitCode: textResult.exitCode,\n    stdout: textResult.stdout || null,\n    stderr: textResult.stderr || null,\n    json,\n  };\n}\n\nexport async function listClaudeMarketplaces(): Promise<ClaudeMarketplace[]> {\n  const result = await runClaudeJsonArrayCommand([\"plugin\", \"marketplace\", \"list\", \"--json\"]);\n  return result.items as ClaudeMarketplace[];\n}\n\nexport async function listClaudeInstalledPlugins(): Promise<JsonRecord[]> {\n  const result = await runClaudeJsonArrayCommand([\"plugin\", \"list\", \"--json\"]);\n  return result.items;\n}\n\nasync function inspectClaudePluginState(params: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n}): Promise<ClaudePluginInspection> {\n  await refreshSetupMetadata({ yes: true });\n\n  const scope = params.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const warnings: string[] = [];\n  const binary = await detectClaudeBinary();\n  const doctorSummary = binary.available ? await runClaudeDoctor(Boolean(params.includeDoctor)) : null;\n\n  if (!binary.available) {\n    return {\n      claudeBinaryAvailable: false,\n      claudeVersion: binary.version,\n      claudeBinarySource: binary.source,\n      claudeBinaryArgv0: binary.argv0,\n      marketplaceConfigured: false,\n      marketplaceSource: null,\n      pluginInstalled: false,\n      installedVersion: null,\n      expectedVersion: REMIX_CLAUDE_PLUGIN.version,\n      pluginScope: null,\n      scopeMatchesRequested: null,\n      status: \"broken\",\n      warnings,\n      remediationHint:\n        binary.reason ??\n        \"Claude Code is not installed. Install Claude Code or the Claude Desktop app and try again.\",\n      recommendedNextSteps: buildStatusRecommendedNextSteps(\"broken\", scope),\n      details: null,\n      doctorSummary,\n      marketplaceEntry: null,\n      pluginEntry: null,\n    };\n  }\n\n  const marketplacesResult = await runClaudeJsonArrayCommand([\"plugin\", \"marketplace\", \"list\", \"--json\"]);\n  if (marketplacesResult.error) warnings.push(marketplacesResult.error);\n  const installedPluginsResult = await runClaudeJsonArrayCommand([\"plugin\", \"list\", \"--json\"]);\n  if (installedPluginsResult.error) warnings.push(installedPluginsResult.error);\n\n  const marketplaceEntry =\n    marketplacesResult.items.find((entry) => extractString((entry as ClaudeMarketplace).name) === REMIX_CLAUDE_PLUGIN.marketplaceName) ?? null;\n  const pluginEntries = installedPluginsResult.items.filter((entry) => matchesClaudePlugin(entry));\n  const pluginEntry = selectPreferredPluginEntry(pluginEntries, scope);\n  const marketplaceSource = marketplaceEntry ? getMarketplaceSource(marketplaceEntry) : null;\n  const installedVersion = pluginEntry ? getPluginVersion(pluginEntry) : null;\n  const pluginScope = pluginEntry ? getPluginScope(pluginEntry) : null;\n  const normalizedPluginScope = normalizeScope(pluginScope);\n  const scopeMatchesRequested = pluginEntry ? (normalizedPluginScope ? normalizedPluginScope === scope : null) : null;\n\n  let status: ClaudePluginHealthStatus = \"healthy\";\n  let remediationHint: string | null = null;\n\n  if (marketplacesResult.error || installedPluginsResult.error) {\n    status = \"broken\";\n    remediationHint = \"Claude Code did not return plugin or marketplace state cleanly. Re-run the command or use `remix claude reinstall` once Claude is healthy.\";\n  } else if (!pluginEntry) {\n    status = \"missing\";\n    remediationHint = \"The Remix Claude plugin is not installed in Claude Code.\";\n  } else if (!installedVersion) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"Claude reported the Remix plugin as installed, but its installed version could not be verified.\";\n  } else if (installedVersion !== REMIX_CLAUDE_PLUGIN.version) {\n    status = \"outdated\";\n    remediationHint = `Expected Remix Claude plugin version ${REMIX_CLAUDE_PLUGIN.version}, but Claude reports ${installedVersion}.`;\n  } else if (!marketplaceEntry) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The Remix Claude plugin is installed, but the Remix marketplace is not configured.\";\n  } else if (marketplaceSource && marketplaceSource !== REMIX_CLAUDE_PLUGIN.marketplaceSource) {\n    status = \"stale_or_unverified\";\n    remediationHint = `The Remix marketplace points to ${marketplaceSource}, but this CLI expects ${REMIX_CLAUDE_PLUGIN.marketplaceSource}.`;\n  } else if (scopeMatchesRequested === false) {\n    status = \"stale_or_unverified\";\n    remediationHint = `The Remix Claude plugin is installed at scope ${pluginScope}, but ${scope} was requested.`;\n  }\n\n  if (doctorSummary && !doctorSummary.ok) {\n    warnings.push(\"`claude doctor` reported problems. Review the attached doctor summary before trusting the plugin state.\");\n  }\n  const remixCliPath = await inspectConfiguredRemixCliPath();\n\n  return {\n    claudeBinaryAvailable: true,\n    claudeVersion: binary.version,\n    claudeBinarySource: binary.source,\n    claudeBinaryArgv0: binary.argv0,\n    marketplaceConfigured: Boolean(marketplaceEntry),\n    marketplaceSource,\n    pluginInstalled: Boolean(pluginEntry),\n    installedVersion,\n    expectedVersion: REMIX_CLAUDE_PLUGIN.version,\n    pluginScope,\n    scopeMatchesRequested,\n    status,\n    warnings: Array.from(new Set(warnings)),\n    remediationHint,\n    recommendedNextSteps: buildStatusRecommendedNextSteps(status, scope),\n    details: {\n      marketplace: marketplaceEntry,\n      plugin: pluginEntry,\n      remixCliPath,\n    },\n    doctorSummary,\n    marketplaceEntry,\n    pluginEntry,\n  };\n}\n\nasync function refreshMarketplace(): Promise<MarketplaceRefreshResult> {\n  const warnings: string[] = [];\n  const marketplaces = await runClaudeJsonArrayCommand([\"plugin\", \"marketplace\", \"list\", \"--json\"]);\n  if (marketplaces.error) {\n    return {\n      ok: false,\n      marketplaceConfigured: false,\n      marketplaceSource: null,\n      warnings,\n      remediationHint: marketplaces.error,\n    };\n  }\n\n  const existingMarketplace =\n    marketplaces.items.find((entry) => extractString((entry as ClaudeMarketplace).name) === REMIX_CLAUDE_PLUGIN.marketplaceName) ?? null;\n  const existingMarketplaceSource = existingMarketplace ? getMarketplaceSource(existingMarketplace) : null;\n\n  if (!existingMarketplace) {\n    const addResult = await runClaudeCommand([\"plugin\", \"marketplace\", \"add\", REMIX_CLAUDE_PLUGIN.marketplaceSource]);\n    if (!addResult.ok) {\n      return {\n        ok: false,\n        marketplaceConfigured: false,\n        marketplaceSource: null,\n        warnings,\n        remediationHint: addResult.stderr.trim() || \"Failed to add the Remix Claude marketplace.\",\n      };\n    }\n  } else if (existingMarketplaceSource && existingMarketplaceSource !== REMIX_CLAUDE_PLUGIN.marketplaceSource) {\n    const removeResult = await runClaudeCommand([\"plugin\", \"marketplace\", \"remove\", REMIX_CLAUDE_PLUGIN.marketplaceName]);\n    if (!removeResult.ok) {\n      return {\n        ok: false,\n        marketplaceConfigured: true,\n        marketplaceSource: existingMarketplaceSource,\n        warnings,\n        remediationHint:\n          removeResult.stderr.trim() ||\n          `Failed to replace the Remix marketplace source ${existingMarketplaceSource} with ${REMIX_CLAUDE_PLUGIN.marketplaceSource}.`,\n      };\n    }\n\n    const addResult = await runClaudeCommand([\"plugin\", \"marketplace\", \"add\", REMIX_CLAUDE_PLUGIN.marketplaceSource]);\n    if (!addResult.ok) {\n      return {\n        ok: false,\n        marketplaceConfigured: false,\n        marketplaceSource: null,\n        warnings,\n        remediationHint: addResult.stderr.trim() || \"Failed to add the expected Remix Claude marketplace after removing the stale entry.\",\n      };\n    }\n  } else {\n    const updateResult = await runClaudeCommand([\"plugin\", \"marketplace\", \"update\", REMIX_CLAUDE_PLUGIN.marketplaceName]);\n    if (!updateResult.ok) {\n      warnings.push(updateResult.stderr.trim() || \"Failed to refresh the Remix Claude marketplace.\");\n    }\n  }\n\n  const refreshedMarketplaces = await runClaudeJsonArrayCommand([\"plugin\", \"marketplace\", \"list\", \"--json\"]);\n  if (refreshedMarketplaces.error) {\n    return {\n      ok: false,\n      marketplaceConfigured: false,\n      marketplaceSource: null,\n      warnings,\n      remediationHint: refreshedMarketplaces.error,\n    };\n  }\n\n  const marketplaceEntry =\n    refreshedMarketplaces.items.find((entry) => extractString((entry as ClaudeMarketplace).name) === REMIX_CLAUDE_PLUGIN.marketplaceName) ?? null;\n  const marketplaceSource = marketplaceEntry ? getMarketplaceSource(marketplaceEntry) : null;\n  if (marketplaceSource && marketplaceSource !== REMIX_CLAUDE_PLUGIN.marketplaceSource) {\n    warnings.push(\n      `The Remix marketplace is configured, but it points to ${marketplaceSource} instead of ${REMIX_CLAUDE_PLUGIN.marketplaceSource}.`,\n    );\n  }\n\n  return {\n    ok: Boolean(marketplaceEntry),\n    marketplaceConfigured: Boolean(marketplaceEntry),\n    marketplaceSource,\n    warnings,\n    remediationHint: marketplaceEntry ? null : \"Claude did not report the Remix marketplace after the add or update step.\",\n  };\n}\n\nasync function installPluginAtScope(scope: ClaudePluginScope): Promise<ClaudeCommandResult> {\n  return runClaudeCommand([\"plugin\", \"install\", REMIX_CLAUDE_PLUGIN.installRef, \"--scope\", scope]);\n}\n\nasync function uninstallPluginAtScope(scope: ClaudePluginScope): Promise<ClaudeCommandResult> {\n  return runClaudeCommand([\"plugin\", \"uninstall\", REMIX_CLAUDE_PLUGIN.installRef, \"--scope\", scope]);\n}\n\nfunction resolveInstalledScope(pluginScope: string | null, fallbackScope: ClaudePluginScope): ClaudePluginScope {\n  return normalizeScope(pluginScope) ?? fallbackScope;\n}\n\nfunction selectPreferredPluginEntry(entries: JsonRecord[], scope: ClaudePluginScope): JsonRecord | null {\n  if (entries.length === 0) return null;\n\n  let bestEntry: JsonRecord | null = null;\n  let bestScore = -1;\n\n  for (const entry of entries) {\n    let score = 0;\n    if (normalizeScope(getPluginScope(entry)) === scope) score += 2;\n    if (getPluginVersion(entry) === REMIX_CLAUDE_PLUGIN.version) score += 1;\n    if (score > bestScore) {\n      bestEntry = entry;\n      bestScore = score;\n    }\n  }\n\n  return bestEntry ?? entries[0] ?? null;\n}\n\nfunction summarizeRepairPaths(paths: RepairPath[]): JsonRecord {\n  return {\n    paths: paths.map((entry) => ({\n      label: entry.label,\n      path: entry.path,\n    })),\n  };\n}\n\nasync function clearRepairPaths(paths: RepairPath[]): Promise<string[]> {\n  const cleared: string[] = [];\n  for (const entry of paths) {\n    await fs.rm(entry.path, { recursive: true, force: true });\n    cleared.push(entry.path);\n  }\n  return cleared;\n}\n\nfunction getPluginInstallPath(pluginEntry: JsonRecord | null): string | null {\n  return (\n    extractString(pluginEntry?.installPath) ??\n    extractString(pluginEntry?.installLocation) ??\n    extractString(pluginEntry?.path) ??\n    extractString(pluginEntry?.location) ??\n    null\n  );\n}\n\nfunction shellQuote(value: string): string {\n  return `'${value.replace(/'/g, \"'\\\\''\")}'`;\n}\n\nasync function readJsonFile(filePath: string): Promise<JsonRecord | null> {\n  try {\n    const raw = await fs.readFile(filePath, \"utf8\");\n    const parsed = JSON.parse(raw);\n    return parsed && typeof parsed === \"object\" && !Array.isArray(parsed) ? (parsed as JsonRecord) : null;\n  } catch {\n    return null;\n  }\n}\n\nasync function writeJsonFileIfChanged(filePath: string, current: JsonRecord, next: JsonRecord): Promise<boolean> {\n  const before = JSON.stringify(current, null, 2);\n  const after = JSON.stringify(next, null, 2);\n  if (before === after) return false;\n  await fs.writeFile(filePath, `${after}\\n`, \"utf8\");\n  return true;\n}\n\nfunction getCliEnvFilePath(): string {\n  const override = process.env.REMIX_CLI_ENV_FILE?.trim();\n  return override || path.join(os.homedir(), \".remix\", \"cli-env.json\");\n}\n\nasync function writeRemixCliEnvFile(remixCliPath: string): Promise<RemixCliPathPatchResult> {\n  const envFile = getCliEnvFilePath();\n  const current = await readJsonFile(envFile);\n  const previousPath = extractString(current?.REMIX_CLI_PATH) ?? extractString(current?.remixCliPath);\n  const previousUpdatedAt = extractString(current?.updatedAt);\n  const next: JsonRecord = {\n    ...(current ?? {}),\n    schemaVersion: 1,\n    REMIX_CLI_PATH: remixCliPath,\n    updatedAt: previousPath === remixCliPath && previousUpdatedAt ? previousUpdatedAt : new Date().toISOString(),\n  };\n  await fs.mkdir(path.dirname(envFile), { recursive: true });\n  let changed: boolean;\n  if (current) {\n    changed = await writeJsonFileIfChanged(envFile, current, next);\n  } else {\n    await fs.writeFile(envFile, `${JSON.stringify(next, null, 2)}\\n`, \"utf8\");\n    changed = true;\n  }\n  return { path: remixCliPath, envFile, changed };\n}\n\nfunction readPackageVersionNearCli(cliPath: string): string | null {\n  let resolved: string;\n  try {\n    resolved = path.resolve(cliPath);\n  } catch {\n    return null;\n  }\n  let dir = path.dirname(resolved);\n  for (let i = 0; i < 8; i += 1) {\n    const packagePath = path.join(dir, \"package.json\");\n    try {\n      const parsed = JSON.parse(readFileSync(packagePath, \"utf8\")) as { version?: unknown };\n      if (typeof parsed.version === \"string\" && parsed.version.trim()) return parsed.version.trim();\n    } catch {\n      // keep walking\n    }\n    const parent = path.dirname(dir);\n    if (parent === dir) break;\n    dir = parent;\n  }\n  return null;\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n  try {\n    await fs.access(target);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function inspectConfiguredRemixCliPath(): Promise<JsonRecord> {\n  const envFile = getCliEnvFilePath();\n  const envFileJson = await readJsonFile(envFile);\n  const envFileCliPath = extractString(envFileJson?.REMIX_CLI_PATH) ?? extractString(envFileJson?.remixCliPath);\n  const exists = envFileCliPath ? await pathExists(envFileCliPath) : false;\n  const realpath = envFileCliPath ? await fs.realpath(envFileCliPath).catch(() => null) : null;\n  return {\n    cliEnvFile: envFile,\n    cliEnvFileCliPath: envFileCliPath,\n    effectivePath: envFileCliPath,\n    exists,\n    realpath,\n    packageVersion: envFileCliPath ? readPackageVersionNearCli(envFileCliPath) : null,\n  };\n}\n\nfunction patchMcpJsonConfig(config: JsonRecord, runtime: NodeRuntime): JsonRecord {\n  const next = structuredClone(config) as JsonRecord;\n  const servers = next.mcpServers;\n  if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) return next;\n\n  for (const server of Object.values(servers as Record<string, unknown>)) {\n    if (!server || typeof server !== \"object\" || Array.isArray(server)) continue;\n    const serverRecord = server as JsonRecord;\n    const args = Array.isArray(serverRecord.args) ? serverRecord.args : [];\n    const usesPluginRoot = args.some((arg) => typeof arg === \"string\" && arg.includes(\"${CLAUDE_PLUGIN_ROOT}/dist/\"));\n    if (usesPluginRoot) {\n      serverRecord.command = runtime.path;\n    }\n  }\n\n  return next;\n}\n\nfunction patchHooksJsonConfig(config: JsonRecord, runtime: NodeRuntime): JsonRecord {\n  const next = structuredClone(config) as JsonRecord;\n  const visit = (value: unknown) => {\n    if (!value || typeof value !== \"object\") return;\n    if (Array.isArray(value)) {\n      for (const item of value) visit(item);\n      return;\n    }\n\n    const record = value as JsonRecord;\n    if (record.type === \"command\" && typeof record.command === \"string\") {\n      const match = record.command.match(/[\"']?(\\$\\{CLAUDE_PLUGIN_ROOT\\}\\/dist\\/[^\"'\\s]+\\.cjs)[\"']?/);\n      if (match?.[1]) {\n        record.command = `${shellQuote(runtime.path)} \"${match[1]}\"`;\n      }\n    }\n\n    for (const child of Object.values(record)) visit(child);\n  };\n\n  visit(next);\n  return next;\n}\n\nasync function patchInstalledClaudeRuntime(params: {\n  pluginEntry: JsonRecord | null;\n  runtime: NodeRuntime;\n}): Promise<ClaudeRuntimePatchResult> {\n  const installPath = getPluginInstallPath(params.pluginEntry);\n  const warnings: string[] = [];\n  const patchedFiles: string[] = [];\n\n  if (!installPath) {\n    return {\n      runtime: params.runtime,\n      changed: false,\n      patchedFiles,\n      warnings: [\"Claude did not report a Remix plugin install path, so Remix could not pin the hook Node runtime.\"],\n    };\n  }\n\n  const mcpPath = path.join(installPath, \".mcp.json\");\n  const hooksPath = path.join(installPath, \"hooks\", \"hooks.json\");\n\n  const mcpJson = await readJsonFile(mcpPath);\n  if (mcpJson) {\n    const nextMcpJson = patchMcpJsonConfig(mcpJson, params.runtime);\n    if (await writeJsonFileIfChanged(mcpPath, mcpJson, nextMcpJson)) {\n      patchedFiles.push(mcpPath);\n    }\n  } else {\n    warnings.push(`Could not read Claude plugin MCP config at ${mcpPath}.`);\n  }\n\n  const hooksJson = await readJsonFile(hooksPath);\n  if (hooksJson) {\n    const nextHooksJson = patchHooksJsonConfig(hooksJson, params.runtime);\n    if (await writeJsonFileIfChanged(hooksPath, hooksJson, nextHooksJson)) {\n      patchedFiles.push(hooksPath);\n    }\n  } else {\n    warnings.push(`Could not read Claude plugin hooks config at ${hooksPath}.`);\n  }\n\n  return {\n    runtime: params.runtime,\n    changed: patchedFiles.length > 0,\n    patchedFiles,\n    warnings,\n  };\n}\n\nfunction mergeWarnings(...groups: Array<string[] | undefined>): string[] {\n  return Array.from(new Set(groups.flatMap((group) => group ?? [])));\n}\n\nasync function withPinnedClaudeRuntime(\n  result: ClaudePluginLifecycleResult,\n  params: { scope: ClaudePluginScope; runtime: NodeRuntime | null; remixCliPath?: string | null },\n): Promise<ClaudePluginLifecycleResult> {\n  const remixCliPath = params.remixCliPath?.trim();\n  const remixCliPatch = remixCliPath ? await writeRemixCliEnvFile(remixCliPath) : null;\n  if (!params.runtime || !result.pluginInstalled) {\n    return remixCliPatch\n      ? {\n          ...result,\n          changed: result.changed || remixCliPatch.changed,\n          details: {\n            ...(result.details ?? {}),\n            remixCliPath: remixCliPatch,\n          },\n        }\n      : result;\n  }\n\n  const inspection = await inspectClaudePluginState({ scope: params.scope, includeDoctor: false });\n  const patch = await patchInstalledClaudeRuntime({\n    pluginEntry: inspection.pluginEntry,\n    runtime: params.runtime,\n  });\n\n  return {\n    ...result,\n    changed: result.changed || patch.changed || (remixCliPatch?.changed ?? false),\n    warnings: mergeWarnings(result.warnings, patch.warnings),\n    details: {\n      ...(result.details ?? {}),\n      nodeRuntime: {\n        path: patch.runtime.path,\n        version: patch.runtime.version,\n        patchedFiles: patch.patchedFiles,\n        changed: patch.changed,\n      },\n      ...(remixCliPatch ? { remixCliPath: remixCliPatch } : {}),\n    },\n  };\n}\n\nasync function verifyAfterMutation(params: {\n  action: ClaudePluginLifecycleAction;\n  scope: ClaudePluginScope;\n  changed: boolean;\n  includeDoctor?: boolean;\n  nodePath?: string | null;\n  warnings?: string[];\n  remediationHint?: string | null;\n  details?: JsonRecord | null;\n  confirmAutoHardRepair?: ConfirmAutoHardRepair;\n}): Promise<ClaudePluginLifecycleResult> {\n  const inspection = await inspectClaudePluginState({\n    scope: params.scope,\n    includeDoctor: params.includeDoctor,\n  });\n  if (shouldAutoRepairAfterMutation({ action: params.action, inspection })) {\n    if (!params.confirmAutoHardRepair) {\n      return withAction(inspection, {\n        action: params.action,\n        scope: params.scope,\n        changed: params.changed,\n        warnings: params.warnings,\n        remediationHint:\n          inspection.remediationHint ??\n          `Claude still reports a stale Remix plugin version after ${params.action}. Run \\`remix claude repair --hard --scope ${params.scope}\\` to clear stale Claude state.`,\n        details: params.details ?? inspection.details,\n      });\n    }\n\n    await params.confirmAutoHardRepair();\n    const automaticRepairWarning =\n      inspection.installedVersion && inspection.expectedVersion\n        ? `Claude still reported Remix plugin version ${inspection.installedVersion} after ${params.action}; ran \\`remix claude repair --hard --scope ${params.scope}\\` automatically to clear stale Claude state.`\n        : `Claude still reported stale Remix plugin state after ${params.action}; ran \\`remix claude repair --hard --scope ${params.scope}\\` automatically.`;\n    const repaired = await repairClaudePluginHard({\n      scope: params.scope,\n      includeDoctor: params.includeDoctor,\n      nodePath: params.nodePath,\n    });\n\n    return {\n      ...repaired,\n      action: params.action,\n      scope: params.scope,\n      changed: params.changed || repaired.changed,\n      warnings: Array.from(new Set([...(params.warnings ?? []), automaticRepairWarning, ...repaired.warnings])),\n      details: {\n        originalAction: params.action,\n        ...(params.details ?? {}),\n        ...(repaired.details ?? {}),\n        automaticHardRepair: {\n          triggered: true,\n          reason: \"post-mutation-version-mismatch\",\n          expectedVersion: inspection.expectedVersion,\n          installedVersion: inspection.installedVersion,\n          remediationHint: inspection.remediationHint,\n        },\n      },\n    };\n  }\n\n  return withAction(inspection, {\n    action: params.action,\n    scope: params.scope,\n    changed: params.changed,\n    warnings: params.warnings,\n    remediationHint: params.remediationHint,\n    details: params.details ?? inspection.details,\n  });\n}\n\nexport async function getClaudePluginStatus(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({\n    scope,\n    includeDoctor: params?.includeDoctor,\n  });\n  return withAction(inspection, {\n    action: \"status\",\n    scope,\n    changed: false,\n  });\n}\n\nexport async function installClaudePlugin(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  nodePath?: string | null;\n  remixCliPath?: string | null;\n  confirmAutoHardRepair?: ConfirmAutoHardRepair;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({ scope, includeDoctor: false });\n  if (!inspection.claudeBinaryAvailable) {\n    return withAction(inspection, {\n      action: \"install\",\n      scope,\n      changed: false,\n    });\n  }\n  const runtime = await resolveNodeRuntime({ explicitPath: params?.nodePath });\n  if (inspection.status === \"healthy\") {\n    return withPinnedClaudeRuntime(\n      withAction(inspection, {\n        action: \"install\",\n        scope,\n        changed: false,\n      }),\n      { scope, runtime, remixCliPath: params?.remixCliPath },\n    );\n  }\n  if (inspection.status === \"stale_or_unverified\" && inspection.pluginInstalled) {\n    return withPinnedClaudeRuntime(\n      withAction(inspection, {\n        action: \"install\",\n        scope,\n        changed: false,\n        remediationHint:\n          inspection.remediationHint ??\n          `The installed Remix Claude plugin could not be safely verified. Use \\`remix claude reinstall --scope ${scope}\\` or \\`remix claude repair --hard --scope ${scope}\\`.`,\n      }),\n      { scope, runtime, remixCliPath: params?.remixCliPath },\n    );\n  }\n\n  const refresh = await refreshMarketplace();\n  if (!refresh.ok) {\n    return withAction(inspection, {\n      action: \"install\",\n      scope,\n      changed: false,\n      warnings: refresh.warnings,\n      remediationHint: refresh.remediationHint,\n    });\n  }\n\n  const installResult = await installPluginAtScope(scope);\n  if (!installResult.ok) {\n    return withAction(inspection, {\n      action: \"install\",\n      scope,\n      changed: false,\n      warnings: refresh.warnings,\n      remediationHint: installResult.stderr.trim() || \"Claude Code rejected the Remix plugin install command.\",\n    });\n  }\n\n  return withPinnedClaudeRuntime(\n    await verifyAfterMutation({\n      action: \"install\",\n      scope,\n      changed: true,\n      includeDoctor: params?.includeDoctor,\n      nodePath: runtime.path,\n      confirmAutoHardRepair: params?.confirmAutoHardRepair,\n      warnings: refresh.warnings,\n      details: {\n        operation: \"install\",\n        installStdout: installResult.stdout || null,\n        installStderr: installResult.stderr || null,\n      },\n    }),\n    { scope, runtime, remixCliPath: params?.remixCliPath },\n  );\n}\n\nexport async function updateClaudePlugin(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  nodePath?: string | null;\n  remixCliPath?: string | null;\n  confirmAutoHardRepair?: ConfirmAutoHardRepair;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({ scope, includeDoctor: false });\n  if (!inspection.claudeBinaryAvailable) {\n    return withAction(inspection, {\n      action: \"update\",\n      scope,\n      changed: false,\n    });\n  }\n  const runtime = await resolveNodeRuntime({ explicitPath: params?.nodePath });\n  if (inspection.status === \"healthy\") {\n    return withPinnedClaudeRuntime(\n      withAction(inspection, {\n        action: \"update\",\n        scope,\n        changed: false,\n      }),\n      { scope, runtime, remixCliPath: params?.remixCliPath },\n    );\n  }\n  if (inspection.status === \"stale_or_unverified\" && !canRecoverWithUpdate(inspection)) {\n    return withPinnedClaudeRuntime(\n      withAction(inspection, {\n        action: \"update\",\n        scope,\n        changed: false,\n        remediationHint:\n          inspection.remediationHint ??\n          `The installed Remix Claude plugin is stale or unverified. Use \\`remix claude reinstall --scope ${scope}\\` or \\`remix claude repair --hard --scope ${scope}\\`.`,\n      }),\n      { scope, runtime, remixCliPath: params?.remixCliPath },\n    );\n  }\n\n  const warnings = [...inspection.warnings];\n  const refresh = await refreshMarketplace();\n  warnings.push(...refresh.warnings);\n  if (!refresh.ok) {\n    return withAction(inspection, {\n      action: \"update\",\n      scope,\n      changed: false,\n      warnings,\n      remediationHint: refresh.remediationHint,\n    });\n  }\n\n  if (inspection.scopeMatchesRequested === false && inspection.pluginInstalled) {\n    const uninstallScope = resolveInstalledScope(inspection.pluginScope, scope);\n    if (uninstallScope !== scope) {\n      const uninstallResult = await uninstallPluginAtScope(uninstallScope);\n      if (!uninstallResult.ok) {\n        warnings.push(uninstallResult.stderr.trim() || \"Failed to uninstall the wrong-scope Remix Claude plugin before updating.\");\n      }\n    }\n  }\n\n  const installResult = await installPluginAtScope(scope);\n  if (!installResult.ok) {\n    return withAction(inspection, {\n      action: \"update\",\n      scope,\n      changed: false,\n      warnings,\n      remediationHint: installResult.stderr.trim() || \"Claude Code rejected the Remix plugin update command.\",\n    });\n  }\n\n  return withPinnedClaudeRuntime(\n    await verifyAfterMutation({\n      action: \"update\",\n      scope,\n      changed: true,\n      includeDoctor: params?.includeDoctor,\n      nodePath: runtime.path,\n      confirmAutoHardRepair: params?.confirmAutoHardRepair,\n      warnings,\n      details: {\n        operation: \"update\",\n        installStdout: installResult.stdout || null,\n        installStderr: installResult.stderr || null,\n      },\n    }),\n    { scope, runtime, remixCliPath: params?.remixCliPath },\n  );\n}\n\nexport async function reinstallClaudePlugin(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  nodePath?: string | null;\n  remixCliPath?: string | null;\n  confirmAutoHardRepair?: ConfirmAutoHardRepair;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({ scope, includeDoctor: false });\n  if (!inspection.claudeBinaryAvailable) {\n    return withAction(inspection, {\n      action: \"reinstall\",\n      scope,\n      changed: false,\n    });\n  }\n  const runtime = await resolveNodeRuntime({ explicitPath: params?.nodePath });\n\n  const warnings = [...inspection.warnings];\n  const refresh = await refreshMarketplace();\n  warnings.push(...refresh.warnings);\n  if (!refresh.ok) {\n    return withAction(inspection, {\n      action: \"reinstall\",\n      scope,\n      changed: false,\n      warnings,\n      remediationHint: refresh.remediationHint,\n    });\n  }\n\n  if (inspection.pluginInstalled) {\n    const uninstallScope = resolveInstalledScope(inspection.pluginScope, scope);\n    const uninstallResult = await uninstallPluginAtScope(uninstallScope);\n    if (!uninstallResult.ok) {\n      warnings.push(uninstallResult.stderr.trim() || \"Failed to uninstall the existing Remix Claude plugin before reinstall.\");\n    }\n  }\n\n  const installResult = await installPluginAtScope(scope);\n  if (!installResult.ok) {\n    return withAction(inspection, {\n      action: \"reinstall\",\n      scope,\n      changed: false,\n      warnings,\n      remediationHint: installResult.stderr.trim() || \"Claude Code rejected the Remix plugin reinstall command.\",\n    });\n  }\n\n  return withPinnedClaudeRuntime(\n    await verifyAfterMutation({\n      action: \"reinstall\",\n      scope,\n      changed: true,\n      includeDoctor: params?.includeDoctor,\n      nodePath: runtime.path,\n      confirmAutoHardRepair: params?.confirmAutoHardRepair,\n      warnings,\n      details: {\n        operation: \"reinstall\",\n        installStdout: installResult.stdout || null,\n        installStderr: installResult.stderr || null,\n      },\n    }),\n    { scope, runtime, remixCliPath: params?.remixCliPath },\n  );\n}\n\nexport async function repairClaudePluginHard(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  nodePath?: string | null;\n  remixCliPath?: string | null;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({ scope, includeDoctor: false });\n  if (!inspection.claudeBinaryAvailable) {\n    return withAction(inspection, {\n      action: \"repair\",\n      scope,\n      changed: false,\n    });\n  }\n  const runtime = await resolveNodeRuntime({ explicitPath: params?.nodePath });\n\n  const warnings = [...inspection.warnings];\n  if (inspection.pluginInstalled) {\n    const uninstallScope = resolveInstalledScope(inspection.pluginScope, scope);\n    const uninstallResult = await uninstallPluginAtScope(uninstallScope);\n    if (!uninstallResult.ok) {\n      warnings.push(uninstallResult.stderr.trim() || \"Failed to uninstall the existing Remix Claude plugin before repair.\");\n    }\n  }\n\n  const removeMarketplaceResult = await runClaudeCommand([\"plugin\", \"marketplace\", \"remove\", REMIX_CLAUDE_PLUGIN.marketplaceName]);\n  if (!removeMarketplaceResult.ok) {\n    warnings.push(removeMarketplaceResult.stderr.trim() || \"Claude Code did not remove the Remix marketplace cleanly before repair.\");\n  }\n\n  const repairPaths = getRepairPaths();\n  const clearedPaths = await clearRepairPaths(repairPaths);\n\n  const refresh = await refreshMarketplace();\n  warnings.push(...refresh.warnings);\n  if (!refresh.ok) {\n    return withAction(inspection, {\n      action: \"repair\",\n      scope,\n      changed: true,\n      warnings,\n      remediationHint: refresh.remediationHint,\n      details: {\n        operation: \"repair\",\n        clearedPaths,\n        ...summarizeRepairPaths(repairPaths),\n      },\n    });\n  }\n\n  const installResult = await installPluginAtScope(scope);\n  if (!installResult.ok) {\n    return withAction(inspection, {\n      action: \"repair\",\n      scope,\n      changed: true,\n      warnings,\n      remediationHint: installResult.stderr.trim() || \"Claude Code rejected the Remix plugin install command after hard repair.\",\n      details: {\n        operation: \"repair\",\n        clearedPaths,\n        ...summarizeRepairPaths(repairPaths),\n      },\n    });\n  }\n\n  return withPinnedClaudeRuntime(\n    await verifyAfterMutation({\n      action: \"repair\",\n      scope,\n      changed: true,\n      includeDoctor: params?.includeDoctor,\n      nodePath: runtime.path,\n      warnings,\n      details: {\n        operation: \"repair\",\n        clearedPaths,\n        installStdout: installResult.stdout || null,\n        installStderr: installResult.stderr || null,\n        ...summarizeRepairPaths(repairPaths),\n      },\n    }),\n    { scope, runtime, remixCliPath: params?.remixCliPath },\n  );\n}\n\nexport async function uninstallClaudePlugin(params?: {\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  // When true, also clears the marketplace entry, plugin cache, plugin\n  // npm-cache, and marketplace cache. Equivalent to running\n  // `remix claude repair --hard` and then leaving the plugin uninstalled.\n  // Useful when a stale `0.1.x` cache lingers after `claude plugin\n  // uninstall` (we have seen Claude Code retain the cached install dir\n  // and continue trying to invoke its hooks until the next session).\n  purge?: boolean;\n}): Promise<ClaudePluginLifecycleResult> {\n  const scope = params?.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n  const inspection = await inspectClaudePluginState({ scope, includeDoctor: false });\n\n  if (!inspection.claudeBinaryAvailable) {\n    return withAction(inspection, {\n      action: \"uninstall\",\n      scope,\n      changed: false,\n    });\n  }\n\n  const warnings = [...inspection.warnings];\n  let uninstallStdout: string | null = null;\n  let uninstallStderr: string | null = null;\n  let changed = false;\n\n  if (inspection.pluginInstalled) {\n    const uninstallScope = resolveInstalledScope(inspection.pluginScope, scope);\n    const result = await uninstallPluginAtScope(uninstallScope);\n    uninstallStdout = result.stdout || null;\n    uninstallStderr = result.stderr || null;\n    if (!result.ok) {\n      return withAction(inspection, {\n        action: \"uninstall\",\n        scope,\n        changed: false,\n        warnings,\n        remediationHint: result.stderr.trim() || \"Claude Code rejected the Remix plugin uninstall command.\",\n        details: {\n          operation: \"uninstall\",\n          uninstallStdout,\n          uninstallStderr,\n        },\n      });\n    }\n    changed = true;\n  }\n\n  let clearedPaths: string[] | null = null;\n  if (params?.purge) {\n    const removeMarketplace = await runClaudeCommand([\n      \"plugin\",\n      \"marketplace\",\n      \"remove\",\n      REMIX_CLAUDE_PLUGIN.marketplaceName,\n    ]);\n    if (!removeMarketplace.ok) {\n      // Soft-fail: missing marketplace is fine, we're tearing down anyway.\n      const stderr = removeMarketplace.stderr.trim();\n      if (stderr && !/not found|does not exist|no such/i.test(stderr)) {\n        warnings.push(stderr);\n      }\n    } else {\n      changed = true;\n    }\n\n    const repairPaths = getRepairPaths();\n    clearedPaths = await clearRepairPaths(repairPaths);\n    if (clearedPaths.length > 0) changed = true;\n  }\n\n  // Re-inspect: a successful uninstall should yield status=\"missing\".\n  // We don't auto-repair here even if shouldAutoRepairAfterMutation\n  // would otherwise fire, because the user explicitly asked to remove\n  // the plugin — bouncing them back into an install would be hostile.\n  const after = await inspectClaudePluginState({\n    scope,\n    includeDoctor: params?.includeDoctor,\n  });\n\n  return withAction(after, {\n    action: \"uninstall\",\n    scope,\n    changed,\n    warnings,\n    remediationHint:\n      after.pluginInstalled\n        ? `Claude still reports the Remix plugin installed after uninstall. Try \\`remix claude uninstall --purge --scope ${scope}\\` to clear cached state.`\n        : null,\n    details: {\n      operation: \"uninstall\",\n      purged: Boolean(params?.purge),\n      uninstallStdout,\n      uninstallStderr,\n      ...(clearedPaths ? { clearedPaths } : {}),\n    },\n  });\n}\n\nexport async function ensureClaudePluginInstalled(params: {\n  action: ClaudePluginAction;\n  scope?: ClaudePluginScope;\n  includeDoctor?: boolean;\n  remixCliPath?: string | null;\n  confirmAutoHardRepair?: ConfirmAutoHardRepair;\n}): Promise<ClaudePluginInstallResult> {\n  const scope = params.scope ?? REMIX_CLAUDE_PLUGIN.defaultScope;\n\n  if (params.action === \"skip\") {\n    return {\n      action: \"skip\",\n      status: \"skipped\",\n      scope,\n      changed: false,\n      claudeBinaryAvailable: false,\n      claudeVersion: null,\n      claudeBinarySource: null,\n      claudeBinaryArgv0: null,\n      marketplaceConfigured: false,\n      marketplaceSource: null,\n      pluginInstalled: false,\n      installedVersion: null,\n      expectedVersion: REMIX_CLAUDE_PLUGIN.version,\n      pluginScope: null,\n      scopeMatchesRequested: null,\n      doctorSummary: null,\n      warnings: [],\n      remediationHint: null,\n      recommendedNextSteps: [\n        \"You can configure the Claude Code integration later with `remix setup` or the `remix claude` commands.\",\n      ],\n      details: null,\n    };\n  }\n\n  if (params.action === \"install\") {\n    return installClaudePlugin({\n      scope,\n      includeDoctor: params.includeDoctor,\n      remixCliPath: params.remixCliPath,\n      confirmAutoHardRepair: params.confirmAutoHardRepair,\n    });\n  }\n\n  if (params.action === \"update\") {\n    return updateClaudePlugin({\n      scope,\n      includeDoctor: params.includeDoctor,\n      remixCliPath: params.remixCliPath,\n      confirmAutoHardRepair: params.confirmAutoHardRepair,\n    });\n  }\n\n  if (params.action === \"reinstall\") {\n    return reinstallClaudePlugin({\n      scope,\n      includeDoctor: params.includeDoctor,\n      remixCliPath: params.remixCliPath,\n      confirmAutoHardRepair: params.confirmAutoHardRepair,\n    });\n  }\n\n  const inspection = await getClaudePluginStatus({\n    scope,\n    includeDoctor: params.includeDoctor,\n  });\n  if (inspection.status === \"missing\") {\n    return installClaudePlugin({\n      scope,\n      includeDoctor: params.includeDoctor,\n      remixCliPath: params.remixCliPath,\n      confirmAutoHardRepair: params.confirmAutoHardRepair,\n    });\n  }\n  if (inspection.status === \"outdated\") {\n    return updateClaudePlugin({\n      scope,\n      includeDoctor: params.includeDoctor,\n      remixCliPath: params.remixCliPath,\n      confirmAutoHardRepair: params.confirmAutoHardRepair,\n    });\n  }\n  return {\n    ...inspection,\n    action: \"auto\",\n  };\n}\n\nexport function printClaudePluginLifecycleResult(result: ClaudePluginLifecycleResult): void {\n  const outcome = describeLifecycleOutcome(result);\n  const color =\n    result.status === \"healthy\"\n      ? pc.green\n      : result.status === \"skipped\"\n        ? pc.dim\n        : pc.yellow;\n\n  console.log(color(outcome.headline));\n  if (outcome.detail) console.log(outcome.detail);\n  if (outcome.action) console.log(pc.dim(outcome.action));\n\n  // Surface discovery provenance so users can tell which Claude\n  // binary the lifecycle just acted on. Important for the multi-\n  // install case (PATH binary + desktop-embedded engine + Homebrew\n  // copy can all be on the same machine), where \"the lifecycle ran\"\n  // would otherwise leave the user unsure which engine got the\n  // mutation. Skipped when not available — the headline / detail\n  // already carry the useful message in that case.\n  if (result.claudeBinaryAvailable && result.claudeBinarySource) {\n    const src = result.claudeBinarySource;\n    const versionLabel = result.claudeVersion ? ` (${result.claudeVersion})` : \"\";\n    console.log(\n      pc.dim(`Using Claude Code from ${describeBinarySource(src)}${versionLabel}.`),\n    );\n    if (src === \"desktop-embedded\" && process.platform === \"darwin\") {\n      // Code-signing identity differs between Claude.app and the\n      // embedded `claude-code` engine. macOS Full Disk Access does\n      // not transfer between them, so plugin hooks that touch\n      // protected paths (Documents, Desktop, Downloads, …) may\n      // trigger a fresh consent prompt the first time they fire.\n      // Informational only — most plugins never touch those paths.\n      console.log(\n        pc.dim(\n          \"Note: the desktop-embedded Claude Code engine has a different code-signing identity than Claude.app. Hooks that access protected paths may trigger a one-time macOS permission prompt.\",\n        ),\n      );\n    }\n  }\n}\n\nfunction describeBinarySource(source: ClaudeBinarySource): string {\n  switch (source) {\n    case \"path\":\n      return \"$PATH\";\n    case \"env_override\":\n      return \"REMIX_CLAUDE_BINARY / CLAUDE_BINARY override\";\n    case \"native\":\n      return \"native installer (~/.local/bin)\";\n    case \"homebrew\":\n      return \"Homebrew\";\n    case \"desktop-embedded\":\n      return \"the Claude Desktop-embedded engine\";\n    case \"windows-bundle\":\n      return \"the Claude Desktop bundle (Windows)\";\n    case \"linux-bundle\":\n      return \"the Claude Desktop bundle (Linux)\";\n  }\n}\n","import { execa } from \"execa\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\n/**\n * Discovery ladder for the `claude` binary, used by every Remix CLI\n * code path that mutates `~/.claude/` (plugin lifecycle, marketplace\n * commands, doctor, etc.).\n *\n * Why this exists\n * ───────────────\n * Anthropic ships Claude Code three ways:\n *\n *   1. The `@anthropic-ai/claude-code` CLI (npm or curl-installer).\n *   2. The Claude Desktop app, which embeds a Claude Code engine.\n *   3. The Claude Code Desktop app (developer-focused), which also\n *      embeds the engine.\n *\n * All three read and write the SAME `~/.claude/` tree, so any one of\n * them can drive our plugin lifecycle. But the desktop apps don't\n * put `claude` on `$PATH`, so a `which claude` check (the previous\n * behavior in `setupPrereqs.detectClaudeBinary`) failed for users\n * who only have a desktop install — even though the engine they\n * needed was sitting at\n * `~/Library/Application Support/Claude/claude-code/<ver>/...`.\n *\n * Selection policy\n * ────────────────\n * Strict precedence; first hit that runs `--version` cleanly wins:\n *\n *   1. `REMIX_CLAUDE_BINARY` env var (more-specific override).\n *   2. `CLAUDE_BINARY` env var (less-specific override).\n *   3. `claude` on `$PATH` (matches user intent — `which claude`).\n *   4. Native install at `~/.local/bin/claude` (or Windows equivalent).\n *   5. Homebrew at `/opt/homebrew/bin/claude` or `/usr/local/bin/claude`.\n *   6. Desktop-embedded engine under\n *      `~/Library/Application Support/Claude/claude-code/<ver>/...`,\n *      newest semver, both pre- and post-v2.1.78 shapes.\n *   7. Windows desktop bundle under\n *      `%LOCALAPPDATA%\\Programs\\Claude\\...`.\n *\n * PATH always wins when it's healthy. We never silently route a\n * user's commands through a different binary than `which claude`\n * returns — that would produce \"but I'm on 2.1.140, why does Remix\n * say 2.1.121?\" support tickets nobody can debug. The only way a\n * non-PATH candidate is selected is if the PATH binary is missing\n * or its `--version` fails.\n *\n * If both env-var overrides are set and the override target is\n * missing or broken, we ERROR EXPLICITLY. Silently falling through\n * would mask CI misconfiguration in a way users can't spot.\n *\n * Caching\n * ───────\n * `findClaudeBinary()` is memoized for the lifetime of the process.\n * Every `remix` invocation is a fresh process, so this can never\n * pin a stale result across runs. The Phase 2 bootstrap path (when\n * we install Claude on the user's behalf) MUST call\n * `clearClaudeBinaryCache()` before re-resolving.\n */\n\nexport type ClaudeBinarySource =\n  | \"env_override\"\n  | \"path\"\n  | \"native\"\n  | \"homebrew\"\n  | \"desktop-embedded\"\n  | \"windows-bundle\"\n  | \"linux-bundle\";\n\nexport interface ClaudeBinary {\n  /** Absolute path passed as argv[0] when spawning. */\n  argv0: string;\n  /** Where the binary was discovered — used for status reporting. */\n  source: ClaudeBinarySource;\n  /**\n   * Semver string from `claude --version` stdout, parsed best-effort.\n   * Null when the binary responded but the version line couldn't be\n   * matched (treat as \"unknown but functional\").\n   */\n  version: string | null;\n  /**\n   * Raw stdout from `--version`, kept for debugging and for the\n   * `remix claude probe` command. Trimmed.\n   */\n  versionRaw: string;\n}\n\ninterface DiscoveryFailure {\n  argv0: string;\n  source: ClaudeBinarySource;\n  reason: string;\n}\n\nlet cached: { value: ClaudeBinary | null } | null = null;\n\n/**\n * Returns the resolved Claude binary, or null when no working\n * candidate exists. Memoized for the lifetime of the process.\n *\n * Throws (CliError) only when an env-var override points at\n * something missing or broken — that's user misconfiguration we\n * refuse to paper over.\n */\nexport async function findClaudeBinary(): Promise<ClaudeBinary | null> {\n  if (cached) return cached.value;\n  const value = await resolveClaudeBinary();\n  cached = { value };\n  return value;\n}\n\n/**\n * Drop the cached resolution. Call this after a Phase 2 bootstrap\n * step that just installed Claude — otherwise the post-install\n * lifecycle commands will keep returning the pre-install null.\n */\nexport function clearClaudeBinaryCache(): void {\n  cached = null;\n}\n\nasync function resolveClaudeBinary(): Promise<ClaudeBinary | null> {\n  // 1) Env-var overrides. Strict: if set but broken, error.\n  const envBinary = await tryEnvOverride();\n  if (envBinary) return envBinary;\n\n  // 2) PATH — `claude` resolved by the user's shell. User intent\n  //    wins; this is the only source we treat as authoritative.\n  const onPath = await probeCommand(\"claude\", \"path\");\n  if (onPath) return onPath;\n\n  // 3) Native installer's pinned location. The curl-installer drops\n  //    a wrapper at `~/.local/bin/claude` that points into\n  //    `~/.local/share/claude/versions/<ver>/`. Many users have\n  //    `~/.local/bin` on PATH already (so step 2 caught it); this\n  //    rung handles the others.\n  const native = await tryNativeInstall();\n  if (native) return native;\n\n  // 4) Homebrew. Usually already on PATH; covered as a paranoid\n  //    fallback in case the user's shell PATH was misresolved.\n  const brew = await tryHomebrew();\n  if (brew) return brew;\n\n  // 5) Desktop-embedded engine. The big win of this whole module —\n  //    users with only Claude Desktop installed get full lifecycle\n  //    support without ever touching npm.\n  const embedded = await tryDesktopEmbedded();\n  if (embedded) return embedded;\n\n  // 6) Windows-only locations.\n  const windowsBundle = await tryWindowsBundle();\n  if (windowsBundle) return windowsBundle;\n\n  // 7) Linux desktop-bundle layouts (best-effort).\n  const linuxBundle = await tryLinuxBundle();\n  if (linuxBundle) return linuxBundle;\n\n  return null;\n}\n\nasync function tryEnvOverride(): Promise<ClaudeBinary | null> {\n  // REMIX_CLAUDE_BINARY beats CLAUDE_BINARY when both are set —\n  // more-specific naming wins, and it lets us coexist with a future\n  // Anthropic-defined CLAUDE_BINARY convention without clashing.\n  const remixEnv = process.env.REMIX_CLAUDE_BINARY?.trim();\n  const genericEnv = process.env.CLAUDE_BINARY?.trim();\n  const candidate = remixEnv || genericEnv;\n  if (!candidate) return null;\n\n  const which = remixEnv ? \"REMIX_CLAUDE_BINARY\" : \"CLAUDE_BINARY\";\n\n  try {\n    await fs.access(candidate);\n  } catch {\n    throw new CliError(\n      `${which} points at \\`${candidate}\\` but no such file exists.`,\n      {\n        exitCode: 2,\n        hint: `Unset ${which} or point it at a working \\`claude\\` binary.`,\n      },\n    );\n  }\n\n  const probed = await probeCommand(candidate, \"env_override\");\n  if (!probed) {\n    throw new CliError(\n      `${which} points at \\`${candidate}\\` but \\`--version\\` failed.`,\n      {\n        exitCode: 2,\n        hint: `Verify the path is a working Claude Code binary, then re-run.`,\n      },\n    );\n  }\n  return probed;\n}\n\nasync function tryNativeInstall(): Promise<ClaudeBinary | null> {\n  const candidates: string[] = [];\n  if (process.platform === \"win32\") {\n    const localAppData = process.env.LOCALAPPDATA;\n    if (localAppData) {\n      candidates.push(\n        path.join(localAppData, \"Programs\", \"claude\", \"claude.exe\"),\n        path.join(\n          localAppData,\n          \"Programs\",\n          \"@anthropic-ai\",\n          \"claude-code\",\n          \"claude.exe\",\n        ),\n      );\n    }\n  } else {\n    candidates.push(path.join(os.homedir(), \".local\", \"bin\", \"claude\"));\n  }\n  return firstWorking(candidates, \"native\");\n}\n\nasync function tryHomebrew(): Promise<ClaudeBinary | null> {\n  if (process.platform !== \"darwin\") return null;\n  return firstWorking(\n    [\"/opt/homebrew/bin/claude\", \"/usr/local/bin/claude\"],\n    \"homebrew\",\n  );\n}\n\nasync function tryDesktopEmbedded(): Promise<ClaudeBinary | null> {\n  if (process.platform !== \"darwin\") return null;\n\n  const root = path.join(\n    os.homedir(),\n    \"Library\",\n    \"Application Support\",\n    \"Claude\",\n    \"claude-code\",\n  );\n  const versionDirs = await listVersionDirs(root);\n  if (versionDirs.length === 0) return null;\n\n  // Newest semver first. Within each version dir we try BOTH known\n  // shapes, because the v2.1.78 layout change can leave a half-\n  // uninstalled state where the new shape is broken but the old one\n  // still works (or vice versa).\n  for (const dir of versionDirs) {\n    const shapes = [\n      // Post-v2.1.78: app bundle wrapper.\n      path.join(dir, \"claude.app\", \"Contents\", \"MacOS\", \"claude\"),\n      // Pre-v2.1.78: raw binary.\n      path.join(dir, \"claude\"),\n    ];\n    const hit = await firstWorking(shapes, \"desktop-embedded\");\n    if (hit) return hit;\n  }\n  return null;\n}\n\nasync function tryWindowsBundle(): Promise<ClaudeBinary | null> {\n  if (process.platform !== \"win32\") return null;\n  const localAppData = process.env.LOCALAPPDATA;\n  if (!localAppData) return null;\n  // Anthropic's Windows desktop bundle ships the engine alongside\n  // the app. The exact path is best-effort — Windows deep-paths shift\n  // across releases, so we probe a few known shapes.\n  const candidates = [\n    path.join(localAppData, \"Programs\", \"Claude\", \"claude.exe\"),\n    path.join(localAppData, \"Programs\", \"Claude\", \"resources\", \"claude.exe\"),\n    path.join(\n      localAppData,\n      \"Programs\",\n      \"@anthropic-ai\",\n      \"claude-code\",\n      \"claude.exe\",\n    ),\n  ];\n  return firstWorking(candidates, \"windows-bundle\");\n}\n\nasync function tryLinuxBundle(): Promise<ClaudeBinary | null> {\n  if (process.platform !== \"linux\") return null;\n  // Best-effort. AppImage-based installs typically expose a wrapper\n  // somewhere on PATH (caught by step 2); this rung is for known\n  // package layouts only. We deliberately don't probe `/opt/Claude/`\n  // sub-trees by globbing — if a future layout shows up we'll add\n  // it explicitly rather than guessing.\n  const candidates = [\n    \"/opt/Claude/claude\",\n    \"/opt/claude/claude\",\n    \"/usr/lib/claude/claude\",\n  ];\n  return firstWorking(candidates, \"linux-bundle\");\n}\n\nasync function listVersionDirs(root: string): Promise<string[]> {\n  let entries: import(\"node:fs\").Dirent[];\n  try {\n    entries = await fs.readdir(root, { withFileTypes: true });\n  } catch {\n    return [];\n  }\n  const versioned = entries\n    .filter((e) => e.isDirectory())\n    .map((e) => e.name)\n    .filter((name) => /^\\d+\\.\\d+\\.\\d+/.test(name));\n  versioned.sort(compareSemverDesc);\n  return versioned.map((name) => path.join(root, name));\n}\n\nfunction compareSemverDesc(a: string, b: string): number {\n  const pa = parseSemver(a);\n  const pb = parseSemver(b);\n  for (let i = 0; i < 3; i += 1) {\n    const ai = pa[i] ?? 0;\n    const bi = pb[i] ?? 0;\n    if (ai !== bi) return bi - ai;\n  }\n  return 0;\n}\n\nfunction parseSemver(s: string): [number, number, number] {\n  const m = s.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n  if (!m) return [0, 0, 0];\n  return [\n    Number.parseInt(m[1] ?? \"0\", 10),\n    Number.parseInt(m[2] ?? \"0\", 10),\n    Number.parseInt(m[3] ?? \"0\", 10),\n  ];\n}\n\nasync function firstWorking(\n  candidates: string[],\n  source: ClaudeBinarySource,\n): Promise<ClaudeBinary | null> {\n  for (const candidate of candidates) {\n    if (!candidate) continue;\n    try {\n      await fs.access(candidate);\n    } catch {\n      continue;\n    }\n    const probed = await probeCommand(candidate, source);\n    if (probed) return probed;\n  }\n  return null;\n}\n\n/**\n * Run `<argv0> --version` with a tight timeout. We never block on\n * Claude longer than a couple of seconds during discovery — a hung\n * shim is functionally equivalent to a broken one for our purposes.\n *\n * Note: when `argv0` is the bare string `\"claude\"` we let execa\n * resolve it through PATH; otherwise it must be an absolute path.\n */\nasync function probeCommand(\n  argv0: string,\n  source: ClaudeBinarySource,\n): Promise<ClaudeBinary | null> {\n  try {\n    const result = await execa(argv0, [\"--version\"], {\n      reject: false,\n      timeout: 5000,\n    });\n    if (result.exitCode !== 0) return null;\n    const versionRaw = (result.stdout ?? \"\").trim();\n    if (!versionRaw) return null;\n    return {\n      argv0,\n      source,\n      version: extractSemver(versionRaw),\n      versionRaw,\n    };\n  } catch {\n    return null;\n  }\n}\n\nfunction extractSemver(raw: string): string | null {\n  // `claude --version` typically prints \"1.2.3 (Claude Code)\" — pull\n  // the first semver-shaped token. Returning null is fine; callers\n  // treat it as \"binary works, version unknown\".\n  const m = raw.match(/(\\d+\\.\\d+\\.\\d+)/);\n  return m?.[1] ?? null;\n}\n\n/**\n * Convenience used elsewhere in the CLI when only the existence /\n * version of the binary matters (e.g. the prereqs summary). Mirrors\n * the legacy `detectClaudeBinary()` shape but adds discovery\n * provenance.\n */\nexport interface ClaudeBinaryProbe {\n  available: boolean;\n  version: string | null;\n  source: ClaudeBinarySource | null;\n  argv0: string | null;\n  reason: string | null;\n}\n\nexport async function probeClaudeBinary(): Promise<ClaudeBinaryProbe> {\n  try {\n    const found = await findClaudeBinary();\n    if (found) {\n      return {\n        available: true,\n        version: found.version,\n        source: found.source,\n        argv0: found.argv0,\n        reason: null,\n      };\n    }\n    return {\n      available: false,\n      version: null,\n      source: null,\n      argv0: null,\n      reason: \"Claude Code is not installed. Install Claude Code or the Claude Desktop app and try again.\",\n    };\n  } catch (error) {\n    // Env-var override misconfig — surface the message instead of\n    // pretending the binary is just missing.\n    return {\n      available: false,\n      version: null,\n      source: null,\n      argv0: null,\n      reason: error instanceof Error ? error.message : \"Failed to locate Claude Code.\",\n    };\n  }\n}\n","import { constants as fsConstants } from \"node:fs\";\nimport fs from \"node:fs/promises\";\n\nimport { execa } from \"execa\";\n\nimport { CliError } from \"../errors/cliError.js\";\n\nexport type NodeRuntime = {\n  path: string;\n  version: string;\n};\n\nexport type NodeRuntimeCandidateResult =\n  | { ok: true; runtime: NodeRuntime }\n  | { ok: false; path: string; reason: string };\n\nexport type ResolveNodeRuntimeOptions = {\n  explicitPath?: string | null;\n  processExecPath?: string | null;\n  whichNode?: () => Promise<string[]>;\n  validateCandidate?: (path: string) => Promise<NodeRuntimeCandidateResult>;\n  extraCandidates?: string[];\n};\n\nconst COMMON_NODE_CANDIDATES = [\n  \"/opt/homebrew/bin/node\",\n  \"/usr/local/bin/node\",\n  \"/usr/bin/node\",\n] as const;\n\nfunction normalizeCandidate(value: string | null | undefined): string | null {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : null;\n}\n\nfunction uniqueCandidates(candidates: Array<string | null | undefined>): string[] {\n  return Array.from(\n    new Set(\n      candidates\n        .map(normalizeCandidate)\n        .filter((candidate): candidate is string => Boolean(candidate)),\n    ),\n  );\n}\n\nasync function defaultWhichNode(): Promise<string[]> {\n  const result = await execa(\"which\", [\"-a\", \"node\"], { reject: false });\n  if (result.exitCode !== 0) return [];\n  return result.stdout\n    .split(/\\r?\\n/)\n    .map((line) => line.trim())\n    .filter(Boolean);\n}\n\nfunction majorVersion(version: string): number | null {\n  const match = version.trim().match(/^v?(\\d+)\\./);\n  if (!match) return null;\n  const major = Number.parseInt(match[1]!, 10);\n  return Number.isFinite(major) ? major : null;\n}\n\nasync function defaultValidateCandidate(candidatePath: string): Promise<NodeRuntimeCandidateResult> {\n  try {\n    await fs.access(candidatePath, fsConstants.X_OK);\n  } catch {\n    return { ok: false, path: candidatePath, reason: \"not executable or not found\" };\n  }\n\n  const versionResult = await execa(candidatePath, [\"-v\"], { reject: false });\n  if (versionResult.exitCode !== 0) {\n    return {\n      ok: false,\n      path: candidatePath,\n      reason: versionResult.stderr.trim() || versionResult.stdout.trim() || \"could not read Node version\",\n    };\n  }\n\n  const version = versionResult.stdout.trim();\n  const major = majorVersion(version);\n  if (major === null || major < 20) {\n    return { ok: false, path: candidatePath, reason: `requires Node 20+; found ${version || \"unknown\"}` };\n  }\n\n  const apiResult = await execa(\n    candidatePath,\n    [\"-p\", \"typeof require('node:stream').getDefaultHighWaterMark\"],\n    { reject: false },\n  );\n  if (apiResult.exitCode !== 0 || apiResult.stdout.trim() !== \"function\") {\n    return {\n      ok: false,\n      path: candidatePath,\n      reason: \"missing node:stream.getDefaultHighWaterMark\",\n    };\n  }\n\n  return { ok: true, runtime: { path: candidatePath, version } };\n}\n\nexport async function resolveNodeRuntime(\n  options: ResolveNodeRuntimeOptions = {},\n): Promise<NodeRuntime> {\n  const explicitPath = normalizeCandidate(options.explicitPath);\n  const validate = options.validateCandidate ?? defaultValidateCandidate;\n\n  if (explicitPath) {\n    const result = await validate(explicitPath);\n    if (result.ok) return result.runtime;\n    throw new CliError(\"The provided Node binary is not compatible with Remix hooks.\", {\n      exitCode: 2,\n      hint: `${result.path}: ${result.reason}. Pass a Node 20+ binary with --node.`,\n    });\n  }\n\n  const whichCandidates = await (options.whichNode ?? defaultWhichNode)();\n  const candidates = uniqueCandidates([\n    options.processExecPath ?? process.execPath,\n    ...whichCandidates,\n    ...(options.extraCandidates ?? []),\n    ...COMMON_NODE_CANDIDATES,\n  ]);\n\n  const failures: Array<{ ok: false; path: string; reason: string }> = [];\n  for (const candidate of candidates) {\n    const result = await validate(candidate);\n    if (result.ok) return result.runtime;\n    failures.push(result);\n  }\n\n  const failureSummary = failures\n    .slice(0, 5)\n    .map((failure) => `${failure.path}: ${failure.reason}`)\n    .join(\"; \");\n\n  throw new CliError(\"Could not find a compatible Node binary for Remix Claude hooks.\", {\n    exitCode: 2,\n    hint: [\n      \"Install Node 20+ or pass an explicit path, e.g. `remix claude repair --hard --node /opt/homebrew/bin/node`.\",\n      failureSummary ? `Checked: ${failureSummary}` : null,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  });\n}\n","export type SetupAgent = \"claude\" | \"cursor\";\nexport type SetupWorkflow = \"init\" | \"checkout\" | \"remix\" | \"none\";\nexport type ClaudePluginAction = \"auto\" | \"install\" | \"update\" | \"reinstall\" | \"skip\";\nexport type ClaudePluginScope = \"user\" | \"project\" | \"local\";\nexport type CursorPluginAction = \"auto\" | \"install\" | \"update\" | \"reinstall\" | \"skip\";\n\nexport type ClaudeSetupMetadata = {\n  marketplaceName: string;\n  marketplaceSource: string;\n  pluginName: string;\n  npmPackage: string;\n  version: string;\n  installRef: string;\n  nodeRequirement: string;\n};\n\nexport type CursorSetupMetadata = {\n  pluginName: string;\n  npmPackage: string;\n  version: string;\n  defaultDestination: string;\n  nodeRequirement: string;\n};\n\nexport type SetupMetadata = {\n  schemaVersion: 1;\n  agents: {\n    claude: ClaudeSetupMetadata;\n    cursor: CursorSetupMetadata;\n  };\n};\n\n// We should keep these identifiers aligned with:\n// - plugins/remix-claude-plugin/.claude-plugin/plugin.json\n// - plugins/remix-claude-marketplace/.claude-plugin/marketplace.json\nexport const REMIX_CLAUDE_PLUGIN = {\n  agent: \"claude\" as const,\n  agentLabel: \"Claude Code\",\n  marketplaceName: \"remix\",\n  marketplaceSource: \"https://github.com/RemixDotOne/remix-claude-marketplace\",\n  pluginName: \"remix\",\n  npmPackage: \"@remixhq/claude-plugin\",\n  version: \"0.1.28\",\n  nodeRequirement: \">=20\",\n  installRef: \"remix@remix\",\n  defaultScope: \"user\" as const,\n};\n\n// Keep these identifiers aligned with:\n// - plugins/remix-cursor-plugin/.cursor-plugin/plugin.json\n// - plugins/remix-cursor-plugin/package.json\nexport const REMIX_CURSOR_PLUGIN = {\n  agent: \"cursor\" as const,\n  agentLabel: \"Cursor\",\n  pluginName: \"remix\",\n  npmPackage: \"@remixhq/cursor-plugin\",\n  version: \"0.1.8\",\n  defaultDestination: \"~/.cursor/plugins/local/remix\",\n  nodeRequirement: \">=20\",\n};\n\nconst FALLBACK_CLAUDE_PLUGIN = { ...REMIX_CLAUDE_PLUGIN };\nconst FALLBACK_CURSOR_PLUGIN = { ...REMIX_CURSOR_PLUGIN };\n\nexport function getFallbackSetupMetadata(): SetupMetadata {\n  return {\n    schemaVersion: 1,\n    agents: {\n      claude: {\n        marketplaceName: FALLBACK_CLAUDE_PLUGIN.marketplaceName,\n        marketplaceSource: FALLBACK_CLAUDE_PLUGIN.marketplaceSource,\n        pluginName: FALLBACK_CLAUDE_PLUGIN.pluginName,\n        npmPackage: FALLBACK_CLAUDE_PLUGIN.npmPackage,\n        version: FALLBACK_CLAUDE_PLUGIN.version,\n        installRef: FALLBACK_CLAUDE_PLUGIN.installRef,\n        nodeRequirement: FALLBACK_CLAUDE_PLUGIN.nodeRequirement,\n      },\n      cursor: {\n        pluginName: FALLBACK_CURSOR_PLUGIN.pluginName,\n        npmPackage: FALLBACK_CURSOR_PLUGIN.npmPackage,\n        version: FALLBACK_CURSOR_PLUGIN.version,\n        defaultDestination: FALLBACK_CURSOR_PLUGIN.defaultDestination,\n        nodeRequirement: FALLBACK_CURSOR_PLUGIN.nodeRequirement,\n      },\n    },\n  };\n}\n\nexport function applySetupMetadata(metadata: SetupMetadata): void {\n  Object.assign(REMIX_CLAUDE_PLUGIN, metadata.agents.claude);\n  Object.assign(REMIX_CURSOR_PLUGIN, metadata.agents.cursor);\n}\n\nexport function resetSetupMetadataForTests(): void {\n  Object.assign(REMIX_CLAUDE_PLUGIN, FALLBACK_CLAUDE_PLUGIN);\n  Object.assign(REMIX_CURSOR_PLUGIN, FALLBACK_CURSOR_PLUGIN);\n}\n","import { z } from \"zod\";\nimport type { SetupMetadata } from \"./setupMetadata.js\";\n\nconst setupMetadataSchema = z.object({\n  schemaVersion: z.literal(1),\n  agents: z.object({\n    claude: z.object({\n      marketplaceName: z.string().min(1),\n      marketplaceSource: z.string().url(),\n      pluginName: z.string().min(1),\n      npmPackage: z.string().min(1),\n      version: z.string().min(1),\n      installRef: z.string().min(1),\n      nodeRequirement: z.string().min(1),\n    }),\n    cursor: z.object({\n      pluginName: z.string().min(1),\n      npmPackage: z.string().min(1),\n      version: z.string().min(1),\n      defaultDestination: z.string().min(1),\n      nodeRequirement: z.string().min(1),\n    }),\n  }),\n});\n\nconst serviceResponseSchema = z.object({\n  success: z.literal(true),\n  responseObject: setupMetadataSchema,\n});\n\nexport type SetupMetadataFetch = (input: string | URL, init?: RequestInit) => Promise<Response>;\n\nexport type FetchSetupMetadataParams = {\n  apiUrl: string;\n  fetchImpl?: SetupMetadataFetch;\n  timeoutMs?: number;\n};\n\nfunction joinUrl(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, \"\")}${path}`;\n}\n\nexport async function fetchSetupMetadata(params: FetchSetupMetadataParams): Promise<SetupMetadata> {\n  const fetchImpl = params.fetchImpl ?? fetch;\n  const response = await fetchImpl(joinUrl(params.apiUrl, \"/v1/public/setup/metadata\"), {\n    headers: { accept: \"application/json\" },\n    signal: AbortSignal.timeout(params.timeoutMs ?? 3000),\n  });\n\n  if (!response.ok) {\n    throw new Error(`Setup metadata request failed with status ${response.status}.`);\n  }\n\n  const parsed = serviceResponseSchema.safeParse(await response.json());\n  if (!parsed.success) {\n    throw new Error(\"Setup metadata response was invalid.\");\n  }\n\n  return parsed.data.responseObject;\n}\n","import { resolveConfig } from \"../config/config.js\";\nimport {\n  applySetupMetadata,\n  getFallbackSetupMetadata,\n  type SetupMetadata,\n} from \"./setupMetadata.js\";\nimport { fetchSetupMetadata, type SetupMetadataFetch } from \"./setupMetadataClient.js\";\n\nexport type ResolveSetupMetadataParams = {\n  apiUrl?: string;\n  fetchImpl?: SetupMetadataFetch;\n  timeoutMs?: number;\n  yes?: boolean;\n};\n\nexport type RefreshSetupMetadataParams = ResolveSetupMetadataParams & {\n  yes?: boolean;\n};\n\nlet cachedSetupMetadata: SetupMetadata | null = null;\n\nexport async function resolveSetupMetadata(params: ResolveSetupMetadataParams = {}): Promise<SetupMetadata> {\n  if (!params.apiUrl && !params.fetchImpl && cachedSetupMetadata) return cachedSetupMetadata;\n\n  try {\n    const metadata = await fetchSetupMetadata({\n      apiUrl: params.apiUrl ?? (await resolveConfig({ yes: params.yes ?? true })).apiUrl,\n      fetchImpl: params.fetchImpl,\n      timeoutMs: params.timeoutMs,\n    });\n    if (!params.apiUrl && !params.fetchImpl) cachedSetupMetadata = metadata;\n    return metadata;\n  } catch {\n    const fallback = getFallbackSetupMetadata();\n    if (!params.apiUrl && !params.fetchImpl) cachedSetupMetadata = fallback;\n    return fallback;\n  }\n}\n\nexport async function refreshSetupMetadata(params: RefreshSetupMetadataParams = {}): Promise<SetupMetadata> {\n  const metadata = await resolveSetupMetadata(params);\n  applySetupMetadata(metadata);\n  return metadata;\n}\n\nexport function resetSetupMetadataResolverForTests(): void {\n  cachedSetupMetadata = null;\n}\n","import { execa } from \"execa\";\n\nimport { resolveConfig } from \"../config/config.js\";\nimport { probeClaudeBinary } from \"./claudeBinary.js\";\nimport { loadBindingContext, maybeFindGitRoot, type JsonRecord } from \"./serviceHelpers.js\";\nimport {\n  REMIX_CLAUDE_PLUGIN,\n  REMIX_CURSOR_PLUGIN,\n  type ClaudePluginAction,\n  type CursorPluginAction,\n  type SetupAgent,\n  type SetupWorkflow,\n} from \"./setupMetadata.js\";\nimport { refreshSetupMetadata } from \"./setupMetadataResolver.js\";\n\nexport type SetupPrerequisiteStatus = \"ok\" | \"warning\" | \"blocked\" | \"skipped\";\n\nexport type SetupPrerequisite = {\n  id:\n    | \"config\"\n    | \"claude_binary\"\n    | \"node_runtime\"\n    | \"plugin_metadata\"\n    | \"workflow_git_repo\"\n    | \"workflow_binding\";\n  label: string;\n  status: SetupPrerequisiteStatus;\n  required: boolean;\n  canProceed: boolean;\n  reason: string | null;\n  remediationHint: string | null;\n  details?: JsonRecord | null;\n};\n\nexport type SetupPrerequisiteSummary = {\n  items: SetupPrerequisite[];\n  warnings: string[];\n  blocking: SetupPrerequisite[];\n};\n\ntype PrereqParams = {\n  cwd: string;\n  yes: boolean;\n  workflow?: SetupWorkflow | null;\n  agent?: SetupAgent | SetupAgent[] | null;\n  pluginAction?: ClaudePluginAction;\n  cursorPluginAction?: CursorPluginAction;\n};\n\nfunction makePrereq(params: SetupPrerequisite): SetupPrerequisite {\n  return params;\n}\n\nfunction versionSatisfiesNodeRequirement(version: string, requirement: string): boolean {\n  if (requirement !== \">=20\") return true;\n  const major = Number.parseInt(version.replace(/^v/, \"\").split(\".\")[0] ?? \"\", 10);\n  return Number.isInteger(major) && major >= 20;\n}\n\nexport async function detectClaudeBinary(): Promise<{\n  available: boolean;\n  version: string | null;\n  reason: string | null;\n  source: import(\"./claudeBinary.js\").ClaudeBinarySource | null;\n  argv0: string | null;\n}> {\n  // Delegates to the discovery ladder (see `claudeBinary.ts`). The\n  // historic shape — `available` / `version` / `reason` — is preserved\n  // for every existing caller; `source` and `argv0` are additive so\n  // status output and the new `remix claude probe` command can show\n  // where the binary came from.\n  const probe = await probeClaudeBinary();\n  return {\n    available: probe.available,\n    version: probe.version,\n    reason: probe.available ? null : probe.reason,\n    source: probe.source,\n    argv0: probe.argv0,\n  };\n}\n\nexport async function checkSetupPrerequisites(params: PrereqParams): Promise<SetupPrerequisiteSummary> {\n  await refreshSetupMetadata({ yes: params.yes });\n\n  const items: SetupPrerequisite[] = [];\n  const agents = Array.isArray(params.agent)\n    ? params.agent\n    : [params.agent ?? REMIX_CLAUDE_PLUGIN.agent];\n  const claudePluginRequested =\n    agents.includes(REMIX_CLAUDE_PLUGIN.agent) &&\n    (params.pluginAction ?? \"auto\") !== \"skip\";\n  const cursorPluginRequested =\n    agents.includes(REMIX_CURSOR_PLUGIN.agent) &&\n    (params.cursorPluginAction ?? \"auto\") !== \"skip\";\n  const pluginRequested = claudePluginRequested || cursorPluginRequested;\n\n  try {\n    const config = await resolveConfig({ yes: params.yes });\n    items.push(\n      makePrereq({\n        id: \"config\",\n        label: \"Remix configuration\",\n        status: \"ok\",\n        required: true,\n        canProceed: true,\n        reason: null,\n        remediationHint: null,\n        details: {\n          apiUrl: config.apiUrl,\n          supabaseUrl: config.supabaseUrl,\n        },\n      }),\n    );\n  } catch (error) {\n    items.push(\n      makePrereq({\n        id: \"config\",\n        label: \"Remix configuration\",\n        status: \"blocked\",\n        required: true,\n        canProceed: false,\n        reason: error instanceof Error ? error.message : \"Failed to resolve Remix configuration.\",\n        remediationHint: \"Verify your Remix CLI environment configuration, then rerun `remix setup`.\",\n      }),\n    );\n  }\n\n  const claudeMetadataValid =\n    Boolean(REMIX_CLAUDE_PLUGIN.marketplaceName) &&\n    Boolean(REMIX_CLAUDE_PLUGIN.marketplaceSource) &&\n    Boolean(REMIX_CLAUDE_PLUGIN.pluginName) &&\n    Boolean(REMIX_CLAUDE_PLUGIN.version);\n  const cursorMetadataValid =\n    Boolean(REMIX_CURSOR_PLUGIN.pluginName) &&\n    Boolean(REMIX_CURSOR_PLUGIN.npmPackage) &&\n    Boolean(REMIX_CURSOR_PLUGIN.defaultDestination);\n  const metadataValid =\n    (!claudePluginRequested || claudeMetadataValid) &&\n    (!cursorPluginRequested || cursorMetadataValid);\n  items.push(\n    makePrereq({\n      id: \"plugin_metadata\",\n      label: \"Agent plugin metadata\",\n      status: metadataValid ? \"ok\" : \"blocked\",\n      required: pluginRequested,\n      canProceed: metadataValid || !pluginRequested,\n      reason: metadataValid ? null : \"Agent plugin metadata is incomplete.\",\n      remediationHint: metadataValid ? null : \"Update the Remix CLI plugin metadata constants before shipping this build.\",\n      details: metadataValid\n        ? {\n            claude: {\n              marketplaceName: REMIX_CLAUDE_PLUGIN.marketplaceName,\n              pluginName: REMIX_CLAUDE_PLUGIN.pluginName,\n              version: REMIX_CLAUDE_PLUGIN.version,\n              npmPackage: REMIX_CLAUDE_PLUGIN.npmPackage,\n            },\n            cursor: {\n              pluginName: REMIX_CURSOR_PLUGIN.pluginName,\n              npmPackage: REMIX_CURSOR_PLUGIN.npmPackage,\n              defaultDestination: REMIX_CURSOR_PLUGIN.defaultDestination,\n            },\n          }\n        : null,\n    }),\n  );\n\n  if (claudePluginRequested) {\n    const claudeBinary = await detectClaudeBinary();\n    items.push(\n      makePrereq({\n        id: \"claude_binary\",\n        label: \"Claude Code CLI\",\n        status: claudeBinary.available ? \"ok\" : \"warning\",\n        required: false,\n        canProceed: true,\n        reason: claudeBinary.available ? null : claudeBinary.reason ?? \"Claude Code CLI is not installed.\",\n        remediationHint: claudeBinary.available\n          ? null\n          : \"Install Claude Code and ensure `claude` is available on PATH, or rerun `remix setup --skip-plugin-install`.\",\n        details: claudeBinary.available ? { version: claudeBinary.version } : null,\n      }),\n    );\n\n  } else {\n    items.push(\n      makePrereq({\n        id: \"claude_binary\",\n        label: \"Claude Code CLI\",\n        status: \"skipped\",\n        required: false,\n        canProceed: true,\n        reason: \"Claude plugin installation was skipped.\",\n        remediationHint: null,\n      }),\n    );\n  }\n\n  const nodeRequirements = Array.from(\n    new Set([\n      ...(claudePluginRequested ? [REMIX_CLAUDE_PLUGIN.nodeRequirement] : []),\n      ...(cursorPluginRequested ? [REMIX_CURSOR_PLUGIN.nodeRequirement] : []),\n    ]),\n  );\n  const nodeOkay = nodeRequirements.every((requirement) => versionSatisfiesNodeRequirement(process.version, requirement));\n  items.push(\n    makePrereq({\n      id: \"node_runtime\",\n      label: \"Node runtime for agent plugins\",\n      status: pluginRequested ? (nodeOkay ? \"ok\" : \"warning\") : \"skipped\",\n      required: false,\n      canProceed: true,\n      reason: pluginRequested\n        ? nodeOkay\n          ? null\n          : `Current Node runtime ${process.version} does not satisfy ${nodeRequirements.join(\" and \")}.`\n        : \"Agent plugin installation was skipped.\",\n      remediationHint: pluginRequested && !nodeOkay\n        ? `Upgrade Node to ${nodeRequirements.join(\" and \")} or skip plugin installation during setup.`\n        : null,\n      details: pluginRequested\n        ? {\n            currentVersion: process.version,\n            required: nodeRequirements,\n          }\n        : null,\n    }),\n  );\n\n  if (params.workflow === \"init\") {\n    const repoRoot = await maybeFindGitRoot(params.cwd);\n    items.push(\n      makePrereq({\n        id: \"workflow_git_repo\",\n        label: \"Current repository\",\n        status: repoRoot ? \"ok\" : \"blocked\",\n        required: true,\n        canProceed: Boolean(repoRoot),\n        reason: repoRoot ? null : \"The selected working directory is not inside a git repository.\",\n        remediationHint: repoRoot ? null : \"Run `remix setup --cwd <repo>` from a git repository, or choose checkout/remix instead.\",\n        details: repoRoot ? { repoRoot } : null,\n      }),\n    );\n\n    const bindingContext = await loadBindingContext(params.cwd);\n    items.push(\n      makePrereq({\n        id: \"workflow_binding\",\n        label: \"Existing Remix binding\",\n        status: bindingContext.binding ? \"warning\" : \"ok\",\n        required: false,\n        canProceed: true,\n        reason: bindingContext.binding ? \"This repository is already bound to a Remix app.\" : null,\n        remediationHint: bindingContext.binding\n          ? \"Continuing may reuse the existing binding unless the underlying collab init flow decides otherwise.\"\n          : null,\n        details: bindingContext.binding\n          ? {\n              currentAppId: bindingContext.binding.currentAppId,\n              projectId: bindingContext.binding.projectId,\n              repoRoot: bindingContext.repoRoot,\n            }\n          : null,\n      }),\n    );\n  } else {\n    items.push(\n      makePrereq({\n        id: \"workflow_git_repo\",\n        label: \"Current repository\",\n        status: \"skipped\",\n        required: false,\n        canProceed: true,\n        reason: \"Git repository validation is only required for the init workflow.\",\n        remediationHint: null,\n      }),\n    );\n    items.push(\n      makePrereq({\n        id: \"workflow_binding\",\n        label: \"Existing Remix binding\",\n        status: \"skipped\",\n        required: false,\n        canProceed: true,\n        reason: \"Binding validation is only required for the init workflow.\",\n        remediationHint: null,\n      }),\n    );\n  }\n\n  return summarizePrerequisites(items);\n}\n\nexport function summarizePrerequisites(items: SetupPrerequisite[]): SetupPrerequisiteSummary {\n  const warnings = items\n    .filter((item) => item.status === \"warning\" && item.reason)\n    .map((item) => `${item.label}: ${item.reason}`);\n  const blocking = items.filter((item) => item.status === \"blocked\" || item.canProceed === false);\n  return {\n    items,\n    warnings,\n    blocking,\n  };\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { execa } from \"execa\";\n\n// Best-effort detection of a local Cursor IDE install. We run this from\n// the setup picker so we can pre-check the Cursor row\n// when the editor is already on the user's machine. Detection must be\n// fast (<200ms typical) and must never throw — a false negative just\n// leaves the row un-checked, which is fine. False positives are worse,\n// so we deliberately only trust strong signals (app bundle on disk, CLI\n// shim on PATH) and intentionally skip soft signals like leftover\n// user-data dirs that can outlive an uninstall.\n\nexport type CursorDetectionSource = \"app\" | \"cli\";\n\nexport type CursorDetection = {\n  available: boolean;\n  source: CursorDetectionSource | null;\n  // Platform we ran detection on, surfaced for diagnostics so callers\n  // can disambiguate \"not installed\" from \"we don't know how to detect\n  // on this OS yet\".\n  platform: NodeJS.Platform;\n  // Human-readable detail about *what* was found (path or version\n  // string). Surfaced in the picker as a dim trailing hint so users can\n  // tell at a glance which install we matched.\n  details: string | null;\n};\n\nasync function pathExists(target: string): Promise<boolean> {\n  try {\n    await fs.access(target);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nfunction getAppInstallCandidates(): string[] {\n  const home = os.homedir();\n  const platform = process.platform;\n\n  if (platform === \"darwin\") {\n    // Cursor's GUI ships as a standard `.app` bundle. Homebrew Cask,\n    // the official DMG installer, and \"drag-to-Applications\" all land\n    // at /Applications/Cursor.app; ~/Applications covers per-user\n    // installs.\n    return [\n      \"/Applications/Cursor.app\",\n      path.join(home, \"Applications\", \"Cursor.app\"),\n    ];\n  }\n\n  if (platform === \"linux\") {\n    // Linux distributes Cursor in many shapes: a raw AppImage the user\n    // moves wherever they like, Snap, Flatpak, third-party DEB/RPM\n    // packages from the AUR, and ad-hoc `/opt` installs. We check the\n    // strongest fixed-location signals here; the AppImage scanner below\n    // handles the \"user dropped a `.AppImage` somewhere reasonable\"\n    // case, and the `cursor --version` fallback in detectCursorCli()\n    // catches anything reachable via PATH (Snap, Flatpak shims, etc.).\n    return [\n      // Snap\n      \"/snap/bin/cursor\",\n      \"/var/lib/snapd/snap/bin/cursor\",\n      // Flatpak (system + user)\n      \"/var/lib/flatpak/exports/bin/cursor\",\n      path.join(home, \".local/share/flatpak/exports/bin/cursor\"),\n      // Native / unpacked installs\n      \"/opt/Cursor/cursor\",\n      \"/opt/cursor/cursor\",\n      \"/opt/Cursor/Cursor\",\n      // CLI shims placed by AppImageLauncher or manual installs\n      \"/usr/bin/cursor\",\n      \"/usr/local/bin/cursor\",\n      path.join(home, \".local/bin/cursor\"),\n      // Desktop integration entries (created by Snap, Flatpak,\n      // AppImageLauncher, or ad-hoc installs)\n      \"/usr/share/applications/cursor.desktop\",\n      \"/var/lib/flatpak/exports/share/applications/cursor.desktop\",\n      path.join(home, \".local/share/applications/cursor.desktop\"),\n      path.join(\n        home,\n        \".local/share/flatpak/exports/share/applications/cursor.desktop\",\n      ),\n    ];\n  }\n\n  if (platform === \"win32\") {\n    const localAppData =\n      process.env.LOCALAPPDATA ?? path.join(home, \"AppData\", \"Local\");\n    const programFiles = process.env.PROGRAMFILES ?? \"C:\\\\Program Files\";\n    // Some Windows shells expose this as PROGRAMFILES(X86); square-bracket\n    // access keeps the parens literal in the env var name.\n    const programFilesX86 =\n      process.env[\"PROGRAMFILES(X86)\"] ?? \"C:\\\\Program Files (x86)\";\n    return [\n      // Default per-user installer (most common shape)\n      path.join(localAppData, \"Programs\", \"cursor\", \"Cursor.exe\"),\n      path.join(localAppData, \"Programs\", \"Cursor\", \"Cursor.exe\"),\n      // System-wide installer variants — capital and lowercase folder\n      // names both show up in the wild depending on installer version.\n      path.join(programFiles, \"cursor\", \"Cursor.exe\"),\n      path.join(programFiles, \"Cursor\", \"Cursor.exe\"),\n      path.join(programFilesX86, \"cursor\", \"Cursor.exe\"),\n      path.join(programFilesX86, \"Cursor\", \"Cursor.exe\"),\n    ];\n  }\n\n  // Unknown platform: we have no fixed-location signals to check, so\n  // detection falls through to the CLI probe.\n  return [];\n}\n\n// On Linux, Cursor is most commonly distributed as a `.AppImage` file\n// that the user manually drops somewhere on disk. There's no canonical\n// install path, so we scan a small set of conventional folders for\n// anything matching `cursor*.appimage`. We deliberately keep the scan\n// shallow and skip $HOME itself / ~/Downloads to avoid scanning huge\n// directories on every setup invocation.\nasync function findCursorAppImage(): Promise<string | null> {\n  if (process.platform !== \"linux\") return null;\n  const home = os.homedir();\n  const dirs = [\n    path.join(home, \"Applications\"),\n    path.join(home, \"AppImages\"),\n    path.join(home, \".local\", \"bin\"),\n    path.join(home, \".local\", \"share\", \"applications\"),\n  ];\n  for (const dir of dirs) {\n    let entries: string[];\n    try {\n      entries = await fs.readdir(dir);\n    } catch {\n      continue;\n    }\n    for (const entry of entries) {\n      const lower = entry.toLowerCase();\n      if (lower.startsWith(\"cursor\") && lower.endsWith(\".appimage\")) {\n        return path.join(dir, entry);\n      }\n    }\n  }\n  return null;\n}\n\nasync function detectCursorCli(): Promise<{\n  ok: boolean;\n  version: string | null;\n}> {\n  try {\n    const result = await execa(\"cursor\", [\"--version\"], {\n      reject: false,\n      timeout: 3000,\n    });\n    if (result.exitCode === 0) {\n      // `cursor --version` prints something like:\n      //   0.45.6\n      //   abcdef0123 (commit sha)\n      //   x64\n      // We only need the first line for display purposes.\n      const firstLine = result.stdout.split(/\\r?\\n/, 1)[0]?.trim() || null;\n      return { ok: true, version: firstLine };\n    }\n  } catch {\n    // Swallow: `cursor` not on PATH, ENOENT, timeout — all just mean\n    // \"no CLI shim installed\". The caller treats this as not-found.\n  }\n  return { ok: false, version: null };\n}\n\nexport async function detectCursorInstall(): Promise<CursorDetection> {\n  const platform = process.platform;\n\n  // Strongest signal: a known on-disk install location for the platform.\n  for (const candidate of getAppInstallCandidates()) {\n    if (await pathExists(candidate)) {\n      return { available: true, source: \"app\", platform, details: candidate };\n    }\n  }\n\n  // Linux-only: AppImage scan covers the common \"downloaded the\n  // AppImage and dropped it in ~/Applications\" workflow that has no\n  // fixed install path.\n  const appImagePath = await findCursorAppImage();\n  if (appImagePath) {\n    return { available: true, source: \"app\", platform, details: appImagePath };\n  }\n\n  // Cross-platform fallback: CLI shim on PATH. On macOS this requires\n  // the user to have run \"Shell Command: Install 'cursor' command\", on\n  // Windows the installer offers it as an opt-in, and on Linux it gets\n  // shimmed by Snap/Flatpak/AppImageLauncher.\n  const cli = await detectCursorCli();\n  if (cli.ok) {\n    return { available: true, source: \"cli\", platform, details: cli.version };\n  }\n\n  return { available: false, source: null, platform, details: null };\n}\n","import fs from \"node:fs/promises\";\nimport { constants as fsConstants, readFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { execa } from \"execa\";\nimport pc from \"picocolors\";\n\nimport type { JsonRecord } from \"./serviceHelpers.js\";\nimport { detectCursorInstall, type CursorDetection } from \"./setupCursor.js\";\nimport {\n  REMIX_CURSOR_PLUGIN,\n  type CursorPluginAction,\n} from \"./setupMetadata.js\";\nimport { refreshSetupMetadata } from \"./setupMetadataResolver.js\";\n\ntype CommandResult = {\n  ok: boolean;\n  stdout: string;\n  stderr: string;\n  exitCode: number;\n};\n\ntype CursorPluginInspection = {\n  cursor: CursorDetection;\n  npmAvailable: boolean;\n  npmVersion: string | null;\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string | null;\n  destination: string;\n  manifestPath: string;\n  packagePath: string;\n  mcpPath: string;\n  mcpServerPath: string;\n  mcpServerExecutable: boolean;\n  packageName: string | null;\n  manifestName: string | null;\n  sourceLooksPublished: boolean | null;\n  status: CursorPluginHealthStatus;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n  details: JsonRecord | null;\n};\n\nexport type CursorPluginHealthStatus = \"healthy\" | \"missing\" | \"outdated\" | \"stale_or_unverified\" | \"broken\" | \"skipped\";\nexport type CursorPluginLifecycleAction = CursorPluginAction | \"status\" | \"uninstall\";\n\nexport type CursorPluginLifecycleResult = {\n  action: CursorPluginLifecycleAction;\n  status: CursorPluginHealthStatus;\n  changed: boolean;\n  cursorAvailable: boolean;\n  cursorSource: string | null;\n  cursorDetails: string | null;\n  npmAvailable: boolean;\n  npmVersion: string | null;\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string | null;\n  destination: string;\n  packageName: string | null;\n  manifestName: string | null;\n  mcpServerExecutable: boolean;\n  sourceLooksPublished: boolean | null;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n  details?: JsonRecord | null;\n};\n\nexport type CursorPluginInstallResult = CursorPluginLifecycleResult;\n\nfunction expandHome(value: string): string {\n  if (value === \"~\") return os.homedir();\n  if (value.startsWith(\"~/\")) return path.join(os.homedir(), value.slice(2));\n  return value;\n}\n\nexport function getDefaultCursorPluginDestination(): string {\n  return expandHome(REMIX_CURSOR_PLUGIN.defaultDestination);\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n  try {\n    await fs.access(target);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function readJsonObject(target: string): Promise<JsonRecord | null> {\n  try {\n    const raw = await fs.readFile(target, \"utf8\");\n    const parsed = JSON.parse(raw);\n    return parsed && typeof parsed === \"object\" && !Array.isArray(parsed) ? (parsed as JsonRecord) : null;\n  } catch {\n    return null;\n  }\n}\n\nasync function writeJsonObjectIfChanged(target: string, current: JsonRecord, next: JsonRecord): Promise<boolean> {\n  const before = JSON.stringify(current, null, 2);\n  const after = JSON.stringify(next, null, 2);\n  if (before === after) return false;\n  await fs.writeFile(target, `${after}\\n`, \"utf8\");\n  return true;\n}\n\nfunction patchMcpJsonRemixCliPath(config: JsonRecord, remixCliPath: string): JsonRecord {\n  const next = structuredClone(config) as JsonRecord;\n  const servers = next.mcpServers;\n  if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) return next;\n\n  for (const server of Object.values(servers as Record<string, unknown>)) {\n    if (!server || typeof server !== \"object\" || Array.isArray(server)) continue;\n    const serverRecord = server as JsonRecord;\n    const args = Array.isArray(serverRecord.args) ? serverRecord.args : [];\n    const usesPluginRoot = args.some((arg) => typeof arg === \"string\" && arg.includes(\"${CURSOR_PLUGIN_ROOT}/dist/\"));\n    if (!usesPluginRoot) continue;\n    const env = serverRecord.env && typeof serverRecord.env === \"object\" && !Array.isArray(serverRecord.env)\n      ? { ...(serverRecord.env as JsonRecord) }\n      : {};\n    env.REMIX_CLI_PATH = remixCliPath;\n    serverRecord.env = env;\n  }\n\n  return next;\n}\n\nfunction getCliEnvFilePath(): string {\n  const override = process.env.REMIX_CLI_ENV_FILE?.trim();\n  return override || path.join(os.homedir(), \".remix\", \"cli-env.json\");\n}\n\nasync function writeRemixCliEnvFile(remixCliPath: string): Promise<{ path: string; changed: boolean }> {\n  const cliEnvPath = getCliEnvFilePath();\n  const current = await readJsonObject(cliEnvPath);\n  const previousPath = extractString(current?.REMIX_CLI_PATH) ?? extractString(current?.remixCliPath);\n  const previousUpdatedAt = extractString(current?.updatedAt);\n  const next: JsonRecord = {\n    ...(current ?? {}),\n    schemaVersion: 1,\n    REMIX_CLI_PATH: remixCliPath,\n    updatedAt: previousPath === remixCliPath && previousUpdatedAt ? previousUpdatedAt : new Date().toISOString(),\n  };\n  await fs.mkdir(path.dirname(cliEnvPath), { recursive: true });\n  if (current) {\n    return { path: cliEnvPath, changed: await writeJsonObjectIfChanged(cliEnvPath, current, next) };\n  }\n  await fs.writeFile(cliEnvPath, `${JSON.stringify(next, null, 2)}\\n`, \"utf8\");\n  return { path: cliEnvPath, changed: true };\n}\n\nasync function patchInstalledCursorRemixCliPath(params: {\n  destination: string;\n  remixCliPath: string | null | undefined;\n}): Promise<{ path: string; envFile: string; changed: boolean; patchedFiles: string[] } | null> {\n  const remixCliPath = params.remixCliPath?.trim();\n  if (!remixCliPath) return null;\n  const patchedFiles: string[] = [];\n  let changed = false;\n\n  const mcpPath = path.join(params.destination, \"mcp.json\");\n  const mcpJson = await readJsonObject(mcpPath);\n  if (mcpJson) {\n    const nextMcpJson = patchMcpJsonRemixCliPath(mcpJson, remixCliPath);\n    if (await writeJsonObjectIfChanged(mcpPath, mcpJson, nextMcpJson)) {\n      changed = true;\n      patchedFiles.push(mcpPath);\n    }\n  }\n\n  const envFile = await writeRemixCliEnvFile(remixCliPath);\n  changed = changed || envFile.changed;\n\n  return {\n    path: remixCliPath,\n    envFile: envFile.path,\n    changed,\n    patchedFiles,\n  };\n}\n\nfunction readPackageVersionNearCli(cliPath: string): string | null {\n  let resolved: string;\n  try {\n    resolved = path.resolve(cliPath);\n  } catch {\n    return null;\n  }\n  let dir = path.dirname(resolved);\n  for (let i = 0; i < 8; i += 1) {\n    const packagePath = path.join(dir, \"package.json\");\n    try {\n      const parsed = JSON.parse(readFileSync(packagePath, \"utf8\")) as { version?: unknown };\n      if (typeof parsed.version === \"string\" && parsed.version.trim()) return parsed.version.trim();\n    } catch {\n      // keep walking\n    }\n    const parent = path.dirname(dir);\n    if (parent === dir) break;\n    dir = parent;\n  }\n  return null;\n}\n\nfunction extractConfiguredCliPathFromCursorMcp(config: JsonRecord | null): string | null {\n  const servers = config?.mcpServers;\n  if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) return null;\n  for (const server of Object.values(servers as Record<string, unknown>)) {\n    if (!server || typeof server !== \"object\" || Array.isArray(server)) continue;\n    const env = (server as JsonRecord).env;\n    if (!env || typeof env !== \"object\" || Array.isArray(env)) continue;\n    const value = extractString((env as JsonRecord).REMIX_CLI_PATH);\n    if (value) return value;\n  }\n  return null;\n}\n\nasync function inspectConfiguredRemixCliPath(mcpJson: JsonRecord | null): Promise<JsonRecord> {\n  const envFile = getCliEnvFilePath();\n  const envFileJson = await readJsonObject(envFile);\n  const envFileCliPath = extractString(envFileJson?.REMIX_CLI_PATH) ?? extractString(envFileJson?.remixCliPath);\n  const mcpEnvCliPath = extractConfiguredCliPathFromCursorMcp(mcpJson);\n  const effectivePath = mcpEnvCliPath ?? envFileCliPath;\n  const exists = effectivePath ? await pathExists(effectivePath) : false;\n  let realpath: string | null = null;\n  if (effectivePath) {\n    realpath = await fs.realpath(effectivePath).catch(() => null);\n  }\n  return {\n    mcpEnvCliPath,\n    cliEnvFile: envFile,\n    cliEnvFileCliPath: envFileCliPath,\n    effectivePath,\n    exists,\n    realpath,\n    packageVersion: effectivePath ? readPackageVersionNearCli(effectivePath) : null,\n  };\n}\n\nfunction extractString(value: unknown): string | null {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction versionSatisfiesNodeRequirement(version: string, requirement: string): boolean {\n  if (requirement !== \">=20\") return true;\n  const major = Number.parseInt(version.replace(/^v/, \"\").split(\".\")[0] ?? \"\", 10);\n  return Number.isInteger(major) && major >= 20;\n}\n\nasync function runCommand(command: string, args: string[], options?: { cwd?: string }): Promise<CommandResult> {\n  try {\n    const result = await execa(command, args, {\n      cwd: options?.cwd,\n      reject: false,\n    });\n    return {\n      ok: result.exitCode === 0,\n      stdout: result.stdout,\n      stderr: result.stderr,\n      exitCode: result.exitCode ?? 0,\n    };\n  } catch (error) {\n    return {\n      ok: false,\n      stdout: \"\",\n      stderr: error instanceof Error ? error.message : `${command} failed.`,\n      exitCode: 1,\n    };\n  }\n}\n\nasync function resolveConfiguredPackageVersion(packageName: string): Promise<{\n  version: string | null;\n  npmAvailable: boolean;\n  npmVersion: string | null;\n  warning: string | null;\n}> {\n  const npmVersion = await runCommand(\"npm\", [\"--version\"]);\n  if (!npmVersion.ok) {\n    return {\n      version: null,\n      npmAvailable: false,\n      npmVersion: null,\n      warning: npmVersion.stderr.trim() || npmVersion.stdout.trim() || \"npm is not available on PATH.\",\n    };\n  }\n\n  const expectedVersion = REMIX_CURSOR_PLUGIN.version;\n  const result = await runCommand(\"npm\", [\"view\", \"--prefer-online\", `${packageName}@${expectedVersion}`, \"version\"]);\n  if (!result.ok) {\n    return {\n      version: null,\n      npmAvailable: true,\n      npmVersion: npmVersion.stdout.trim() || null,\n      warning: result.stderr.trim() || result.stdout.trim() || `Could not resolve ${packageName}@${expectedVersion} from npm.`,\n    };\n  }\n\n  return {\n    version: result.stdout.trim() || expectedVersion,\n    npmAvailable: true,\n    npmVersion: npmVersion.stdout.trim() || null,\n    warning: null,\n  };\n}\n\nfunction buildRecommendedNextSteps(status: CursorPluginHealthStatus): string[] {\n  if (status === \"healthy\") {\n    return [\n      \"If Cursor is already open, run `Developer: Reload Window` so it reloads the latest plugin files.\",\n    ];\n  }\n  if (status === \"missing\") {\n    return [\"Run `remix cursor install` to install the configured Remix Cursor plugin from npm.\"];\n  }\n  if (status === \"outdated\") {\n    return [\"Run `remix cursor update` to install the configured Remix Cursor plugin from npm.\"];\n  }\n  if (status === \"stale_or_unverified\") {\n    return [\n      \"Run `remix cursor reinstall` to replace the local Cursor plugin directory with a fresh npm package.\",\n      \"After reinstalling, run `Developer: Reload Window` in Cursor.\",\n    ];\n  }\n  if (status === \"broken\") {\n    return [\"Install npm/Node 20+ and retry `remix cursor install`.\"];\n  }\n  return [\"You can configure the Cursor integration later with `remix setup` or `remix cursor install`.\"];\n}\n\nasync function inspectCursorPluginState(params?: {\n  destination?: string;\n  packageName?: string;\n  resolveLatest?: boolean;\n}): Promise<CursorPluginInspection> {\n  await refreshSetupMetadata({ yes: true });\n\n  const destination = expandHome(params?.destination ?? getDefaultCursorPluginDestination());\n  const packageName = params?.packageName ?? REMIX_CURSOR_PLUGIN.npmPackage;\n  const warnings: string[] = [];\n  const cursor = await detectCursorInstall();\n  const packagePath = path.join(destination, \"package.json\");\n  const manifestPath = path.join(destination, \".cursor-plugin\", \"plugin.json\");\n  const mcpPath = path.join(destination, \"mcp.json\");\n  const mcpServerPath = path.join(destination, \"dist\", \"mcp-server.cjs\");\n\n  const configured = params?.resolveLatest === false\n    ? { version: null, npmAvailable: true, npmVersion: null, warning: null }\n    : await resolveConfiguredPackageVersion(packageName);\n  if (configured.warning) warnings.push(configured.warning);\n\n  const packageJson = await readJsonObject(packagePath);\n  const manifestJson = await readJsonObject(manifestPath);\n  const mcpJson = await readJsonObject(mcpPath);\n  const remixCliPath = await inspectConfiguredRemixCliPath(mcpJson);\n  const hasDestination = await pathExists(destination);\n  const hasMcp = await pathExists(mcpPath);\n  const hasMcpServer = await pathExists(mcpServerPath);\n  const hasSrc = await pathExists(path.join(destination, \"src\"));\n  let mcpServerExecutable = false;\n  try {\n    await fs.access(mcpServerPath, fsConstants.X_OK);\n    mcpServerExecutable = true;\n  } catch {\n    mcpServerExecutable = false;\n  }\n\n  const installedVersion = extractString(packageJson?.version) ?? extractString(manifestJson?.version);\n  const installedPackageName = extractString(packageJson?.name);\n  const manifestName = extractString(manifestJson?.name);\n  const pluginInstalled = Boolean(hasDestination && packageJson && manifestJson);\n  const sourceLooksPublished = pluginInstalled ? !hasSrc : null;\n  const expectedVersion = configured.version;\n  const nodeOkay = versionSatisfiesNodeRequirement(process.version, REMIX_CURSOR_PLUGIN.nodeRequirement);\n\n  let status: CursorPluginHealthStatus = \"healthy\";\n  let remediationHint: string | null = null;\n\n  if (!nodeOkay) {\n    status = \"broken\";\n    remediationHint = `Current Node runtime ${process.version} does not satisfy ${REMIX_CURSOR_PLUGIN.nodeRequirement}.`;\n  } else if (!configured.npmAvailable) {\n    status = \"broken\";\n    remediationHint = configured.warning ?? \"npm is required to install the Cursor plugin.\";\n  } else if (!pluginInstalled) {\n    status = \"missing\";\n    remediationHint = \"The Remix Cursor plugin is not installed in Cursor's local plugin directory.\";\n  } else if (installedPackageName !== packageName) {\n    status = \"stale_or_unverified\";\n    remediationHint = `Expected package ${packageName}, but found ${installedPackageName ?? \"no package name\"}.`;\n  } else if (manifestName !== REMIX_CURSOR_PLUGIN.pluginName) {\n    status = \"stale_or_unverified\";\n    remediationHint = `Expected Cursor plugin ${REMIX_CURSOR_PLUGIN.pluginName}, but found ${manifestName ?? \"no plugin name\"}.`;\n  } else if (!hasMcp) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The installed Cursor plugin is missing mcp.json.\";\n  } else if (!hasMcpServer) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The installed Cursor plugin is missing dist/mcp-server.cjs.\";\n  } else if (!mcpServerExecutable) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The installed Cursor plugin MCP server is not executable.\";\n  } else if (expectedVersion && installedVersion && installedVersion !== expectedVersion) {\n    status = \"outdated\";\n    remediationHint = `Expected configured Remix Cursor plugin version ${expectedVersion}, but found ${installedVersion}.`;\n  } else if (!installedVersion || !expectedVersion) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The installed Cursor plugin version could not be safely verified against the configured npm package.\";\n  } else if (!sourceLooksPublished) {\n    status = \"stale_or_unverified\";\n    remediationHint = \"The Cursor plugin directory looks like a source checkout instead of a published npm package.\";\n  }\n\n  if (!cursor.available) {\n    warnings.push(\"Cursor IDE was not detected; the plugin files can still be installed for Cursor to load later.\");\n  }\n\n  return {\n    cursor,\n    npmAvailable: configured.npmAvailable,\n    npmVersion: configured.npmVersion,\n    pluginInstalled,\n    installedVersion,\n    expectedVersion,\n    destination,\n    manifestPath,\n    packagePath,\n    mcpPath,\n    mcpServerPath,\n    mcpServerExecutable,\n    packageName: installedPackageName,\n    manifestName,\n    sourceLooksPublished,\n    status,\n    warnings: Array.from(new Set(warnings)),\n    remediationHint,\n    recommendedNextSteps: buildRecommendedNextSteps(status),\n    details: {\n      paths: {\n        destination,\n        packagePath,\n        manifestPath,\n        mcpPath,\n        mcpServerPath,\n      },\n      cursor,\n      npmPackage: packageName,\n      node: {\n        currentVersion: process.version,\n        required: REMIX_CURSOR_PLUGIN.nodeRequirement,\n      },\n      remixCliPath,\n    },\n  };\n}\n\nfunction withAction(\n  inspection: CursorPluginInspection,\n  params: {\n    action: CursorPluginLifecycleAction;\n    changed: boolean;\n    warnings?: string[];\n    remediationHint?: string | null;\n    details?: JsonRecord | null;\n    status?: CursorPluginHealthStatus;\n  },\n): CursorPluginLifecycleResult {\n  const warnings = [...inspection.warnings, ...(params.warnings ?? [])].filter(Boolean);\n  return {\n    action: params.action,\n    status: params.status ?? inspection.status,\n    changed: params.changed,\n    cursorAvailable: inspection.cursor.available,\n    cursorSource: inspection.cursor.source,\n    cursorDetails: inspection.cursor.details,\n    npmAvailable: inspection.npmAvailable,\n    npmVersion: inspection.npmVersion,\n    pluginInstalled: inspection.pluginInstalled,\n    installedVersion: inspection.installedVersion,\n    expectedVersion: inspection.expectedVersion,\n    destination: inspection.destination,\n    packageName: inspection.packageName,\n    manifestName: inspection.manifestName,\n    mcpServerExecutable: inspection.mcpServerExecutable,\n    sourceLooksPublished: inspection.sourceLooksPublished,\n    warnings: Array.from(new Set(warnings)),\n    remediationHint: params.remediationHint ?? inspection.remediationHint,\n    recommendedNextSteps: Array.from(new Set(inspection.recommendedNextSteps)),\n    details: params.details ?? inspection.details,\n  };\n}\n\nasync function chmodCjsEntrypoints(destination: string): Promise<void> {\n  const dist = path.join(destination, \"dist\");\n  let entries: string[];\n  try {\n    entries = await fs.readdir(dist);\n  } catch {\n    return;\n  }\n  await Promise.all(\n    entries\n      .filter((entry) => entry.endsWith(\".cjs\"))\n      .map((entry) => fs.chmod(path.join(dist, entry), 0o755)),\n  );\n}\n\nasync function downloadPackage(params: {\n  packageName: string;\n  version: string;\n}): Promise<{ sourceDir: string; tempDir: string; packStdout: string | null; packStderr: string | null }> {\n  const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), \"remix-cursor-plugin-\"));\n  const pack = await runCommand(\"npm\", [\n    \"pack\",\n    \"--prefer-online\",\n    \"--pack-destination\",\n    tempDir,\n    `${params.packageName}@${params.version}`,\n    \"--silent\",\n  ]);\n  if (!pack.ok) {\n    await fs.rm(tempDir, { recursive: true, force: true });\n    throw new Error(pack.stderr.trim() || pack.stdout.trim() || `npm pack failed for ${params.packageName}@${params.version}.`);\n  }\n\n  const tarball = pack.stdout.split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean).at(-1);\n  if (!tarball) {\n    await fs.rm(tempDir, { recursive: true, force: true });\n    throw new Error(`npm pack did not report a tarball for ${params.packageName}@${params.version}.`);\n  }\n\n  const tarballPath = path.join(tempDir, tarball);\n  const unpack = await runCommand(\"tar\", [\"-xzf\", tarballPath, \"-C\", tempDir]);\n  if (!unpack.ok) {\n    await fs.rm(tempDir, { recursive: true, force: true });\n    throw new Error(unpack.stderr.trim() || unpack.stdout.trim() || `Failed to unpack ${tarball}.`);\n  }\n\n  return {\n    sourceDir: path.join(tempDir, \"package\"),\n    tempDir,\n    packStdout: pack.stdout || null,\n    packStderr: pack.stderr || null,\n  };\n}\n\nasync function installLatestPackage(params?: {\n  destination?: string;\n  packageName?: string;\n}): Promise<CursorPluginLifecycleResult> {\n  const packageName = params?.packageName ?? REMIX_CURSOR_PLUGIN.npmPackage;\n  const destination = expandHome(params?.destination ?? getDefaultCursorPluginDestination());\n  const before = await inspectCursorPluginState({ destination, packageName });\n  if (!before.npmAvailable || !before.expectedVersion) {\n    return withAction(before, {\n      action: \"install\",\n      changed: false,\n      remediationHint: before.remediationHint ?? before.warnings[0] ?? `Could not resolve the configured ${packageName} package from npm.`,\n    });\n  }\n\n  let tempDir: string | null = null;\n  try {\n    const downloaded = await downloadPackage({\n      packageName,\n      version: before.expectedVersion,\n    });\n    tempDir = downloaded.tempDir;\n\n    for (const requiredPath of [\".cursor-plugin/plugin.json\", \"mcp.json\", \"dist/mcp-server.cjs\"]) {\n      if (!(await pathExists(path.join(downloaded.sourceDir, requiredPath)))) {\n        return withAction(before, {\n          action: \"install\",\n          changed: false,\n          remediationHint: `${packageName}@${before.expectedVersion} is missing ${requiredPath}.`,\n        });\n      }\n    }\n\n    await fs.mkdir(path.dirname(destination), { recursive: true });\n    await fs.rm(destination, { recursive: true, force: true });\n    await fs.cp(downloaded.sourceDir, destination, { recursive: true });\n    await chmodCjsEntrypoints(destination);\n\n    const after = await inspectCursorPluginState({ destination, packageName });\n    return withAction(after, {\n      action: \"install\",\n      changed: true,\n      details: {\n        operation: \"install\",\n        npmPackage: packageName,\n        installedVersion: before.expectedVersion,\n        destination,\n        packStdout: downloaded.packStdout || null,\n        packStderr: downloaded.packStderr || null,\n      },\n    });\n  } catch (error) {\n    return withAction(before, {\n      action: \"install\",\n      changed: false,\n      status: \"broken\",\n      remediationHint: error instanceof Error ? error.message : `Failed to install the configured ${packageName} package.`,\n    });\n  } finally {\n    if (tempDir) {\n      await fs.rm(tempDir, { recursive: true, force: true });\n    }\n  }\n}\n\nexport async function getCursorPluginStatus(params?: {\n  destination?: string;\n  packageName?: string;\n}): Promise<CursorPluginLifecycleResult> {\n  const inspection = await inspectCursorPluginState(params);\n  return withAction(inspection, {\n    action: \"status\",\n    changed: false,\n  });\n}\n\nexport async function installCursorPlugin(params?: {\n  destination?: string;\n  packageName?: string;\n  remixCliPath?: string | null;\n}): Promise<CursorPluginLifecycleResult> {\n  const inspection = await inspectCursorPluginState(params);\n  if (inspection.status === \"healthy\") {\n    const patch = await patchInstalledCursorRemixCliPath({\n      destination: inspection.destination,\n      remixCliPath: params?.remixCliPath,\n    });\n    return withAction(inspection, {\n      action: \"install\",\n      changed: patch?.changed ?? false,\n      details: patch\n        ? {\n            ...(inspection.details ?? {}),\n            remixCliPath: patch,\n          }\n        : inspection.details,\n    });\n  }\n  if (inspection.status === \"stale_or_unverified\" && inspection.pluginInstalled) {\n    return withAction(inspection, {\n      action: \"install\",\n      changed: false,\n      remediationHint:\n        inspection.remediationHint ??\n        \"The installed Remix Cursor plugin could not be safely verified. Use `remix cursor reinstall`.\",\n    });\n  }\n  const result = await installLatestPackage(params);\n  const patch = await patchInstalledCursorRemixCliPath({\n    destination: result.destination,\n    remixCliPath: params?.remixCliPath,\n  });\n  return {\n    ...result,\n    action: \"install\",\n    changed: result.changed || (patch?.changed ?? false),\n    details: patch ? { ...(result.details ?? {}), remixCliPath: patch } : result.details,\n  };\n}\n\nexport async function updateCursorPlugin(params?: {\n  destination?: string;\n  packageName?: string;\n  remixCliPath?: string | null;\n}): Promise<CursorPluginLifecycleResult> {\n  const inspection = await inspectCursorPluginState(params);\n  if (inspection.status === \"healthy\") {\n    const patch = await patchInstalledCursorRemixCliPath({\n      destination: inspection.destination,\n      remixCliPath: params?.remixCliPath,\n    });\n    return withAction(inspection, {\n      action: \"update\",\n      changed: patch?.changed ?? false,\n      details: patch\n        ? {\n            ...(inspection.details ?? {}),\n            remixCliPath: patch,\n          }\n        : inspection.details,\n    });\n  }\n  const result = await installLatestPackage(params);\n  const patch = await patchInstalledCursorRemixCliPath({\n    destination: result.destination,\n    remixCliPath: params?.remixCliPath,\n  });\n  return {\n    ...result,\n    action: \"update\",\n    changed: result.changed || (patch?.changed ?? false),\n    details: patch ? { ...(result.details ?? {}), remixCliPath: patch } : result.details,\n  };\n}\n\nexport async function reinstallCursorPlugin(params?: {\n  destination?: string;\n  packageName?: string;\n  remixCliPath?: string | null;\n}): Promise<CursorPluginLifecycleResult> {\n  const result = await installLatestPackage(params);\n  const patch = await patchInstalledCursorRemixCliPath({\n    destination: result.destination,\n    remixCliPath: params?.remixCliPath,\n  });\n  return {\n    ...result,\n    action: \"reinstall\",\n    changed: result.changed || (patch?.changed ?? false),\n    details: patch ? { ...(result.details ?? {}), remixCliPath: patch } : result.details,\n  };\n}\n\nexport async function uninstallCursorPlugin(params?: {\n  destination?: string;\n  packageName?: string;\n}): Promise<CursorPluginLifecycleResult> {\n  // For uninstall we don't need npm reachability or the configured version,\n  // and forcing a network round-trip just to delete a directory would\n  // make this command flake when offline. Skip the npm package probe.\n  const before = await inspectCursorPluginState({ ...params, resolveLatest: false });\n\n  if (!before.pluginInstalled && !(await pathExists(before.destination))) {\n    return withAction(before, {\n      action: \"uninstall\",\n      changed: false,\n      details: {\n        operation: \"uninstall\",\n        destination: before.destination,\n        existed: false,\n      },\n    });\n  }\n\n  try {\n    await fs.rm(before.destination, { recursive: true, force: true });\n  } catch (error) {\n    return withAction(before, {\n      action: \"uninstall\",\n      changed: false,\n      status: \"broken\",\n      remediationHint: error instanceof Error ? error.message : `Failed to remove ${before.destination}.`,\n      details: {\n        operation: \"uninstall\",\n        destination: before.destination,\n        existed: true,\n      },\n    });\n  }\n\n  const after = await inspectCursorPluginState({ ...params, resolveLatest: false });\n  return withAction(after, {\n    action: \"uninstall\",\n    changed: true,\n    remediationHint: after.pluginInstalled\n      ? `Files at ${after.destination} were not fully removed.`\n      : null,\n    details: {\n      operation: \"uninstall\",\n      destination: before.destination,\n      existed: true,\n    },\n  });\n}\n\nexport async function ensureCursorPluginInstalled(params: {\n  action: CursorPluginAction;\n  destination?: string;\n  packageName?: string;\n  remixCliPath?: string | null;\n}): Promise<CursorPluginInstallResult> {\n  const destination = expandHome(params.destination ?? getDefaultCursorPluginDestination());\n  if (params.action === \"skip\") {\n    return {\n      action: \"skip\",\n      status: \"skipped\",\n      changed: false,\n      cursorAvailable: false,\n      cursorSource: null,\n      cursorDetails: null,\n      npmAvailable: false,\n      npmVersion: null,\n      pluginInstalled: false,\n      installedVersion: null,\n      expectedVersion: null,\n      destination,\n      packageName: null,\n      manifestName: null,\n      mcpServerExecutable: false,\n      sourceLooksPublished: null,\n      warnings: [],\n      remediationHint: null,\n      recommendedNextSteps: [\n        \"You can configure the Cursor integration later with `remix setup` or `remix cursor install`.\",\n      ],\n      details: null,\n    };\n  }\n  if (params.action === \"install\") return installCursorPlugin(params);\n  if (params.action === \"update\") return updateCursorPlugin(params);\n  if (params.action === \"reinstall\") return reinstallCursorPlugin(params);\n\n  const inspection = await getCursorPluginStatus(params);\n  if (inspection.status === \"missing\") return installCursorPlugin(params);\n  if (inspection.status === \"outdated\") return updateCursorPlugin(params);\n  return {\n    ...inspection,\n    action: \"auto\",\n  };\n}\n\nfunction describeLifecycleOutcome(result: CursorPluginLifecycleResult): { headline: string; detail: string | null; action: string | null } {\n  const versionDetail = result.installedVersion\n    ? `version ${result.installedVersion} at ${result.destination}`\n    : result.destination;\n\n  if (result.status === \"healthy\") {\n    if (result.action === \"status\") {\n      return {\n        headline: \"Remix Cursor plugin is ready.\",\n        detail: versionDetail,\n        action: null,\n      };\n    }\n    if (result.action === \"install\") {\n      return {\n        headline: result.changed ? \"Installed the Remix Cursor plugin.\" : \"Remix Cursor plugin is already installed.\",\n        detail: versionDetail,\n        action: \"If Cursor is already open, run `Developer: Reload Window`.\",\n      };\n    }\n    if (result.action === \"update\") {\n      return {\n        headline: result.changed ? \"Updated the Remix Cursor plugin.\" : \"Remix Cursor plugin is already up to date.\",\n        detail: versionDetail,\n        action: result.changed ? \"If Cursor is already open, run `Developer: Reload Window`.\" : null,\n      };\n    }\n    if (result.action === \"reinstall\") {\n      return {\n        headline: \"Reinstalled the Remix Cursor plugin.\",\n        detail: versionDetail,\n        action: \"If Cursor is already open, run `Developer: Reload Window`.\",\n      };\n    }\n  }\n\n  // Uninstall is \"successful\" when the plugin is gone, which inspection\n  // will report as status=\"missing\". Anything else (still installed,\n  // broken environment, etc.) is a real failure to print loudly.\n  if (result.action === \"uninstall\") {\n    if (result.status === \"missing\") {\n      return {\n        headline: result.changed\n          ? \"Uninstalled the Remix Cursor plugin.\"\n          : \"Remix Cursor plugin was not installed.\",\n        detail: `removed ${result.destination}`,\n        action: result.changed\n          ? \"If Cursor is already open, run `Developer: Reload Window`.\"\n          : null,\n      };\n    }\n    return {\n      headline: \"Failed to uninstall the Remix Cursor plugin.\",\n      detail: result.remediationHint ?? result.warnings[0] ?? null,\n      action: result.recommendedNextSteps[0] ?? null,\n    };\n  }\n\n  if (result.status === \"skipped\") {\n    return {\n      headline: \"Skipped Cursor plugin setup.\",\n      detail: null,\n      action: null,\n    };\n  }\n\n  return {\n    headline: \"Remix Cursor plugin needs attention.\",\n    detail: result.remediationHint ?? result.warnings[0] ?? null,\n    action: result.recommendedNextSteps[0] ?? null,\n  };\n}\n\nexport function printCursorPluginLifecycleResult(result: CursorPluginLifecycleResult): void {\n  const outcome = describeLifecycleOutcome(result);\n  const color =\n    result.status === \"healthy\"\n      ? pc.green\n      : result.status === \"skipped\"\n        ? pc.dim\n        : pc.yellow;\n\n  console.log(color(outcome.headline));\n  if (outcome.detail) console.log(outcome.detail);\n  if (outcome.action) console.log(pc.dim(outcome.action));\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport pc from \"picocolors\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport type { SetupWorkflow } from \"./setupMetadata.js\";\n\nexport type SelectWorkingDirectoryParams = {\n  // Where the user is right now (typically `process.cwd()` or whatever was\n  // passed via --cwd). This is the default we offer to confirm.\n  cwd: string;\n  // True when --cwd was passed explicitly on the command line, OR when the\n  // caller is in non-interactive mode. In either case, we honor the existing\n  // value without prompting.\n  cwdExplicit: boolean;\n  yes: boolean;\n  // The setup flow this prompt is gating, when known up front (e.g.\n  // `remix checkout` / `remix remix`). Used to render a one-line preview\n  // of the new checkout path so the user understands the picked folder\n  // is the *parent* of the new checkout, not the checkout itself.\n  // `init` and `none` (or omitted) suppress the preview — those flows\n  // bind the picked folder in place and creating a child would be\n  // misleading.\n  workflow?: SetupWorkflow | null;\n  // Explicit `--output-dir` if the caller supplied one. When set we can\n  // show the exact destination path verbatim instead of a placeholder.\n  outputDir?: string | null;\n  // Explicit `--name` (only meaningful for the `remix` workflow) so the\n  // preview can show the actual sanitized folder name instead of a\n  // generic placeholder.\n  previewName?: string | null;\n};\n\nexport type SelectWorkingDirectoryResult = {\n  // Absolute path the rest of setup should operate against.\n  cwd: string;\n  // True when the user actually picked a different folder (used to decide\n  // whether to print a final `cd` hint).\n  changed: boolean;\n};\n\nfunction throwCancelled(): never {\n  throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n}\n\n// macOS Finder drag-and-drop pastes the path into the terminal as text. The\n// shape varies depending on whether the path contains spaces:\n//   * spaces present → wrapped in single quotes ('/Users/foo/My Project')\n//   * spaces present (some terminals) → wrapped in double quotes\n//   * spaces present (raw paste/type) → backslash-escaped (My\\ Project)\n// We also accept ~ as the user's home directory and trim outer whitespace.\n// Exported for unit testing if/when remix-cli grows a test runner.\nexport function unquoteAndExpandPath(raw: string): string {\n  let s = raw.trim();\n  if (s.length === 0) return s;\n  // Strip a single matched pair of surrounding quotes (single or double).\n  if ((s.startsWith(\"'\") && s.endsWith(\"'\")) || (s.startsWith('\"') && s.endsWith('\"'))) {\n    if (s.length >= 2) s = s.slice(1, -1);\n  }\n  // Unescape backslash-escaped spaces. We deliberately don't try to handle\n  // every shell escape sequence (newlines, tabs etc.) — paths with those are\n  // exceedingly rare and the validator below will surface the error anyway.\n  s = s.replace(/\\\\ /g, \" \");\n  // Expand a leading ~ or ~/. We don't expand ~user (different home dir)\n  // because it requires platform-specific user lookups and almost never\n  // appears in a Finder drag.\n  if (s === \"~\") return os.homedir();\n  if (s.startsWith(\"~/\")) s = path.join(os.homedir(), s.slice(2));\n  return s;\n}\n\n// Mirror of `sanitizeCheckoutDirName` from `@remixhq/core/collab`. Inlined\n// here because the prompt only needs the rendered preview path; threading\n// a fresh export through the core package barrel just for one call site\n// would be more churn than the value justifies. Keep this in sync if the\n// upstream rule changes (the canonical fallback `\"remix-remix\"` and the\n// `[a-z0-9._-]` allow-list are the contract).\nfunction sanitizeCheckoutDirNameLocal(value: string): string {\n  const sanitized = value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n  return sanitized || \"remix-remix\";\n}\n\n// Resolve the *suffix* (e.g. `/test25-remix2`) to append after the\n// parent path in the \"Use this folder: …\" choice title for workflows\n// that create a new subfolder (`checkout` / `remix`). Returns `null`\n// when there's no meaningful suffix to render — either because the\n// workflow doesn't create a child folder (`init`), or because the\n// destination resolved to a path outside the chosen parent (e.g. an\n// absolute `--output-dir` pointing somewhere else), in which case\n// inlining a basename next to `parentDir` would be misleading.\n//\n// Suffix resolution order:\n//   1. `--output-dir` (caller picked the exact path). If it resolves\n//      *inside* `parentDir` we use its basename; otherwise we bail\n//      because the destination isn't actually a child of the parent\n//      the user is being asked to confirm.\n//   2. `--name` (only `remix` honors it). Sanitized via the same rule\n//      `materializeAppCheckout` uses so the preview matches what gets\n//      created on disk.\n//   3. Fallback → `<your-checkout>` placeholder. Surfaces the *shape*\n//      of the destination (\"parent + one segment\") without claiming a\n//      specific name we don't yet know.\nfunction resolveSubfolderSuffix(params: {\n  parentDir: string;\n  workflow: SetupWorkflow | null | undefined;\n  outputDir: string | null | undefined;\n  previewName: string | null | undefined;\n}): string | null {\n  if (params.workflow !== \"checkout\" && params.workflow !== \"remix\") return null;\n  const parent = path.resolve(params.parentDir);\n  const trimmedOutputDir = params.outputDir?.trim();\n  if (trimmedOutputDir) {\n    const resolved = path.resolve(parent, trimmedOutputDir);\n    // Only inline when the destination is a direct child of `parent`\n    // (basename equality + parent prefix). Otherwise an absolute or\n    // `../sibling` `--output-dir` would render `Use this folder: /a/b`\n    // followed by an unrelated `/c/d` — confusing rather than helpful.\n    const expectedChild = path.join(parent, path.basename(resolved));\n    if (resolved !== expectedChild) return null;\n    return path.basename(resolved);\n  }\n  const trimmedName = params.previewName?.trim();\n  return trimmedName ? sanitizeCheckoutDirNameLocal(trimmedName) : \"<your-checkout>\";\n}\n\n// Returns the absolute, real path on success. On failure, returns a string\n// the prompts validator can show inline (per `prompts`' convention: a string\n// = error message, `true` = pass).\nfunction validateDirectory(raw: string, baseCwd: string): true | string {\n  const cleaned = unquoteAndExpandPath(raw);\n  if (!cleaned) return \"Please drop or type a folder path.\";\n  const abs = path.resolve(baseCwd, cleaned);\n  let stat: fs.Stats;\n  try {\n    stat = fs.statSync(abs);\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException).code;\n    if (code === \"ENOENT\") return `Not found: ${abs}`;\n    if (code === \"EACCES\") return `Permission denied: ${abs}`;\n    return `Cannot read: ${abs} (${(err as Error).message})`;\n  }\n  if (!stat.isDirectory()) return `Not a directory: ${abs}`;\n  return true;\n}\n\nexport async function selectWorkingDirectory(\n  params: SelectWorkingDirectoryParams,\n): Promise<SelectWorkingDirectoryResult> {\n  const originalCwd = path.resolve(params.cwd);\n\n  // Honor explicit --cwd and non-interactive mode without prompting. The user\n  // (or their script) has already told us where to operate; second-guessing\n  // them here would be annoying.\n  if (params.cwdExplicit || params.yes || !isInteractive()) {\n    return { cwd: originalCwd, changed: false };\n  }\n\n  // Workflows that create a new subfolder inside the picked directory\n  // (`checkout` / `remix`) get the destination's subfolder name inlined\n  // *into* the \"Use this folder\" choice title — colored differently\n  // from the parent path so the visual split between \"parent we're\n  // confirming\" and \"child being created\" is unmissable. Suppressed\n  // for `init` (binds in place) and unknown workflows (we'd be\n  // guessing). The previous banner-above-the-prompt approach was\n  // dropped: separating context from the choice meant users still\n  // sometimes confirmed the parent without registering the suffix.\n  const shouldShowChildPreview = params.workflow === \"checkout\" || params.workflow === \"remix\";\n  const childSuffix = shouldShowChildPreview\n    ? resolveSubfolderSuffix({\n        parentDir: originalCwd,\n        workflow: params.workflow,\n        outputDir: params.outputDir,\n        previewName: params.previewName,\n      })\n    : null;\n\n  // Step 1: confirm-or-pick. Default = current folder so a user who just ran\n  // `remix setup` from the right directory only has to press Enter. The\n  // copy on the \"use this folder\" choice differs for child-creating\n  // workflows so the user understands the picked folder is the *parent*.\n  const message = shouldShowChildPreview ? \"Confirm parent folder for the new checkout\" : \"Confirm working folder\";\n  // Spell out the actual folder name in the description when we have it\n  // (`The new <name> folder will be created…`) so the user sees the\n  // exact subfolder both inline in the title *and* in the descriptive\n  // text. Falls back to the generic \"checkout\" wording when the suffix\n  // is unresolved (e.g. unknown app name on the explicit `--app-id`\n  // path with a failed lookup). Color the inline name green to match\n  // the suffix in the title above so the eye groups them as the same\n  // thing.\n  const useCurrentDescription = shouldShowChildPreview\n    ? `The new ${pc.green(childSuffix ?? \"checkout\")} folder will be created inside this directory.`\n    : \"Continue setup against the current directory.\";\n  // Color *only* the `/SUFFIX` portion of the title (per UX request) so\n  // the parent path stays in the default tone and the child segment\n  // pops. We include the leading separator inside the colored span so\n  // the eye reads the full `/test25-remix2` as one unit. Green carries\n  // a \"this is the new thing being created\" connotation that cyan\n  // didn't — picked deliberately to match the success-color used\n  // elsewhere when announcing a freshly-created destination.\n  const useCurrentTitle = childSuffix\n    ? `Use this folder: ${originalCwd}${pc.green(`${path.sep}${childSuffix}`)}`\n    : `Use this folder: ${originalCwd}`;\n  const choice = await prompts(\n    {\n      type: \"select\",\n      name: \"scope\",\n      message,\n      choices: [\n        {\n          title: useCurrentTitle,\n          description: useCurrentDescription,\n          value: \"current\",\n        },\n        {\n          title: \"Pick a different folder…\",\n          value: \"other\",\n        },\n      ],\n      initial: 0,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  if (choice.scope === \"current\" || !choice.scope) {\n    return { cwd: originalCwd, changed: false };\n  }\n\n  // Step 2: free-text input. Drag-and-drop is just a paste of the path text\n  // (terminals translate Finder drops into a typed string), so a `text` input\n  // covers all three input modes — drag, paste, type — uniformly. The box is\n  // purely decorative — printed before the prompt so users immediately see\n  // a visual \"drop zone\" cue. We can't actually accept drops INSIDE the box\n  // (the OS just types the path at the cursor), but the framing communicates\n  // intent.\n  printDropZoneBox();\n  const dropped = await prompts(\n    {\n      type: \"text\",\n      name: \"path\",\n      message: \"Folder\",\n      validate: (raw: string) => validateDirectory(raw, originalCwd),\n    },\n    { onCancel: throwCancelled },\n  );\n\n  const cleaned = unquoteAndExpandPath(typeof dropped.path === \"string\" ? dropped.path : \"\");\n  if (!cleaned) {\n    // Should not happen — the validator rejects empty strings — but be\n    // defensive so we never silently chdir to \"\".\n    return { cwd: originalCwd, changed: false };\n  }\n  const resolved = path.resolve(originalCwd, cleaned);\n  // realpath() collapses symlinks; if the user dragged a symlink to a folder\n  // we still want operations to run against the real on-disk path so git\n  // commands behave consistently.\n  let realPath = resolved;\n  try {\n    realPath = fs.realpathSync(resolved);\n  } catch {\n    // Already validated above; in the rare race where it disappeared, fall\n    // back to the resolved path and let downstream code surface the error.\n  }\n  return { cwd: realPath, changed: realPath !== originalCwd };\n}\n\n// Renders a dashed \"drop zone\" frame above the folder input. Sized to the\n// terminal width with sane min/max bounds so it looks intentional both in a\n// narrow split pane and a wide full-screen terminal. Drawn entirely with\n// Unicode box-drawing characters (light dashed) rather than ASCII dashes so\n// the visual reads as a contained zone rather than ambient horizontal rules.\nfunction printDropZoneBox(): void {\n  const cols = Math.max(0, process.stdout.columns ?? 80);\n  // Inner content width: at least 40 chars so the label fits on one line,\n  // capped so we never sprawl across very wide windows.\n  const inner = Math.min(70, Math.max(40, cols - 6));\n  const dash = \"╌\".repeat(inner);\n  const top = `┌${dash}┐`;\n  const bottom = `└${dash}┘`;\n  const blank = `╎${\" \".repeat(inner)}╎`;\n  const label = \"Drop folder here  ·  paste a path  ·  or type one\";\n  const labelLine = `╎${centerInside(label, inner)}╎`;\n  const dim = (s: string) => pc.dim(pc.cyan(s));\n  console.log(\"\");\n  console.log(dim(top));\n  console.log(dim(blank));\n  console.log(dim(labelLine));\n  console.log(dim(blank));\n  console.log(dim(bottom));\n}\n\nfunction centerInside(text: string, width: number): string {\n  if (text.length >= width) return text.slice(0, width);\n  const total = width - text.length;\n  const left = Math.floor(total / 2);\n  const right = total - left;\n  return `${\" \".repeat(left)}${text}${\" \".repeat(right)}`;\n}\n","import type { Command } from \"commander\";\n\nimport { setupRemix } from \"../services/setup.js\";\nimport type { ClaudePluginAction, ClaudePluginScope, CursorPluginAction, SetupAgent, SetupWorkflow } from \"../services/setupMetadata.js\";\n\nfunction parseAgent(value: string): SetupAgent {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"claude\" || normalized === \"claude-code\" || normalized === \"claude_code\") return \"claude\";\n  if (normalized === \"cursor\") return \"cursor\";\n  throw new Error(\"agent must be one of: claude, cursor\");\n}\n\nfunction parseWorkflow(value: string): SetupWorkflow {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"init\" || normalized === \"checkout\" || normalized === \"remix\" || normalized === \"none\") {\n    return normalized;\n  }\n  throw new Error(\"workflow must be one of: init, checkout, remix, none\");\n}\n\nfunction parseClaudePluginAction(value: string): ClaudePluginAction {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"auto\" || normalized === \"install\" || normalized === \"update\" || normalized === \"reinstall\" || normalized === \"skip\") {\n    return normalized;\n  }\n  throw new Error(\"claude plugin action must be one of: auto, install, update, reinstall, skip\");\n}\n\nfunction parseClaudePluginScope(value: string): ClaudePluginScope {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"user\" || normalized === \"project\" || normalized === \"local\") {\n    return normalized;\n  }\n  throw new Error(\"claude plugin scope must be one of: user, project, local\");\n}\n\nfunction parseCursorPluginAction(value: string): CursorPluginAction {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"auto\" || normalized === \"install\" || normalized === \"update\" || normalized === \"reinstall\" || normalized === \"skip\") {\n    return normalized;\n  }\n  throw new Error(\"cursor plugin action must be one of: auto, install, update, reinstall, skip\");\n}\n\nexport function registerSetupCommand(program: Command) {\n  program\n    .command(\"setup\")\n    .description(\"Guided first-run setup for Remix auth, agent integration, and local workflows\")\n    .option(\"--agent <agent>\", \"Agent integration to configure\", parseAgent)\n    .option(\"--workflow <workflow>\", \"Next workflow to run (init|checkout|remix|none)\", parseWorkflow)\n    .option(\"--app-id <id>\", \"App id for checkout or remix flows\")\n    .option(\"--output-dir <path>\", \"Destination path for checkout or remix flows\")\n    .option(\"--name <name>\", \"Optional remix name when --workflow remix is selected\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection or checkout parent directory\")\n    .option(\"--skip-plugin-install\", \"Skip agent plugin installation\", false)\n    .option(\n      \"--skip-lane-materialization\",\n      \"Checkout flows only: skip backend lane materialization so an app-scope invitee lands inside the single fork instead of getting a per-user lane minted on top\",\n      false,\n    )\n    .option(\n      \"--claude-plugin-action <action>\",\n      \"Claude plugin install behavior (auto|install|update|reinstall|skip)\",\n      parseClaudePluginAction,\n    )\n    .option(\n      \"--claude-plugin-scope <scope>\",\n      \"Claude plugin install scope (user|project|local)\",\n      parseClaudePluginScope,\n    )\n    .option(\n      \"--cursor-plugin-action <action>\",\n      \"Cursor plugin install behavior (auto|install|update|reinstall|skip)\",\n      parseCursorPluginAction,\n    )\n    .option(\"--cursor-plugin-dest <path>\", \"Cursor plugin destination directory\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await setupRemix({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        // Suppress the \"confirm working folder\" prompt when the user passed\n        // --cwd explicitly. They've already told us where to operate; asking\n        // again would be obnoxious.\n        cwdExplicit: Boolean(opts.cwd),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        agent: opts.agent ? parseAgent(String(opts.agent)) : null,\n        workflow: opts.workflow ? parseWorkflow(String(opts.workflow)) : null,\n        appId: opts.appId ? String(opts.appId) : null,\n        outputDir: opts.outputDir ? String(opts.outputDir) : null,\n        name: opts.name ? String(opts.name) : null,\n        skipPluginInstall: Boolean(opts.skipPluginInstall),\n        skipLaneMaterialization: Boolean(opts.skipLaneMaterialization),\n        claudePluginAction: opts.claudePluginAction ? parseClaudePluginAction(String(opts.claudePluginAction)) : undefined,\n        claudePluginScope: opts.claudePluginScope ? parseClaudePluginScope(String(opts.claudePluginScope)) : undefined,\n        cursorPluginAction: opts.cursorPluginAction ? parseCursorPluginAction(String(opts.cursorPluginAction)) : undefined,\n        cursorPluginDestination: opts.cursorPluginDest ? String(opts.cursorPluginDest) : undefined,\n        remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport type { AgentMemoryKind, RuntimeCommandKind, RuntimeTargetKind, TriggerMode } from \"@remixhq/core\";\n\nimport {\n  collabEnvDelete,\n  collabEnvImport,\n  collabEnvList,\n  collabEnvPull,\n  collabEnvSet,\n} from \"../services/env.js\";\nimport {\n  collabRuntimeDelete,\n  collabRuntimeDetect,\n  collabRuntimeList,\n  collabRuntimeLogs,\n  collabRuntimeRun,\n  collabRuntimeSet,\n  collabRuntimeStatus,\n  collabRuntimeStop,\n} from \"../services/runtime.js\";\nimport { collabSandboxCommandHistory, collabSandboxCommandRun } from \"../services/sandboxCommands.js\";\nimport {\n  collabTriggersCreate,\n  collabTriggersDelete,\n  collabTriggersEvents,\n  collabTriggersList,\n  collabTriggersRun,\n  collabTriggersRunEvent,\n  collabTriggersRuns,\n  collabTriggersUpdate,\n} from \"../services/triggers.js\";\nimport {\n  isAutoSpawnEligibleBindingMode,\n  shouldAutoSpawnHistoryImport,\n  spawnHistoryImportDetached,\n} from \"../services/historyImport/autoSpawn.js\";\nimport {\n  collabFinalizeTurn,\n  collabApprove,\n  collabCheckout,\n  drainAsyncJobs,\n  drainPendingFinalizeQueue,\n  finalizeQueueCleanLocks,\n  finalizeQueueForget,\n  finalizeQueueList,\n  finalizeQueueRetry,\n  finalizeQueueShow,\n  collabInit,\n  collabInvite,\n  collabInviteAccept,\n  collabInviteAcceptMine,\n  collabInviteDeclineMine,\n  collabInviteInbox,\n  collabInviteList,\n  collabInviteResend,\n  collabInviteRevoke,\n  parseMyInviteScope,\n  collabMembersList,\n  collabMembersUpdate,\n  collabListAppMergeRequests,\n  collabList,\n  collabMergeRequestsInbox,\n  collabMyMergeRequests,\n  collabReconcile,\n  collabReviewQueue,\n  collabSyncUpstream,\n  collabReject,\n  collabRemix,\n  collabRequestMerge,\n  collabStatus,\n  collabSync,\n  collabView,\n} from \"../services/collab.js\";\nimport { memoryDiff, memorySearch, memorySummary, memoryTimeline } from \"../services/memory.js\";\nimport { chatsArchive, chatsCreate, chatsList, chatsOpen, chatsRename } from \"../services/chats.js\";\n\nfunction parseInteger(value: string, label: string): number {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isInteger(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative integer.`);\n  }\n  return parsed;\n}\n\nfunction parseChoice<const T extends readonly string[]>(value: unknown, label: string, allowed: T): T[number] {\n  const normalized = String(value).trim();\n  if ((allowed as readonly string[]).includes(normalized)) return normalized as T[number];\n  throw new Error(`${label} must be one of: ${allowed.join(\", \")}.`);\n}\n\nconst runtimeTargetKinds = [\"web\", \"api\", \"desktop\", \"cli\", \"mobile\", \"test\", \"worker\"] as const satisfies readonly RuntimeTargetKind[];\nconst runtimeCommandKinds = [\"install\", \"dev\", \"build\", \"preview\", \"test\", \"custom\"] as const satisfies readonly RuntimeCommandKind[];\nconst triggerModes = [\"blocking\", \"async\"] as const satisfies readonly TriggerMode[];\nconst appProfileCategories = [\n  \"web_app\",\n  \"mobile_app\",\n  \"cli_tool\",\n  \"api_service\",\n  \"worker_service\",\n  \"library_package\",\n  \"docs_site\",\n  \"monorepo\",\n  \"unknown\",\n] as const;\nconst appProfileCapabilities = [\n  \"web_preview\",\n  \"runtime_install\",\n  \"runtime_dev\",\n  \"runtime_build\",\n  \"runtime_test\",\n  \"mobile_run\",\n  \"package_build\",\n  \"background_worker\",\n] as const;\n\nfunction parseWaitTimeoutSeconds(value: string): number {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isInteger(parsed) || parsed < 1 || parsed > 3600) {\n    throw new Error(\"--wait-timeout must be an integer between 1 and 3600 seconds.\");\n  }\n  return parsed;\n}\n\nfunction collectKinds(value: string, previous: string[]): string[] {\n  return [...previous, String(value)];\n}\n\nfunction collectAppCapability(value: string, previous: string[]): string[] {\n  return [...previous, parseChoice(value, \"capability\", appProfileCapabilities)];\n}\n\nfunction collectAppFramework(value: string, previous: string[]): string[] {\n  const framework = String(value).trim().toLowerCase();\n  if (!framework) throw new Error(\"framework must be non-empty.\");\n  return [...previous, framework];\n}\n\nfunction toKinds(values: unknown): AgentMemoryKind[] | undefined {\n  if (!Array.isArray(values) || values.length === 0) return undefined;\n  return values.map((value) => String(value) as AgentMemoryKind);\n}\n\nfunction parseInviteScope(value: string): \"organization\" | \"project\" | \"app\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"org\" || normalized === \"organization\") return \"organization\";\n  if (normalized === \"project\") return \"project\";\n  if (normalized === \"app\") return \"app\";\n  throw new Error(\"scope must be one of: organization, project, app\");\n}\n\nfunction parseForkedFilter(value: string): \"only\" | \"exclude\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"only\" || normalized === \"exclude\" || normalized === \"all\") return normalized;\n  throw new Error(\"forked must be one of: only, exclude, all\");\n}\n\nfunction parseOwnership(value: string): \"mine\" | \"shared\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"mine\" || normalized === \"shared\" || normalized === \"all\") return normalized;\n  throw new Error(\"ownership must be one of: mine, shared, all\");\n}\n\nfunction parseAccessScope(value: string): \"all_readable\" | \"explicit_member\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"all_readable\" || normalized === \"explicit_member\") return normalized;\n  throw new Error(\"access-scope must be one of: all_readable, explicit_member\");\n}\n\nfunction parseMergeRequestKind(value: string): \"merge\" | \"sync\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"merge\" || normalized === \"sync\" || normalized === \"all\") {\n    return normalized;\n  }\n  throw new Error(\"kind must be one of: merge, sync, all\");\n}\n\nfunction parseAppMergeRequestQueue(value: string): \"app_reviewable\" | \"app_outgoing\" | \"app_related_visible\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"app_reviewable\" || normalized === \"app_outgoing\" || normalized === \"app_related_visible\") {\n    return normalized;\n  }\n  throw new Error(\"queue must be one of: app_reviewable, app_outgoing, app_related_visible\");\n}\n\nexport function registerCollabCommands(program: Command) {\n  const collab = program.command(\"collab\").description(\"Generic collaboration workflow for any software repository\");\n  const env = collab.command(\"env\").description(\"Manage Remix runtime environment variables for the bound project\");\n  const runtime = collab.command(\"runtime\").description(\"Manage and explicitly run Remix runtime targets\");\n  const sandbox = collab.command(\"sandbox\").description(\"Run ad hoc commands in the bound app sandbox\");\n  const sandboxCommand = sandbox.command(\"command\").description(\"Run and inspect one-shot sandbox commands\");\n  const triggers = collab.command(\"triggers\").description(\"Manage Remix project triggers\");\n  const memory = collab.command(\"memory\").description(\"Inspect collaboration memory for the current bound repository or an explicit app\");\n  const chats = collab.command(\"chats\").description(\"Manage shared chats for the bound app or an explicit app\");\n\n  const addChatScopeOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; defaults to the current repository binding\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  addChatScopeOptions(chats.command(\"list\").description(\"List active app chats\"))\n    .option(\"--include-archived\", \"Include archived chats\", false)\n    .action(async (opts) => {\n      const result = await chatsList({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        includeArchived: Boolean(opts.includeArchived),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  addChatScopeOptions(chats.command(\"create\").description(\"Create a shared app chat\"))\n    .option(\"--title <title>\", \"Initial chat title\")\n    .action(async (opts) => {\n      const result = await chatsCreate({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        title: opts.title ? String(opts.title) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  addChatScopeOptions(chats.command(\"rename <threadId>\").description(\"Rename a shared app chat\"))\n    .requiredOption(\"--title <title>\", \"New chat title\")\n    .action(async (threadId, opts) => {\n      const result = await chatsRename({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: String(threadId),\n        title: String(opts.title),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  addChatScopeOptions(chats.command(\"archive <threadId>\").description(\"Archive a shared app chat\"))\n    .action(async (threadId, opts) => {\n      const result = await chatsArchive({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: String(threadId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  addChatScopeOptions(chats.command(\"open <threadId>\").description(\"Save a shared app chat as last opened\"))\n    .action(async (threadId, opts) => {\n      const result = await chatsOpen({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: String(threadId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const addEnvScopeOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; resolves project + repo fingerprint via /context when --project-id is not set\")\n      .option(\"--project-id <id>\", \"Project id; defaults to the current repository binding\")\n      .option(\"--repo-fingerprint <fingerprint>\", \"Repo fingerprint; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--target <name>\", \"Runtime target label\", \"sandbox\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  const addRuntimeScopeOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; resolves project + repo fingerprint via /context when --project-id is not set\")\n      .option(\"--project-id <id>\", \"Project id; defaults to the current repository binding\")\n      .option(\"--repo-fingerprint <fingerprint>\", \"Repo fingerprint; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  const addRuntimeAppOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  const addSandboxCommandOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  const addTriggerScopeOptions = (command: Command, opts: { eventType?: boolean } = { eventType: true }) => {\n    const withScope = command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--project-id <id>\", \"Project id; defaults to the current repository binding\")\n      .option(\"--repo-fingerprint <fingerprint>\", \"Repo fingerprint; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n    return opts.eventType === false ? withScope : withScope.option(\"--event-type <event>\", \"Trigger event type\");\n  };\n\n  const addTriggerAppOptions = (command: Command) =>\n    command\n      .option(\"--cwd <path>\", \"Working directory for repository binding\")\n      .option(\"--app-id <id>\", \"App id; defaults to the current repository binding\")\n      .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n      .option(\"--yes\", \"Run non-interactively\", false)\n      .option(\"--non-interactive\", \"Run non-interactively\", false)\n      .option(\"--json\", \"Output JSON\", false);\n\n  addEnvScopeOptions(env.command(\"list\").description(\"List configured environment variable metadata\"))\n    .action(async (opts) => {\n      await collabEnvList({ ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n    });\n\n  addEnvScopeOptions(env.command(\"set <name>\").description(\"Create or rotate an environment variable value\"))\n    .option(\"--stdin\", \"Read the secret value from stdin\", false)\n    .option(\"--file <path>\", \"Read the secret value from a file\")\n    .action(async (name, opts) => {\n      await collabEnvSet(String(name), {\n        ...opts,\n        stdin: Boolean(opts.stdin),\n        file: opts.file ? String(opts.file) : null,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addEnvScopeOptions(env.command(\"import\").description(\"Import variables from a dotenv file\"))\n    .requiredOption(\"--file <path>\", \"Dotenv file to import\")\n    .option(\n      \"--cascade-to-family\",\n      \"Apply the imported values to the canonical app and all 1-level branch lanes (replaces existing values). Requires --app-id.\",\n      false,\n    )\n    .action(async (opts) => {\n      await collabEnvImport({\n        ...opts,\n        file: String(opts.file),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n        cascadeToFamily: Boolean(opts.cascadeToFamily),\n      });\n    });\n\n  addEnvScopeOptions(env.command(\"delete <name>\").description(\"Delete an environment variable\"))\n    .action(async (name, opts) => {\n      await collabEnvDelete(String(name), { ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n    });\n\n  addEnvScopeOptions(env.command(\"pull\").description(\"Explicitly materialize runtime env values into a local dotenv file\"))\n    .option(\"--output <path>\", \"Output dotenv file\", \".env.local\")\n    .option(\"--overwrite\", \"Overwrite the output file if it exists\", false)\n    .action(async (opts) => {\n      await collabEnvPull({\n        ...opts,\n        output: String(opts.output ?? \".env.local\"),\n        overwrite: Boolean(opts.overwrite),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addRuntimeScopeOptions(runtime.command(\"list\").description(\"List configured runtime targets\")).action(async (opts) => {\n    await collabRuntimeList({ ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addRuntimeScopeOptions(runtime.command(\"detect\").description(\"Detect runtime targets from local repo files\"))\n    .option(\"--apply\", \"Save detected runtime targets\", false)\n    .option(\"--wait\", \"Wait for Claude runtime verification after applying detected targets\", false)\n    .option(\"--wait-timeout <seconds>\", \"Maximum seconds to wait for Claude runtime verification\", parseWaitTimeoutSeconds)\n    .option(\n      \"--cascade-to-family\",\n      \"Apply detected targets to the canonical app and all 1-level branch lanes (replaces existing rows). Requires --app-id and --apply.\",\n      false,\n    )\n    .action(async ({ waitTimeout, ...opts }) => {\n      await collabRuntimeDetect({\n        ...opts,\n        apply: Boolean(opts.apply),\n        wait: Boolean(opts.wait),\n        waitTimeoutSeconds: waitTimeout,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n        cascadeToFamily: Boolean(opts.cascadeToFamily),\n      });\n    });\n\n  addRuntimeScopeOptions(runtime.command(\"set <target-id>\").description(\"Create or update a runtime target\"))\n    .requiredOption(\"--kind <kind>\", \"Target kind: web, api, desktop, cli, mobile, test, worker\")\n    .requiredOption(\"--command-kind <kind>\", \"Command kind: install, dev, build, preview, test, custom\")\n    .requiredOption(\"--command <command>\", \"Command to execute\")\n    .option(\"--target-cwd <path>\", \"Target working directory in the sandbox\", \"/home/user/app\")\n    .option(\"--port <port>\", \"Expected port for long-running targets\", (value) => parseInteger(value, \"port\"))\n    .option(\"--disabled\", \"Save the target disabled\", false)\n    .option(\"--readiness <json>\", \"Readiness probe configuration as a JSON object\")\n    .option(\n      \"--inheritance-policy <policy>\",\n      \"How descendant projects inherit this target: project_family or none\",\n    )\n    .action(async (targetId, opts) => {\n      const inheritancePolicy =\n        opts.inheritancePolicy === \"project_family\" || opts.inheritancePolicy === \"none\"\n          ? (opts.inheritancePolicy as \"project_family\" | \"none\")\n          : undefined;\n      await collabRuntimeSet(String(targetId), {\n        ...opts,\n        kind: parseChoice(opts.kind, \"kind\", runtimeTargetKinds),\n        commandKind: parseChoice(opts.commandKind, \"command-kind\", runtimeCommandKinds),\n        command: String(opts.command),\n        targetCwd: opts.targetCwd ? String(opts.targetCwd) : \"/home/user/app\",\n        port: typeof opts.port === \"number\" ? opts.port : null,\n        disabled: Boolean(opts.disabled),\n        readiness: typeof opts.readiness === \"string\" ? opts.readiness : null,\n        inheritancePolicy,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addRuntimeScopeOptions(runtime.command(\"delete <target-id>\").description(\"Delete a runtime target\")).action(async (targetId, opts) => {\n    await collabRuntimeDelete(String(targetId), { ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addRuntimeAppOptions(runtime.command(\"run <target-id>\").description(\"Explicitly run a runtime target in the app sandbox\"))\n    .option(\"--force-install\", \"Run install even if the install fingerprint is fresh\", false)\n    .option(\"--force-restart\", \"Stop an existing process before starting\", false)\n    .action(async (targetId, opts) => {\n      await collabRuntimeRun(String(targetId), {\n        ...opts,\n        forceInstall: Boolean(opts.forceInstall),\n        forceRestart: Boolean(opts.forceRestart),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addRuntimeAppOptions(runtime.command(\"status <target-id>\").description(\"Read runtime target status\")).action(async (targetId, opts) => {\n    await collabRuntimeStatus(String(targetId), { ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addRuntimeAppOptions(runtime.command(\"logs <target-id>\").description(\"Tail runtime target logs\"))\n    .option(\"--limit <chars>\", \"Maximum log characters to print\", (value) => parseInteger(value, \"limit\"), 4000)\n    .action(async (targetId, opts) => {\n      await collabRuntimeLogs(String(targetId), {\n        ...opts,\n        limit: typeof opts.limit === \"number\" ? opts.limit : 4000,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addRuntimeAppOptions(runtime.command(\"stop <target-id>\").description(\"Stop a running runtime target\")).action(async (targetId, opts) => {\n    await collabRuntimeStop(String(targetId), { ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addSandboxCommandOptions(sandboxCommand.command(\"run <command...>\").description(\"Run a one-shot command in the app sandbox\"))\n    .option(\"--command-cwd <path>\", \"Working directory inside the sandbox\", \"/home/user/app\")\n    .option(\"--timeout-ms <ms>\", \"Command timeout in milliseconds\", (value) => parseInteger(value, \"timeout-ms\"), 120000)\n    .action(async (commandParts: string[], opts) => {\n      await collabSandboxCommandRun(commandParts.join(\" \"), {\n        ...opts,\n        commandCwd: opts.commandCwd ? String(opts.commandCwd) : \"/home/user/app\",\n        timeoutMs: typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : 120000,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addSandboxCommandOptions(sandboxCommand.command(\"history\").description(\"List recent one-shot sandbox commands\"))\n    .option(\"--limit <count>\", \"Maximum command history rows to print\", (value) => parseInteger(value, \"limit\"), 20)\n    .action(async (opts) => {\n      await collabSandboxCommandHistory({\n        ...opts,\n        limit: typeof opts.limit === \"number\" ? opts.limit : 20,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addTriggerScopeOptions(triggers.command(\"events\").description(\"List supported trigger events\"), { eventType: false }).action(async (opts) => {\n    await collabTriggersEvents({ ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addTriggerScopeOptions(triggers.command(\"list\").description(\"List project triggers\")).action(async (opts) => {\n    await collabTriggersList({ ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n  });\n\n  addTriggerScopeOptions(triggers.command(\"create\").description(\"Create a project trigger with one step\"), { eventType: false })\n    .requiredOption(\"--name <name>\", \"Trigger name\")\n    .requiredOption(\"--event-type <event>\", \"Trigger event type\")\n    .option(\"--description <description>\", \"Trigger description\")\n    .option(\"--mode <mode>\", \"Trigger mode: async or blocking\", \"async\")\n    .option(\"--priority <n>\", \"Trigger priority\", (value) => parseInteger(value, \"priority\"), 100)\n    .option(\"--disabled\", \"Create disabled\", false)\n    .option(\"--step-name <name>\", \"Step name\")\n    .option(\"--command <command>\", \"Shell command for a shell step\")\n    .option(\"--runtime-target-id <id>\", \"Runtime target id for a runtime target step\")\n    .option(\"--step-cwd <path>\", \"Shell step working directory\", \"/home/user/app\")\n    .option(\"--timeout-ms <ms>\", \"Shell step timeout\", (value) => parseInteger(value, \"timeout-ms\"))\n    .option(\"--continue-on-failure\", \"Continue later steps after this step fails\", false)\n    .action(async (opts) => {\n      await collabTriggersCreate({\n        ...opts,\n        name: String(opts.name),\n        description: opts.description ? String(opts.description) : null,\n        mode: parseChoice(opts.mode, \"mode\", triggerModes),\n        priority: typeof opts.priority === \"number\" ? opts.priority : 100,\n        disabled: Boolean(opts.disabled),\n        stepName: opts.stepName ? String(opts.stepName) : null,\n        command: opts.command ? String(opts.command) : null,\n        runtimeTargetId: opts.runtimeTargetId ? String(opts.runtimeTargetId) : null,\n        stepCwd: opts.stepCwd ? String(opts.stepCwd) : \"/home/user/app\",\n        timeoutMs: typeof opts.timeoutMs === \"number\" ? opts.timeoutMs : null,\n        continueOnFailure: Boolean(opts.continueOnFailure),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addTriggerScopeOptions(triggers.command(\"update <trigger-id>\").description(\"Update project trigger metadata\"))\n    .option(\"--name <name>\", \"Trigger name\")\n    .option(\"--mode <mode>\", \"Trigger mode: async or blocking\")\n    .option(\"--priority <n>\", \"Trigger priority\", (value) => parseInteger(value, \"priority\"))\n    .option(\"--enabled\", \"Enable trigger\", false)\n    .option(\"--disabled\", \"Disable trigger\", false)\n    .action(async (triggerId, opts) => {\n      await collabTriggersUpdate(String(triggerId), {\n        ...opts,\n        name: opts.name ? String(opts.name) : undefined,\n        mode: opts.mode ? parseChoice(opts.mode, \"mode\", triggerModes) : undefined,\n        priority: typeof opts.priority === \"number\" ? opts.priority : undefined,\n        enabled: Boolean(opts.enabled),\n        disabled: Boolean(opts.disabled),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addTriggerScopeOptions(triggers.command(\"delete <trigger-id>\").description(\"Delete a project trigger\")).action(\n    async (triggerId, opts) => {\n      await collabTriggersDelete(String(triggerId), { ...opts, yes: Boolean(opts.yes || opts.nonInteractive), json: Boolean(opts.json) });\n    },\n  );\n\n  addTriggerAppOptions(triggers.command(\"run <trigger-id>\").description(\"Run one trigger for the bound app\"))\n    .option(\"--local\", \"Run shell steps locally instead of delegating execution to the app sandbox\", false)\n    .action(async (triggerId, opts) => {\n      await collabTriggersRun(String(triggerId), {\n        ...opts,\n        local: Boolean(opts.local),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addTriggerAppOptions(triggers.command(\"run-event <event-type>\").description(\"Run all resolved triggers for an event\"))\n    .option(\"--local\", \"Run shell steps locally instead of delegating execution to the app sandbox\", false)\n    .action(async (eventType, opts) => {\n      await collabTriggersRunEvent(String(eventType), {\n        ...opts,\n        local: Boolean(opts.local),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  addTriggerScopeOptions(triggers.command(\"runs\").description(\"List trigger run history\"))\n    .option(\"--limit <count>\", \"Maximum runs to print\", (value) => parseInteger(value, \"limit\"), 20)\n    .option(\"--app-id <id>\", \"Filter by app id\")\n    .action(async (opts) => {\n      await collabTriggersRuns({\n        ...opts,\n        limit: typeof opts.limit === \"number\" ? opts.limit : 20,\n        appId: opts.appId ? String(opts.appId) : null,\n        yes: Boolean(opts.yes || opts.nonInteractive),\n        json: Boolean(opts.json),\n      });\n    });\n\n  collab\n    .command(\"init\")\n    .description(\"Import the current repository into Remix\")\n    .option(\"--name <name>\", \"Override the imported app name\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-category <category>\", \"Seed app profile category\", (value) =>\n      parseChoice(value, \"app category\", appProfileCategories),\n    )\n    .option(\"--capability <capability>\", \"Seed app profile capability; may be repeated\", collectAppCapability, [])\n    .option(\"--framework <framework>\", \"Seed app profile framework such as expo; may be repeated\", collectAppFramework, [])\n    .option(\"--force-new\", \"Create and bind to a new canonical family even if matching families already exist\", false)\n    .option(\n      \"--queue\",\n      \"Submit asynchronously and return immediately. Progress continues in the background; check `remix collab status`. (Will become the default in the next release.)\",\n      false,\n    )\n    .option(\n      \"--wait-timeout <seconds>\",\n      \"When --queue is set, block for up to this many seconds for the job to finish before returning. Without this flag, --queue returns as soon as the local bundle is captured.\",\n      parseWaitTimeoutSeconds,\n    )\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabInit({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appName: opts.name ? String(opts.name) : null,\n        profile:\n          opts.appCategory ||\n          (Array.isArray(opts.capability) && opts.capability.length > 0) ||\n          (Array.isArray(opts.framework) && opts.framework.length > 0)\n            ? {\n                primaryCategory: opts.appCategory,\n                capabilities: Array.isArray(opts.capability) ? opts.capability : [],\n                frameworks: Array.isArray(opts.framework) ? opts.framework : [],\n                source: \"cli\",\n                confidence: \"high\",\n                evidence: [{ kind: \"cli_input\", value: \"remix collab init\" }],\n              }\n            : null,\n        forceNew: Boolean(opts.forceNew),\n        queue: Boolean(opts.queue),\n        waitTimeoutSeconds: typeof opts.waitTimeout === \"number\" ? opts.waitTimeout : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n\n      // Auto-spawn `remix history import` once per repo, the first time\n      // the MAIN APP gets bound to Remix. Two independent gates have\n      // to pass before we spawn:\n      //   1. bindingMode === \"explicit_root\" — the canonical app for\n      //      the default branch. Branch lanes (`bindingMode === \"lane\"`)\n      //      and `legacy` inits never auto-spawn — the main app's\n      //      auto-spawn already covered every transcript on disk, and\n      //      a per-branch re-scan would re-upload anything captured\n      //      since the main init as bogus \"historical\" rows that\n      //      duplicate live `collab_turn` data.\n      //   2. The local-state history-import marker is absent. The runner\n      //      writes it after a clean upload so we\n      //      don't re-spawn on subsequent main-app re-init runs.\n      // See autoSpawn.ts for the full policy.\n      const repoRoot =\n        result &&\n        typeof result === \"object\" &&\n        \"repoRoot\" in result &&\n        typeof (result as { repoRoot?: unknown }).repoRoot === \"string\"\n          ? ((result as { repoRoot: string }).repoRoot)\n          : null;\n      const bindingMode =\n        result &&\n        typeof result === \"object\" &&\n        \"bindingMode\" in result &&\n        typeof (result as { bindingMode?: unknown }).bindingMode === \"string\"\n          ? (result as { bindingMode: string }).bindingMode\n          : null;\n      const repoFingerprint =\n        result &&\n        typeof result === \"object\" &&\n        \"repoFingerprint\" in result &&\n        typeof (result as { repoFingerprint?: unknown }).repoFingerprint === \"string\"\n          ? (result as { repoFingerprint: string }).repoFingerprint\n          : null;\n      if (\n        repoRoot &&\n        isAutoSpawnEligibleBindingMode(bindingMode) &&\n        shouldAutoSpawnHistoryImport(repoRoot, repoFingerprint)\n      ) {\n        // Cutoff = the moment we observed init success. Anything past\n        // this instant either is or will be recorded LIVE through\n        // `finalize_turn`, so importing it as historical would create\n        // dashboard duplicates.\n        const cutoffAt = new Date().toISOString();\n        const spawned = spawnHistoryImportDetached(repoRoot, { cutoffAt });\n        if (!opts.json) {\n          console.log(\n            pc.dim(\n              `Importing your existing AI history in the background ` +\n                `(pid=${spawned.pid ?? \"?\"}).`,\n            ),\n          );\n        }\n      }\n    });\n\n  collab\n    .command(\"list\")\n    .description(\"List apps available in Remix\")\n    .option(\"--ownership <mode>\", \"Ownership filter (mine|shared|all)\", parseOwnership, \"all\")\n    .option(\n      \"--access-scope <scope>\",\n      \"Access filter (explicit_member|all_readable). Defaults to explicit-member work-oriented discovery.\",\n      parseAccessScope,\n      \"explicit_member\",\n    )\n    .option(\"--created-by <id>\", \"Filter by app creator (`me` or a user id)\")\n    .option(\"--forked <mode>\", \"Fork filter (only|exclude|all)\", parseForkedFilter, \"all\")\n    .option(\"--limit <n>\", \"Maximum number of apps\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabList({\n        ownership: parseOwnership(String(opts.ownership ?? \"all\")),\n        accessScope: parseAccessScope(String(opts.accessScope ?? \"explicit_member\")),\n        createdBy: opts.createdBy ? String(opts.createdBy) : null,\n        forked: parseForkedFilter(String(opts.forked ?? \"all\")),\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"status\")\n    .description(\"Summarize binding, worktree, merge request, and boundary-delta alignment readiness\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabStatus({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  memory\n    .command(\"summary\")\n    .description(\"Summarize app memory state and recent collaboration activity\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-id <id>\", \"Read memory for a specific app instead of the current bound repository\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await memorySummary({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  memory\n    .command(\"search <query...>\")\n    .description(\"Search collaboration memory for historical context\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-id <id>\", \"Read memory for a specific app instead of the current bound repository\")\n    .option(\"--thread-id <id>\", \"Limit memory to one app chat\")\n    .option(\"--kind <kind>\", \"Filter by memory kind\", collectKinds, [])\n    .option(\"--limit <n>\", \"Maximum number of results\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--created-after <iso8601>\", \"Only include items created at or after this timestamp\")\n    .option(\"--created-before <iso8601>\", \"Only include items created at or before this timestamp\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (query, opts) => {\n      const result = await memorySearch({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: opts.threadId ? String(opts.threadId) : null,\n        query: Array.isArray(query) ? query.join(\" \") : String(query),\n        kinds: toKinds(opts.kind),\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        createdAfter: opts.createdAfter ? String(opts.createdAfter) : null,\n        createdBefore: opts.createdBefore ? String(opts.createdBefore) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  memory\n    .command(\"timeline\")\n    .description(\"List recent collaboration memory items chronologically\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-id <id>\", \"Read memory for a specific app instead of the current bound repository\")\n    .option(\"--thread-id <id>\", \"Limit memory to one app chat\")\n    .option(\"--kind <kind>\", \"Filter by memory kind\", collectKinds, [])\n    .option(\"--limit <n>\", \"Maximum number of results\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--created-after <iso8601>\", \"Only include items created at or after this timestamp\")\n    .option(\"--created-before <iso8601>\", \"Only include items created at or before this timestamp\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await memoryTimeline({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: opts.threadId ? String(opts.threadId) : null,\n        kinds: toKinds(opts.kind),\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        createdAfter: opts.createdAfter ? String(opts.createdAfter) : null,\n        createdBefore: opts.createdBefore ? String(opts.createdBefore) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  memory\n    .command(\"diff <changeStepId>\")\n    .description(\"Fetch the full stored diff for a specific change step\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-id <id>\", \"Read memory for a specific app instead of the current bound repository\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (changeStepId, opts) => {\n      const result = await memoryDiff({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        changeStepId: String(changeStepId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"checkout <appId>\")\n    .description(\"Check out an existing Remix app as-is into a new local checkout\")\n    .option(\"--output-dir <path>\", \"Exact destination path for the checked out app\")\n    .option(\"--cwd <path>\", \"Parent directory where the checked out app will be created when --output-dir is not provided\")\n    .option(\n      \"--skip-lane-materialization\",\n      \"Skip backend lane materialization so an app-scope invitee lands inside the single fork instead of getting a per-user lane minted on top\",\n      false,\n    )\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await collabCheckout({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        outputDir: opts.outputDir ? String(opts.outputDir) : null,\n        appId: appId ? String(appId) : null,\n        skipLaneMaterialization: Boolean(opts.skipLaneMaterialization),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"remix <appId>\")\n    .description(\"Create a remix/fork and materialize a new local checkout\")\n    .option(\"--name <name>\", \"Optional name for the remix\")\n    .option(\"--output-dir <path>\", \"Exact destination path for the new remix checkout\")\n    .option(\"--cwd <path>\", \"Parent directory where the new remix checkout will be created when --output-dir is not provided\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await collabRemix({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        outputDir: opts.outputDir ? String(opts.outputDir) : null,\n        appId: appId ? String(appId) : null,\n        name: opts.name ? String(opts.name) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"finalize-turn [prompt...]\")\n    .description(\"Capture exactly one final collaboration turn boundary and enqueue remote processing; queued only until drained\")\n    .option(\"--assistant-response <text>\", \"Assistant response text\")\n    .option(\"--assistant-response-file <path>\", \"Read the assistant response from a file\")\n    .option(\"--prompt-file <path>\", \"Read the prompt from a file\")\n    .option(\"--prompt-stdin\", \"Read the prompt from stdin\", false)\n    .option(\"--no-sync\", \"Do not auto-discard local tracked changes and sync after a successful changed turn\")\n    .option(\"--allow-branch-mismatch\", \"Allow running from a branch that does not match the checkout's preferred Remix branch\", false)\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--idempotency-key <key>\", \"Idempotency key for safe retries\")\n    .option(\n      \"--queue\",\n      \"Reserved — finalize-turn already runs asynchronously by default; passing --queue is rejected for now (tracked for v1.6).\",\n      false,\n    )\n    .option(\n      \"--wait-timeout <seconds>\",\n      \"Reserved — finalize-turn does not yet support waiting for the job to complete; passing this flag is rejected for now (tracked for v1.6).\",\n      parseWaitTimeoutSeconds,\n    )\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (prompt, opts) => {\n      const result = await collabFinalizeTurn({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        prompt: Array.isArray(prompt) ? prompt.join(\" \") : prompt ? String(prompt) : null,\n        assistantResponse: opts.assistantResponse ? String(opts.assistantResponse) : null,\n        assistantResponseFile: opts.assistantResponseFile ? String(opts.assistantResponseFile) : null,\n        promptFile: opts.promptFile ? String(opts.promptFile) : null,\n        promptStdin: Boolean(opts.promptStdin),\n        sync: Boolean(opts.sync),\n        allowBranchMismatch: Boolean(opts.allowBranchMismatch),\n        idempotencyKey: opts.idempotencyKey ? String(opts.idempotencyKey) : null,\n        queue: Boolean(opts.queue),\n        waitTimeoutSeconds: typeof opts.waitTimeout === \"number\" ? opts.waitTimeout : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"drain-finalize-queue\")\n    .description(\"Drain the local finalize queue and record any queued finalize jobs immediately\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await drainPendingFinalizeQueue({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  // `finalize-queue` operator surface for the local finalize queue.\n  // Inspect, retry, forget jobs, and clean up stale lock dirs left behind\n  // by crashed drainers. None of these require backend auth so they work\n  // even when the network or backend is down — that's the whole point of\n  // having them.\n  const finalizeQueue = collab\n    .command(\"finalize-queue\")\n    .description(\"Inspect and recover the local finalize queue (list/show/retry/forget/clean-locks)\");\n\n  finalizeQueue\n    .command(\"list\")\n    .description(\"List all jobs currently in the local finalize queue\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await finalizeQueueList({ json: Boolean(opts.json) });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  finalizeQueue\n    .command(\"show <jobId>\")\n    .description(\"Print the full on-disk record for a single finalize job\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (jobId: string, opts) => {\n      const result = await finalizeQueueShow({ jobId: String(jobId), json: Boolean(opts.json) });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  finalizeQueue\n    .command(\"retry <jobId>\")\n    .description(\"Reset a failed/queued finalize job so the next drainer pass picks it up immediately\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (jobId: string, opts) => {\n      const result = await finalizeQueueRetry({ jobId: String(jobId), json: Boolean(opts.json) });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  finalizeQueue\n    .command(\"forget <jobId>\")\n    .description(\"Permanently drop a finalize job from the local queue (its lock dir, if any, is also removed)\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (jobId: string, opts) => {\n      const result = await finalizeQueueForget({ jobId: String(jobId), json: Boolean(opts.json) });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  finalizeQueue\n    .command(\"clean-locks\")\n    .description(\"Remove stale finalize-queue lock directories left by crashed drainers (older than 90s)\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await finalizeQueueCleanLocks({ json: Boolean(opts.json) });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"drain-async-jobs\")\n    .description(\"Drain queued async init jobs in the foreground (diagnostics; auto-spawned by other collab commands).\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--silent\", \"Suppress non-error output (used by the auto-spawned background drainer)\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await drainAsyncJobs({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        silent: Boolean(opts.silent),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"sync\")\n    .description(\"Pull the current server delta into the local working tree without moving local git history\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--dry-run\", \"Preview sync status without applying changes\", false)\n    .option(\"--allow-branch-mismatch\", \"Allow running from a branch that does not match the checkout's preferred Remix branch\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabSync({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        dryRun: Boolean(opts.dryRun),\n        allowBranchMismatch: Boolean(opts.allowBranchMismatch),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"reconcile\")\n    .description(\"Run the explicit Remix recovery flow for diverged local/server state\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--dry-run\", \"Preview reconcile readiness without applying changes\", false)\n    .option(\"--allow-branch-mismatch\", \"Allow running from a branch that does not match the checkout's preferred Remix branch\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabReconcile({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        dryRun: Boolean(opts.dryRun),\n        allowBranchMismatch: Boolean(opts.allowBranchMismatch),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"sync-upstream\")\n    .description(\"Create an upstream catch-up sync for the current remix, then update the local checkout\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabSyncUpstream({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"request-merge\")\n    .description(\"Open a prompt-backed merge request from the current remix to its upstream app\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabRequestMerge({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"review-queue\")\n    .description(\"List reviewable merge requests available to the current user\")\n    .option(\"--status <status>\", \"Filter merge requests by status\")\n    .option(\"--kind <kind>\", \"Filter merge requests by kind (merge|sync|all)\", parseMergeRequestKind)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabReviewQueue({\n        status: opts.status ? String(opts.status) : undefined,\n        kind: opts.kind,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"my-merge-requests\")\n    .description(\"List merge requests created by the current user\")\n    .option(\"--status <status>\", \"Filter merge requests by status\")\n    .option(\"--kind <kind>\", \"Filter merge requests by kind (merge|sync|all)\", parseMergeRequestKind)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabMyMergeRequests({\n        status: opts.status ? String(opts.status) : undefined,\n        kind: opts.kind,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"merge-requests-inbox\")\n    .description(\"Fetch incoming and outgoing merge requests with app, user, and prompt review data in one backend request\")\n    .option(\"--status <status>\", \"Filter merge requests by status (default: open)\")\n    .option(\"--kind <kind>\", \"Filter merge requests by kind (merge|sync|all)\", parseMergeRequestKind)\n    .option(\"--limit <n>\", \"Maximum number of merge requests per section\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset per section\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--no-review\", \"Skip prompt/change-step review data\")\n    .option(\"--include-diffs\", \"Include full diff text in review change steps and unifiedDiff\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabMergeRequestsInbox({\n        status: opts.status ? String(opts.status) : undefined,\n        kind: opts.kind,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        includeReview: opts.review !== false,\n        includeDiffs: Boolean(opts.includeDiffs),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"list-app-merge-requests\")\n    .description(\"List merge requests for the current bound app or an explicit app\")\n    .requiredOption(\n      \"--queue <queue>\",\n      \"App-scoped queue (app_reviewable|app_outgoing|app_related_visible)\",\n      parseAppMergeRequestQueue,\n    )\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--status <status>\", \"Filter merge requests by status\")\n    .option(\"--kind <kind>\", \"Filter merge requests by kind (merge|sync|all)\", parseMergeRequestKind)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabListAppMergeRequests({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        queue: opts.queue,\n        status: opts.status ? String(opts.status) : undefined,\n        kind: opts.kind,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"view <mrId>\")\n    .description(\"View merge request review groups and diffs\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (mrId, opts) => {\n      const result = await collabView({\n        mrId: String(mrId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"approve <mrId>\")\n    .description(\"Approve a merge request or upstream sync request\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--remote-only\", \"Approve remotely and wait for merge completion without touching the local repo\", false)\n    .option(\"--sync-target-repo\", \"Approve, wait for merge completion, and sync the current target repo checkout\", false)\n    .option(\"--allow-branch-mismatch\", \"Allow syncing the target repo from a branch that does not match the checkout's preferred Remix branch\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (mrId, opts) => {\n      const result = await collabApprove({\n        mrId: String(mrId),\n        cwd: process.cwd(),\n        remoteOnly: Boolean(opts.remoteOnly),\n        syncTargetRepo: Boolean(opts.syncTargetRepo),\n        allowBranchMismatch: Boolean(opts.allowBranchMismatch),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"reject <mrId>\")\n    .description(\"Reject a merge request\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (mrId, opts) => {\n      const result = await collabReject({\n        mrId: String(mrId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  collab\n    .command(\"invite <email>\")\n    .description(\"Invite a collaborator to an organization, project, or app\")\n    .option(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--role <role>\", \"Role for the invite\")\n    .option(\"--ttl-days <days>\", \"Invitation lifetime in days\", (value) => parseInteger(value, \"ttl-days\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (email, opts) => {\n      const result = await collabInvite({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        email: String(email),\n        role: opts.role ? String(opts.role) : null,\n        ttlDays: typeof opts.ttlDays === \"number\" ? opts.ttlDays : undefined,\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const inviteAdmin = collab.command(\"invites\").description(\"List, resend, or revoke invitations\");\n\n  inviteAdmin\n    .command(\"accept <token>\")\n    .description(\"Accept an invitation token\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (token, opts) => {\n      const result = await collabInviteAccept({\n        token: String(token),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  // Inbox surface: list / accept / decline invitations addressed to\n  // the signed-in user. STABLE IPC CONTRACT — `remix collab invites\n  // inbox --json` is what the Remix Desktop app polls on focus to\n  // drive the sidebar badge and the inbox screen. The accept-mine /\n  // decline-mine commands take (scope, inviteId) directly because\n  // the inbox listing already gave the caller both fields per row,\n  // and the backend route is scope-keyed.\n  inviteAdmin\n    .command(\"inbox\")\n    .description(\"List invitations addressed to you\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabInviteInbox({\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  inviteAdmin\n    .command(\"accept-mine <inviteId>\")\n    .description(\"Accept an invitation addressed to you (no token required)\")\n    .requiredOption(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseMyInviteScope)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (inviteId, opts) => {\n      const result = await collabInviteAcceptMine({\n        scope: parseMyInviteScope(String(opts.scope)),\n        inviteId: String(inviteId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  inviteAdmin\n    .command(\"decline-mine <inviteId>\")\n    .description(\"Decline an invitation addressed to you\")\n    .requiredOption(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseMyInviteScope)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (inviteId, opts) => {\n      const result = await collabInviteDeclineMine({\n        scope: parseMyInviteScope(String(opts.scope)),\n        inviteId: String(inviteId),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  inviteAdmin\n    .command(\"list\")\n    .description(\"List invitations for an organization, project, or app\")\n    .option(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--limit <n>\", \"Maximum number of invites\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabInviteList({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) {\n        const usedPaginationFlags = typeof opts.limit === \"number\" || typeof opts.offset === \"number\";\n        const output =\n          usedPaginationFlags || !result || typeof result !== \"object\" || !(\"invites\" in result)\n            ? result\n            : (result as { invites: unknown }).invites;\n        console.log(JSON.stringify(output, null, 2));\n      }\n    });\n\n  inviteAdmin\n    .command(\"resend <inviteId>\")\n    .description(\"Resend an invitation\")\n    .option(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--ttl-days <days>\", \"Invitation lifetime in days\", (value) => parseInteger(value, \"ttl-days\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (inviteId, opts) => {\n      const result = await collabInviteResend({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        inviteId: String(inviteId),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        ttlDays: typeof opts.ttlDays === \"number\" ? opts.ttlDays : undefined,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  inviteAdmin\n    .command(\"revoke <inviteId>\")\n    .description(\"Revoke an invitation\")\n    .option(\"--scope <scope>\", \"Invitation scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (inviteId, opts) => {\n      const result = await collabInviteRevoke({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        inviteId: String(inviteId),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const members = collab.command(\"members\").description(\"List members and update membership roles\");\n\n  members\n    .command(\"list\")\n    .description(\"List members for an organization, project, or app\")\n    .option(\"--scope <scope>\", \"Membership scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--limit <n>\", \"Maximum number of members\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await collabMembersList({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  members\n    .command(\"update <userId>\")\n    .description(\"Update a member role for an organization, project, or app\")\n    .requiredOption(\"--role <role>\", \"Role for the membership\")\n    .option(\"--scope <scope>\", \"Membership scope (organization|project|app)\", parseInviteScope, \"project\")\n    .option(\"--target-id <id>\", \"Explicit organization/project/app id instead of using the current repository binding\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (userId, opts) => {\n      const result = await collabMembersUpdate({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        scope: parseInviteScope(String(opts.scope ?? \"project\")),\n        userId: String(userId),\n        role: String(opts.role),\n        targetId: opts.targetId ? String(opts.targetId) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { execa } from \"execa\";\nimport pc from \"picocolors\";\nimport prompts from \"prompts\";\nimport type { ProjectRuntimeEnvMetadata, ResolveProjectRuntimeEnvForLocalPullResponse } from \"@remixhq/core\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { createAuthedApi, loadBindingContext, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype EnvScope = {\n  projectId?: string | null;\n  repoFingerprint?: string | null;\n  environment?: string | null;\n  target?: string | null;\n  cwd?: string;\n  // Shortcut for callers (mainly the desktop app) that only know an\n  // appId. When set and `projectId` / `repoFingerprint` aren't, we\n  // resolve the missing project scope via `/v1/apps/:appId/context`\n  // before talking to the env endpoints, which are project-scoped.\n  appId?: string | null;\n};\n\ntype EnvCommandOptions = EnvScope & {\n  yes: boolean;\n  json: boolean;\n  // When true, the backend fans out the write to the canonical app +\n  // every active 1-level branch lane. Requires `appId` to be resolvable\n  // (either explicit --app-id or via binding context). See\n  // `ProjectRuntimeEnvService.upsert` in remix-backend for semantics.\n  cascadeToFamily?: boolean;\n};\n\nfunction normalizeName(name: string): string {\n  const normalized = name.trim();\n  if (!/^[A-Z_][A-Z0-9_]*$/.test(normalized)) {\n    throw new CliError(\"Environment variable names must use A-Z, 0-9, and underscores.\", { exitCode: 2 });\n  }\n  return normalized;\n}\n\nasync function readStdin(): Promise<string> {\n  const chunks: Buffer[] = [];\n  for await (const chunk of process.stdin) {\n    chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n  }\n  return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nasync function resolveEnvScope(opts: EnvCommandOptions) {\n  const { repoRoot, binding } = await loadBindingContext(opts.cwd ?? process.cwd());\n  // Resolution priority:\n  //   1. Explicit --project-id / --repo-fingerprint (always wins).\n  //   2. --app-id → resolve project + fingerprint via /context.\n  //   3. Fall back to the on-disk binding (only when no explicit ids\n  //      and no --app-id were supplied).\n  //\n  // Subtle but important: when --app-id is provided, the binding is\n  // intentionally NOT consulted for projectId / repoFingerprint. The\n  // desktop case proves why — the desktop spawns the CLI without\n  // setting cwd, so the CLI happens to pick up whichever repo's\n  // .remix/config.json the user's terminal cwd resolves into. That\n  // can be a totally different project (different folder open in\n  // the same workspace), and falling back to its bindings would\n  // resolve env against the wrong project and 403 the request.\n  const appId = opts.appId?.trim();\n  let projectId = opts.projectId?.trim() || null;\n  let repoFingerprint = opts.repoFingerprint?.trim() || null;\n\n  if (appId && (!projectId || !repoFingerprint)) {\n    const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n    const ctx = unwrapResponseObject<{\n      projectId?: string | null;\n      repoFingerprint?: string | null;\n    }>(await api.getAppContext(appId), \"app context\");\n    projectId = projectId ?? ctx.projectId ?? null;\n    repoFingerprint = repoFingerprint ?? ctx.repoFingerprint ?? null;\n  } else if (!appId) {\n    projectId = projectId ?? binding?.projectId ?? null;\n    repoFingerprint = repoFingerprint ?? binding?.repoFingerprint ?? null;\n  }\n\n  if (!projectId) {\n    throw new CliError(\"Project id was not provided and the current repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init`, or pass --project-id (or --app-id).\",\n    });\n  }\n  if (!repoFingerprint) {\n    throw new CliError(\"Repo fingerprint was not provided and the current repository binding does not include one.\", {\n      exitCode: 2,\n      hint: \"Run from a bound repo, or pass --repo-fingerprint (or --app-id).\",\n    });\n  }\n  return {\n    repoRoot,\n    projectId,\n    appId:\n      appId ||\n      (!opts.projectId?.trim() && !opts.repoFingerprint?.trim()\n        ? (binding?.currentAppId ?? null)\n        : null),\n    scope: {\n      repoFingerprint,\n      environment: opts.environment?.trim() || \"development\",\n      target: opts.target?.trim() || \"sandbox\",\n    },\n  };\n}\n\nfunction resolveCascadeAppId(opts: EnvCommandOptions, resolvedAppId: string | null): string | null {\n  if (!opts.cascadeToFamily) return null;\n  if (resolvedAppId) return resolvedAppId;\n  throw new CliError(\"--cascade-to-family requires --app-id or a bound repository app.\", {\n    exitCode: 2,\n    hint: \"Pass --app-id so Remix can resolve the canonical app and branch lanes to update.\",\n  });\n}\n\nfunction printJsonOrMessage(json: boolean, value: unknown, message: string) {\n  if (json) console.log(JSON.stringify(value, null, 2));\n  else console.log(message);\n}\n\nfunction printMetadataList(items: ProjectRuntimeEnvMetadata[]) {\n  if (items.length === 0) {\n    console.log(pc.dim(\"No environment variables configured.\"));\n    return;\n  }\n  for (const item of items) {\n    console.log(`${item.name}  v${item.version ?? \"?\"}  ${item.environment ?? \"development\"}/${item.target ?? \"sandbox\"}`);\n  }\n}\n\nasync function readSecretValue(params: { stdin: boolean; file?: string | null; name: string }): Promise<string> {\n  if (params.file) return fs.readFile(params.file, \"utf8\");\n  if (params.stdin || !process.stdin.isTTY) return readStdin();\n  const response = await prompts({\n    type: \"password\",\n    name: \"value\",\n    message: `Value for ${params.name}`,\n  });\n  const value = typeof response.value === \"string\" ? response.value : \"\";\n  if (!value) throw new CliError(\"No value provided.\", { exitCode: 2 });\n  return value;\n}\n\nasync function isGitIgnored(repoRoot: string | null, outputPath: string): Promise<boolean> {\n  if (!repoRoot) return false;\n  try {\n    await execa(\"git\", [\"check-ignore\", \"--quiet\", outputPath], { cwd: repoRoot, reject: true });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function resolveEnvPullOutputPath(params: { repoRoot: string | null; output: string }): string {\n  if (path.isAbsolute(params.output)) return params.output;\n  return path.resolve(params.repoRoot ?? process.cwd(), params.output || \".env.local\");\n}\n\nexport async function collabEnvList(opts: EnvCommandOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveEnvScope(opts);\n  const items = unwrapResponseObject<ProjectRuntimeEnvMetadata[]>(\n    await api.listProjectRuntimeEnv(projectId, scope),\n    \"runtime env list\",\n  );\n  if (opts.json) console.log(JSON.stringify(items, null, 2));\n  else printMetadataList(items);\n  return items;\n}\n\nexport async function collabEnvSet(nameInput: string, opts: EnvCommandOptions & { stdin: boolean; file?: string | null }) {\n  const name = normalizeName(nameInput);\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveEnvScope(opts);\n  const value = await readSecretValue({ stdin: opts.stdin, file: opts.file, name });\n  const saved = unwrapResponseObject<ProjectRuntimeEnvMetadata>(\n    await api.setProjectRuntimeEnv(projectId, name, { ...scope, value }),\n    \"runtime env set\",\n  );\n  printJsonOrMessage(opts.json, saved, `Saved ${name}. Value is write-only`);\n  return saved;\n}\n\nexport async function collabEnvImport(opts: EnvCommandOptions & { file: string }) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, appId, scope } = await resolveEnvScope(opts);\n  const content = await fs.readFile(opts.file, \"utf8\");\n  const cascadeAppId = resolveCascadeAppId(opts, appId);\n  const imported = unwrapResponseObject<ProjectRuntimeEnvMetadata[]>(\n    await api.importProjectRuntimeEnv(\n      projectId,\n      cascadeAppId\n        ? {\n            ...scope,\n            content,\n            cascadeToFamily: true,\n            appId: cascadeAppId,\n          }\n        : {\n            ...scope,\n            content,\n          },\n    ),\n    \"runtime env import\",\n  );\n  printJsonOrMessage(opts.json, imported, `Imported ${imported.length} environment variable(s)`);\n  return imported;\n}\n\nexport async function collabEnvDelete(nameInput: string, opts: EnvCommandOptions) {\n  const name = normalizeName(nameInput);\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveEnvScope(opts);\n  await api.deleteProjectRuntimeEnv(projectId, name, scope);\n  printJsonOrMessage(opts.json, { deleted: name }, `Deleted ${name}.`);\n}\n\nexport async function collabEnvPull(opts: EnvCommandOptions & { output: string; overwrite: boolean }) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { repoRoot, projectId, scope } = await resolveEnvScope(opts);\n  const resolved = unwrapResponseObject<ResolveProjectRuntimeEnvForLocalPullResponse>(\n    await api.resolveProjectRuntimeEnvForLocalPull(projectId, scope),\n    \"runtime env local pull\",\n  );\n  const outputPath = resolveEnvPullOutputPath({ repoRoot, output: opts.output || \".env.local\" });\n  if (!opts.overwrite) {\n    try {\n      await fs.stat(outputPath);\n      throw new CliError(`Refusing to overwrite existing file: ${outputPath}`, {\n        exitCode: 2,\n        hint: \"Pass --overwrite to replace it.\",\n      });\n    } catch (error) {\n      if (error instanceof CliError) throw error;\n    }\n  }\n  await fs.writeFile(outputPath, resolved.content, { mode: 0o600 });\n  try {\n    await fs.chmod(outputPath, 0o600);\n  } catch {}\n  const ignored = await isGitIgnored(repoRoot, path.relative(repoRoot ?? process.cwd(), outputPath));\n  if (!opts.json && !ignored) {\n    console.warn(pc.yellow(`Warning: ${outputPath} does not appear to be ignored by git.`));\n  }\n  printJsonOrMessage(opts.json, { output: outputPath, names: resolved.names }, `Pulled ${resolved.names.length} variable(s) to ${outputPath}`);\n  return { output: outputPath, names: resolved.names };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport type { ProjectRuntimeTargetMetadata, RuntimeCommandKind, RuntimeTargetKind } from \"@remixhq/core\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { createAuthedApi, loadBindingContext, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype RuntimeScopeOptions = {\n  projectId?: string | null;\n  repoFingerprint?: string | null;\n  environment?: string | null;\n  cwd?: string;\n  yes: boolean;\n  json: boolean;\n  // See env.ts: when true, the backend fans the write out to the\n  // canonical + 1-level branch lanes resolved from `appId`. Only\n  // honored by `collabRuntimeDetect` (apply step) and\n  // `collabRuntimeSet` today.\n  cascadeToFamily?: boolean;\n  // Shortcut for callers (mainly the desktop app) that only carry an\n  // appId. When set and `projectId` / `repoFingerprint` aren't, we\n  // resolve the missing scope via `/v1/apps/:appId/context`. Mirrors\n  // the env command pattern.\n  appId?: string | null;\n};\n\ntype RuntimeDetectOptions = RuntimeScopeOptions & {\n  apply: boolean;\n  wait?: boolean;\n  waitTimeoutSeconds?: number;\n};\n\ntype RuntimeAppOptions = {\n  appId?: string | null;\n  environment?: string | null;\n  cwd?: string;\n  yes: boolean;\n  json: boolean;\n};\n\nconst DETECTION_FILES = [\n  \"package.json\",\n  \"package-lock.json\",\n  \"pnpm-lock.yaml\",\n  \"yarn.lock\",\n  \"bun.lockb\",\n  \"bun.lock\",\n  \"vite.config.ts\",\n  \"vite.config.js\",\n  \"next.config.js\",\n  \"next.config.mjs\",\n  \"astro.config.mjs\",\n  \"astro.config.ts\",\n  \"app.json\",\n  \"app.config.js\",\n  \"app.config.ts\",\n  \"metro.config.js\",\n  \"metro.config.ts\",\n] as const;\n\nasync function resolveRuntimeScope(opts: RuntimeScopeOptions) {\n  const { repoRoot, binding } = await loadBindingContext(opts.cwd ?? process.cwd());\n  // Resolution priority (mirrors env command):\n  //   1. Explicit --project-id / --repo-fingerprint (always wins).\n  //   2. --app-id → resolve project + fingerprint via /context.\n  //   3. Fall back to the on-disk binding (only when no explicit ids\n  //      and no --app-id were supplied).\n  //\n  // When --app-id is supplied, the binding is intentionally NOT\n  // consulted — the desktop spawns the CLI without setting cwd, so\n  // the binding it picks up may be from a totally different folder\n  // and would resolve env/runtime against the wrong project.\n  const appId = opts.appId?.trim();\n  let projectId = opts.projectId?.trim() || null;\n  let repoFingerprint = opts.repoFingerprint?.trim() || null;\n\n  if (appId && (!projectId || !repoFingerprint)) {\n    const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n    const ctx = unwrapResponseObject<{\n      projectId?: string | null;\n      repoFingerprint?: string | null;\n    }>(await api.getAppContext(appId), \"app context\");\n    projectId = projectId ?? ctx.projectId ?? null;\n    repoFingerprint = repoFingerprint ?? ctx.repoFingerprint ?? null;\n  } else if (!appId) {\n    projectId = projectId ?? binding?.projectId ?? null;\n    repoFingerprint = repoFingerprint ?? binding?.repoFingerprint ?? null;\n  }\n\n  if (!projectId) {\n    throw new CliError(\"Project id was not provided and the current repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init`, or pass --project-id (or --app-id).\",\n    });\n  }\n  if (!repoFingerprint) {\n    throw new CliError(\"Repo fingerprint was not provided and the current repository binding does not include one.\", {\n      exitCode: 2,\n      hint: \"Run from a bound repo, or pass --repo-fingerprint (or --app-id).\",\n    });\n  }\n  return {\n    repoRoot,\n    projectId,\n    appId:\n      appId ||\n      (!opts.projectId?.trim() && !opts.repoFingerprint?.trim()\n        ? (binding?.currentAppId ?? null)\n        : null),\n    scope: {\n      repoFingerprint,\n      environment: opts.environment?.trim() || \"development\",\n    },\n  };\n}\n\nfunction resolveCascadeAppId(opts: RuntimeScopeOptions & { apply?: boolean }, resolvedAppId: string | null): string | null {\n  if (!opts.cascadeToFamily) return null;\n  if (!opts.apply) {\n    throw new CliError(\"--cascade-to-family requires --apply.\", {\n      exitCode: 2,\n      hint: \"Detection only writes app-family runtime targets when --apply is set.\",\n    });\n  }\n  if (resolvedAppId) return resolvedAppId;\n  throw new CliError(\"--cascade-to-family requires --app-id or a bound repository app.\", {\n    exitCode: 2,\n    hint: \"Pass --app-id so Remix can resolve the canonical app and branch lanes to update.\",\n  });\n}\n\nexport async function readRuntimeDetectionFiles(repoRoot: string | null): Promise<Record<string, string | null>> {\n  const root = repoRoot ?? process.cwd();\n  const entries: Record<string, string | null> = {};\n  for (const file of DETECTION_FILES) {\n    try {\n      entries[file] = await fs.readFile(path.join(root, file), \"utf8\");\n    } catch {\n      entries[file] = null;\n    }\n  }\n  return entries;\n}\n\nfunction printJsonOrMessage(json: boolean, value: unknown, message: string) {\n  if (json) console.log(JSON.stringify(value, null, 2));\n  else console.log(message);\n}\n\nfunction printTargets(items: ProjectRuntimeTargetMetadata[]) {\n  if (items.length === 0) {\n    console.log(pc.dim(\"No runtime targets configured.\"));\n    return;\n  }\n  for (const item of items) {\n    const port = item.port ? `:${item.port}` : \"\";\n    console.log(`${item.targetId}  ${item.targetKind}/${item.commandKind}${port}  ${item.command}`);\n  }\n}\n\nfunction isVerifiableDevTarget(item: Pick<ProjectRuntimeTargetMetadata, \"targetKind\" | \"commandKind\">) {\n  return (item.targetKind === \"web\" || item.targetKind === \"mobile\") && item.commandKind === \"dev\";\n}\n\nfunction verificationStatus(item: ProjectRuntimeTargetMetadata): string {\n  return item.verification?.status ?? \"not_attempted\";\n}\n\nfunction sleep(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction unwrapDetectedRuntimeTargets(value: unknown): ProjectRuntimeTargetMetadata[] {\n  if (Array.isArray(value)) return value as ProjectRuntimeTargetMetadata[];\n  if (value && typeof value === \"object\" && Array.isArray((value as { targets?: unknown }).targets)) {\n    return (value as { targets: ProjectRuntimeTargetMetadata[] }).targets;\n  }\n  return [];\n}\n\nexport async function collabRuntimeList(opts: RuntimeScopeOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveRuntimeScope(opts);\n  const items = unwrapResponseObject<ProjectRuntimeTargetMetadata[]>(\n    await api.listProjectRuntimeTargets(projectId, scope),\n    \"runtime targets list\",\n  );\n  if (opts.json) console.log(JSON.stringify(items, null, 2));\n  else printTargets(items);\n  return items;\n}\n\nasync function waitForRuntimeVerification(params: {\n  api: Awaited<ReturnType<typeof createAuthedApi>>;\n  projectId: string;\n  scope: { repoFingerprint: string; environment: string };\n  targetIds: string[];\n  timeoutSeconds: number;\n}) {\n  const deadline = Date.now() + params.timeoutSeconds * 1000;\n  let latest: ProjectRuntimeTargetMetadata[] = [];\n  while (Date.now() <= deadline) {\n    latest = unwrapResponseObject<ProjectRuntimeTargetMetadata[]>(\n      await params.api.listProjectRuntimeTargets(params.projectId, params.scope),\n      \"runtime targets list\",\n    );\n    const byId = new Map(latest.map((item) => [item.targetId, item]));\n    const pending = params.targetIds.filter((targetId) => verificationStatus(byId.get(targetId) ?? ({} as ProjectRuntimeTargetMetadata)) === \"pending\");\n    if (pending.length === 0) return latest;\n    await sleep(2000);\n  }\n  throw new CliError(\"Timed out waiting for Claude runtime verification.\", {\n    exitCode: 2,\n    hint: \"Run `remix collab runtime list` to inspect the latest verification status.\",\n  });\n}\n\nexport async function collabRuntimeDetect(opts: RuntimeDetectOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { repoRoot, projectId, appId, scope } = await resolveRuntimeScope(opts);\n  if (opts.wait && !opts.apply) {\n    throw new CliError(\"--wait requires --apply.\", { exitCode: 2 });\n  }\n  if (opts.wait && !appId) {\n    throw new CliError(\"--wait requires an app-scoped runtime detection.\", {\n      exitCode: 2,\n      hint: \"Pass --app-id or run from a repository bound to an app.\",\n    });\n  }\n  const files = await readRuntimeDetectionFiles(repoRoot);\n  const cascadeAppId = resolveCascadeAppId(opts, appId);\n  const detectedResult = unwrapResponseObject<ProjectRuntimeTargetMetadata[] | { targets: ProjectRuntimeTargetMetadata[] }>(\n    await api.detectProjectRuntimeTargets(\n      projectId,\n      cascadeAppId\n        ? {\n            ...scope,\n            apply: true,\n            files,\n            cascadeToFamily: true,\n            appId: cascadeAppId,\n          }\n        : {\n            ...scope,\n            apply: opts.apply,\n            files,\n            ...(appId ? { appId, cascadeToFamily: false } : {}),\n          },\n    ),\n    \"runtime targets detect\",\n  );\n  let detected = unwrapDetectedRuntimeTargets(detectedResult);\n  const verifiableTargetIds = detected.filter(isVerifiableDevTarget).map((target) => target.targetId);\n  if (opts.wait && verifiableTargetIds.length > 0) {\n    if (!opts.json) console.log(pc.dim(\"Waiting for Claude runtime verification...\"));\n    const latest = await waitForRuntimeVerification({\n      api,\n      projectId,\n      scope,\n      targetIds: verifiableTargetIds,\n      timeoutSeconds: opts.waitTimeoutSeconds ?? 600,\n    });\n    const latestById = new Map(latest.map((target) => [target.targetId, target]));\n    detected = detected.map((target) => latestById.get(target.targetId) ?? target);\n  }\n  if (opts.json) console.log(JSON.stringify(detected, null, 2));\n  else {\n    printTargets(detected);\n    if (!opts.apply) console.log(pc.dim(\"Pass --apply to save detected targets.\"));\n    else if (!opts.wait && verifiableTargetIds.length > 0) {\n      console.log(pc.dim(`Claude verification pending for ${verifiableTargetIds.join(\", \")}.`));\n      console.log(pc.dim(\"Run `remix collab runtime list` to inspect verification status.\"));\n    } else if (opts.wait && verifiableTargetIds.length > 0) {\n      for (const target of detected.filter((item) => verifiableTargetIds.includes(item.targetId))) {\n        console.log(`${target.targetId}  ${verificationStatus(target)}`);\n      }\n    }\n  }\n  return detected;\n}\n\nexport async function collabRuntimeSet(\n  targetId: string,\n  opts: RuntimeScopeOptions & {\n    kind: RuntimeTargetKind;\n    commandKind: RuntimeCommandKind;\n    command: string;\n    targetCwd?: string | null;\n    port?: number | null;\n    disabled?: boolean;\n    // Optional readiness/inheritance overrides. Mainly used by the\n    // desktop GUI to pass through the same advanced configuration\n    // the dashboard's panel exposes. Strings get JSON-parsed.\n    readiness?: string | Record<string, unknown> | null;\n    inheritancePolicy?: \"project_family\" | \"none\" | null;\n  },\n) {\n  if (!targetId.trim()) throw new CliError(\"Target id is required.\", { exitCode: 2 });\n\n  let readiness: Record<string, unknown> | undefined;\n  if (opts.readiness != null && opts.readiness !== \"\") {\n    if (typeof opts.readiness === \"string\") {\n      try {\n        const parsed: unknown = JSON.parse(opts.readiness);\n        if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n          readiness = parsed as Record<string, unknown>;\n        } else {\n          throw new Error(\"Expected an object\");\n        }\n      } catch (err) {\n        throw new CliError(`--readiness must be a JSON object: ${(err as Error).message}`, { exitCode: 2 });\n      }\n    } else {\n      readiness = opts.readiness;\n    }\n  }\n\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveRuntimeScope(opts);\n  const saved = unwrapResponseObject<ProjectRuntimeTargetMetadata>(\n    await api.setProjectRuntimeTarget(projectId, targetId.trim(), {\n      ...scope,\n      targetKind: opts.kind,\n      commandKind: opts.commandKind,\n      command: opts.command,\n      cwd: opts.targetCwd?.trim() || \"/home/user/app\",\n      port: opts.port ?? null,\n      enabled: !opts.disabled,\n      ...(readiness ? { readiness } : {}),\n      ...(opts.inheritancePolicy ? { inheritancePolicy: opts.inheritancePolicy } : {}),\n    }),\n    \"runtime target set\",\n  );\n  printJsonOrMessage(opts.json, saved, `Saved runtime target ${saved.targetId}.`);\n  return saved;\n}\n\nexport async function collabRuntimeDelete(targetId: string, opts: RuntimeScopeOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveRuntimeScope(opts);\n  await api.deleteProjectRuntimeTarget(projectId, targetId.trim(), scope);\n  printJsonOrMessage(opts.json, { deleted: targetId.trim() }, `Deleted runtime target ${targetId.trim()}.`);\n}\n\nexport async function collabRuntimeRun(targetId: string, opts: RuntimeAppOptions & { forceInstall?: boolean; forceRestart?: boolean }) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const result = unwrapResponseObject(\n    await api.runAppRuntimeTarget(appId, targetId.trim(), {\n      environment: opts.environment?.trim() || \"development\",\n      forceInstall: Boolean(opts.forceInstall),\n      forceRestart: Boolean(opts.forceRestart),\n    }),\n    \"runtime target run\",\n  );\n  printJsonOrMessage(opts.json, result, `Started runtime target ${targetId.trim()}.`);\n  return result;\n}\n\nexport async function collabRuntimeStatus(targetId: string, opts: RuntimeAppOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const result = unwrapResponseObject(\n    await api.getAppRuntimeTargetStatus(appId, targetId.trim(), { environment: opts.environment?.trim() || \"development\" }),\n    \"runtime target status\",\n  );\n  printJsonOrMessage(opts.json, result, JSON.stringify(result, null, 2));\n  return result;\n}\n\nexport async function collabRuntimeLogs(targetId: string, opts: RuntimeAppOptions & { limit?: number }) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const result = unwrapResponseObject<{ logs?: string }>(\n    await api.getAppRuntimeTargetLogs(appId, targetId.trim(), {\n      environment: opts.environment?.trim() || \"development\",\n      limit: opts.limit,\n    }),\n    \"runtime target logs\",\n  );\n  if (opts.json) console.log(JSON.stringify(result, null, 2));\n  else process.stdout.write(result.logs ?? \"\");\n  return result;\n}\n\nexport async function collabRuntimeStop(targetId: string, opts: RuntimeAppOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const result = unwrapResponseObject(\n    await api.stopAppRuntimeTarget(appId, targetId.trim(), { environment: opts.environment?.trim() || \"development\" }),\n    \"runtime target stop\",\n  );\n  printJsonOrMessage(opts.json, result, `Stopped runtime target ${targetId.trim()}.`);\n  return result;\n}\n","import pc from \"picocolors\";\nimport type { ApiClient, AppSandboxCommandRun } from \"@remixhq/core\";\nimport { createAuthedApi, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype SandboxCommandOptions = {\n\tappId?: string | null;\n\tcwd?: string;\n\tcommandCwd?: string | null;\n\ttimeoutMs?: number | null;\n\tenvironment?: string | null;\n\tyes: boolean;\n\tjson: boolean;\n};\n\ntype SandboxCommandHistoryOptions = {\n\tappId?: string | null;\n\tcwd?: string;\n\tlimit?: number | null;\n\tyes: boolean;\n\tjson: boolean;\n};\n\ntype SandboxCommandDeps = {\n\tcreateAuthedApi: typeof createAuthedApi;\n\tresolveAppId: typeof resolveAppId;\n\twriteStdout: (value: string) => void;\n\twriteStderr: (value: string) => void;\n};\n\nconst defaultDeps: SandboxCommandDeps = {\n\tcreateAuthedApi,\n\tresolveAppId,\n\twriteStdout: (value) => process.stdout.write(value),\n\twriteStderr: (value) => process.stderr.write(value),\n};\n\nfunction printLine(value: string, deps: SandboxCommandDeps) {\n\tdeps.writeStdout(`${value}\\n`);\n}\n\nfunction printRun(run: AppSandboxCommandRun, deps: SandboxCommandDeps) {\n\tconst exit = run.exitCode === null ? \"no exit code\" : `exit ${run.exitCode}`;\n\tprintLine(`${run.status} (${exit}, ${run.durationMs}ms)`, deps);\n\tif (run.stdout) deps.writeStdout(run.stdout);\n\tif (run.stderr) deps.writeStderr(run.stderr);\n\tif (!run.stdout && !run.stderr) printLine(pc.dim(\"(no output)\"), deps);\n}\n\nfunction printHistory(items: AppSandboxCommandRun[], deps: SandboxCommandDeps) {\n\tif (items.length === 0) {\n\t\tprintLine(pc.dim(\"No sandbox commands have been run.\"), deps);\n\t\treturn;\n\t}\n\tfor (const item of items) {\n\t\tconst exit = item.exitCode === null ? \"-\" : String(item.exitCode);\n\t\tprintLine(`${item.startedAt}  ${item.status}  ${exit}  ${item.command}`, deps);\n\t}\n}\n\nexport async function collabSandboxCommandRun(\n\tcommand: string,\n\topts: SandboxCommandOptions,\n\tdeps: SandboxCommandDeps = defaultDeps,\n) {\n\tconst api = (await deps.createAuthedApi({ yes: opts.yes, json: opts.json })) as ApiClient;\n\tconst { appId } = await deps.resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n\tconst result = unwrapResponseObject<AppSandboxCommandRun>(\n\t\tawait api.runAppSandboxCommand(appId, {\n\t\t\tcommand,\n\t\t\tcwd: opts.commandCwd?.trim() || \"/home/user/app\",\n\t\t\ttimeoutMs: opts.timeoutMs ?? 120_000,\n\t\t\tenvironment: opts.environment?.trim() || \"development\",\n\t\t}),\n\t\t\"sandbox command run\",\n\t);\n\tif (opts.json) printLine(JSON.stringify(result, null, 2), deps);\n\telse printRun(result, deps);\n\treturn result;\n}\n\nexport async function collabSandboxCommandHistory(\n\topts: SandboxCommandHistoryOptions,\n\tdeps: SandboxCommandDeps = defaultDeps,\n) {\n\tconst api = (await deps.createAuthedApi({ yes: opts.yes, json: opts.json })) as ApiClient;\n\tconst { appId } = await deps.resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n\tconst result = unwrapResponseObject<{ items: AppSandboxCommandRun[] }>(\n\t\tawait api.listAppSandboxCommandHistory(appId, { limit: opts.limit ?? 20 }),\n\t\t\"sandbox command history\",\n\t);\n\tif (opts.json) printLine(JSON.stringify(result.items, null, 2), deps);\n\telse printHistory(result.items, deps);\n\treturn result.items;\n}\n","import pc from \"picocolors\";\nimport { execa } from \"execa\";\nimport type {\n  ProjectTrigger,\n  ProjectTriggerPayload,\n  ProjectTriggerStepPayload,\n  TriggerEventMetadata,\n  TriggerRun,\n  UpdateProjectTriggerPayload,\n} from \"@remixhq/core\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { createAuthedApi, loadBindingContext, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype TriggerScopeOptions = {\n  projectId?: string | null;\n  repoFingerprint?: string | null;\n  environment?: string | null;\n  eventType?: string | null;\n  cwd?: string;\n  yes: boolean;\n  json: boolean;\n};\n\ntype TriggerAppOptions = {\n  appId?: string | null;\n  environment?: string | null;\n  cwd?: string;\n\tlocal?: boolean;\n  yes: boolean;\n  json: boolean;\n};\n\nasync function resolveTriggerScope(opts: TriggerScopeOptions) {\n  const { repoRoot, binding } = await loadBindingContext(opts.cwd ?? process.cwd());\n  const projectId = opts.projectId?.trim() || binding?.projectId || null;\n  const repoFingerprint = opts.repoFingerprint?.trim() || binding?.repoFingerprint || null;\n  if (!projectId) {\n    throw new CliError(\"Project id was not provided and the current repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init`, or pass --project-id.\",\n    });\n  }\n  if (!repoFingerprint) {\n    throw new CliError(\"Repo fingerprint was not provided and the current repository binding does not include one.\", {\n      exitCode: 2,\n      hint: \"Run from a bound repo, or pass --repo-fingerprint.\",\n    });\n  }\n  return {\n    repoRoot,\n    projectId,\n    scope: {\n      repoFingerprint,\n      environment: opts.environment?.trim() || \"development\",\n      eventType: opts.eventType?.trim() || undefined,\n    },\n  };\n}\n\nfunction localStepCwd(repoRoot: string, cwd: string | null | undefined) {\n  if (!cwd || cwd === \"/home/user/app\") return repoRoot;\n  if (cwd.startsWith(\"/home/user/app/\")) return `${repoRoot}/${cwd.slice(\"/home/user/app/\".length)}`;\n  return cwd;\n}\n\ntype LocalTriggerStepResult = {\n  triggerId: string;\n  stepId: string;\n  command: string;\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n};\n\nasync function runTriggerLocally(trigger: ProjectTrigger, repoRoot: string, json: boolean): Promise<LocalTriggerStepResult[]> {\n  const results: LocalTriggerStepResult[] = [];\n  for (const step of trigger.steps ?? []) {\n    if (step.type !== \"shell\") {\n      throw new CliError(\"Local trigger execution only supports shell steps in V1.\", {\n        exitCode: 2,\n        hint: \"Run this trigger without --local to delegate runtime target steps to the backend.\",\n      });\n    }\n    const command = String(step.command ?? \"\").trim();\n    if (!command) continue;\n    const result = await execa(command, {\n      cwd: localStepCwd(repoRoot, step.cwd),\n      shell: true,\n      reject: false,\n      stdout: \"pipe\",\n      stderr: \"pipe\",\n      timeout: typeof step.timeoutMs === \"number\" ? step.timeoutMs : undefined,\n    });\n    results.push({\n      triggerId: trigger.id,\n      stepId: step.id,\n      command,\n      exitCode: result.exitCode ?? 1,\n      stdout: result.stdout,\n      stderr: result.stderr,\n    });\n    if (result.exitCode !== 0 && !step.continueOnFailure) {\n      if (!json && result.stderr) console.error(result.stderr);\n      throw new CliError(`Local trigger step failed with exit code ${result.exitCode}.`, { exitCode: result.exitCode || 1 });\n    }\n  }\n  return results;\n}\n\nfunction printJsonOrMessage(json: boolean, value: unknown, message: string) {\n  if (json) console.log(JSON.stringify(value, null, 2));\n  else console.log(message);\n}\n\nfunction printTriggers(items: ProjectTrigger[]) {\n  if (items.length === 0) {\n    console.log(pc.dim(\"No triggers configured.\"));\n    return;\n  }\n  for (const item of items) {\n    const enabled = item.enabled ? \"enabled\" : \"disabled\";\n    console.log(`${item.id}  ${item.eventType}  ${enabled}  priority=${item.priority}  ${item.name}`);\n  }\n}\n\nexport async function collabTriggersEvents(opts: TriggerScopeOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId } = await resolveTriggerScope({ ...opts, repoFingerprint: opts.repoFingerprint ?? \"events\" });\n  const events = unwrapResponseObject<TriggerEventMetadata[]>(await api.listProjectTriggerEvents(projectId), \"trigger events\");\n  if (opts.json) console.log(JSON.stringify(events, null, 2));\n  else {\n    for (const event of events) {\n      console.log(`${event.eventType}  ${event.integrationStatus}  ${pc.dim(event.category)}`);\n    }\n  }\n  return events;\n}\n\nexport async function collabTriggersList(opts: TriggerScopeOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveTriggerScope(opts);\n  const items = unwrapResponseObject<ProjectTrigger[]>(await api.listProjectTriggers(projectId, scope), \"triggers list\");\n  if (opts.json) console.log(JSON.stringify(items, null, 2));\n  else printTriggers(items);\n  return items;\n}\n\nexport async function collabTriggersCreate(\n  opts: TriggerScopeOptions & {\n    name: string;\n    description?: string | null;\n    mode?: \"blocking\" | \"async\";\n    priority?: number;\n    disabled?: boolean;\n    stepName?: string | null;\n    command?: string | null;\n    runtimeTargetId?: string | null;\n    stepCwd?: string | null;\n    timeoutMs?: number | null;\n    continueOnFailure?: boolean;\n  },\n) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId, scope } = await resolveTriggerScope(opts);\n  if (!scope.eventType) throw new CliError(\"--event-type is required.\", { exitCode: 2 });\n  if (!opts.command && !opts.runtimeTargetId) {\n    throw new CliError(\"Provide either --command or --runtime-target-id.\", { exitCode: 2 });\n  }\n  const step: ProjectTriggerStepPayload = opts.runtimeTargetId\n    ? {\n        name: opts.stepName ?? null,\n        type: \"runtime_target\",\n        runtimeTargetId: opts.runtimeTargetId,\n        continueOnFailure: Boolean(opts.continueOnFailure),\n      }\n    : {\n        name: opts.stepName ?? null,\n        type: \"shell\",\n        command: opts.command,\n        cwd: opts.stepCwd ?? \"/home/user/app\",\n        timeoutMs: opts.timeoutMs ?? null,\n        continueOnFailure: Boolean(opts.continueOnFailure),\n      };\n  const created = unwrapResponseObject<ProjectTrigger>(\n    await api.createProjectTrigger(projectId, {\n      repoFingerprint: scope.repoFingerprint,\n      environment: scope.environment,\n      eventType: scope.eventType,\n      name: opts.name,\n      description: opts.description ?? null,\n      enabled: !opts.disabled,\n      mode: opts.mode ?? \"async\",\n      priority: opts.priority ?? 100,\n      steps: [step],\n    } satisfies ProjectTriggerPayload),\n    \"trigger create\",\n  );\n  printJsonOrMessage(opts.json, created, `Created trigger ${created.id}.`);\n  return created;\n}\n\nexport async function collabTriggersUpdate(\n  triggerId: string,\n  opts: TriggerScopeOptions & { name?: string; enabled?: boolean; disabled?: boolean; priority?: number; mode?: \"blocking\" | \"async\" },\n) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId } = await resolveTriggerScope(opts);\n  const payload: UpdateProjectTriggerPayload = {};\n  if (opts.name) payload.name = opts.name;\n  if (opts.mode) payload.mode = opts.mode;\n  if (typeof opts.priority === \"number\") payload.priority = opts.priority;\n  if (opts.enabled) payload.enabled = true;\n  if (opts.disabled) payload.enabled = false;\n  const updated = unwrapResponseObject<ProjectTrigger>(\n    await api.updateProjectTrigger(projectId, triggerId.trim(), payload),\n    \"trigger update\",\n  );\n  printJsonOrMessage(opts.json, updated, `Updated trigger ${triggerId.trim()}.`);\n  return updated;\n}\n\nexport async function collabTriggersDelete(triggerId: string, opts: TriggerScopeOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId } = await resolveTriggerScope(opts);\n  await api.deleteProjectTrigger(projectId, triggerId.trim());\n  printJsonOrMessage(opts.json, { deleted: triggerId.trim() }, `Deleted trigger ${triggerId.trim()}.`);\n}\n\nexport async function collabTriggersRun(triggerId: string, opts: TriggerAppOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  if (opts.local) {\n    const { repoRoot, projectId, scope } = await resolveTriggerScope({ ...opts, eventType: null });\n    if (!repoRoot) throw new CliError(\"Local trigger execution requires a git repository.\", { exitCode: 2 });\n    const triggers = unwrapResponseObject<ProjectTrigger[]>(await api.listProjectTriggers(projectId, scope), \"triggers list\");\n    const trigger = triggers.find((item) => item.id === triggerId.trim());\n    if (!trigger) throw new CliError(\"Trigger was not found in the current project/repo/environment scope.\", { exitCode: 2 });\n    if (!trigger.enabled) throw new CliError(\"Trigger is disabled.\", { exitCode: 2 });\n    const results = await runTriggerLocally(trigger, repoRoot, opts.json);\n    printJsonOrMessage(opts.json, results, `Ran trigger ${triggerId.trim()} locally.`);\n    return results;\n  }\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const run = unwrapResponseObject(\n    await api.runAppTrigger(appId, triggerId.trim(), { eventSource: \"cli\", eventContext: {} }),\n    \"trigger run\",\n  );\n  printJsonOrMessage(opts.json, run, `Ran trigger ${triggerId.trim()}.`);\n  return run;\n}\n\nexport async function collabTriggersRunEvent(eventType: string, opts: TriggerAppOptions) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  if (opts.local) {\n    const { repoRoot, projectId, scope } = await resolveTriggerScope({ ...opts, eventType: eventType.trim() });\n    if (!repoRoot) throw new CliError(\"Local trigger execution requires a git repository.\", { exitCode: 2 });\n    const triggers = unwrapResponseObject<ProjectTrigger[]>(\n      await api.resolveProjectTriggers(projectId, { ...scope, eventType: eventType.trim() }),\n      \"triggers resolve\",\n    );\n    const results: LocalTriggerStepResult[] = [];\n    for (const trigger of triggers) {\n      results.push(...(await runTriggerLocally(trigger, repoRoot, opts.json)));\n    }\n    printJsonOrMessage(opts.json, results, `Ran trigger event ${eventType.trim()} locally.`);\n    return results;\n  }\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const run = unwrapResponseObject(\n    await api.runAppTriggerEvent(appId, {\n      eventType: eventType.trim(),\n      eventSource: \"cli\",\n      eventContext: {},\n      environment: opts.environment?.trim() || \"development\",\n    }),\n    \"trigger event run\",\n  );\n  printJsonOrMessage(opts.json, run, `Ran trigger event ${eventType.trim()}.`);\n  return run;\n}\n\nexport async function collabTriggersRuns(opts: TriggerScopeOptions & { limit?: number; appId?: string | null }) {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { projectId } = await resolveTriggerScope(opts);\n  const runs = unwrapResponseObject<TriggerRun[]>(\n    await api.listProjectTriggerRuns(projectId, {\n      limit: opts.limit ?? 20,\n      eventType: opts.eventType?.trim() || undefined,\n      appId: opts.appId?.trim() || undefined,\n    }),\n    \"trigger runs\",\n  );\n  if (opts.json) console.log(JSON.stringify(runs, null, 2));\n  else {\n    for (const run of runs) console.log(`${run.id}  ${run.eventType}  ${run.status}  ${run.createdAt}`);\n  }\n  return runs;\n}\n","import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync } from \"node:fs\";\nimport { writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Auto-spawn helper for `remix history import` — used after\n// `remix collab init` (and equivalents) to seed the per-repo timeline\n// with the user's existing AI history without requiring an extra\n// command from them.\n//\n// GATING (two independent layers, both must pass before we spawn):\n//\n//   1. BINDING MODE: only auto-spawn for an `explicit_root` init —\n//      i.e. the FIRST time a repo gets bound to Remix as the canonical\n//      app for its main/default branch. We deliberately skip:\n//        - `lane`   inits (a branch off an already-bound repo): the\n//                    main app's auto-spawn already covered every\n//                    transcript on disk; the branch shouldn't re-scan.\n//        - `legacy` inits: pre-bindingMode rows; we don't reason about\n//                    them, so we don't kick off a background scan.\n//      Without this gate every `git checkout -b feature` followed by\n//      `remix collab init` would re-trigger a full transcript walk and\n//      re-upload anything new since the main init — landing as\n//      `historical` even though it's already in `collab_turn`.\n//\n//   2. MARKER FILE: the absence of a local-state history-import marker.\n//      The marker is written by the importer at the\n//      end of a successful run, so subsequent init re-runs are no-ops:\n//        - First-ever main-app `collab init`:    no marker → spawn. ✓\n//        - Re-init on a different branch:        bindingMode=lane    → no-op. ✓\n//        - `collab init --force-new` (fork):     marker exists → no-op. ✓\n//        - First init crashed mid-import:        marker NOT written, so\n//                                                 next main-app init re-spawns. ✓\n//        - User wants to re-pull:                delete the local marker\n//                                                 then `remix collab init`. ✓\n//\n//   * For users upgrading from a Remix version that pre-dates this\n//     feature, the marker is also absent — so we will run the import\n//     ONCE per existing bound repo on their next main-app init, then\n//     never again. The server's dedup-skip path makes that idempotent.\n//\n// CUTOFF SEMANTICS:\n//\n//   * The auto-spawn always passes `--before <iso>` set to the moment\n//     init completed. The importer drops any transcript turn that\n//     occurred AFTER that timestamp — those turns will be (or already\n//     were) recorded LIVE through `finalize_turn`, so importing them\n//     as \"historical\" would create dashboard duplicates. The cutoff\n//     is persisted into the marker (`cutoffAt`) so subsequent manual\n//     `remix history import` runs reuse the same boundary by default.\n//\n// SAFETY:\n//\n//   * We only ever look at the SINGLE repo passed in. The CLI command\n//     (`remix history import --repo <path>`) re-validates that the\n//     path is bound to Remix and refuses to upload anything otherwise.\n//     The runner additionally drops every slice whose cwd doesn't map\n//     to the same repoFingerprint, so this is single-repo end-to-end.\n//\n//   * The spawned child is fully detached and does not write runtime logs into\n//     the bound repo. The user keeps their prompt; the import runs in the\n//     background.\n\nconst LEGACY_MARKER_REL_PATH = path.join(\".remix\", \".history-imported\");\n\nexport function autoSpawnMarkerPath(repoRoot: string, repoFingerprint?: string | null): string {\n  return path.join(historyImportStateDir(repoRoot, repoFingerprint), \"history-imported.json\");\n}\n\nfunction legacyAutoSpawnMarkerPath(repoRoot: string): string {\n  return path.join(repoRoot, LEGACY_MARKER_REL_PATH);\n}\n\nfunction collabStateRoot(): string {\n  const configured = process.env.REMIX_COLLAB_STATE_ROOT?.trim();\n  return configured || path.join(os.homedir(), \".remix\", \"collab-state\");\n}\n\nfunction sha256Hex(value: string): string {\n  return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction historyImportStateDir(repoRoot: string, repoFingerprint?: string | null): string {\n  const identityKey =\n    typeof repoFingerprint === \"string\" && repoFingerprint.trim()\n      ? `repoFingerprint:${repoFingerprint.trim()}`\n      : `repoRoot:${repoRoot}`;\n  return path.join(collabStateRoot(), \"history-import\", sha256Hex(identityKey));\n}\n\nfunction fallbackRepoRootMarkerPath(repoRoot: string): string {\n  return path.join(historyImportStateDir(repoRoot, null), \"history-imported.json\");\n}\n\nfunction legacyLocalRepoRootMarkerPath(repoRoot: string): string {\n  return path.join(collabStateRoot(), \"history-import\", sha256Hex(repoRoot), \"history-imported.json\");\n}\n\n// Marker-file gate: true iff no successful import has landed for this\n// repo yet. Callers should additionally make sure the repo is bound\n// (`.remix/config.json` present) before calling — we don't double-check\n// here so this stays a pure read.\nexport function shouldAutoSpawnHistoryImport(repoRoot: string, repoFingerprint?: string | null): boolean {\n  try {\n    return (\n      !existsSync(autoSpawnMarkerPath(repoRoot, repoFingerprint)) &&\n      !existsSync(fallbackRepoRootMarkerPath(repoRoot)) &&\n      !existsSync(legacyLocalRepoRootMarkerPath(repoRoot)) &&\n      !existsSync(legacyAutoSpawnMarkerPath(repoRoot))\n    );\n  } catch {\n    // Anything weird (permission, path traversal) → bail safely.\n    return false;\n  }\n}\n\n// Binding-mode gate: only auto-spawn for the canonical/main-app init.\n// `lane` means the user just bound a branch off an already-bound repo\n// (the main app's auto-spawn already covered the on-disk transcripts);\n// `legacy` is a pre-bindingMode init we don't reason about. Both must\n// be no-ops here. See the file header for the full rationale.\nexport function isAutoSpawnEligibleBindingMode(\n  bindingMode: string | null | undefined,\n): boolean {\n  return bindingMode === \"explicit_root\";\n}\n\nexport type AutoSpawnResult = {\n  pid: number | undefined;\n};\n\nexport type AutoSpawnOptions = {\n  // Hard upper bound on slice `occurredAt`. The importer drops any\n  // transcript turn at or after this instant. Required for auto-spawn\n  // because everything past init is (or will be) recorded LIVE.\n  cutoffAt: string;\n};\n\n// Detached `remix history import --repo <repoRoot> --before <cutoffAt>`\n// invocation. Returns the spawned pid (or undefined if the kernel\n// didn't give us one yet).\n//\n// We re-invoke the SAME node binary + the SAME CLI entry script that's\n// running the parent process (`process.execPath` + `process.argv[1]`).\n// That avoids depending on `remix` being on PATH (e.g. in monorepo /\n// dev / corp-locked-down installs) and guarantees the child is the\n// same version as the parent.\n//\n// The `--before <iso>` cutoff is REQUIRED on auto-spawn: anything past\n// this instant either is or will be recorded live through `finalize_turn`,\n// so importing it as `historical` would create dashboard duplicates.\n// See file header for the cutoff semantics.\nexport function spawnHistoryImportDetached(\n  repoRoot: string,\n  options: AutoSpawnOptions,\n): AutoSpawnResult {\n  const child = spawn(\n    process.execPath,\n    [\n      process.argv[1] ?? \"remix\",\n      \"history\",\n      \"import\",\n      \"--repo\",\n      repoRoot,\n      \"--before\",\n      options.cutoffAt,\n      // Prompt text is opt-in for the manual command but we include it\n      // here on auto-spawn because the auto-spawn IS the out-of-box\n      // experience: without prompt text every historical row in the\n      // dashboard renders as \"(prompt not uploaded)\" and the feature\n      // looks broken to a first-time user.\n      \"--include-prompt-text\",\n    ],\n    {\n      detached: true,\n      stdio: \"ignore\",\n      // REMIX_HISTORY_AUTO_SPAWN tells the runner this is a background\n      // invocation so it can adjust verbosity / suppress prompts /\n      // emit machine-friendly status into the log if we ever want to.\n      env: { ...process.env, REMIX_HISTORY_AUTO_SPAWN: \"1\" },\n    },\n  );\n  child.unref();\n  return { pid: child.pid };\n}\n\nexport type AutoSpawnMarker = {\n  importedAt: string;\n  importBatchId: string;\n  importerVersion: string;\n  inserted: number;\n  skipped: number;\n  failed: number;\n  // Hard upper bound the runner applied to slice `occurredAt` for this\n  // import. Manual re-runs read this back so `remix history import`\n  // (no flags) keeps the same boundary the original auto-spawn used —\n  // we don't want a re-run to suddenly pull in turns the user already\n  // recorded live. Optional for backward compatibility with markers\n  // written by older versions; missing → \"no cutoff was applied\".\n  cutoffAt?: string | null;\n};\n\n// Called by the importer at the end of a successful run. Writes the\n// gating marker so future `collab init` calls don't re-trigger. Safe\n// to call from any `remix history import` invocation (manual or\n// auto-spawned) — the marker is purely about \"has any successful\n// import landed for this repo\".\nexport async function writeAutoSpawnMarker(\n  repoRoot: string,\n  payload: Omit<AutoSpawnMarker, \"importedAt\">,\n  repoFingerprint?: string | null,\n): Promise<void> {\n  await mkdirp(historyImportStateDir(repoRoot, repoFingerprint));\n  const marker: AutoSpawnMarker = {\n    ...payload,\n    importedAt: new Date().toISOString(),\n  };\n  await writeFile(autoSpawnMarkerPath(repoRoot, repoFingerprint), JSON.stringify(marker, null, 2), \"utf8\");\n}\n\n// Best-effort read of the marker. Returns null when the file is\n// missing, unreadable, or doesn't parse as the expected shape. Used\n// by the manual `remix history import` CLI to default `--before` to\n// the value the original auto-spawn used.\nexport function readAutoSpawnMarker(repoRoot: string, repoFingerprint?: string | null): AutoSpawnMarker | null {\n  return (\n    readMarkerAt(autoSpawnMarkerPath(repoRoot, repoFingerprint)) ??\n    readMarkerAt(fallbackRepoRootMarkerPath(repoRoot)) ??\n    readMarkerAt(legacyLocalRepoRootMarkerPath(repoRoot)) ??\n    readMarkerAt(legacyAutoSpawnMarkerPath(repoRoot))\n  );\n}\n\nfunction readMarkerAt(filePath: string): AutoSpawnMarker | null {\n  try {\n    const raw = readFileSync(filePath, \"utf8\");\n    const parsed = JSON.parse(raw) as Partial<AutoSpawnMarker>;\n    if (\n      typeof parsed.importedAt !== \"string\" ||\n      typeof parsed.importBatchId !== \"string\" ||\n      typeof parsed.importerVersion !== \"string\" ||\n      typeof parsed.inserted !== \"number\" ||\n      typeof parsed.skipped !== \"number\" ||\n      typeof parsed.failed !== \"number\"\n    ) {\n      return null;\n    }\n    return {\n      importedAt: parsed.importedAt,\n      importBatchId: parsed.importBatchId,\n      importerVersion: parsed.importerVersion,\n      inserted: parsed.inserted,\n      skipped: parsed.skipped,\n      failed: parsed.failed,\n      cutoffAt: typeof parsed.cutoffAt === \"string\" ? parsed.cutoffAt : null,\n    };\n  } catch {\n    return null;\n  }\n}\n\nasync function mkdirp(dir: string): Promise<void> {\n  try {\n    mkdirSync(dir, { recursive: true });\n  } catch {\n    // best-effort\n  }\n}\n","import pc from \"picocolors\";\nimport {\n  type AgentMemoryItem,\n  type AgentMemoryKind,\n  type AgentMemorySearchItem,\n  type AgentMemorySearchResponse,\n  type AgentMemorySummary,\n  type AgentMemoryTimelineResponse,\n  type ChangeStepDiffResponse,\n} from \"@remixhq/core\";\nimport { readCollabBinding } from \"@remixhq/core/binding\";\nimport { findGitRoot } from \"@remixhq/core/repo\";\n\nimport { createApiClient } from \"../clients/api.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { CliError } from \"../errors/cliError.js\";\nimport { ensureAuth } from \"./ensureAuth.js\";\n\ntype MemoryTarget = {\n  appId: string;\n  repoRoot: string | null;\n};\n\nasync function createMemoryApi(params: { yes: boolean; json: boolean }) {\n  await ensureAuth({ yes: params.yes, json: params.json });\n  const cfg = await resolveConfig({ yes: params.yes });\n  return createApiClient(cfg);\n}\n\nfunction unwrapResponseObject<T>(resp: any, label: string): T {\n  const obj = resp?.responseObject;\n  if (obj === undefined || obj === null) {\n    throw new CliError(typeof resp?.message === \"string\" && resp.message.trim() ? resp.message : `Missing ${label} response.`, {\n      exitCode: 1,\n    });\n  }\n  return obj as T;\n}\n\nasync function maybeFindGitRoot(cwd: string): Promise<string | null> {\n  try {\n    return await findGitRoot(cwd);\n  } catch {\n    return null;\n  }\n}\n\nasync function resolveMemoryTarget(params: { cwd: string; appId?: string | null }): Promise<MemoryTarget> {\n  const explicitAppId = params.appId?.trim();\n  if (explicitAppId) {\n    return {\n      appId: explicitAppId,\n      repoRoot: await maybeFindGitRoot(params.cwd),\n    };\n  }\n\n  const repoRoot = await findGitRoot(params.cwd);\n  const binding = await readCollabBinding(repoRoot);\n  if (!binding) {\n    throw new CliError(\"Repository is not bound to Remix.\", {\n      exitCode: 2,\n      hint: \"Run `remix collab init` in this repository, or pass `--app-id` for a direct memory read.\",\n    });\n  }\n\n  return {\n    appId: binding.currentAppId,\n    repoRoot,\n  };\n}\n\nfunction truncateText(value: string, maxChars = 180): string {\n  const normalized = value.replace(/\\s+/g, \" \").trim();\n  if (normalized.length <= maxChars) return normalized;\n  return `${normalized.slice(0, maxChars - 3)}...`;\n}\n\nfunction compactJson(value: unknown, maxChars = 180): string {\n  try {\n    return truncateText(JSON.stringify(value));\n  } catch {\n    return \"[unserializable preview]\";\n  }\n}\n\nfunction previewSummary(preview: Record<string, unknown>): string | null {\n  const candidateKeys = [\"title\", \"summary\", \"prompt\", \"assistantResponse\", \"description\", \"statusError\", \"message\"];\n  for (const key of candidateKeys) {\n    const value = preview[key];\n    if (typeof value === \"string\" && value.trim()) {\n      return truncateText(value);\n    }\n  }\n  if (Object.keys(preview).length === 0) return null;\n  return compactJson(preview);\n}\n\nfunction lineageSummary(item: AgentMemoryItem): string | null {\n  const pairs = [\n    [\"thread\", item.threadId],\n    [\"commit\", item.lineage.commitId],\n    [\"mergeRequest\", item.lineage.mergeRequestId],\n    [\"branch\", item.lineage.branch],\n  ].filter(([, value]) => typeof value === \"string\" && value);\n\n  if (pairs.length === 0) return null;\n  return pairs.map(([label, value]) => `${label}=${value}`).join(\" \");\n}\n\nfunction printMemoryItems(items: Array<AgentMemoryItem | AgentMemorySearchItem>, opts?: { includeScore?: boolean }) {\n  if (items.length === 0) {\n    console.log(pc.dim(\"No memory items found.\"));\n    return;\n  }\n\n  for (const item of items) {\n    const search = \"search\" in item ? item.search : null;\n    const score = opts?.includeScore && search ? ` score=${search.score.toFixed(4)}` : \"\";\n    console.log(\n      `${pc.bold(item.kind)}  id=${item.id}  status=${item.status ?? \"unknown\"}  createdAt=${item.createdAt}${score}`,\n    );\n    const preview = previewSummary(item.preview);\n    if (preview) console.log(`preview=${preview}`);\n    const lineage = lineageSummary(item);\n    if (lineage) console.log(lineage);\n    if (search && search.matchedOn.length > 0) console.log(`matchedOn=${search.matchedOn.join(\",\")}`);\n    console.log(\"\");\n  }\n}\n\nfunction printSummary(summary: AgentMemorySummary, target: MemoryTarget) {\n  console.log(pc.bold(\"App\"));\n  console.log(`appId=${summary.app.id}`);\n  console.log(`status=${summary.app.status ?? \"unknown\"} threadId=${summary.app.threadId ?? \"none\"}`);\n  console.log(`headCommitId=${summary.app.headCommitId ?? \"none\"} headCommitHash=${summary.app.headCommitHash ?? \"none\"}`);\n  if (target.repoRoot) console.log(`repoRoot=${target.repoRoot}`);\n\n  console.log(\"\");\n  console.log(pc.bold(\"Source\"));\n  if (!summary.source) {\n    console.log(\"none\");\n  } else {\n    console.log(`remoteUrl=${summary.source.remoteUrl ?? \"none\"}`);\n    console.log(`defaultBranch=${summary.source.defaultBranch ?? \"none\"} repoFingerprint=${summary.source.repoFingerprint ?? \"none\"}`);\n    console.log(`sourceType=${summary.source.sourceType ?? \"none\"} updatedAt=${summary.source.updatedAt}`);\n  }\n\n  console.log(\"\");\n  console.log(pc.bold(\"Counts\"));\n  console.log(\n    `collabTurns=${summary.counts.collabTurnCount} changeSteps=${summary.counts.changeStepCount} mergeRequests=${summary.counts.mergeRequestCount} reconciles=${summary.counts.reconcileCount}`,\n  );\n  console.log(\n    `openMergeRequests=${summary.counts.openMergeRequestCount} pendingChangeSteps=${summary.counts.pendingChangeStepCount} failedChangeSteps=${summary.counts.failedChangeStepCount}`,\n  );\n\n  console.log(\"\");\n  console.log(pc.bold(\"Latest Reconcile\"));\n  if (!summary.latestReconcile) {\n    console.log(\"none\");\n  } else {\n    console.log(`id=${summary.latestReconcile.id} status=${summary.latestReconcile.status ?? \"unknown\"} createdAt=${summary.latestReconcile.createdAt}`);\n  }\n\n  console.log(\"\");\n  console.log(pc.bold(\"Recent\"));\n  console.log(`collabTurns=${summary.recent.collabTurns.length}`);\n  console.log(`changeSteps=${summary.recent.changeSteps.length}`);\n  console.log(`mergeRequests=${summary.recent.mergeRequests.length}`);\n  console.log(`reconciles=${summary.recent.reconciles.length}`);\n}\n\nfunction printPagination(pagination: { limit: number; offset: number; hasMore: boolean }) {\n  console.log(pc.dim(`limit=${pagination.limit} offset=${pagination.offset} hasMore=${pagination.hasMore ? \"yes\" : \"no\"}`));\n}\n\nexport async function memorySummary(params: { cwd: string; appId?: string | null; json: boolean; yes: boolean }) {\n  const target = await resolveMemoryTarget(params);\n  const api = await createMemoryApi(params);\n  const resp = await api.getAgentMemorySummary(target.appId);\n  const result = unwrapResponseObject<AgentMemorySummary>(resp, \"agent memory summary\");\n  if (!params.json) {\n    printSummary(result, target);\n  }\n  return result;\n}\n\nexport async function memorySearch(params: {\n  cwd: string;\n  appId?: string | null;\n  threadId?: string | null;\n  query: string;\n  kinds?: AgentMemoryKind[];\n  limit?: number;\n  offset?: number;\n  createdAfter?: string | null;\n  createdBefore?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const target = await resolveMemoryTarget(params);\n  const api = await createMemoryApi(params);\n  const resp = await api.searchAgentMemory(target.appId, {\n    q: params.query,\n    threadId: params.threadId?.trim() || undefined,\n    kinds: params.kinds,\n    limit: params.limit,\n    offset: params.offset,\n    createdAfter: params.createdAfter ?? undefined,\n    createdBefore: params.createdBefore ?? undefined,\n  });\n  const result = unwrapResponseObject<AgentMemorySearchResponse>(resp, \"agent memory search\");\n  if (!params.json) {\n    printMemoryItems(result.items, { includeScore: true });\n    printPagination(result.pagination);\n  }\n  return result;\n}\n\nexport async function memoryTimeline(params: {\n  cwd: string;\n  appId?: string | null;\n  threadId?: string | null;\n  kinds?: AgentMemoryKind[];\n  limit?: number;\n  offset?: number;\n  createdAfter?: string | null;\n  createdBefore?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const target = await resolveMemoryTarget(params);\n  const api = await createMemoryApi(params);\n  const resp = await api.listAgentMemoryTimeline(target.appId, {\n    kinds: params.kinds,\n    threadId: params.threadId?.trim() || undefined,\n    limit: params.limit,\n    offset: params.offset,\n    createdAfter: params.createdAfter ?? undefined,\n    createdBefore: params.createdBefore ?? undefined,\n  });\n  const result = unwrapResponseObject<AgentMemoryTimelineResponse>(resp, \"agent memory timeline\");\n  if (!params.json) {\n    printMemoryItems(result.items);\n    printPagination(result.pagination);\n  }\n  return result;\n}\n\nexport async function memoryDiff(params: {\n  cwd: string;\n  appId?: string | null;\n  changeStepId: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const target = await resolveMemoryTarget(params);\n  const api = await createMemoryApi(params);\n  const resp = await api.getChangeStepDiff(target.appId, params.changeStepId);\n  const result = unwrapResponseObject<ChangeStepDiffResponse>(resp, \"change step diff\");\n  if (!params.json) {\n    console.log(pc.bold(\"Change Step Diff\"));\n    console.log(`changeStepId=${result.changeStepId} appId=${result.appId}`);\n    console.log(`diffSha256=${result.diffSha256} encoding=${result.encoding} contentType=${result.contentType}`);\n    console.log(\"\");\n    process.stdout.write(result.diff.endsWith(\"\\n\") ? result.diff : `${result.diff}\\n`);\n  }\n  return result;\n}\n","import pc from \"picocolors\";\nimport type { AppThread } from \"@remixhq/core\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { createAuthedApi, isBackendNotFound, loadBindingContext, unwrapResponseObject } from \"./serviceHelpers.js\";\n\nasync function resolveAppTarget(params: {\n  cwd: string;\n  appId?: string | null;\n  yes: boolean;\n  json: boolean;\n}): Promise<{ appId: string; api: Awaited<ReturnType<typeof createAuthedApi>> }> {\n  const api = await createAuthedApi(params);\n  const explicit = params.appId?.trim();\n  if (explicit) return { appId: explicit, api };\n  const { binding } = await loadBindingContext(params.cwd);\n  if (!binding) {\n    throw new CliError(\"Repository is not bound to Remix and no app id was provided.\", {\n      exitCode: 2,\n      hint: \"Run from a bound repository or pass `--app-id`.\",\n    });\n  }\n  return { appId: binding.currentAppId, api };\n}\n\nfunction printThread(thread: AppThread): void {\n  const labels = [\n    thread.isMain ? \"Main/default\" : null,\n    thread.isArchived ? \"archived\" : null,\n    thread.originProvider ? `provider=${thread.originProvider}` : null,\n  ].filter(Boolean);\n  console.log(`${thread.id}  ${thread.title ?? \"New chat\"}${labels.length ? `  [${labels.join(\", \")}]` : \"\"}`);\n}\n\nexport async function chatsList(params: {\n  cwd: string;\n  appId?: string | null;\n  includeArchived?: boolean;\n  json: boolean;\n  yes: boolean;\n}) {\n  const { appId, api } = await resolveAppTarget(params);\n  let value: AppThread[] | {\n    items?: AppThread[];\n    lastOpenedThreadId?: string | null;\n    lastThreadId?: string | null;\n  };\n  try {\n    const response = await api.listAppThreads(appId);\n    value = unwrapResponseObject(response, \"app chats\");\n  } catch (error) {\n    if (!isBackendNotFound(error)) throw error;\n    return {\n      appId,\n      items: [],\n      lastOpenedThreadId: null,\n      supported: false,\n    };\n  }\n  const allItems = Array.isArray(value) ? value : value.items ?? [];\n  const items = params.includeArchived ? allItems : allItems.filter((thread) => !thread.isArchived);\n  const result = {\n    appId,\n    items,\n    lastOpenedThreadId: Array.isArray(value)\n      ? null\n      : value.lastOpenedThreadId ?? value.lastThreadId ?? null,\n    supported: true,\n  };\n  if (!params.json) {\n    if (items.length === 0) console.log(pc.dim(\"No chats found.\"));\n    else items.forEach(printThread);\n  }\n  return result;\n}\n\nexport async function chatsCreate(params: {\n  cwd: string;\n  appId?: string | null;\n  title?: string | null;\n  json: boolean;\n  yes: boolean;\n}) {\n  const { appId, api } = await resolveAppTarget(params);\n  const thread = unwrapResponseObject<AppThread>(\n    await api.createAppThread(appId, params.title?.trim() ? { title: params.title.trim() } : {}),\n    \"created app chat\",\n  );\n  if (!params.json) console.log(pc.green(`Created chat. id=${thread.id} title=${thread.title ?? \"New chat\"}`));\n  return thread;\n}\n\nexport async function chatsRename(params: {\n  cwd: string;\n  appId?: string | null;\n  threadId: string;\n  title: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const { appId, api } = await resolveAppTarget(params);\n  const title = params.title.trim();\n  if (!title) throw new CliError(\"Chat title is required.\", { exitCode: 2 });\n  const thread = unwrapResponseObject<AppThread>(\n    await api.renameAppThread(appId, params.threadId, { title }),\n    \"renamed app chat\",\n  );\n  if (!params.json) console.log(pc.green(`Renamed chat. id=${thread.id} title=${thread.title ?? \"\"}`));\n  return thread;\n}\n\nexport async function chatsArchive(params: {\n  cwd: string;\n  appId?: string | null;\n  threadId: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const { appId, api } = await resolveAppTarget(params);\n  const thread = unwrapResponseObject<AppThread>(\n    await api.archiveAppThread(appId, params.threadId),\n    \"archived app chat\",\n  );\n  if (!params.json) console.log(pc.green(`Archived chat. id=${thread.id}`));\n  return thread;\n}\n\nexport async function chatsOpen(params: {\n  cwd: string;\n  appId?: string | null;\n  threadId: string;\n  json: boolean;\n  yes: boolean;\n}) {\n  const { appId, api } = await resolveAppTarget(params);\n  const result = unwrapResponseObject<{ appId: string; threadId: string }>(\n    await api.openAppThread(appId, params.threadId),\n    \"opened app chat\",\n  );\n  if (!params.json) console.log(pc.green(`Opened chat. id=${result.threadId}`));\n  return result;\n}\n","import pc from \"picocolors\";\n\nimport {\n  type JsonRecord,\n  createAuthedApi,\n  loadBindingContext,\n  normalizePagination,\n  resolveAppId,\n  resolveOrganizationId,\n  resolveProjectId,\n  unwrapResponseObject,\n} from \"./serviceHelpers.js\";\n\ntype SuggestionResult = {\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\nexport type ListOrganizationsResult = {\n  organizations: JsonRecord[];\n} & SuggestionResult;\n\nexport type GetOrganizationResult = {\n  organization: JsonRecord;\n} & SuggestionResult;\n\nexport type ListProjectsResult = {\n  projects: JsonRecord[];\n  organizationId: string | null;\n} & SuggestionResult;\n\nexport type GetProjectResult = {\n  project: JsonRecord;\n} & SuggestionResult;\n\nexport type ListAppsResult = {\n  apps: JsonRecord[];\n  pagination: { limit: number; offset: number; hasMore: boolean };\n  filters: {\n    projectId: string | null;\n    organizationId: string | null;\n    ownership: \"mine\" | \"shared\" | \"all\";\n    accessScope: \"all_readable\" | \"explicit_member\";\n    createdBy: string | null;\n    forked: \"only\" | \"exclude\" | \"all\";\n  };\n} & SuggestionResult;\n\nexport type GetAppResult = {\n  app: JsonRecord;\n} & SuggestionResult;\n\nexport type OpenAppResult = {\n  open: JsonRecord;\n} & SuggestionResult;\n\nfunction printWarnings(warnings: string[]) {\n  for (const warning of warnings) {\n    console.log(pc.yellow(warning));\n  }\n}\n\nfunction printEntityList(items: JsonRecord[], labels: { kind: string; primaryField?: string }) {\n  if (items.length === 0) {\n    console.log(pc.dim(`No ${labels.kind} found.`));\n    return;\n  }\n  for (const item of items) {\n    const id = typeof item.id === \"string\" ? item.id : \"unknown\";\n    const nameField = labels.primaryField ?? \"name\";\n    const name = typeof item[nameField] === \"string\" ? String(item[nameField]) : typeof item.name === \"string\" ? item.name : \"(unnamed)\";\n    const extras = [\n      typeof item.status === \"string\" ? `status=${item.status}` : null,\n      typeof item.organizationId === \"string\" ? `organizationId=${item.organizationId}` : null,\n      typeof item.projectId === \"string\" ? `projectId=${item.projectId}` : null,\n      typeof item.visibility === \"string\" ? `visibility=${item.visibility}` : null,\n    ].filter(Boolean);\n    console.log(`${id}  ${name}${extras.length ? `  ${extras.join(\"  \")}` : \"\"}`);\n  }\n}\n\nfunction printSingleEntity(kind: string, value: JsonRecord) {\n  console.log(pc.bold(kind));\n  for (const [key, raw] of Object.entries(value)) {\n    if (raw === null || raw === undefined) continue;\n    if (typeof raw === \"object\") {\n      console.log(`${key}=${JSON.stringify(raw)}`);\n    } else {\n      console.log(`${key}=${String(raw)}`);\n    }\n  }\n}\n\nexport async function listOrganizations(params: { json: boolean; yes: boolean }): Promise<ListOrganizationsResult> {\n  const api = await createAuthedApi(params);\n  const organizations = unwrapResponseObject<JsonRecord[]>(await api.listOrganizations(), \"organizations\");\n  const result: ListOrganizationsResult = {\n    organizations,\n    warnings: [],\n    suggestedNextSteps: organizations.length\n      ? [\"Run `remix directory organizations get <organizationId>` or `remix directory projects list --organization-id <organizationId>` next.\"]\n      : [],\n  };\n  if (!params.json) {\n    printEntityList(result.organizations, { kind: \"organizations\" });\n  }\n  return result;\n}\n\nexport async function getOrganization(params: {\n  organizationId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<GetOrganizationResult> {\n  const api = await createAuthedApi(params);\n  const organizationId = await resolveOrganizationId(api, params);\n  const organization = unwrapResponseObject<JsonRecord>(await api.getOrganization(organizationId), \"organization\");\n  const result: GetOrganizationResult = {\n    organization,\n    warnings: [],\n    suggestedNextSteps: [\"Run `remix directory projects list --organization-id <organizationId>` to inspect that organization's projects.\"],\n  };\n  if (!params.json) {\n    printSingleEntity(\"Organization\", result.organization);\n  }\n  return result;\n}\n\nexport async function listProjects(params: {\n  organizationId?: string | null;\n  clientAppId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<ListProjectsResult> {\n  const api = await createAuthedApi(params);\n  const bindingContext = await loadBindingContext(params.cwd);\n  const organizationId =\n    params.organizationId !== undefined && params.organizationId !== null\n      ? await resolveOrganizationId(api, { organizationId: params.organizationId, cwd: params.cwd })\n      : null;\n  const projects = unwrapResponseObject<JsonRecord[]>(\n    await api.listProjects({\n      organizationId: organizationId ?? undefined,\n      clientAppId: params.clientAppId ?? undefined,\n    }),\n    \"projects\",\n  );\n  const result: ListProjectsResult = {\n    projects,\n    organizationId,\n    warnings: [],\n    suggestedNextSteps: projects.length\n      ? [\"Run `remix directory projects get <projectId>` or `remix directory apps list --project-id <projectId>` for one project.\"]\n      : [],\n  };\n  if (!params.json) {\n    if (bindingContext.repoRoot) {\n      console.log(pc.dim(`repoRoot=${bindingContext.repoRoot}`));\n    }\n    printEntityList(result.projects, { kind: \"projects\" });\n  }\n  return result;\n}\n\nexport async function getProject(params: {\n  projectId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<GetProjectResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveProjectId(api, params);\n  const project = unwrapResponseObject<JsonRecord>(await api.getProject(target.projectId), \"project\");\n  const result: GetProjectResult = {\n    project,\n    warnings: [],\n    suggestedNextSteps: [\"Run `remix directory apps list --project-id <projectId>` to inspect the apps under this project.\"],\n  };\n  if (!params.json) {\n    printSingleEntity(\"Project\", result.project);\n  }\n  return result;\n}\n\nexport async function listApps(params: {\n  projectId?: string | null;\n  organizationId?: string | null;\n  ownership?: \"mine\" | \"shared\" | \"all\";\n  accessScope?: \"all_readable\" | \"explicit_member\";\n  createdBy?: string | null;\n  forked?: \"only\" | \"exclude\" | \"all\";\n  status?: \"active\" | \"archived\" | \"all\";\n  limit?: number;\n  offset?: number;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<ListAppsResult> {\n  const api = await createAuthedApi(params);\n  const pagination = normalizePagination(params);\n  const apps = unwrapResponseObject<JsonRecord[]>(\n    await api.listApps({\n      projectId: params.projectId ?? undefined,\n      organizationId: params.organizationId ?? undefined,\n      ownership: params.ownership ?? \"all\",\n      accessScope: params.accessScope ?? \"explicit_member\",\n      createdBy: params.createdBy ?? undefined,\n      forked: params.forked ?? undefined,\n      status: params.status ?? undefined,\n      limit: pagination.limit + 1,\n      offset: pagination.offset,\n    }),\n    \"apps\",\n  );\n  const result: ListAppsResult = {\n    apps: apps.slice(0, pagination.limit),\n    pagination: {\n      ...pagination,\n      hasMore: apps.length > pagination.limit,\n    },\n    filters: {\n      projectId: params.projectId ?? null,\n      organizationId: params.organizationId ?? null,\n      ownership: params.ownership ?? \"all\",\n      accessScope: params.accessScope ?? \"explicit_member\",\n      createdBy: params.createdBy ?? null,\n      forked: params.forked ?? \"all\",\n    },\n    warnings: [],\n    suggestedNextSteps:\n      apps.length > pagination.limit\n        ? [`Re-run with --offset ${pagination.offset + pagination.limit} to load the next page.`]\n        : [\"Run `remix directory apps get <appId>` or `remix ops overview --app-id <appId>` for a chosen app.\"],\n  };\n  if (!params.json) {\n    printEntityList(result.apps, { kind: \"apps\" });\n    console.log(pc.dim(`limit=${result.pagination.limit} offset=${result.pagination.offset} hasMore=${result.pagination.hasMore ? \"yes\" : \"no\"}`));\n  }\n  return result;\n}\n\nexport async function getApp(params: {\n  appId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<GetAppResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const app = unwrapResponseObject<JsonRecord>(await api.getApp(target.appId), \"app\");\n  const result: GetAppResult = {\n    app,\n    warnings: [],\n    suggestedNextSteps: [\"Run `remix ops overview --app-id <appId>` or `remix access debug --scope app <appId>` next.\"],\n  };\n  if (!params.json) {\n    printSingleEntity(\"App\", result.app);\n  }\n  return result;\n}\n\nexport type GetAppMergePreviewResult = {\n  preview: JsonRecord;\n} & SuggestionResult;\n\n// `GET /v1/apps/:appId/merge-preview` — returns the prompt-backed change\n// steps + aggregate stats the dashboard's MergePreviewDialog renders\n// before a merge request is opened. Surfaced to the CLI so the Remix\n// Desktop can show the same review UI before calling `collab request-merge`.\nexport async function getAppMergePreview(params: {\n  appId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<GetAppMergePreviewResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const preview = unwrapResponseObject<JsonRecord>(\n    await api.getAppMergePreview(target.appId),\n    \"merge preview\",\n  );\n  const result: GetAppMergePreviewResult = {\n    preview,\n    warnings: [],\n    suggestedNextSteps: [\n      \"When eligible, run `remix collab request-merge --cwd <repo>` to open a merge request.\",\n    ],\n  };\n  if (!params.json) {\n    printSingleEntity(\"Merge preview\", result.preview);\n  }\n  return result;\n}\n\nexport type ForkAppResult = {\n  app: JsonRecord;\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\n// Server-only fork: hits the existing `POST /v1/apps/:appId/fork`\n// endpoint and returns the new app row. Unlike `collab remix`, this\n// does NOT materialize a local checkout — it's the building block for\n// flows (like the desktop's \"safe remix\" invite) that need a fresh\n// appId but will let the invitee do their own checkout later.\nexport async function forkApp(params: {\n  appId?: string | null;\n  name?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<ForkAppResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const payload = params.name ? { name: params.name } : undefined;\n  const forked = unwrapResponseObject<JsonRecord>(\n    await api.forkApp(target.appId, payload),\n    \"fork\",\n  );\n  const result: ForkAppResult = {\n    app: forked,\n    warnings: [],\n    suggestedNextSteps: [],\n  };\n  if (!params.json) {\n    printSingleEntity(\"Forked app\", result.app);\n  }\n  return result;\n}\n\nexport type UpdateAppStatusResult = {\n  app: JsonRecord;\n  branchLanes?: {\n    cascadeRequested: boolean;\n    archivedAppIds: string[];\n    restoredAppIds: string[];\n    skippedAppIds: string[];\n  };\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\n// Shared backend → CLI helper. The status route is a single PATCH on\n// the app, so archive and unarchive go through here. `cascadeBranchLanes`\n// makes the backend also flip every user-scoped collab_lane that forks\n// off this app.\nexport async function updateAppStatus(params: {\n  appId?: string | null;\n  status: \"archived\" | \"ready\";\n  cascadeBranchLanes?: boolean;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<UpdateAppStatusResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const updated = unwrapResponseObject<JsonRecord & {\n    branchLanes?: UpdateAppStatusResult[\"branchLanes\"];\n  }>(\n    await api.updateAppStatus(target.appId, {\n      status: params.status,\n      cascadeBranchLanes: params.cascadeBranchLanes ?? false,\n    }),\n    \"app status\",\n  );\n  const branchLanes = updated.branchLanes;\n  const result: UpdateAppStatusResult = {\n    app: updated,\n    branchLanes,\n    warnings: [],\n    suggestedNextSteps: [],\n  };\n  if (!params.json) {\n    const verb = params.status === \"archived\" ? \"Archived\" : \"Restored\";\n    printSingleEntity(`App ${verb.toLowerCase()}`, result.app);\n    if (branchLanes?.cascadeRequested) {\n      const ids = params.status === \"archived\" ? branchLanes.archivedAppIds : branchLanes.restoredAppIds;\n      console.log(`${verb} ${ids.length} branch lane app${ids.length === 1 ? \"\" : \"s\"}.`);\n      if (branchLanes.skippedAppIds.length > 0) {\n        console.log(`Skipped ${branchLanes.skippedAppIds.length} branch lane(s) you can't manage.`);\n      }\n    }\n  }\n  return result;\n}\n\nexport async function openApp(params: {\n  appId?: string | null;\n  source: \"dashboard\" | \"remix_desktop\";\n  url?: string | null;\n  correlationId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpenAppResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const open = unwrapResponseObject<JsonRecord>(\n    await api.openApp(target.appId, {\n      source: params.source,\n      url: params.url ?? undefined,\n      correlationId: params.correlationId ?? undefined,\n    }),\n    \"app open\",\n  );\n  const result: OpenAppResult = {\n    open,\n    warnings: [],\n    suggestedNextSteps: [],\n  };\n  if (!params.json) {\n    printSingleEntity(\"App open\", result.open);\n  }\n  return result;\n}\n","import type { Command } from \"commander\";\n\nimport {\n  forkApp,\n  getApp,\n  getAppMergePreview,\n  getOrganization,\n  getProject,\n  listApps,\n  listOrganizations,\n  listProjects,\n  openApp,\n  updateAppStatus,\n} from \"../services/directory.js\";\n\nfunction parseInteger(value: string, label: string): number {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isInteger(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative integer.`);\n  }\n  return parsed;\n}\n\nfunction parseForkedFilter(value: string): \"only\" | \"exclude\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"only\" || normalized === \"exclude\" || normalized === \"all\") return normalized;\n  throw new Error(\"forked must be one of: only, exclude, all\");\n}\n\nfunction parseOwnership(value: string): \"mine\" | \"shared\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"mine\" || normalized === \"shared\" || normalized === \"all\") return normalized;\n  throw new Error(\"ownership must be one of: mine, shared, all\");\n}\n\nfunction parseAccessScope(value: string): \"all_readable\" | \"explicit_member\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"all_readable\" || normalized === \"explicit_member\") return normalized;\n  throw new Error(\"access-scope must be one of: all_readable, explicit_member\");\n}\n\nfunction parseStatusFilter(value: string): \"active\" | \"archived\" | \"all\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"active\" || normalized === \"archived\" || normalized === \"all\") return normalized;\n  throw new Error(\"status must be one of: active, archived, all\");\n}\n\nexport function registerDirectoryCommands(program: Command) {\n  const directory = program.command(\"directory\").description(\"Read organizations, projects, and apps from Remix\");\n\n  const organizations = directory.command(\"organizations\").description(\"List or fetch organizations\");\n  organizations\n    .command(\"list\")\n    .description(\"List visible organizations\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await listOrganizations({\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  organizations\n    .command(\"get [organizationId]\")\n    .description(\"Get one organization, optionally inferred from the current bound app\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (organizationId, opts) => {\n      const result = await getOrganization({\n        organizationId: organizationId ? String(organizationId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const projects = directory.command(\"projects\").description(\"List or fetch projects\");\n  projects\n    .command(\"list\")\n    .description(\"List projects, optionally filtered by organization or client app\")\n    .option(\"--organization-id <id>\", \"Filter projects by organization id\")\n    .option(\"--client-app-id <id>\", \"Filter projects by client app id\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await listProjects({\n        organizationId: opts.organizationId ? String(opts.organizationId) : null,\n        clientAppId: opts.clientAppId ? String(opts.clientAppId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  projects\n    .command(\"get [projectId]\")\n    .description(\"Get one project, optionally inferred from the current bound app\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (projectId, opts) => {\n      const result = await getProject({\n        projectId: projectId ? String(projectId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const apps = directory.command(\"apps\").description(\"List or fetch apps\");\n  apps\n    .command(\"list\")\n    .description(\"List apps with optional filters and pagination\")\n    .option(\"--project-id <id>\", \"Filter apps by project id\")\n    .option(\"--organization-id <id>\", \"Filter apps by organization id\")\n    .option(\"--ownership <mode>\", \"Ownership filter (mine|shared|all)\", parseOwnership, \"all\")\n    .option(\n      \"--access-scope <scope>\",\n      \"Access filter (explicit_member|all_readable). Defaults to explicit-member work-oriented discovery.\",\n      parseAccessScope,\n      \"explicit_member\",\n    )\n    .option(\"--created-by <id>\", \"Filter by app creator (`me` or a user id)\")\n    .option(\"--forked <mode>\", \"Fork filter (only|exclude|all)\", parseForkedFilter, \"all\")\n    .option(\n      \"--status <state>\",\n      \"Status filter (active|archived|all). Defaults to active.\",\n      parseStatusFilter,\n      \"active\",\n    )\n    .option(\"--limit <n>\", \"Maximum number of apps\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await listApps({\n        projectId: opts.projectId ? String(opts.projectId) : null,\n        organizationId: opts.organizationId ? String(opts.organizationId) : null,\n        ownership: parseOwnership(String(opts.ownership ?? \"all\")),\n        accessScope: parseAccessScope(String(opts.accessScope ?? \"explicit_member\")),\n        createdBy: opts.createdBy ? String(opts.createdBy) : null,\n        forked: parseForkedFilter(String(opts.forked ?? \"all\")),\n        status: parseStatusFilter(String(opts.status ?? \"active\")),\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"get [appId]\")\n    .description(\"Get one app, optionally inferred from the current bound app\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await getApp({\n        appId: appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"merge-preview [appId]\")\n    .description(\"Preview prompt-backed change steps that a merge request would include\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await getAppMergePreview({\n        appId: appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"open [appId]\")\n    .description(\"Report that an app was opened in Dashboard or Remix Desktop\")\n    .option(\"--source <source>\", \"Open source (dashboard|remix_desktop)\", \"dashboard\")\n    .option(\"--url <url>\", \"App URL that was opened\")\n    .option(\"--correlation-id <id>\", \"Optional client event correlation id\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const source = String(opts.source);\n      if (source !== \"dashboard\" && source !== \"remix_desktop\") {\n        throw new Error(\"source must be one of: dashboard, remix_desktop\");\n      }\n      const result = await openApp({\n        appId: appId ? String(appId) : null,\n        source,\n        url: opts.url ? String(opts.url) : null,\n        correlationId: opts.correlationId ? String(opts.correlationId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"fork [appId]\")\n    .description(\"Fork an app on the backend without checking out locally\")\n    .option(\"--name <name>\", \"Optional name for the new remix\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await forkApp({\n        appId: appId ? String(appId) : null,\n        name: opts.name ? String(opts.name) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"archive [appId]\")\n    .description(\"Archive an app (and optionally every branch lane forked off it)\")\n    .option(\n      \"--cascade-branch-lanes\",\n      \"Also archive every user-scoped collab lane whose upstream is this app\",\n      false,\n    )\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await updateAppStatus({\n        appId: appId ? String(appId) : null,\n        status: \"archived\",\n        cascadeBranchLanes: Boolean(opts.cascadeBranchLanes),\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  apps\n    .command(\"unarchive [appId]\")\n    .description(\"Restore a previously archived app (and optionally its branch lanes)\")\n    .option(\n      \"--cascade-branch-lanes\",\n      \"Also restore every user-scoped collab lane whose upstream is this app\",\n      false,\n    )\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await updateAppStatus({\n        appId: appId ? String(appId) : null,\n        status: \"ready\",\n        cascadeBranchLanes: Boolean(opts.cascadeBranchLanes),\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import type { ApiClient, AppContext, InvitationRecord } from \"@remixhq/core\";\nimport pc from \"picocolors\";\n\nimport {\n  type JsonRecord,\n  buildEffectiveAppAccess,\n  createAccessDeniedError,\n  createAuthedApi,\n  isBackendForbidden,\n  isBackendNotFound,\n  loadBindingContext,\n  makeNotBoundError,\n  unwrapResponseObject,\n} from \"./serviceHelpers.js\";\n\ntype ScopeType = \"organization\" | \"project\" | \"app\";\ntype PageInfo = { limit: number; offset: number; hasMore: boolean };\ntype PagedItems<T> = { items: T[]; pageInfo: PageInfo };\n\nconst MEMBERSHIP_PAGE_SIZE = 100;\n\nexport type AccessDebugResult = {\n  viewer: JsonRecord;\n  scope: { scopeType: ScopeType; targetId: string };\n  entities: { organization: JsonRecord | null; project: JsonRecord | null; app: JsonRecord | null };\n  binding: { repoRoot: string | null; binding: JsonRecord | null };\n  access: {\n    appContext: AppContext | null;\n    viewerMember: JsonRecord | null;\n    viewerProjectMember: JsonRecord | null;\n    inviteForViewerEmail: InvitationRecord | null;\n    effectiveAppAccess: (ReturnType<typeof buildEffectiveAppAccess> & JsonRecord) | null;\n  };\n  members: JsonRecord[];\n  membersPageInfo: PageInfo;\n  invites: InvitationRecord[];\n  invitesPageInfo: PageInfo;\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\nasync function resolveScopeTarget(\n  api: ApiClient,\n  params: { scope: ScopeType; targetId?: string | null; cwd?: string },\n): Promise<{ scopeType: ScopeType; targetId: string; repoRoot: string | null }> {\n  const explicitTargetId = params.targetId?.trim();\n  const bindingContext = await loadBindingContext(params.cwd);\n  if (explicitTargetId) {\n    return {\n      scopeType: params.scope,\n      targetId: explicitTargetId,\n      repoRoot: bindingContext.repoRoot,\n    };\n  }\n  if (!bindingContext.binding) {\n    throw makeNotBoundError(\"Scope target was not provided and the current repository is not bound to Remix.\");\n  }\n  if (params.scope === \"app\") {\n    return {\n      scopeType: \"app\",\n      targetId: bindingContext.binding.currentAppId,\n      repoRoot: bindingContext.repoRoot,\n    };\n  }\n  const appContext = unwrapResponseObject<AppContext>(await api.getAppContext(bindingContext.binding.currentAppId), \"bound app context\");\n  if (params.scope === \"project\") {\n    if (!appContext.readableScopes.project) {\n      throw createAccessDeniedError(\n        \"The bound app's project is not readable to the current user.\",\n        \"Use `--scope app` for app-level diagnostics, or pass an explicit readable project id.\",\n      );\n    }\n    return {\n      scopeType: \"project\",\n      targetId: appContext.projectId,\n      repoRoot: bindingContext.repoRoot,\n    };\n  }\n  if (!appContext.readableScopes.organization) {\n    throw createAccessDeniedError(\n      \"The bound app's organization is not readable to the current user.\",\n      \"Use `--scope app` or `--scope project` for narrower diagnostics, or pass an explicit readable organization id.\",\n    );\n  }\n  return {\n    scopeType: \"organization\",\n    targetId: appContext.organizationId,\n    repoRoot: bindingContext.repoRoot,\n  };\n}\n\nasync function getScopeEntity(api: ApiClient, scopeType: ScopeType, targetId: string) {\n  if (scopeType === \"organization\") {\n    return {\n      organization: unwrapResponseObject<JsonRecord>(await api.getOrganization(targetId), \"organization\"),\n      project: null,\n      app: null,\n    };\n  }\n  if (scopeType === \"project\") {\n    const project = unwrapResponseObject<JsonRecord>(await api.getProject(targetId), \"project\");\n    const organizationId = typeof project.organizationId === \"string\" ? project.organizationId : null;\n    return {\n      organization:\n        organizationId == null ? null : unwrapResponseObject<JsonRecord>(await api.getOrganization(organizationId), \"organization\"),\n      project,\n      app: null,\n    };\n  }\n  const app = unwrapResponseObject<JsonRecord>(await api.getApp(targetId), \"app\");\n  const projectId = typeof app.projectId === \"string\" ? app.projectId : null;\n  const project = projectId == null ? null : unwrapResponseObject<JsonRecord>(await api.getProject(projectId), \"project\");\n  const organizationId = typeof project?.organizationId === \"string\" ? project.organizationId : null;\n  return {\n    organization:\n      organizationId == null ? null : unwrapResponseObject<JsonRecord>(await api.getOrganization(organizationId), \"organization\"),\n    project,\n    app,\n  };\n}\n\nasync function listMembersForScope(api: ApiClient, scopeType: ScopeType, targetId: string, params?: { limit?: number; offset?: number }) {\n  if (scopeType === \"organization\") {\n    return unwrapResponseObject<JsonRecord[]>(await api.listOrganizationMembers(targetId, params), \"organization members\");\n  }\n  if (scopeType === \"project\") {\n    return unwrapResponseObject<JsonRecord[]>(await api.listProjectMembers(targetId, params), \"project members\");\n  }\n  return unwrapResponseObject<JsonRecord[]>(await api.listAppMembers(targetId, params), \"app members\");\n}\n\nasync function listInvitesForScope(\n  api: ApiClient,\n  scopeType: ScopeType,\n  targetId: string,\n  params?: { limit?: number; offset?: number },\n): Promise<InvitationRecord[]> {\n  if (scopeType === \"organization\") {\n    return unwrapResponseObject<InvitationRecord[]>(await api.listOrganizationInvites(targetId, params), \"organization invites\");\n  }\n  if (scopeType === \"project\") {\n    return unwrapResponseObject<InvitationRecord[]>(await api.listProjectInvites(targetId, params), \"project invites\");\n  }\n  return unwrapResponseObject<InvitationRecord[]>(await api.listAppInvites(targetId, params), \"app invites\");\n}\n\nasync function loadFirstPageSample<T>(fetchPage: (limit: number, offset: number) => Promise<T[]>): Promise<PagedItems<T>> {\n  const items = await fetchPage(MEMBERSHIP_PAGE_SIZE, 0);\n  const hasMore = items.length < MEMBERSHIP_PAGE_SIZE ? false : (await fetchPage(1, MEMBERSHIP_PAGE_SIZE)).length > 0;\n  return {\n    items,\n    pageInfo: {\n      limit: MEMBERSHIP_PAGE_SIZE,\n      offset: 0,\n      hasMore,\n    },\n  };\n}\n\nfunction emptyFirstPageSample<T>(): PagedItems<T> {\n  return {\n    items: [],\n    pageInfo: {\n      limit: MEMBERSHIP_PAGE_SIZE,\n      offset: 0,\n      hasMore: false,\n    },\n  };\n}\n\nfunction getSelfMember(meId: string | null, members: JsonRecord[]) {\n  return meId == null ? null : members.find((member) => member.userId === meId || member.user_id === meId) ?? null;\n}\n\nasync function findSelfMemberForScope(api: ApiClient, scopeType: ScopeType, targetId: string, meId: string | null): Promise<JsonRecord | null> {\n  if (meId == null) return null;\n  let offset = 0;\n  for (;;) {\n    const members = await listMembersForScope(api, scopeType, targetId, { limit: MEMBERSHIP_PAGE_SIZE, offset });\n    const match = getSelfMember(meId, members);\n    if (match) return match;\n    if (members.length < MEMBERSHIP_PAGE_SIZE) return null;\n    offset += MEMBERSHIP_PAGE_SIZE;\n  }\n}\n\nasync function findPendingInviteForEmailForScope(\n  api: ApiClient,\n  scopeType: ScopeType,\n  targetId: string,\n  email: string | null,\n): Promise<InvitationRecord | null> {\n  if (email == null) return null;\n  let offset = 0;\n  for (;;) {\n    const invites = await listInvitesForScope(api, scopeType, targetId, { limit: MEMBERSHIP_PAGE_SIZE, offset });\n    const match = invites.find((invite) => invite.email.toLowerCase() === email && invite.state === \"pending\") ?? null;\n    if (match) return match;\n    if (invites.length < MEMBERSHIP_PAGE_SIZE) return null;\n    offset += MEMBERSHIP_PAGE_SIZE;\n  }\n}\n\nfunction printWarnings(warnings: string[]) {\n  for (const warning of warnings) {\n    console.log(pc.yellow(warning));\n  }\n}\n\nfunction buildScopedCommandSuggestion(params: {\n  command: \"members\" | \"invites\";\n  scopeType: ScopeType;\n  targetId: string;\n  pageInfo: PageInfo;\n}): string {\n  const nextOffset = params.pageInfo.offset + params.pageInfo.limit;\n  return `Use \\`remix collab ${params.command} list --scope ${params.scopeType} --target-id ${params.targetId} --offset ${nextOffset}\\` to inspect the next page for this exact scope.`;\n}\n\nfunction printMemberPreview(members: JsonRecord[]) {\n  if (members.length === 0) {\n    console.log(pc.dim(\"No members loaded in the first-page sample.\"));\n    return;\n  }\n  for (const member of members.slice(0, 10)) {\n    const userId = typeof member.userId === \"string\" ? member.userId : typeof member.user_id === \"string\" ? member.user_id : \"unknown\";\n    const email =\n      typeof member.userEmail === \"string\"\n        ? member.userEmail\n        : typeof member.email === \"string\"\n          ? member.email\n          : typeof member.user_email === \"string\"\n            ? member.user_email\n            : \"unknown\";\n    const role = typeof member.role === \"string\" ? member.role : \"unknown\";\n    console.log(`${userId}  ${role}  ${email}`);\n  }\n  if (members.length > 10) {\n    console.log(pc.dim(`Showing first 10 of ${members.length} sampled members.`));\n  }\n}\n\nexport async function accessDebug(params: {\n  scope?: ScopeType | null;\n  targetId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<AccessDebugResult> {\n  const api = await createAuthedApi(params);\n  const target = await resolveScopeTarget(api, {\n    scope: params.scope ?? \"app\",\n    targetId: params.targetId,\n    cwd: params.cwd,\n  });\n  const bindingContext = await loadBindingContext(params.cwd);\n  const viewer = unwrapResponseObject<JsonRecord>(await api.getMe(), \"current user\");\n  const viewerId = typeof viewer.id === \"string\" ? viewer.id : null;\n  const viewerEmail = typeof viewer.email === \"string\" ? viewer.email.toLowerCase() : null;\n  const warnings = [...(bindingContext.binding ? [] : [\"No local Remix binding was detected for the provided cwd.\"])];\n\n  let entities: { organization: JsonRecord | null; project: JsonRecord | null; app: JsonRecord | null };\n  let appContext: AppContext | null = null;\n  let membersPage: PagedItems<JsonRecord> = emptyFirstPageSample();\n  let invitesPage: PagedItems<InvitationRecord> = emptyFirstPageSample();\n  let viewerMember: JsonRecord | null = null;\n  let viewerProjectMember: JsonRecord | null = null;\n  let inviteForViewerEmail: InvitationRecord | null = null;\n  let effectiveAppAccess: (ReturnType<typeof buildEffectiveAppAccess> & JsonRecord) | null = null;\n\n  if (target.scopeType !== \"app\") {\n    [entities, membersPage, invitesPage] = await Promise.all([\n      getScopeEntity(api, target.scopeType, target.targetId),\n      loadFirstPageSample((limit, offset) => listMembersForScope(api, target.scopeType, target.targetId, { limit, offset })),\n      loadFirstPageSample((limit, offset) => listInvitesForScope(api, target.scopeType, target.targetId, { limit, offset })),\n    ]);\n    viewerMember = await findSelfMemberForScope(api, target.scopeType, target.targetId, viewerId);\n    inviteForViewerEmail = await findPendingInviteForEmailForScope(api, target.scopeType, target.targetId, viewerEmail);\n  } else {\n    const [app, loadedAppContext] = await Promise.all([\n      unwrapResponseObject<JsonRecord>(await api.getApp(target.targetId), \"app\"),\n      unwrapResponseObject<AppContext>(await api.getAppContext(target.targetId), \"app context\"),\n    ]);\n    appContext = loadedAppContext;\n    entities = { organization: null, project: null, app };\n\n    if (appContext.readableScopes.project) {\n      try {\n        entities.project = unwrapResponseObject<JsonRecord>(await api.getProject(appContext.projectId), \"project\");\n      } catch (error) {\n        if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n        warnings.push(\"The app is readable, but its project/workspace metadata is not currently readable to the current user.\");\n      }\n    } else {\n      warnings.push(\"The app is readable, but its project/workspace is not readable to the current user.\");\n    }\n\n    if (appContext.readableScopes.organization) {\n      try {\n        entities.organization = unwrapResponseObject<JsonRecord>(await api.getOrganization(appContext.organizationId), \"organization\");\n      } catch (error) {\n        if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n        warnings.push(\"The app is readable, but its organization metadata is not currently readable to the current user.\");\n      }\n    } else {\n      warnings.push(\"The app's organization is not readable to the current user.\");\n    }\n\n    effectiveAppAccess = {\n      ...buildEffectiveAppAccess({\n        directAppRole: appContext.roles.appRole,\n        projectRole: appContext.roles.projectRole,\n      }),\n      accessPath: appContext.accessPath,\n      readableScopes: appContext.readableScopes,\n      visibility: appContext.visibility,\n      organizationRole: appContext.roles.organizationRole ?? null,\n    };\n\n    if (appContext.capabilities.canReadWorkflow) {\n      membersPage = await loadFirstPageSample((limit, offset) => listMembersForScope(api, \"app\", target.targetId, { limit, offset }));\n      viewerMember = await findSelfMemberForScope(api, \"app\", target.targetId, viewerId);\n      if (appContext.readableScopes.project) {\n        viewerProjectMember = await findSelfMemberForScope(api, \"project\", appContext.projectId, viewerId);\n      }\n      try {\n        invitesPage = await loadFirstPageSample((limit, offset) => listInvitesForScope(api, \"app\", target.targetId, { limit, offset }));\n        inviteForViewerEmail = await findPendingInviteForEmailForScope(api, \"app\", target.targetId, viewerEmail);\n      } catch (error) {\n        if (!isBackendForbidden(error) && !isBackendNotFound(error)) throw error;\n        warnings.push(\"App invite data is not readable to the current user, so invite diagnostics are partial.\");\n      }\n    } else {\n      warnings.push(\"The current viewer can read the app, but cannot read workflow-scoped app membership data.\");\n    }\n  }\n\n  if (membersPage.pageInfo.hasMore) {\n    warnings.push(\n      `The \\`members\\` array is a first-page sample only. ${buildScopedCommandSuggestion({\n        command: \"members\",\n        scopeType: target.scopeType,\n        targetId: target.targetId,\n        pageInfo: membersPage.pageInfo,\n      })}`,\n    );\n  }\n  if (invitesPage.pageInfo.hasMore) {\n    warnings.push(\n      `The \\`invites\\` array is a first-page sample only. ${buildScopedCommandSuggestion({\n        command: \"invites\",\n        scopeType: target.scopeType,\n        targetId: target.targetId,\n        pageInfo: invitesPage.pageInfo,\n      })}`,\n    );\n  }\n\n  const result: AccessDebugResult = {\n    viewer,\n    scope: {\n      scopeType: target.scopeType,\n      targetId: target.targetId,\n    },\n    entities,\n    binding: {\n      repoRoot: bindingContext.repoRoot,\n      binding: bindingContext.binding,\n    },\n    access: {\n      appContext,\n      viewerMember,\n      viewerProjectMember,\n      inviteForViewerEmail,\n      effectiveAppAccess: effectiveAppAccess ?? null,\n    },\n    members: membersPage.items,\n    membersPageInfo: membersPage.pageInfo,\n    invites: invitesPage.items,\n    invitesPageInfo: invitesPage.pageInfo,\n    warnings,\n    suggestedNextSteps: inviteForViewerEmail\n      ? [\"A pending invite exists for the current viewer email. Run `remix collab invites accept <token>` if this viewer should accept it.\"]\n      : target.scopeType === \"app\"\n        ? [\"Use `access.appContext` and `access.effectiveAppAccess` together to explain app visibility versus workspace-level visibility.\"]\n        : [\"Use the member and invite lists above to explain missing access, role mismatches, or stale invite state.\"],\n  };\n\n  if (!params.json) {\n    console.log(pc.bold(\"Scope\"));\n    console.log(`scope=${result.scope.scopeType} targetId=${result.scope.targetId}`);\n    console.log(`repoRoot=${result.binding.repoRoot ?? \"none\"}`);\n\n    console.log(\"\");\n    console.log(pc.bold(\"Viewer\"));\n    console.log(`id=${typeof result.viewer.id === \"string\" ? result.viewer.id : \"unknown\"} email=${typeof result.viewer.email === \"string\" ? result.viewer.email : \"unknown\"}`);\n    console.log(`viewerMemberRole=${typeof result.access.viewerMember?.role === \"string\" ? result.access.viewerMember.role : \"none\"}`);\n    console.log(`viewerProjectRole=${typeof result.access.viewerProjectMember?.role === \"string\" ? result.access.viewerProjectMember.role : \"none\"}`);\n\n    if (result.access.effectiveAppAccess) {\n      console.log(\"\");\n      console.log(pc.bold(\"Effective App Access\"));\n      console.log(\n        `effectiveRole=${result.access.effectiveAppAccess.effectiveRole ?? \"none\"} directAppRole=${\n          result.access.effectiveAppAccess.directAppRole ?? \"none\"\n        } inheritedProjectRole=${result.access.effectiveAppAccess.inheritedProjectRole ?? \"none\"} source=${\n          result.access.effectiveAppAccess.accessSource\n        }`,\n      );\n      console.log(\n        `visibility=${result.access.effectiveAppAccess.visibility ?? \"unknown\"} accessPath=${\n          result.access.effectiveAppAccess.accessPath ?? \"unknown\"\n        } canReadWorkflow=${result.access.effectiveAppAccess.canReadWorkflow ? \"yes\" : \"no\"} canEdit=${\n          result.access.effectiveAppAccess.canEdit ? \"yes\" : \"no\"\n        } canManage=${result.access.effectiveAppAccess.canManage ? \"yes\" : \"no\"}`,\n      );\n    }\n\n    console.log(\"\");\n    console.log(pc.bold(\"Member Sample\"));\n    printMemberPreview(result.members);\n    console.log(pc.dim(`limit=${result.membersPageInfo.limit} offset=${result.membersPageInfo.offset} hasMore=${result.membersPageInfo.hasMore ? \"yes\" : \"no\"}`));\n\n    console.log(\"\");\n    console.log(pc.bold(\"Invite Sample\"));\n    if (result.invites.length === 0) {\n      console.log(pc.dim(\"No invites loaded in the first-page sample.\"));\n    } else {\n      for (const invite of result.invites.slice(0, 10)) {\n        console.log(`${invite.id}  ${invite.state}  ${invite.role}  ${invite.email}`);\n      }\n      if (result.invites.length > 10) {\n        console.log(pc.dim(`Showing first 10 of ${result.invites.length} sampled invites.`));\n      }\n    }\n    console.log(pc.dim(`limit=${result.invitesPageInfo.limit} offset=${result.invitesPageInfo.offset} hasMore=${result.invitesPageInfo.hasMore ? \"yes\" : \"no\"}`));\n\n    if (result.warnings.length > 0) {\n      console.log(\"\");\n      printWarnings(result.warnings);\n    }\n  }\n\n  return result;\n}\n","import type { Command } from \"commander\";\n\nimport { accessDebug } from \"../services/access.js\";\n\nfunction parseScope(value: string): \"organization\" | \"project\" | \"app\" {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"org\" || normalized === \"organization\") return \"organization\";\n  if (normalized === \"project\") return \"project\";\n  if (normalized === \"app\") return \"app\";\n  throw new Error(\"scope must be one of: organization, project, app\");\n}\n\nexport function registerAccessCommands(program: Command) {\n  const access = program.command(\"access\").description(\"Diagnose Remix access and visibility\");\n\n  access\n    .command(\"debug [targetId]\")\n    .description(\"Explain access state for an app, project, or organization\")\n    .option(\"--scope <scope>\", \"Diagnostic scope (app|project|organization)\", parseScope, \"project\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (targetId, opts) => {\n      const result = await accessDebug({\n        scope: parseScope(String(opts.scope ?? \"project\")),\n        targetId: targetId ? String(targetId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import pc from \"picocolors\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { createAuthedApi, loadBindingContext, unwrapResponseObject, type JsonRecord } from \"./serviceHelpers.js\";\n\nexport type AgentEditResult = {\n  appId: string;\n  threadId: string;\n  queueItemId?: string | null;\n  queuePosition?: number | null;\n};\n\nexport async function agentEdit(params: {\n  cwd: string;\n  appId: string | null;\n  threadId: string | null;\n  prompt: string | null;\n  idempotencyKey?: string | null;\n  json: boolean;\n  yes: boolean;\n}): Promise<AgentEditResult> {\n  let appId = params.appId?.trim() || null;\n  let threadId = params.threadId?.trim() || null;\n  const prompt = params.prompt?.trim();\n\n  if (!prompt) throw new CliError(\"Prompt is required.\", { exitCode: 2 });\n\n  const api = await createAuthedApi(params);\n  if (!appId || !threadId) {\n    const { binding } = await loadBindingContext(params.cwd);\n    if (!appId && binding) appId = binding.currentAppId;\n    if (!threadId && binding && (!appId || appId === binding.currentAppId)) threadId = binding.threadId;\n  }\n  if (!appId) {\n    throw new CliError(\"App id was not provided and the current repository is not bound to Remix.\", { exitCode: 2 });\n  }\n  if (!threadId) {\n    const app = unwrapResponseObject<JsonRecord>(await api.getApp(appId), \"app\");\n    threadId = typeof app.threadId === \"string\" ? app.threadId : null;\n  }\n  if (!threadId) throw new CliError(\"Thread id could not be resolved for the app.\", { exitCode: 2 });\n\n  const response = await api.editAgentApp({\n    app_id: appId,\n    thread_id: threadId,\n    prompt,\n    idempotencyKey: params.idempotencyKey?.trim() || undefined,\n  });\n  const result = unwrapResponseObject<JsonRecord>(response, \"agent edit\");\n  const normalized: AgentEditResult = {\n    appId: typeof result.appId === \"string\" ? result.appId : appId,\n    threadId: typeof result.threadId === \"string\" ? result.threadId : threadId,\n    queueItemId: typeof result.queueItemId === \"string\" ? result.queueItemId : null,\n    queuePosition:\n      typeof result.queuePosition === \"number\" ? result.queuePosition : null,\n  };\n\n  if (!params.json) {\n    console.log(pc.green(\"Agent edit queued.\"));\n    if (normalized.queuePosition != null) {\n      console.log(`Queue position: ${normalized.queuePosition}`);\n    }\n  }\n\n  return normalized;\n}\n","import type { Command } from \"commander\";\n\nimport { agentEdit } from \"../services/agent.js\";\n\nasync function readStdin(): Promise<string> {\n  const chunks: Buffer[] = [];\n  for await (const chunk of process.stdin) {\n    chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n  }\n  return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport function registerAgentCommands(program: Command) {\n  const agent = program.command(\"agent\").description(\"Send prompts to the Remix cloud agent\");\n\n  agent\n    .command(\"edit\")\n    .description(\"Queue a text prompt for an existing app thread\")\n    .option(\"--cwd <path>\", \"Working directory for repository binding\")\n    .option(\"--app-id <id>\", \"Target app id\")\n    .option(\"--thread-id <id>\", \"Target thread id\")\n    .option(\"--prompt <text>\", \"Prompt text\")\n    .option(\"--prompt-stdin\", \"Read prompt text from stdin\", false)\n    .option(\"--idempotency-key <key>\", \"Optional idempotency key for retries\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const prompt = opts.promptStdin ? await readStdin() : opts.prompt ? String(opts.prompt) : null;\n      const result = await agentEdit({\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        appId: opts.appId ? String(opts.appId) : null,\n        threadId: opts.threadId ? String(opts.threadId) : null,\n        prompt,\n        idempotencyKey: opts.idempotencyKey ? String(opts.idempotencyKey) : null,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import type { AppEditQueueCancellationResult, AppEditQueuePage } from \"@remixhq/core\";\nimport pc from \"picocolors\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { isInteractive } from \"../utils/tty.js\";\nimport { type JsonRecord, createAuthedApi, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype OpsResult<T> = T & {\n  appId: string;\n  repoRoot: string | null;\n  warnings: string[];\n  suggestedNextSteps: string[];\n};\n\nfunction printPageInfo(value: JsonRecord | null) {\n  if (!value) return;\n  const limit = typeof value.limit === \"number\" ? value.limit : null;\n  const offset = typeof value.offset === \"number\" ? value.offset : null;\n  const hasMore = typeof value.hasMore === \"boolean\" ? value.hasMore : null;\n  const nextCursor = typeof value.nextCursor === \"string\" ? value.nextCursor : null;\n  const parts = [\n    limit === null ? null : `limit=${limit}`,\n    offset === null ? null : `offset=${offset}`,\n    hasMore === null ? null : `hasMore=${hasMore ? \"yes\" : \"no\"}`,\n    nextCursor === null ? null : `nextCursor=${nextCursor}`,\n  ].filter(Boolean);\n  if (parts.length > 0) {\n    console.log(pc.dim(parts.join(\" \")));\n  }\n}\n\nfunction printJsonRecord(title: string, value: JsonRecord) {\n  console.log(pc.bold(title));\n  for (const [key, raw] of Object.entries(value)) {\n    if (raw === undefined) continue;\n    if (typeof raw === \"object\" && raw !== null) {\n      console.log(`${key}=${JSON.stringify(raw)}`);\n    } else {\n      console.log(`${key}=${String(raw)}`);\n    }\n  }\n}\n\nfunction printItems(title: string, items: unknown[], selectLine: (item: JsonRecord) => string) {\n  console.log(pc.bold(title));\n  if (items.length === 0) {\n    console.log(pc.dim(\"No items found.\"));\n    return;\n  }\n  for (const item of items as JsonRecord[]) {\n    console.log(selectLine(item));\n  }\n}\n\nasync function confirmEditQueueCancellation(\n  queueItemId: string,\n  appId: string,\n  options: { yes: boolean; nonInteractive: boolean },\n): Promise<void> {\n  if (options.yes) return;\n  if (options.nonInteractive || !isInteractive()) {\n    throw new CliError(\"Edit queue cancellation needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: \"Re-run with `--yes` to confirm cancellation.\",\n    });\n  }\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: `Cancel active edit queue item ${queueItemId} for app ${appId}?`,\n      initial: false,\n    },\n    {\n      onCancel: () => {\n        throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n      },\n    },\n  );\n  if (!answer.confirmed) {\n    throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n  }\n}\n\nexport async function opsOverview(params: {\n  appId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(await api.getAppOverview(target.appId), \"app overview\");\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps: [\"Run `remix ops timeline`, `remix ops agent-runs list`, `remix ops edit-queue`, or `remix ops sandbox-status` for a narrower drill-down.\"],\n  };\n  if (!params.json) {\n    printJsonRecord(\"App Overview\", data);\n  }\n  return result;\n}\n\nexport async function opsEditQueue(params: {\n  appId?: string | null;\n  cwd?: string;\n  limit?: number;\n  offset?: number;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<AppEditQueuePage>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<AppEditQueuePage>(\n    await api.listAppEditQueue(target.appId, {\n      limit: params.limit,\n      offset: params.offset,\n    }),\n    \"edit queue\",\n  );\n  const pageInfo = typeof data.pageInfo === \"object\" && data.pageInfo ? (data.pageInfo as JsonRecord) : null;\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps:\n      pageInfo?.hasMore === true && typeof pageInfo.limit === \"number\" && typeof pageInfo.offset === \"number\"\n        ? [`Re-run with --offset ${pageInfo.offset + pageInfo.limit} to load the next page.`]\n        : [],\n  };\n  if (!params.json) {\n    const items = Array.isArray(data.items) ? (data.items as JsonRecord[]) : [];\n    printItems(\"Edit Queue\", items, (item) => {\n      const id = typeof item.id === \"string\" ? item.id : \"unknown\";\n      const status = typeof item.status === \"string\" ? item.status : \"unknown\";\n      const createdAt = typeof item.createdAt === \"string\" ? item.createdAt : typeof item.created_at === \"string\" ? item.created_at : \"unknown\";\n      return `${id}  ${status}  createdAt=${createdAt}`;\n    });\n    printPageInfo(pageInfo);\n  }\n  return result;\n}\n\nexport async function opsEditQueueCancel(params: {\n  appId?: string | null;\n  cwd?: string;\n  queueItemId: string;\n  json: boolean;\n  yes: boolean;\n  nonInteractive: boolean;\n}): Promise<OpsResult<AppEditQueueCancellationResult>> {\n  const queueItemId = params.queueItemId.trim();\n  if (!queueItemId) {\n    throw new CliError(\"Edit queue item id cannot be empty.\", { exitCode: 2 });\n  }\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  await confirmEditQueueCancellation(queueItemId, target.appId, params);\n  const data = unwrapResponseObject<AppEditQueueCancellationResult>(\n    await api.cancelAppEditQueueItem(target.appId, queueItemId),\n    \"cancelled edit queue item\",\n  );\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps: [`Run \\`remix ops edit-queue --app-id ${target.appId}\\` to inspect the remaining active edit queue.`],\n  };\n  if (!params.json) {\n    console.log(\n      data.status === \"cancelled\"\n        ? `Cancelled edit queue item ${data.id}.`\n        : `Cancellation requested for edit queue item ${data.id}.`,\n    );\n  }\n  return result;\n}\n\nexport async function opsBundle(params: {\n  appId?: string | null;\n  cwd?: string;\n  bundleId: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(await api.getBundle(target.appId, params.bundleId), \"bundle\");\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps: [\"Use the bundle download commands only when you need the artifact itself rather than metadata inspection.\"],\n  };\n  if (!params.json) {\n    printJsonRecord(\"Bundle\", data);\n  }\n  return result;\n}\n\nexport async function opsTimeline(params: {\n  appId?: string | null;\n  cwd?: string;\n  limit?: number;\n  cursor?: string | null;\n  threadId?: string | null;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(\n    await api.listAppTimeline(target.appId, {\n      limit: params.limit,\n      cursor: params.cursor ?? undefined,\n      threadId: params.threadId?.trim() || undefined,\n    }),\n    \"app timeline\",\n  );\n  const pageInfo = typeof data.pageInfo === \"object\" && data.pageInfo ? (data.pageInfo as JsonRecord) : null;\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps:\n      pageInfo?.hasMore === true && typeof pageInfo.nextCursor === \"string\"\n        ? [`Re-run with --cursor ${pageInfo.nextCursor} to load the next page.`]\n        : [],\n  };\n  if (!params.json) {\n    const items = Array.isArray(data.items) ? (data.items as JsonRecord[]) : [];\n    printItems(\"Timeline\", items, (item) => {\n      const id = typeof item.id === \"string\" ? item.id : \"unknown\";\n      const kind = typeof item.kind === \"string\" ? item.kind : typeof item.type === \"string\" ? item.type : \"unknown\";\n      const createdAt = typeof item.createdAt === \"string\" ? item.createdAt : typeof item.created_at === \"string\" ? item.created_at : \"unknown\";\n      return `${id}  ${kind}  createdAt=${createdAt}`;\n    });\n    printPageInfo(pageInfo);\n  }\n  return result;\n}\n\nexport async function opsAgentRunsList(params: {\n  appId?: string | null;\n  cwd?: string;\n  limit?: number;\n  offset?: number;\n  status?: string | null;\n  currentPhase?: string | null;\n  createdAfter?: string | null;\n  createdBefore?: string | null;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(\n    await api.listAgentRuns(target.appId, {\n      limit: params.limit,\n      offset: params.offset,\n      status: params.status ?? undefined,\n      currentPhase: params.currentPhase ?? undefined,\n      createdAfter: params.createdAfter ?? undefined,\n      createdBefore: params.createdBefore ?? undefined,\n    }),\n    \"agent runs\",\n  );\n  const items = Array.isArray(data.items) ? (data.items as JsonRecord[]) : [];\n  const pageInfo = typeof data.pageInfo === \"object\" && data.pageInfo ? (data.pageInfo as JsonRecord) : null;\n  const firstRunId = items.length > 0 && typeof items[0]?.id === \"string\" ? String(items[0].id) : null;\n  const suggestedNextSteps: string[] = [];\n  if (firstRunId) {\n    suggestedNextSteps.push(`Run \\`remix ops agent-runs get ${firstRunId}\\` and then \\`remix ops agent-runs events ${firstRunId}\\` for the top listed run.`);\n  }\n  if (pageInfo?.hasMore === true && typeof pageInfo.limit === \"number\" && typeof pageInfo.offset === \"number\") {\n    suggestedNextSteps.push(`Re-run with --offset ${pageInfo.offset + pageInfo.limit} to load the next page.`);\n  }\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps,\n  };\n  if (!params.json) {\n    printItems(\"Agent Runs\", items, (item) => {\n      const id = typeof item.id === \"string\" ? item.id : \"unknown\";\n      const status = typeof item.status === \"string\" ? item.status : \"unknown\";\n      const phase = typeof item.currentPhase === \"string\" ? item.currentPhase : typeof item.current_phase === \"string\" ? item.current_phase : \"unknown\";\n      const createdAt = typeof item.createdAt === \"string\" ? item.createdAt : typeof item.created_at === \"string\" ? item.created_at : \"unknown\";\n      return `${id}  ${status}  phase=${phase}  createdAt=${createdAt}`;\n    });\n    printPageInfo(pageInfo);\n  }\n  return result;\n}\n\nexport async function opsAgentRunGet(params: {\n  appId?: string | null;\n  cwd?: string;\n  runId: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(await api.getAgentRun(target.appId, params.runId), \"agent run\");\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps: [`Run \\`remix ops agent-runs events ${params.runId}\\` for the event stream behind this run.`],\n  };\n  if (!params.json) {\n    printJsonRecord(\"Agent Run\", data);\n  }\n  return result;\n}\n\nexport async function opsAgentRunEvents(params: {\n  appId?: string | null;\n  cwd?: string;\n  runId: string;\n  limit?: number;\n  offset?: number;\n  createdAfter?: string | null;\n  createdBefore?: string | null;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(\n    await api.listAgentRunEvents(target.appId, params.runId, {\n      limit: params.limit,\n      offset: params.offset,\n      createdAfter: params.createdAfter ?? undefined,\n      createdBefore: params.createdBefore ?? undefined,\n    }),\n    \"agent run events\",\n  );\n  const items = Array.isArray(data.items) ? (data.items as JsonRecord[]) : [];\n  const pageInfo = typeof data.pageInfo === \"object\" && data.pageInfo ? (data.pageInfo as JsonRecord) : null;\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps:\n      pageInfo?.hasMore === true && typeof pageInfo.limit === \"number\" && typeof pageInfo.offset === \"number\"\n        ? [`Re-run with --offset ${pageInfo.offset + pageInfo.limit} to load the next page.`]\n        : [],\n  };\n  if (!params.json) {\n    printItems(\"Agent Run Events\", items, (item) => {\n      const id = typeof item.id === \"string\" ? item.id : \"unknown\";\n      const kind = typeof item.kind === \"string\" ? item.kind : typeof item.type === \"string\" ? item.type : \"unknown\";\n      const seq = typeof item.seq === \"number\" ? item.seq : typeof item.sequence === \"number\" ? item.sequence : null;\n      return `${id}  ${kind}${seq === null ? \"\" : `  seq=${seq}`}`;\n    });\n    printPageInfo(pageInfo);\n  }\n  return result;\n}\n\nexport async function opsSandboxStatus(params: {\n  appId?: string | null;\n  cwd?: string;\n  json: boolean;\n  yes: boolean;\n}): Promise<OpsResult<JsonRecord>> {\n  const api = await createAuthedApi(params);\n  const target = await resolveAppId(params);\n  const data = unwrapResponseObject<JsonRecord>(await api.getSandboxStatus(target.appId), \"sandbox status\");\n  const result = {\n    ...data,\n    appId: target.appId,\n    repoRoot: target.repoRoot,\n    warnings: [],\n    suggestedNextSteps: [\"Use the sandbox metadata here to decide whether a resume is plausible before attempting any write-side sandbox action.\"],\n  };\n  if (!params.json) {\n    printJsonRecord(\"Sandbox Status\", data);\n  }\n  return result;\n}\n","import type { Command } from \"commander\";\n\nimport {\n  opsAgentRunEvents,\n  opsAgentRunGet,\n  opsAgentRunsList,\n  opsBundle,\n  opsEditQueue,\n  opsEditQueueCancel,\n  opsOverview,\n  opsSandboxStatus,\n  opsTimeline,\n} from \"../services/ops.js\";\n\nfunction parseInteger(value: string, label: string): number {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isInteger(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative integer.`);\n  }\n  return parsed;\n}\n\nexport function registerOpsCommands(program: Command) {\n  const ops = program.command(\"ops\").description(\"Inspect app operational state\");\n\n  ops\n    .command(\"overview [appId]\")\n    .description(\"Get app overview metadata\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await opsOverview({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const editQueue = ops\n    .command(\"edit-queue [appId]\")\n    .description(\"List queued and recent edit requests\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--limit <n>\", \"Maximum number of entries\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await opsEditQueue({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  editQueue\n    .command(\"cancel <queueItemId>\")\n    .description(\"Cancel one active edit queue item\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Confirm cancellation without prompting\", false)\n    .option(\"--non-interactive\", \"Suppress prompts; cancellation still requires --yes\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (queueItemId, opts, command) => {\n      const parentOpts = editQueue.opts();\n      const option = (name: string) =>\n        command.getOptionValueSource(name) === \"cli\" ? opts[name] : parentOpts[name];\n      const result = await opsEditQueueCancel({\n        queueItemId: String(queueItemId),\n        appId: option(\"appId\") ? String(option(\"appId\")) : null,\n        cwd: option(\"cwd\") ? String(option(\"cwd\")) : process.cwd(),\n        json: Boolean(option(\"json\")),\n        yes: Boolean(option(\"yes\")),\n        nonInteractive: Boolean(option(\"nonInteractive\")),\n      });\n      if (option(\"json\")) console.log(JSON.stringify(result, null, 2));\n    });\n\n  ops\n    .command(\"bundle <bundleId>\")\n    .description(\"Get bundle metadata for an app\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (bundleId, opts) => {\n      const result = await opsBundle({\n        bundleId: String(bundleId),\n        appId: opts.appId ? String(opts.appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  ops\n    .command(\"timeline [appId]\")\n    .description(\"List app timeline events\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--limit <n>\", \"Maximum number of entries\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--cursor <cursor>\", \"Pagination cursor\")\n    .option(\"--thread-id <id>\", \"Limit timeline events to one app chat\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await opsTimeline({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        cursor: opts.cursor ? String(opts.cursor) : null,\n        threadId: opts.threadId ? String(opts.threadId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  const agentRuns = ops.command(\"agent-runs\").description(\"Inspect agent run state and events\");\n  agentRuns\n    .command(\"list [appId]\")\n    .description(\"List agent runs for an app\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--limit <n>\", \"Maximum number of entries\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--status <status>\", \"Filter by run status\")\n    .option(\"--current-phase <phase>\", \"Filter by current phase\")\n    .option(\"--created-after <iso8601>\", \"Only include runs created at or after this timestamp\")\n    .option(\"--created-before <iso8601>\", \"Only include runs created at or before this timestamp\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await opsAgentRunsList({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        status: opts.status ? String(opts.status) : null,\n        currentPhase: opts.currentPhase ? String(opts.currentPhase) : null,\n        createdAfter: opts.createdAfter ? String(opts.createdAfter) : null,\n        createdBefore: opts.createdBefore ? String(opts.createdBefore) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  agentRuns\n    .command(\"get <runId>\")\n    .description(\"Get one agent run\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (runId, opts) => {\n      const result = await opsAgentRunGet({\n        runId: String(runId),\n        appId: opts.appId ? String(opts.appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  agentRuns\n    .command(\"events <runId>\")\n    .description(\"List events for one agent run\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--limit <n>\", \"Maximum number of entries\", (value) => parseInteger(value, \"limit\"))\n    .option(\"--offset <n>\", \"Pagination offset\", (value) => parseInteger(value, \"offset\"))\n    .option(\"--created-after <iso8601>\", \"Only include events created at or after this timestamp\")\n    .option(\"--created-before <iso8601>\", \"Only include events created at or before this timestamp\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (runId, opts) => {\n      const result = await opsAgentRunEvents({\n        runId: String(runId),\n        appId: opts.appId ? String(opts.appId) : null,\n        limit: typeof opts.limit === \"number\" ? opts.limit : undefined,\n        offset: typeof opts.offset === \"number\" ? opts.offset : undefined,\n        createdAfter: opts.createdAfter ? String(opts.createdAfter) : null,\n        createdBefore: opts.createdBefore ? String(opts.createdBefore) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n\n  ops\n    .command(\"sandbox-status [appId]\")\n    .description(\"Get safe sandbox metadata for an app\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository detection\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      const result = await opsSandboxStatus({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n      if (opts.json) console.log(JSON.stringify(result, null, 2));\n    });\n}\n","import type { Command } from \"commander\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { probeClaudeBinary } from \"../services/claudeBinary.js\";\nimport {\n  getClaudePluginStatus,\n  installClaudePlugin,\n  printClaudePluginLifecycleResult,\n  reinstallClaudePlugin,\n  repairClaudePluginHard,\n  uninstallClaudePlugin,\n  updateClaudePlugin,\n  type ClaudePluginLifecycleResult,\n} from \"../services/setupClaude.js\";\nimport type { ClaudePluginScope } from \"../services/setupMetadata.js\";\nimport { isInteractive } from \"../utils/tty.js\";\n\nfunction parseClaudePluginScope(value: string): ClaudePluginScope {\n  const normalized = String(value).trim().toLowerCase();\n  if (normalized === \"user\" || normalized === \"project\" || normalized === \"local\") {\n    return normalized;\n  }\n  throw new Error(\"claude plugin scope must be one of: user, project, local\");\n}\n\nfunction throwCancelled(): never {\n  throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n}\n\nfunction applyLifecycleExitCode(result: ClaudePluginLifecycleResult): void {\n  // For uninstall, \"missing\" is the desired terminal state, not a failure.\n  // If Claude Code itself isn't on PATH, the plugin physically can't be\n  // installed, so uninstall is a successful no-op even though inspection\n  // labels the overall state \"broken\". This matches the headline copy in\n  // describeLifecycleOutcome (\"Remix Claude plugin was not installed.\").\n  if (result.action === \"uninstall\") {\n    const brokenButNoClaude =\n      result.status === \"broken\" && !result.claudeBinaryAvailable;\n    if (\n      result.status !== \"missing\" &&\n      result.status !== \"skipped\" &&\n      !brokenButNoClaude\n    ) {\n      process.exitCode = 1;\n    }\n    return;\n  }\n  if (result.status !== \"healthy\" && result.status !== \"skipped\") {\n    process.exitCode = 1;\n  }\n}\n\nasync function confirmHardRepair(yes: boolean): Promise<void> {\n  if (yes) return;\n  if (!isInteractive()) {\n    throw new CliError(\"Hard repair needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: \"Re-run with `--yes --hard` to confirm the Remix-scoped Claude cache cleanup.\",\n    });\n  }\n\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: \"Hard repair clears Remix-specific Claude marketplace and plugin caches before reinstalling. Continue?\",\n      initial: false,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  if (!answer.confirmed) {\n    throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n  }\n}\n\nasync function confirmUninstall(yes: boolean, purge: boolean): Promise<void> {\n  if (yes) return;\n  if (!isInteractive()) {\n    throw new CliError(\"Uninstall needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: purge\n        ? \"Re-run with `--yes --purge` to confirm removing the plugin AND clearing Remix-scoped Claude caches.\"\n        : \"Re-run with `--yes` to confirm removing the Remix Claude plugin.\",\n    });\n  }\n\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: purge\n        ? \"Uninstall the Remix Claude plugin AND remove the Remix marketplace and cached plugin files. Continue?\"\n        : \"Uninstall the Remix Claude plugin from Claude Code. Continue?\",\n      initial: false,\n    },\n    { onCancel: throwCancelled },\n  );\n\n  if (!answer.confirmed) {\n    throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n  }\n}\n\nexport function registerClaudeCommands(program: Command) {\n  const claude = program.command(\"claude\").description(\"Manage the Remix Claude Code plugin lifecycle\");\n\n  // STABLE IPC CONTRACT — the Remix Desktop app calls this command at\n  // every boot to decide whether to render the Claude lifecycle UI.\n  // The JSON shape below is part of the desktop ↔ CLI protocol and\n  // MUST NOT change in breaking ways:\n  //\n  //   {\n  //     available:  boolean,\n  //     version:    string | null,    // semver, e.g. \"2.1.121\"\n  //     source:     ClaudeBinarySource | null,\n  //     argv0:      string | null,    // absolute path used to spawn\n  //     reason:     string | null,    // user-facing reason when unavailable\n  //   }\n  //\n  // Adding new optional fields is fine; renaming or removing existing\n  // ones is a desktop-side breakage. The probe must NEVER trigger any\n  // install / bootstrap side effects — it's a read-only resolution\n  // step that the desktop polls cheaply on focus.\n  claude\n    .command(\"probe\")\n    .description(\"Discover the Claude Code binary and print its provenance (read-only)\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const probe = await probeClaudeBinary();\n      if (opts.json) {\n        console.log(JSON.stringify(probe, null, 2));\n        process.exitCode = probe.available ? 0 : 1;\n        return;\n      }\n      if (probe.available) {\n        console.log(\n          `Claude Code ${probe.version ?? \"(unknown version)\"} via ${probe.source} → ${probe.argv0}`,\n        );\n        process.exitCode = 0;\n      } else {\n        console.log(probe.reason ?? \"Claude Code is not installed.\");\n        process.exitCode = 1;\n      }\n    });\n\n  claude\n    .command(\"status\")\n    .description(\"Inspect Remix Claude plugin installation health\")\n    .option(\"--scope <scope>\", \"Expected plugin scope (user|project|local)\", parseClaudePluginScope)\n    .option(\"--doctor\", \"Run `claude doctor` and attach the summary\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await getClaudePluginStatus({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        includeDoctor: Boolean(opts.doctor),\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n\n  claude\n    .command(\"install\")\n    .description(\"Install the Remix Claude plugin if it is missing\")\n    .option(\"--scope <scope>\", \"Plugin install scope (user|project|local)\", parseClaudePluginScope)\n    .option(\"--node <path>\", \"Absolute Node 20+ binary path for Claude hooks\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--doctor\", \"Run `claude doctor` after installation\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await installClaudePlugin({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        nodePath: opts.node ? String(opts.node) : null,\n        remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n        includeDoctor: Boolean(opts.doctor),\n        confirmAutoHardRepair: () => confirmHardRepair(Boolean(opts.yes || opts.nonInteractive)),\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n\n  claude\n    .command(\"update\")\n    .description(\"Update the Remix Claude plugin when it is missing or outdated\")\n    .option(\"--scope <scope>\", \"Plugin install scope (user|project|local)\", parseClaudePluginScope)\n    .option(\"--node <path>\", \"Absolute Node 20+ binary path for Claude hooks\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--doctor\", \"Run `claude doctor` after update verification\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await updateClaudePlugin({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        nodePath: opts.node ? String(opts.node) : null,\n        remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n        includeDoctor: Boolean(opts.doctor),\n        confirmAutoHardRepair: () => confirmHardRepair(Boolean(opts.yes || opts.nonInteractive)),\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n\n  claude\n    .command(\"reinstall\")\n    .description(\"Uninstall and reinstall the Remix Claude plugin\")\n    .option(\"--scope <scope>\", \"Plugin install scope (user|project|local)\", parseClaudePluginScope)\n    .option(\"--node <path>\", \"Absolute Node 20+ binary path for Claude hooks\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--doctor\", \"Run `claude doctor` after reinstall verification\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const result = await reinstallClaudePlugin({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        nodePath: opts.node ? String(opts.node) : null,\n        remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n        includeDoctor: Boolean(opts.doctor),\n        confirmAutoHardRepair: () => confirmHardRepair(Boolean(opts.yes || opts.nonInteractive)),\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n\n  claude\n    .command(\"uninstall\")\n    .description(\"Uninstall the Remix Claude plugin from Claude Code\")\n    .option(\"--scope <scope>\", \"Plugin install scope (user|project|local)\", parseClaudePluginScope)\n    .option(\n      \"--purge\",\n      \"Also remove the Remix marketplace and clear Remix-scoped Claude plugin caches\",\n      false,\n    )\n    .option(\"--doctor\", \"Run `claude doctor` after uninstall verification\", false)\n    .option(\"--yes\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--non-interactive\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const yes = Boolean(opts.yes || opts.nonInteractive);\n      const purge = Boolean(opts.purge);\n      await confirmUninstall(yes, purge);\n      const result = await uninstallClaudePlugin({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        includeDoctor: Boolean(opts.doctor),\n        purge,\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n\n  claude\n    .command(\"repair\")\n    .description(\"Repair stale Claude plugin state for Remix\")\n    .option(\"--hard\", \"Clear Remix-scoped Claude marketplace and plugin caches before reinstalling\", false)\n    .option(\"--scope <scope>\", \"Plugin install scope (user|project|local)\", parseClaudePluginScope)\n    .option(\"--node <path>\", \"Absolute Node 20+ binary path for Claude hooks\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--doctor\", \"Run `claude doctor` after repair verification\", false)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      if (!opts.hard) {\n        throw new CliError(\"Only hard repair is currently supported.\", {\n          exitCode: 2,\n          hint: \"Run `remix claude repair --hard` to confirm the Remix-scoped Claude cache cleanup.\",\n        });\n      }\n\n      await confirmHardRepair(Boolean(opts.yes || opts.nonInteractive));\n      const result = await repairClaudePluginHard({\n        scope: opts.scope ? parseClaudePluginScope(String(opts.scope)) : undefined,\n        nodePath: opts.node ? String(opts.node) : null,\n        remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n        includeDoctor: Boolean(opts.doctor),\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printClaudePluginLifecycleResult(result);\n    });\n}\n","import type { Command } from \"commander\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport {\n  getCursorPluginStatus,\n  installCursorPlugin,\n  printCursorPluginLifecycleResult,\n  reinstallCursorPlugin,\n  uninstallCursorPlugin,\n  updateCursorPlugin,\n  type CursorPluginLifecycleResult,\n} from \"../services/setupCursorPlugin.js\";\nimport { isInteractive } from \"../utils/tty.js\";\n\nfunction applyLifecycleExitCode(result: CursorPluginLifecycleResult): void {\n  if (result.action === \"uninstall\") {\n    if (result.status !== \"missing\" && result.status !== \"skipped\") {\n      process.exitCode = 1;\n    }\n    return;\n  }\n  if (result.status !== \"healthy\" && result.status !== \"skipped\") {\n    process.exitCode = 1;\n  }\n}\n\nfunction throwCancelled(): never {\n  throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n}\n\nasync function confirmUninstall(yes: boolean, destination: string | undefined): Promise<void> {\n  if (yes) return;\n  if (!isInteractive()) {\n    throw new CliError(\"Uninstall needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: \"Re-run with `--yes` to confirm removing the Remix Cursor plugin directory.\",\n    });\n  }\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: destination\n        ? `Remove the Remix Cursor plugin at ${destination}?`\n        : \"Remove the Remix Cursor plugin from Cursor's local plugin directory?\",\n      initial: false,\n    },\n    { onCancel: throwCancelled },\n  );\n  if (!answer.confirmed) throwCancelled();\n}\n\nfunction commonOptions(command: Command): Command {\n  return command\n    .option(\"--dest <path>\", \"Cursor plugin destination directory\")\n    .option(\"--package <name>\", \"Override the configured npm package to install\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--json\", \"Output JSON\", false);\n}\n\nexport function registerCursorCommands(program: Command) {\n  const cursor = program.command(\"cursor\").description(\"Manage the Remix Cursor plugin lifecycle\");\n\n  commonOptions(\n    cursor\n      .command(\"status\")\n      .description(\"Inspect Remix Cursor plugin installation health\"),\n  ).action(async (opts) => {\n    const result = await getCursorPluginStatus({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      packageName: opts.package ? String(opts.package) : undefined,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCursorPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    cursor\n      .command(\"install\")\n      .description(\"Install the configured Remix Cursor plugin from npm if it is missing\"),\n  ).action(async (opts) => {\n    const result = await installCursorPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      packageName: opts.package ? String(opts.package) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCursorPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    cursor\n      .command(\"update\")\n      .description(\"Update the Remix Cursor plugin to the configured npm version\"),\n  ).action(async (opts) => {\n    const result = await updateCursorPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      packageName: opts.package ? String(opts.package) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCursorPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    cursor\n      .command(\"reinstall\")\n      .description(\"Replace the local Remix Cursor plugin with the configured npm package\"),\n  ).action(async (opts) => {\n    const result = await reinstallCursorPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      packageName: opts.package ? String(opts.package) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCursorPluginLifecycleResult(result);\n  });\n\n  cursor\n    .command(\"uninstall\")\n    .description(\"Remove the Remix Cursor plugin from Cursor's local plugin directory\")\n    .option(\"--dest <path>\", \"Cursor plugin destination directory\")\n    .option(\"--yes\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--non-interactive\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const yes = Boolean(opts.yes || opts.nonInteractive);\n      await confirmUninstall(yes, opts.dest ? String(opts.dest) : undefined);\n      const result = await uninstallCursorPlugin({\n        destination: opts.dest ? String(opts.dest) : undefined,\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printCursorPluginLifecycleResult(result);\n    });\n}\n","import type { Command } from \"commander\";\nimport prompts from \"prompts\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport {\n  getCodexPluginStatus,\n  installCodexPlugin,\n  printCodexPluginLifecycleResult,\n  reinstallCodexPlugin,\n  uninstallCodexPlugin,\n  updateCodexPlugin,\n  type CodexPluginLifecycleResult,\n} from \"../services/setupCodexPlugin.js\";\nimport { isInteractive } from \"../utils/tty.js\";\n\nfunction applyLifecycleExitCode(result: CodexPluginLifecycleResult): void {\n  if (result.action === \"uninstall\") {\n    if (result.status !== \"missing\" && result.status !== \"skipped\") {\n      process.exitCode = 1;\n    }\n    return;\n  }\n  if (result.status !== \"healthy\" && result.status !== \"skipped\") {\n    process.exitCode = 1;\n  }\n}\n\nfunction throwCancelled(): never {\n  throw new CliError(\"Cancelled by user.\", { exitCode: 130 });\n}\n\nasync function confirmUninstall(yes: boolean, destination: string | undefined): Promise<void> {\n  if (yes) return;\n  if (!isInteractive()) {\n    throw new CliError(\"Uninstall needs explicit confirmation in non-interactive mode.\", {\n      exitCode: 2,\n      hint: \"Re-run with `--yes` to confirm removing the Remix Codex plugin and its hook entries.\",\n    });\n  }\n  const answer = await prompts(\n    {\n      type: \"confirm\",\n      name: \"confirmed\",\n      message: destination\n        ? `Remove the Remix Codex plugin at ${destination}, its entries from ~/.codex/hooks.json, and its MCP registration?`\n        : \"Remove the Remix Codex plugin, its entries from ~/.codex/hooks.json, and its MCP registration?\",\n      initial: false,\n    },\n    { onCancel: throwCancelled },\n  );\n  if (!answer.confirmed) throwCancelled();\n}\n\nfunction commonOptions(command: Command): Command {\n  return command\n    .option(\"--dest <path>\", \"Codex plugin destination directory\")\n    .option(\"--remix-cli-path <path>\", \"Absolute Remix CLI path for plugin hooks\")\n    .option(\"--json\", \"Output JSON\", false);\n}\n\nexport function registerCodexCommands(program: Command) {\n  const codex = program.command(\"codex\").description(\"Manage the Remix Codex plugin lifecycle\");\n\n  commonOptions(\n    codex.command(\"status\").description(\"Inspect Remix Codex plugin installation health\"),\n  ).action(async (opts) => {\n    const result = await getCodexPluginStatus({\n      destination: opts.dest ? String(opts.dest) : undefined,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCodexPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    codex.command(\"install\").description(\"Install the Remix Codex plugin (hooks + MCP server)\"),\n  ).action(async (opts) => {\n    const result = await installCodexPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCodexPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    codex.command(\"update\").description(\"Update the Remix Codex plugin to the bundled version\"),\n  ).action(async (opts) => {\n    const result = await updateCodexPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCodexPluginLifecycleResult(result);\n  });\n\n  commonOptions(\n    codex\n      .command(\"reinstall\")\n      .description(\"Tear down and reinstall the Remix Codex plugin from scratch\"),\n  ).action(async (opts) => {\n    const result = await reinstallCodexPlugin({\n      destination: opts.dest ? String(opts.dest) : undefined,\n      remixCliPath: opts.remixCliPath ? String(opts.remixCliPath) : null,\n    });\n    applyLifecycleExitCode(result);\n    if (opts.json) {\n      console.log(JSON.stringify(result, null, 2));\n      return;\n    }\n    printCodexPluginLifecycleResult(result);\n  });\n\n  codex\n    .command(\"uninstall\")\n    .description(\"Remove the Remix Codex plugin (dist files, hooks.json entries, MCP registration)\")\n    .option(\"--dest <path>\", \"Codex plugin destination directory\")\n    .option(\"--yes\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--non-interactive\", \"Run non-interactively (skip confirmation)\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const yes = Boolean(opts.yes || opts.nonInteractive);\n      await confirmUninstall(yes, opts.dest ? String(opts.dest) : undefined);\n      const result = await uninstallCodexPlugin({\n        destination: opts.dest ? String(opts.dest) : undefined,\n      });\n      applyLifecycleExitCode(result);\n      if (opts.json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n      printCodexPluginLifecycleResult(result);\n    });\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { execa } from \"execa\";\nimport pc from \"picocolors\";\n\nimport type { JsonRecord } from \"./serviceHelpers.js\";\n\n/**\n * Remix plugin lifecycle for OpenAI's Codex (`codex` CLI + Codex\n * Desktop app).\n *\n * Codex uses a Claude-Code-compatible hook system (`SessionStart`,\n * `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`) with the\n * same nested-array config shape (`{ \"hooks\": { \"<event>\": [{ \"hooks\":\n * [{ \"type\": \"command\", \"command\": \"...\" }] }] } }`). That means the\n * `remix-claude-plugin`'s compiled `dist/*.cjs` hook bundles run\n * unmodified against Codex payloads — they consume the same shape over\n * stdin and emit the same finalize calls into `@remixhq/core/collab`.\n *\n * Install therefore does NOT pull a separate npm package. It:\n *\n *   1. Locates the bundled `remix-claude-plugin/dist/` source on disk\n *      (sibling repo, override env var, or future bundled copy inside\n *      the desktop's Resources/).\n *   2. Copies the hook + MCP server CJS bundles to\n *      `~/.codex/plugins/remix/dist/` and chmod +x them.\n *   3. Patches `~/.codex/hooks.json` to register Remix entries for each\n *      Codex hook event, preserving any pre-existing user hooks.\n *   4. Registers the MCP server with `codex mcp add remix --` so Remix\n *      tools are reachable from inside a Codex session.\n *\n * Status / uninstall reverse exactly that surface so users can opt in\n * and out cleanly.\n */\n\n// -----------------------------------------------------------------------------\n// Public types — shape mirrors `CursorPluginLifecycleResult` so the desktop's\n// `parsePluginStatus` and the renderer's PluginStatus modeling work uniformly.\n// -----------------------------------------------------------------------------\n\nexport type CodexPluginAction = \"auto\" | \"install\" | \"update\" | \"reinstall\" | \"skip\";\nexport type CodexPluginLifecycleAction = CodexPluginAction | \"status\" | \"uninstall\";\nexport type CodexPluginHealthStatus =\n  | \"healthy\"\n  | \"missing\"\n  | \"outdated\"\n  | \"stale_or_unverified\"\n  | \"broken\"\n  | \"skipped\";\n\nexport type CodexPluginLifecycleResult = {\n  action: CodexPluginLifecycleAction;\n  status: CodexPluginHealthStatus;\n  changed: boolean;\n  codexAvailable: boolean;\n  codexBinary: string | null;\n  codexVersion: string | null;\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string | null;\n  destination: string;\n  hooksConfigPath: string;\n  hooksConfigured: boolean;\n  mcpRegistered: boolean;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n  details?: JsonRecord | null;\n};\n\n// Hook scripts we expect to be present on disk after install. These\n// names match the Claude plugin's compiled bundles. Codex fires events\n// with the Anthropic-compatible names listed in `CODEX_HOOK_BINDINGS`\n// below; each binding routes one event to one of these scripts.\nconst HOOK_SCRIPTS = [\n  \"hook-user-prompt.cjs\",\n  \"hook-pre-git.cjs\",\n  \"hook-post-collab.cjs\",\n  \"hook-stop-collab.cjs\",\n  \"mcp-server.cjs\",\n] as const;\n\n// Map Codex hook events → script (same scripts used by Claude plugin).\n// `matcher` is a regex string Codex will test against the tool name\n// before invoking the hook (mirrors the Claude plugin's matchers).\nconst CODEX_HOOK_BINDINGS: Array<{\n  event: string;\n  script: string;\n  matcher?: string;\n}> = [\n  { event: \"UserPromptSubmit\", script: \"hook-user-prompt.cjs\" },\n  {\n    event: \"PreToolUse\",\n    script: \"hook-pre-git.cjs\",\n    matcher: \"Bash|shell|exec\",\n  },\n  {\n    event: \"PostToolUse\",\n    script: \"hook-post-collab.cjs\",\n    matcher: \"mcp__.*|remix_collab_.*|Bash|shell|exec|Read|Edit|Write|Delete\",\n  },\n  { event: \"Stop\", script: \"hook-stop-collab.cjs\" },\n];\n\nconst REMIX_HOOK_MARKER = \"remix-codex-plugin\";\nconst MCP_SERVER_NAME = \"remix\";\nconst RUNTIME_MARKER_FILE = \".remix-plugin-runtime\";\nconst RUNTIME_MARKER_VALUE = \"codex\";\n\nexport const REMIX_CODEX_PLUGIN = {\n  agent: \"codex\" as const,\n  agentLabel: \"Codex\",\n  pluginName: \"remix\",\n  defaultDestination: \"~/.codex/plugins/remix\",\n  hooksConfigPath: \"~/.codex/hooks.json\",\n  nodeRequirement: \">=20\",\n  // Pinned in step with the Claude plugin since we share its compiled\n  // hook bundles. Kept as a separate constant so a future split\n  // doesn't have to find every literal.\n  version: \"0.1.0\",\n};\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\nfunction expandHome(value: string): string {\n  if (value === \"~\") return os.homedir();\n  if (value.startsWith(\"~/\")) return path.join(os.homedir(), value.slice(2));\n  return value;\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n  try {\n    await fs.access(target);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function readJsonObject(target: string): Promise<JsonRecord | null> {\n  try {\n    const raw = await fs.readFile(target, \"utf8\");\n    const parsed = JSON.parse(raw);\n    return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n      ? (parsed as JsonRecord)\n      : null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Locate the `remix-claude-plugin/dist/` source tree we copy hook\n * bundles from. Lookup order:\n *\n *   1. `REMIX_CODEX_PLUGIN_SOURCE_DIR` env override (advanced).\n *   2. Sibling repo on disk: walk up from `import.meta.url` to find\n *      `remix-claude-plugin/dist`. This is the dev-mode path.\n *   3. Bundled copy inside the desktop app's Resources tree (future).\n *\n * Returns null when no source can be found — callers surface a clear\n * remediation hint in that case (\"set REMIX_CODEX_PLUGIN_SOURCE_DIR or\n * reinstall the desktop app\").\n */\nasync function findPluginSourceDir(): Promise<string | null> {\n  const override = process.env.REMIX_CODEX_PLUGIN_SOURCE_DIR?.trim();\n  if (override) {\n    if (await pathExists(path.join(override, \"hook-user-prompt.cjs\"))) {\n      return override;\n    }\n    return null;\n  }\n\n  // Walk up from runtime locations looking for the sibling\n  // `remix-claude-plugin/dist` checkout (dev) OR a bundled copy\n  // staged by the desktop app under its Resources tree. We check\n  // several candidate roots because the CLI ships in different\n  // shapes: source in dev (`src/services/`), built CJS bundle\n  // (`dist/cli.cjs`), and the desktop's bundled copy under\n  // `Contents/Resources/cli/`.\n  //\n  // Source roots to walk from, in priority order. `process.argv[1]`\n  // gives the CLI entrypoint path at runtime; `process.cwd()` is\n  // a last-resort fallback for unusual invocations.\n  const seeds = new Set<string>();\n  if (process.argv[1]) seeds.add(path.dirname(process.argv[1]));\n  // CJS-only — `__dirname` is undefined in ESM, so guard it.\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const dn = (globalThis as any).__dirname ?? (eval(\"typeof __dirname !== 'undefined' ? __dirname : null\") as string | null);\n    if (dn) seeds.add(dn);\n  } catch {\n    // ignore — ESM build\n  }\n  seeds.add(process.cwd());\n\n  for (const seed of seeds) {\n    let dir = seed;\n    for (let i = 0; i < 10; i += 1) {\n      const sibling = path.join(\n        path.dirname(dir),\n        \"remix-claude-plugin\",\n        \"dist\",\n      );\n      if (await pathExists(path.join(sibling, \"hook-user-prompt.cjs\"))) {\n        return sibling;\n      }\n      // Also accept a sibling-of-this-dir variant (covers\n      // `remix-cli/dist` → `remix-claude-plugin/dist`).\n      const variant = path.join(dir, \"..\", \"remix-claude-plugin\", \"dist\");\n      if (await pathExists(path.join(variant, \"hook-user-prompt.cjs\"))) {\n        return variant;\n      }\n      const next = path.dirname(dir);\n      if (next === dir) break;\n      dir = next;\n    }\n  }\n\n  return null;\n}\n\nasync function detectCodexBinary(): Promise<{\n  available: boolean;\n  binary: string | null;\n  version: string | null;\n}> {\n  // Prefer the Codex Desktop bundle's CLI when present — that's the\n  // dominant install path on macOS today and works even when nothing\n  // is on the user's PATH (matching how the desktop's discovery\n  // probe treats the .app bundle as authoritative).\n  const candidates = [\n    \"/Applications/Codex.app/Contents/Resources/codex\",\n    path.join(os.homedir(), \"Applications\", \"Codex.app\", \"Contents\", \"Resources\", \"codex\"),\n    \"codex\",\n  ];\n  for (const bin of candidates) {\n    try {\n      if (bin !== \"codex\" && !(await pathExists(bin))) continue;\n      const result = await execa(bin, [\"--version\"], { timeout: 5000 });\n      const version = (result.stdout || \"\").trim() || null;\n      return { available: true, binary: bin, version };\n    } catch {\n      // try next\n    }\n  }\n  return { available: false, binary: null, version: null };\n}\n\nfunction getDefaultDestination(): string {\n  return expandHome(REMIX_CODEX_PLUGIN.defaultDestination);\n}\n\nfunction getHooksConfigPath(): string {\n  return expandHome(REMIX_CODEX_PLUGIN.hooksConfigPath);\n}\n\n// -----------------------------------------------------------------------------\n// hooks.json patching\n// -----------------------------------------------------------------------------\n\ntype HookEntry = {\n  type?: string;\n  command?: string;\n  marker?: string;\n  [key: string]: unknown;\n};\n\ntype HookGroup = {\n  matcher?: string;\n  hooks?: HookEntry[];\n  marker?: string;\n  [key: string]: unknown;\n};\n\nfunction isOurHookGroup(group: HookGroup): boolean {\n  if (group.marker === REMIX_HOOK_MARKER) return true;\n  const inner = Array.isArray(group.hooks) ? group.hooks : [];\n  return inner.some((h) => (h as HookEntry).marker === REMIX_HOOK_MARKER);\n}\n\nfunction buildOurHookGroup(destination: string, binding: typeof CODEX_HOOK_BINDINGS[number]): HookGroup {\n  const scriptPath = path.join(destination, \"dist\", binding.script);\n  const command = `REMIX_PLUGIN_RUNTIME=${RUNTIME_MARKER_VALUE} node \"${scriptPath}\"`;\n  const group: HookGroup = {\n    marker: REMIX_HOOK_MARKER,\n    hooks: [{ type: \"command\", command, marker: REMIX_HOOK_MARKER }],\n  };\n  if (binding.matcher) group.matcher = binding.matcher;\n  return group;\n}\n\n/**\n * Merge our hook entries into `~/.codex/hooks.json` without disturbing\n * any pre-existing user-managed hooks. We tag every group/entry we\n * write with `marker: \"remix-codex-plugin\"` so uninstall can find and\n * remove only what's ours.\n */\nfunction patchHooksConfig(current: JsonRecord | null, destination: string): {\n  next: JsonRecord;\n  changed: boolean;\n} {\n  const base: JsonRecord = current ? structuredClone(current) : {};\n  const hooks =\n    base.hooks && typeof base.hooks === \"object\" && !Array.isArray(base.hooks)\n      ? { ...(base.hooks as JsonRecord) }\n      : {};\n\n  let changed = false;\n  for (const binding of CODEX_HOOK_BINDINGS) {\n    const eventName = binding.event;\n    const existing = Array.isArray(hooks[eventName])\n      ? ([...(hooks[eventName] as unknown[])] as HookGroup[])\n      : [];\n    const filtered = existing.filter((g) => !isOurHookGroup(g));\n    const ours = buildOurHookGroup(destination, binding);\n    filtered.push(ours);\n    const before = JSON.stringify(existing);\n    const after = JSON.stringify(filtered);\n    if (before !== after) changed = true;\n    hooks[eventName] = filtered as unknown as JsonRecord[keyof JsonRecord];\n  }\n\n  base.hooks = hooks;\n  return { next: base, changed };\n}\n\nfunction unpatchHooksConfig(current: JsonRecord | null): {\n  next: JsonRecord | null;\n  changed: boolean;\n} {\n  if (!current) return { next: null, changed: false };\n  const base: JsonRecord = structuredClone(current);\n  const hooks =\n    base.hooks && typeof base.hooks === \"object\" && !Array.isArray(base.hooks)\n      ? { ...(base.hooks as JsonRecord) }\n      : null;\n  if (!hooks) return { next: base, changed: false };\n\n  let changed = false;\n  for (const eventName of Object.keys(hooks)) {\n    const existing = Array.isArray(hooks[eventName])\n      ? ([...(hooks[eventName] as unknown[])] as HookGroup[])\n      : null;\n    if (!existing) continue;\n    const kept = existing.filter((g) => !isOurHookGroup(g));\n    if (kept.length !== existing.length) changed = true;\n    if (kept.length === 0) {\n      delete hooks[eventName];\n    } else {\n      hooks[eventName] = kept as unknown as JsonRecord[keyof JsonRecord];\n    }\n  }\n\n  base.hooks = hooks;\n  return { next: base, changed };\n}\n\nasync function isMcpRegistered(codexBinary: string): Promise<boolean> {\n  try {\n    const result = await execa(codexBinary, [\"mcp\", \"list\"], { timeout: 5000 });\n    return /(^|\\s)remix(\\s|$)/m.test(result.stdout || \"\");\n  } catch {\n    return false;\n  }\n}\n\nasync function registerMcpServer(codexBinary: string, destination: string): Promise<{\n  changed: boolean;\n  warning: string | null;\n}> {\n  const serverScript = path.join(destination, \"dist\", \"mcp-server.cjs\");\n  if (!(await pathExists(serverScript))) {\n    return { changed: false, warning: `MCP server script missing at ${serverScript}.` };\n  }\n  // Best-effort: remove any prior entry first so we end up with a\n  // single registration even after upgrades. `codex mcp remove` exits\n  // non-zero when the entry doesn't exist; ignore the failure.\n  try {\n    await execa(codexBinary, [\"mcp\", \"remove\", MCP_SERVER_NAME], { timeout: 5000 });\n  } catch {\n    // not previously registered — fine\n  }\n  try {\n    await execa(\n      codexBinary,\n      [\n        \"mcp\",\n        \"add\",\n        MCP_SERVER_NAME,\n        \"--\",\n        \"env\",\n        `REMIX_PLUGIN_RUNTIME=${RUNTIME_MARKER_VALUE}`,\n        \"node\",\n        serverScript,\n      ],\n      { timeout: 10000 },\n    );\n    return { changed: true, warning: null };\n  } catch (err) {\n    return {\n      changed: false,\n      warning: err instanceof Error ? err.message : String(err),\n    };\n  }\n}\n\nasync function unregisterMcpServer(codexBinary: string): Promise<boolean> {\n  try {\n    await execa(codexBinary, [\"mcp\", \"remove\", MCP_SERVER_NAME], { timeout: 5000 });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// -----------------------------------------------------------------------------\n// Inspection\n// -----------------------------------------------------------------------------\n\ntype Inspection = {\n  destination: string;\n  hooksConfigPath: string;\n  codex: { available: boolean; binary: string | null; version: string | null };\n  pluginInstalled: boolean;\n  installedVersion: string | null;\n  expectedVersion: string;\n  hooksConfigured: boolean;\n  mcpRegistered: boolean;\n  status: CodexPluginHealthStatus;\n  warnings: string[];\n  remediationHint: string | null;\n  recommendedNextSteps: string[];\n};\n\nasync function inspectInstall(params?: {\n  destination?: string;\n}): Promise<Inspection> {\n  const destination = expandHome(params?.destination ?? getDefaultDestination());\n  const hooksConfigPath = getHooksConfigPath();\n  const codex = await detectCodexBinary();\n  const expectedVersion = REMIX_CODEX_PLUGIN.version;\n\n  // Plugin file presence\n  const distDir = path.join(destination, \"dist\");\n  const present = await Promise.all(\n    HOOK_SCRIPTS.map((name) => pathExists(path.join(distDir, name))),\n  );\n  const allPresent = present.every(Boolean);\n  const noneInstalled = !present.some(Boolean);\n  const runtimeMarker =\n    (await fs.readFile(path.join(destination, RUNTIME_MARKER_FILE), \"utf8\").catch(() => \"\")).trim() ===\n    RUNTIME_MARKER_VALUE;\n\n  // Installed-version stamp written next to the dist files\n  let installedVersion: string | null = null;\n  const versionStamp = path.join(destination, \".remix-codex-version\");\n  try {\n    const raw = await fs.readFile(versionStamp, \"utf8\");\n    installedVersion = raw.trim() || null;\n  } catch {\n    installedVersion = null;\n  }\n\n  // Hooks config\n  const hooksJson = await readJsonObject(hooksConfigPath);\n  const hooksMap =\n    hooksJson?.hooks && typeof hooksJson.hooks === \"object\" && !Array.isArray(hooksJson.hooks)\n      ? (hooksJson.hooks as JsonRecord)\n      : null;\n  const hooksConfigured =\n    hooksMap !== null &&\n    CODEX_HOOK_BINDINGS.every((binding) => {\n      const groups = Array.isArray(hooksMap[binding.event])\n        ? (hooksMap[binding.event] as HookGroup[])\n        : [];\n      return groups.some((g) => isOurHookGroup(g));\n    });\n\n  const mcpRegistered = codex.available && codex.binary\n    ? await isMcpRegistered(codex.binary)\n    : false;\n\n  const warnings: string[] = [];\n  if (!codex.available) warnings.push(\"Codex is not installed on this machine.\");\n\n  let status: CodexPluginHealthStatus;\n  let remediationHint: string | null = null;\n  const nextSteps: string[] = [];\n\n  if (!codex.available) {\n    status = \"skipped\";\n    remediationHint =\n      \"Install the Codex CLI or Codex Desktop app, then re-run `remix codex install`.\";\n  } else if (allPresent && runtimeMarker && hooksConfigured && mcpRegistered) {\n    if (installedVersion && installedVersion !== expectedVersion) {\n      status = \"outdated\";\n      remediationHint = `Installed Remix Codex plugin is ${installedVersion}; expected ${expectedVersion}. Run \\`remix codex update\\`.`;\n      nextSteps.push(\"remix codex update\");\n    } else {\n      status = \"healthy\";\n    }\n  } else if (noneInstalled && !hooksConfigured && !mcpRegistered) {\n    status = \"missing\";\n    nextSteps.push(\"remix codex install\");\n  } else {\n    status = \"broken\";\n    remediationHint =\n      \"Remix Codex plugin install is incomplete. Run `remix codex reinstall` to repair.\";\n    nextSteps.push(\"remix codex reinstall\");\n  }\n\n  return {\n    destination,\n    hooksConfigPath,\n    codex,\n    pluginInstalled: allPresent,\n    installedVersion,\n    expectedVersion,\n    hooksConfigured,\n    mcpRegistered,\n    status,\n    warnings,\n    remediationHint,\n    recommendedNextSteps: nextSteps,\n  };\n}\n\nfunction withAction(\n  inspection: Inspection,\n  params: {\n    action: CodexPluginLifecycleAction;\n    changed: boolean;\n    warnings?: string[];\n    remediationHint?: string | null;\n    details?: JsonRecord | null;\n    status?: CodexPluginHealthStatus;\n  },\n): CodexPluginLifecycleResult {\n  const allWarnings = [...inspection.warnings, ...(params.warnings ?? [])].filter(Boolean);\n  return {\n    action: params.action,\n    status: params.status ?? inspection.status,\n    changed: params.changed,\n    codexAvailable: inspection.codex.available,\n    codexBinary: inspection.codex.binary,\n    codexVersion: inspection.codex.version,\n    pluginInstalled: inspection.pluginInstalled,\n    installedVersion: inspection.installedVersion,\n    expectedVersion: inspection.expectedVersion,\n    destination: inspection.destination,\n    hooksConfigPath: inspection.hooksConfigPath,\n    hooksConfigured: inspection.hooksConfigured,\n    mcpRegistered: inspection.mcpRegistered,\n    warnings: Array.from(new Set(allWarnings)),\n    remediationHint: params.remediationHint ?? inspection.remediationHint,\n    recommendedNextSteps: Array.from(new Set(inspection.recommendedNextSteps)),\n    details: params.details ?? null,\n  };\n}\n\n// -----------------------------------------------------------------------------\n// Install / uninstall\n// -----------------------------------------------------------------------------\n\nasync function copyHookBundles(sourceDir: string, destination: string): Promise<void> {\n  const distDir = path.join(destination, \"dist\");\n  await fs.mkdir(distDir, { recursive: true });\n  for (const script of HOOK_SCRIPTS) {\n    const from = path.join(sourceDir, script);\n    const to = path.join(distDir, script);\n    await fs.copyFile(from, to);\n    await fs.chmod(to, 0o755);\n  }\n  await fs.writeFile(\n    path.join(destination, \".remix-codex-version\"),\n    `${REMIX_CODEX_PLUGIN.version}\\n`,\n    \"utf8\",\n  );\n  await fs.writeFile(\n    path.join(destination, RUNTIME_MARKER_FILE),\n    `${RUNTIME_MARKER_VALUE}\\n`,\n    \"utf8\",\n  );\n}\n\nasync function performInstall(destination: string): Promise<{\n  changed: boolean;\n  warnings: string[];\n  details: JsonRecord;\n}> {\n  const warnings: string[] = [];\n  const details: JsonRecord = {};\n\n  const sourceDir = await findPluginSourceDir();\n  if (!sourceDir) {\n    throw new Error(\n      \"Could not locate the Remix Codex plugin source. Set REMIX_CODEX_PLUGIN_SOURCE_DIR to a directory containing the bundled `hook-*.cjs` and `mcp-server.cjs` files (e.g. /path/to/remix-claude-plugin/dist).\",\n    );\n  }\n  details.sourceDir = sourceDir;\n\n  await copyHookBundles(sourceDir, destination);\n  details.installedFiles = HOOK_SCRIPTS as unknown as JsonRecord[keyof JsonRecord];\n\n  // Patch hooks.json\n  const hooksConfigPath = getHooksConfigPath();\n  await fs.mkdir(path.dirname(hooksConfigPath), { recursive: true });\n  const currentHooks = await readJsonObject(hooksConfigPath);\n  const { next: nextHooks, changed: hooksChanged } = patchHooksConfig(\n    currentHooks,\n    destination,\n  );\n  await fs.writeFile(hooksConfigPath, `${JSON.stringify(nextHooks, null, 2)}\\n`, \"utf8\");\n  details.hooksConfigPath = hooksConfigPath;\n\n  // Register MCP server (best-effort — surfaces as warning if it fails)\n  const codex = await detectCodexBinary();\n  let mcpChanged = false;\n  if (codex.available && codex.binary) {\n    const reg = await registerMcpServer(codex.binary, destination);\n    mcpChanged = reg.changed;\n    if (reg.warning) warnings.push(`MCP register: ${reg.warning}`);\n  } else {\n    warnings.push(\"Codex binary not found; skipped MCP registration.\");\n  }\n\n  return {\n    changed: true || hooksChanged || mcpChanged,\n    warnings,\n    details,\n  };\n}\n\nexport async function getCodexPluginStatus(params?: {\n  destination?: string;\n}): Promise<CodexPluginLifecycleResult> {\n  const inspection = await inspectInstall(params);\n  return withAction(inspection, { action: \"status\", changed: false });\n}\n\nexport async function installCodexPlugin(params?: {\n  destination?: string;\n  remixCliPath?: string | null;\n}): Promise<CodexPluginLifecycleResult> {\n  const before = await inspectInstall(params);\n  if (before.status === \"healthy\") {\n    return withAction(before, { action: \"install\", changed: false });\n  }\n  if (!before.codex.available) {\n    return withAction(before, {\n      action: \"install\",\n      changed: false,\n      remediationHint:\n        before.remediationHint ??\n        \"Install the Codex CLI or Codex Desktop app, then re-run.\",\n    });\n  }\n  try {\n    const result = await performInstall(before.destination);\n    const after = await inspectInstall({ destination: before.destination });\n    return withAction(after, {\n      action: \"install\",\n      changed: result.changed,\n      warnings: result.warnings,\n      details: result.details,\n    });\n  } catch (err) {\n    return withAction(before, {\n      action: \"install\",\n      changed: false,\n      status: \"broken\",\n      remediationHint: err instanceof Error ? err.message : String(err),\n    });\n  }\n}\n\nexport async function updateCodexPlugin(params?: {\n  destination?: string;\n  remixCliPath?: string | null;\n}): Promise<CodexPluginLifecycleResult> {\n  const before = await inspectInstall(params);\n  if (!before.codex.available) {\n    return withAction(before, {\n      action: \"update\",\n      changed: false,\n      remediationHint:\n        before.remediationHint ??\n        \"Install the Codex CLI or Codex Desktop app, then re-run.\",\n    });\n  }\n  try {\n    const result = await performInstall(before.destination);\n    const after = await inspectInstall({ destination: before.destination });\n    return withAction(after, {\n      action: \"update\",\n      changed: result.changed,\n      warnings: result.warnings,\n      details: result.details,\n    });\n  } catch (err) {\n    return withAction(before, {\n      action: \"update\",\n      changed: false,\n      status: \"broken\",\n      remediationHint: err instanceof Error ? err.message : String(err),\n    });\n  }\n}\n\nexport async function reinstallCodexPlugin(params?: {\n  destination?: string;\n  remixCliPath?: string | null;\n}): Promise<CodexPluginLifecycleResult> {\n  const before = await inspectInstall(params);\n  // Tear down first so a partial install doesn't shadow the new copy.\n  try {\n    await fs.rm(path.join(before.destination, \"dist\"), { recursive: true, force: true });\n    await fs.rm(path.join(before.destination, \".remix-codex-version\"), { force: true });\n    await fs.rm(path.join(before.destination, RUNTIME_MARKER_FILE), { force: true });\n  } catch {\n    // best-effort\n  }\n  if (before.codex.binary) {\n    await unregisterMcpServer(before.codex.binary);\n  }\n  if (!before.codex.available) {\n    return withAction(before, {\n      action: \"reinstall\",\n      changed: false,\n      remediationHint:\n        before.remediationHint ??\n        \"Install the Codex CLI or Codex Desktop app, then re-run.\",\n    });\n  }\n  try {\n    const result = await performInstall(before.destination);\n    const after = await inspectInstall({ destination: before.destination });\n    return withAction(after, {\n      action: \"reinstall\",\n      changed: result.changed,\n      warnings: result.warnings,\n      details: result.details,\n    });\n  } catch (err) {\n    return withAction(before, {\n      action: \"reinstall\",\n      changed: false,\n      status: \"broken\",\n      remediationHint: err instanceof Error ? err.message : String(err),\n    });\n  }\n}\n\nexport async function uninstallCodexPlugin(params?: {\n  destination?: string;\n}): Promise<CodexPluginLifecycleResult> {\n  const before = await inspectInstall(params);\n  let changed = false;\n\n  // Remove dist files + version stamp\n  try {\n    await fs.rm(path.join(before.destination, \"dist\"), { recursive: true, force: true });\n    await fs.rm(path.join(before.destination, \".remix-codex-version\"), { force: true });\n    await fs.rm(path.join(before.destination, RUNTIME_MARKER_FILE), { force: true });\n    // Remove the destination directory if it's now empty.\n    try {\n      await fs.rmdir(before.destination);\n    } catch {\n      // directory not empty or doesn't exist — fine\n    }\n    changed = true;\n  } catch {\n    // best-effort\n  }\n\n  // Unpatch hooks.json\n  const currentHooks = await readJsonObject(before.hooksConfigPath);\n  const { next, changed: hooksChanged } = unpatchHooksConfig(currentHooks);\n  if (hooksChanged && next) {\n    const hooksMap =\n      next.hooks && typeof next.hooks === \"object\" && !Array.isArray(next.hooks)\n        ? (next.hooks as JsonRecord)\n        : null;\n    if (hooksMap && Object.keys(hooksMap).length === 0) {\n      // Restore an empty top-level container rather than removing the\n      // file outright — the user may have non-`hooks` keys we should\n      // keep, and an empty `{}` is harmless.\n      delete (next as JsonRecord).hooks;\n    }\n    await fs.writeFile(before.hooksConfigPath, `${JSON.stringify(next, null, 2)}\\n`, \"utf8\");\n    changed = true;\n  }\n\n  // Unregister MCP server\n  if (before.codex.binary) {\n    const removed = await unregisterMcpServer(before.codex.binary);\n    if (removed) changed = true;\n  }\n\n  const after = await inspectInstall({ destination: before.destination });\n  return withAction(after, {\n    action: \"uninstall\",\n    changed,\n    status: after.codex.available ? after.status : \"skipped\",\n  });\n}\n\n// -----------------------------------------------------------------------------\n// Pretty printer (parallel to printCursorPluginLifecycleResult)\n// -----------------------------------------------------------------------------\n\nexport function printCodexPluginLifecycleResult(\n  result: CodexPluginLifecycleResult,\n): void {\n  const tag = `[remix codex ${result.action}]`;\n  const statusColor =\n    result.status === \"healthy\"\n      ? pc.green\n      : result.status === \"skipped\"\n      ? pc.dim\n      : result.status === \"outdated\" || result.status === \"stale_or_unverified\"\n      ? pc.yellow\n      : pc.red;\n  console.log(`${pc.bold(tag)} ${statusColor(result.status)}`);\n  console.log(\n    `  Codex binary:  ${result.codexBinary ?? pc.dim(\"not found\")}${\n      result.codexVersion ? pc.dim(` (${result.codexVersion})`) : \"\"\n    }`,\n  );\n  console.log(\n    `  Plugin dir:    ${result.destination}${result.pluginInstalled ? \"\" : pc.dim(\" (not installed)\")}`,\n  );\n  console.log(\n    `  Hooks config:  ${result.hooksConfigPath}${result.hooksConfigured ? pc.green(\" ✓\") : pc.dim(\" (not configured)\")}`,\n  );\n  console.log(\n    `  MCP server:    ${result.mcpRegistered ? pc.green(\"registered\") : pc.dim(\"not registered\")}`,\n  );\n  if (result.installedVersion || result.expectedVersion) {\n    console.log(\n      `  Version:       installed=${result.installedVersion ?? \"—\"} expected=${result.expectedVersion ?? \"—\"}`,\n    );\n  }\n  for (const w of result.warnings) console.log(pc.yellow(`  ! ${w}`));\n  if (result.remediationHint) console.log(pc.yellow(`  → ${result.remediationHint}`));\n  for (const step of result.recommendedNextSteps) {\n    console.log(pc.cyan(`  $ ${step}`));\n  }\n}\n","import path from \"node:path\";\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\n\nimport { CliError } from \"../errors/cliError.js\";\nimport { ensureAuth } from \"../services/ensureAuth.js\";\nimport { readAutoSpawnMarker } from \"../services/historyImport/autoSpawn.js\";\nimport { runHistoryImport } from \"../services/historyImport/historyImportRunner.js\";\nimport { RepoFingerprintCache } from \"../services/historyImport/repoFingerprintCache.js\";\n\n// `remix history import` — walks the user's local Claude Code transcript\n// store and Cursor SQLite for ONE explicitly-targeted repo and uploads\n// it. No interactive confirmation: the SAFETY CONTRACT below is enforced\n// in code so this command is safe to invoke unattended (auto-spawned\n// after first `collab init`, called from CI, etc.).\n//\n// SAFETY CONTRACT (do not relax without reading historyImportRunner.ts):\n//   * Always single-repo. Default = the cwd's git repo. Override with\n//     --repo <path>. The runner enforces this independently — the CLI\n//     just resolves the path and passes a fingerprint.\n//   * The target repo MUST already be bound to Remix\n//     (`.remix/config.json` present). We refuse to upload anything\n//     otherwise — uploading for an unbound directory is a data-leak\n//     risk because the historical_repo_turn table is keyed by\n//     repoFingerprint.\n//   * Slices captured outside the target repo are silently dropped by\n//     the runner; we never even consider their contents.\n//   * promptText is OFF by default. The user must pass\n//     --include-prompt-text to forward user prompts to the server.\n\nexport function registerHistoryCommands(program: Command) {\n  const history = program\n    .command(\"history\")\n    .description(\"Manage historical Remix-imported AI usage data\");\n\n  history\n    .command(\"import\")\n    .description(\n      \"Scan local AI tool transcripts (Claude Code, Cursor) and upload usage history for ONE Remix-bound repo (default: the current directory).\",\n    )\n    .option(\"--json\", \"Output JSON instead of human-readable summary\", false)\n    .option(\n      \"--repo <path>\",\n      \"Path to the repository whose history to import (default: current working directory). Must already be bound to Remix.\",\n    )\n    .option(\n      \"--include-prompt-text\",\n      \"Forward user prompt text to the server. Off by default. When off, only token counts and timestamps are sent.\",\n      false,\n    )\n    .option(\"--no-cursor\", \"Skip the Cursor SQLite scan\", false)\n    .option(\n      \"--since-days <n>\",\n      \"Only import transcripts modified within the last N days\",\n      (raw) => {\n        const parsed = Number.parseInt(raw, 10);\n        if (!Number.isFinite(parsed) || parsed <= 0) {\n          throw new Error(\"--since-days must be a positive integer\");\n        }\n        return parsed;\n      },\n    )\n    .option(\n      \"--before <iso>\",\n      \"Hard upper bound on transcript turn timestamps (ISO-8601). Anything at or after this instant is dropped before upload — these are turns that the LIVE finalize_turn pipeline already recorded (or will record), so importing them as historical would create dashboard duplicates. When omitted, defaults to the cutoff stored in the local history-import marker from the original auto-spawn (no cutoff if the marker is missing).\",\n      (raw) => {\n        if (typeof raw !== \"string\" || raw.length === 0) {\n          throw new Error(\"--before requires an ISO-8601 timestamp\");\n        }\n        if (!Number.isFinite(Date.parse(raw))) {\n          throw new Error(`--before must be an ISO-8601 timestamp; got '${raw}'`);\n        }\n        return raw;\n      },\n    )\n    .option(\n      \"--no-cutoff\",\n      \"Disable the cutoff filter entirely (re-import the whole transcript history). Use only when you've intentionally wiped server-side state and want a full re-upload — otherwise this re-uploads turns the live pipeline already recorded.\",\n      false,\n    )\n    .action(async (opts) => {\n      const json = Boolean(opts.json);\n      const includePromptText = Boolean(opts.includePromptText);\n      // No interactive confirmation any more, so always tell ensureAuth\n      // it can run non-interactively. We still reach interactive sign-in\n      // when needed via the same fallback the rest of the CLI uses.\n      await ensureAuth({ yes: true, json });\n\n      // 1) Resolve target repo from --repo (default: cwd) and require\n      // that it's bound to Remix. We refuse to upload anything if the\n      // user is pointing at an unbound directory — the historical_repo\n      // table is keyed by repoFingerprint, but uploading for a repo\n      // the user hasn't explicitly bound is still a data-leak risk.\n      const repoPathRaw = opts.repo ? String(opts.repo) : process.cwd();\n      const repoPath = path.resolve(repoPathRaw);\n      const cache = new RepoFingerprintCache();\n      const resolution = await cache.resolve(repoPath);\n      if (!resolution.ok) {\n        throw new CliError(\n          `Could not resolve a git repository at ${repoPath} (${resolution.reason}).`,\n          {\n            exitCode: 2,\n            hint: \"Pass --repo <path> pointing at a git repository that is bound to Remix.\",\n          },\n        );\n      }\n      const identity = resolution.identity;\n      if (!identity.isBound) {\n        throw new CliError(\n          `Repository at ${identity.canonicalRepoRoot} is not bound to Remix (no .remix/config.json found).`,\n          {\n            exitCode: 2,\n            hint: \"Run `remix collab init` in that repo first, then re-run history import.\",\n          },\n        );\n      }\n\n      const sinceDays = typeof opts.sinceDays === \"number\" ? opts.sinceDays : undefined;\n      const modifiedSinceMs =\n        sinceDays !== undefined ? Date.now() - sinceDays * 24 * 60 * 60 * 1000 : undefined;\n\n      // Cutoff resolution order:\n      //   1. --no-cutoff          → null (full re-import; user opt-in)\n      //   2. --before <iso>       → use that explicit value\n      //   3. marker.cutoffAt      → reuse the boundary set by the\n      //                              original auto-spawn so manual\n      //                              re-runs stay consistent\n      //   4. else                  → null (no cutoff; legacy behavior)\n      // Step 4 only kicks in when the marker is missing (e.g. user\n      // upgraded from a pre-cutoff version of Remix). The backend's\n      // cross-pipeline ID dedup catches the most common duplicate\n      // shape (Claude turns) on that path, but Cursor live duplicates\n      // can still leak — encourage the user to leave the cutoff alone.\n      const cutoffOverride = typeof opts.before === \"string\" ? opts.before : null;\n      const cutoffDisabled = opts.cutoff === false;\n      let cutoffAt: string | null = null;\n      let cutoffSource: \"explicit\" | \"marker\" | \"none\" | \"disabled\" = \"none\";\n      if (cutoffDisabled) {\n        cutoffAt = null;\n        cutoffSource = \"disabled\";\n      } else if (cutoffOverride) {\n        cutoffAt = cutoffOverride;\n        cutoffSource = \"explicit\";\n      } else {\n        const marker = readAutoSpawnMarker(identity.canonicalRepoRoot, identity.repoFingerprint);\n        if (marker?.cutoffAt) {\n          cutoffAt = marker.cutoffAt;\n          cutoffSource = \"marker\";\n        }\n      }\n\n      // 2) Print a concise banner so the user can see what's about to\n      // happen. No confirmation gate — the SAFETY CONTRACT at the top\n      // of this file is enforced in code (single-repo, bound-only,\n      // promptText-opt-in) so we don't need to ask.\n      if (!json) {\n        console.log(pc.bold(\"Uploading historical AI usage data:\"));\n        console.log(`  Repo:                 ${identity.canonicalRepoRoot}`);\n        console.log(`  Repo fingerprint:     ${identity.repoFingerprint.slice(0, 16)}…`);\n        console.log(`  Cursor scan:          ${opts.cursor === false ? pc.yellow(\"disabled (--no-cursor)\") : \"enabled\"}`);\n        console.log(\n          `  Window:               ${\n            sinceDays !== undefined ? `last ${sinceDays} day(s)` : \"all time\"\n          }`,\n        );\n        const cutoffLabel = (() => {\n          if (cutoffSource === \"disabled\") return pc.yellow(\"DISABLED (--no-cutoff)\");\n          if (cutoffAt && cutoffSource === \"explicit\") return `${cutoffAt} (--before)`;\n          if (cutoffAt && cutoffSource === \"marker\") return `${cutoffAt} (from marker)`;\n          return pc.yellow(\"none (no marker; legacy behavior)\");\n        })();\n        console.log(`  Cutoff (occurredAt <): ${cutoffLabel}`);\n        console.log(\n          `  promptText uploaded:  ${\n            includePromptText\n              ? pc.yellow(\"YES (--include-prompt-text)\")\n              : pc.green(\"no — only token counts + timestamps\")\n          }`,\n        );\n      }\n\n      // 3) Run. The runner enforces single-repo independently using\n      // the targetRepo we hand it.\n      const result = await runHistoryImport({\n        json,\n        targetRepo: {\n          canonicalRepoRoot: identity.canonicalRepoRoot,\n          repoFingerprint: identity.repoFingerprint,\n        },\n        includePromptText,\n        modifiedSinceMs,\n        cutoffAt,\n        // Commander rewrites --no-cursor → opts.cursor === false; pass\n        // null to the runner to fully skip the Cursor scan.\n        cursorSqlitePath: opts.cursor === false ? null : undefined,\n      });\n\n      if (json) {\n        console.log(JSON.stringify(result, null, 2));\n        return;\n      }\n\n      const { serverTotals, scanned, droppedOutsideTarget, droppedAfterCutoff } = result;\n      const totalSlices = scanned.claude.sliceCount + scanned.cursor.sliceCount;\n      console.log(\n        pc.green(\n          `Imported ${serverTotals.inserted} new turns ` +\n            `(${serverTotals.skipped} already on file, ${serverTotals.failed} failed).`,\n        ),\n      );\n      console.log(\n        pc.dim(\n          `Scanned ${totalSlices} turns ` +\n            `(${scanned.claude.sliceCount} Claude / ${scanned.cursor.sliceCount} Cursor); ` +\n            `${droppedOutsideTarget.sliceCount} from other repos, ` +\n            `${droppedAfterCutoff.sliceCount} after cutoff were dropped.`,\n        ),\n      );\n      console.log(\n        pc.dim(\n          result.includedPromptText\n            ? \"  promptText was INCLUDED in this upload.\"\n            : \"  promptText was NOT included in this upload.\",\n        ),\n      );\n      if (serverTotals.failures.length > 0) {\n        console.log(\n          pc.yellow(\n            `${serverTotals.failures.length} record(s) failed; re-run with --json to inspect failures.`,\n          ),\n        );\n      }\n    });\n}\n","import { randomUUID } from \"node:crypto\";\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport pc from \"picocolors\";\nimport type {\n  HistoricalTurnRecord,\n  HistoryImportCaptureSource,\n  HistoryImportProvider,\n  ImportHistoryResponse,\n} from \"@remixhq/core/api\";\nimport type { SlicedTurn } from \"@remixhq/core/history\";\n\nimport { createApiClient } from \"../../clients/api.js\";\nimport { resolveConfig } from \"../../config/config.js\";\nimport { writeAutoSpawnMarker } from \"./autoSpawn.js\";\nimport { computeDedupKey } from \"./dedupKey.js\";\nimport { walkClaudeTranscripts } from \"./claudeWalker.js\";\nimport { walkCursorComposers, type CursorTurnSlice } from \"./cursorWalker.js\";\nimport {\n  tryAcquireImportLock,\n  type LockEnvelope,\n} from \"./historyImportLock.js\";\nimport { RepoFingerprintCache, type RepoIdentity } from \"./repoFingerprintCache.js\";\n\n// CLI entrypoint behind `remix history import`. Walks the local transcript\n// stores (Claude Code + Cursor), filters to a SINGLE explicitly-targeted\n// repo, and posts deduplicated HistoricalTurnRecord payloads in batches.\n//\n// =============================================================================\n// SAFETY BOUNDARY — read this before changing any of this module\n// =============================================================================\n//\n// EARLIER VERSIONS of this runner walked every Remix-bound repo on the\n// laptop and uploaded their transcripts in one go. That behavior leaked\n// the user's full prompt history for repos they never explicitly opted\n// into. We removed it. This runner now refuses to do anything unless the\n// caller passes an exact `targetRepo`, and any transcript whose resolved\n// `repoFingerprint` doesn't match is silently dropped (NOT counted as\n// \"skipped\"; not surfaced; not uploaded; not even buffered).\n//\n// Two further defaults exist to limit what we ever send to the server:\n//   * promptText is OFF by default. The caller must set\n//     `includePromptText: true` to forward user prompts. The CLI gates\n//     that flag behind a foreground confirmation; do not change that.\n//   * metadata.rawCwd is no longer sent verbatim. We send a path RELATIVE\n//     to the matched repo's canonical root, which means the absolute\n//     path on the user's laptop never leaves their machine.\n//\n// If you ever extend this importer to handle multiple repos in one call,\n// you MUST reintroduce explicit foreground enumeration + confirmation in\n// the CLI for each repo, NOT a \"scan-everything-bound\" loop.\n// =============================================================================\n//\n// CONCURRENCY: Each batch POST is awaited serially. Three reasons:\n//   1. The backend prices each row inline; saturating it with 5+\n//      concurrent batches would just multiply pricing-table contention.\n//   2. The CLI is run from a single user terminal — there's no fan-out\n//      benefit for a personal-laptop import.\n//   3. The lockfile only protects against multiple `remix history\n//      import` PROCESSES, not against in-process concurrency. Keeping it\n//      serial means the lockfile semantics are airtight.\n//\n// CURSOR ATTRIBUTION: Cursor doesn't stamp gitBranch or repo path on a\n// composer, so we infer the cwd from the longest common ancestor of all\n// fileSelections in the user→assistant pair. Composers that don't infer\n// to the targetRepo (or fail to attribute at all) are dropped.\n\nconst RECORDS_PER_BATCH = 200;\n\n// Hard cap from historyImportModel.ts (`promptText: z.string().max(20_000)`).\n// Real Claude Code prompts can be MUCH larger when users paste in giant\n// blobs. If we forward those verbatim the backend rejects the WHOLE\n// 200-record batch for one offender and we lose ~200 turns of usage data\n// per bad apple. Truncating with an explicit marker keeps every turn's\n// cost importable while making the truncation auditable.\nconst PROMPT_TEXT_MAX = 20_000;\nconst PROMPT_TEXT_TRUNCATION_SUFFIX = \"\\n…[truncated by remix history import]\";\n\nfunction clipPromptText(text: string | null | undefined): string | null {\n  if (text == null) return null;\n  if (text.length <= PROMPT_TEXT_MAX) return text;\n  const keep = PROMPT_TEXT_MAX - PROMPT_TEXT_TRUNCATION_SUFFIX.length;\n  return text.slice(0, keep) + PROMPT_TEXT_TRUNCATION_SUFFIX;\n}\n\n// Convert an absolute cwd into a path RELATIVE to the matched repo\n// root. This is what we send to the server as metadata. We never send\n// the absolute path because:\n//   * it leaks the user's HOME and directory layout,\n//   * it provides no debugging value once the row is grouped by\n//     repoFingerprint server-side anyway.\n// Falls back to \"\" when the cwd IS the repo root, and \"<unknown>\" if\n// pathRelative produces something startling (defensive — shouldn't fire\n// because the runner only calls this for a cwd that already canonicalised\n// to canonicalRepoRoot via RepoFingerprintCache).\nfunction safeRelativeCwd(canonicalRepoRoot: string, rawCwd: string): string {\n  try {\n    // Resolve symlinks on both sides before comparing. macOS in particular\n    // exposes /var as a symlink to /private/var, which means rawCwd may\n    // be `/var/folders/.../repo` while canonicalRepoRoot resolves through\n    // git to `/private/var/folders/.../repo`. Without realpath, the\n    // relative would be `../../../private/var/...` and we'd label every\n    // record `<outside-repo>` for a repo that the user IS in.\n    const canonReal = (() => {\n      try {\n        return realpathSync(canonicalRepoRoot);\n      } catch {\n        return canonicalRepoRoot;\n      }\n    })();\n    const rawReal = (() => {\n      try {\n        return realpathSync(rawCwd);\n      } catch {\n        return rawCwd;\n      }\n    })();\n    const rel = path.relative(canonReal, rawReal);\n    if (rel === \"\" || rel === \".\") return \"\";\n    if (rel.startsWith(\"..\")) return \"<outside-repo>\";\n    return rel;\n  } catch {\n    return \"<unknown>\";\n  }\n}\n\n// Description of the single repo this run is allowed to upload.\n// `canonicalRepoRoot` and `repoFingerprint` MUST come from the CLI's\n// own RepoFingerprintCache.resolve() against the user-chosen --repo\n// path so every comparison uses the same canonicalisation.\nexport type TargetRepoSpec = {\n  canonicalRepoRoot: string;\n  repoFingerprint: string;\n};\n\nexport type RunHistoryImportOptions = {\n  json: boolean;\n  // The single repo we're allowed to upload for. Required for safety.\n  // Tests that want to skip upload entirely can pass `null` and\n  // additionally provide a stub apiClientFactory — but the runner will\n  // refuse to do anything in that case.\n  targetRepo: TargetRepoSpec;\n  // When false (default), every record is sent with promptText: null\n  // regardless of what the local transcript holds. The CLI gates this\n  // behind an extra opt-in flag + confirmation prompt; do not flip it\n  // anywhere else.\n  includePromptText?: boolean;\n  // If non-null, only this many milliseconds of history are walked.\n  modifiedSinceMs?: number;\n  // Hard upper bound on slice `occurredAt` (ISO-8601). Slices at or\n  // after this instant are dropped before being added to the upload\n  // batch — these are turns the LIVE finalize_turn pipeline either\n  // already recorded or will record, so importing them as historical\n  // would create dashboard duplicates.\n  //\n  // Required when invoked from the auto-spawn path; optional when the\n  // user invokes `remix history import` manually (the CLI defaults\n  // this to the marker's `cutoffAt` if one exists). When omitted the\n  // runner imports every transcript on disk, matching legacy behavior.\n  cutoffAt?: string | null;\n  // Test seam — defaults to ~/.claude/projects.\n  claudeProjectsRoot?: string;\n  // Test seam — overrides the Cursor SQLite path. Pass `null` to disable\n  // Cursor scanning explicitly (e.g. tests or `--no-cursor`).\n  cursorSqlitePath?: string | null;\n  // Test seam — overrides the API client.\n  apiClientFactory?: () => { importHistory: (payload: { records: HistoricalTurnRecord[] }) => Promise<ImportHistoryResponse> };\n  // Test seam — overrides the lockfile path. Pass `null` to disable\n  // single-flight locking entirely (only used for tests that exercise\n  // the rest of the runner without lock interference).\n  lockPath?: string | null;\n};\n\nexport type RunHistoryImportResult = {\n  importBatchId: string;\n  // Set when the run was preempted by another in-progress import on the\n  // same machine. The caller's `serverTotals` will be all-zero in this\n  // case and the structured field tells the spawner not to retry.\n  blockedByLock?: LockEnvelope;\n  // Echo of the target the runner was constrained to.\n  targetRepoFingerprint: string;\n  // Whether promptText was actually included in the upload payloads.\n  // Mirrors the input flag; surfaced so the CLI's success message can\n  // remind the user what they sent.\n  includedPromptText: boolean;\n  // Echo of the cutoff applied to this run, or null when the run had\n  // no cutoff (manual import with no marker). Surfaced so the CLI's\n  // summary can show the user what window of history was uploaded.\n  cutoffAt: string | null;\n  scanned: {\n    claude: { sessionCount: number; sliceCount: number };\n    cursor: { composerCount: number; sliceCount: number; schemaFingerprint: string | null; driftDetected: boolean };\n  };\n  // How many slices we LOOKED AT but dropped because they didn't belong\n  // to the target repo. We deliberately do NOT include their fingerprints\n  // here — that would defeat the purpose of the single-repo scope by\n  // letting the caller observe metadata about other repos.\n  droppedOutsideTarget: { sliceCount: number };\n  // How many slices we dropped because they occurred at or after the\n  // `cutoffAt` boundary — these are LIVE turns the user's plugin already\n  // recorded (or will record) through `finalize_turn`. Expected to be\n  // > 0 on most manual re-runs of `remix history import`.\n  droppedAfterCutoff: { sliceCount: number };\n  // Aggregated server-side outcomes across all batches.\n  serverTotals: {\n    inserted: number;\n    skipped: number;\n    failed: number;\n    perRepo: ImportHistoryResponse[\"perRepo\"];\n    failures: ImportHistoryResponse[\"failures\"];\n  };\n};\n\nexport async function runHistoryImport(options: RunHistoryImportOptions): Promise<RunHistoryImportResult> {\n  const importBatchId = randomUUID();\n  const importerVersion = readImporterVersion();\n  const capturedAt = new Date().toISOString();\n\n  const log = (msg: string) => {\n    if (!options.json) console.log(msg);\n  };\n\n  log(pc.dim(`importBatchId=${importBatchId}`));\n  log(\n    pc.dim(\n      `targetRepo: ${options.targetRepo.canonicalRepoRoot} (fingerprint=${options.targetRepo.repoFingerprint.slice(0, 12)}…)`,\n    ),\n  );\n\n  // Single-flight: refuse to run a second import concurrently on this\n  // host. Tests opt out with lockPath: null. The lock survives the\n  // function's lifetime and is released in `finally` below.\n  let releaseLock: (() => void) | null = null;\n  if (options.lockPath !== null) {\n    const acquired = tryAcquireImportLock({\n      importBatchId,\n      lockPath: options.lockPath,\n    });\n    if (!acquired.ok) {\n      log(\n        pc.yellow(\n          `Another remix history import is already running ` +\n            `(pid=${acquired.blockedBy.pid}, started=${acquired.blockedBy.startedAt}). Skipping.`,\n        ),\n      );\n      return {\n        importBatchId,\n        blockedByLock: acquired.blockedBy,\n        targetRepoFingerprint: options.targetRepo.repoFingerprint,\n        includedPromptText: options.includePromptText ?? false,\n        cutoffAt: options.cutoffAt ?? null,\n        scanned: {\n          claude: { sessionCount: 0, sliceCount: 0 },\n          cursor: { composerCount: 0, sliceCount: 0, schemaFingerprint: null, driftDetected: false },\n        },\n        droppedOutsideTarget: { sliceCount: 0 },\n        droppedAfterCutoff: { sliceCount: 0 },\n        serverTotals: { inserted: 0, skipped: 0, failed: 0, perRepo: [], failures: [] },\n      };\n    }\n    releaseLock = acquired.release;\n  }\n\n  try {\n    return await runHistoryImportLocked({ ...options, importBatchId, importerVersion, capturedAt, log });\n  } finally {\n    releaseLock?.();\n  }\n}\n\nasync function runHistoryImportLocked(\n  options: RunHistoryImportOptions & {\n    importBatchId: string;\n    importerVersion: string;\n    capturedAt: string;\n    log: (msg: string) => void;\n  },\n): Promise<RunHistoryImportResult> {\n  const { importBatchId, importerVersion, capturedAt, log, targetRepo } = options;\n  const includePromptText = options.includePromptText ?? false;\n  // Parse the cutoff once so we can compare against `Date.parse(slice.occurredAt)`\n  // in O(1) per slice. NaN means \"no cutoff supplied\" or \"unparseable input\"\n  // — we treat both as \"import everything\" and emit a warning for the latter.\n  const cutoffAtIso = options.cutoffAt ?? null;\n  const cutoffAtMs = cutoffAtIso ? Date.parse(cutoffAtIso) : Number.NaN;\n  if (cutoffAtIso && !Number.isFinite(cutoffAtMs)) {\n    log(\n      pc.yellow(\n        `  warning: --before/cutoffAt value '${cutoffAtIso}' is not a valid ISO-8601 timestamp; ignoring cutoff.`,\n      ),\n    );\n  }\n  const fingerprintCache = new RepoFingerprintCache();\n  const records: HistoricalTurnRecord[] = [];\n  let droppedOutsideTarget = 0;\n  let droppedAfterCutoff = 0;\n\n  // Helper: takes a cwd and returns the matched identity ONLY when its\n  // fingerprint is the configured target. Anything else is silently\n  // dropped (we increment a counter so we can show the user \"we looked\n  // at N other turns and ignored them\", but we never carry repo info\n  // anywhere downstream).\n  const matchTarget = async (cwd: string): Promise<RepoIdentity | null> => {\n    const resolution = await fingerprintCache.resolve(cwd);\n    if (!resolution.ok) return null;\n    if (resolution.identity.repoFingerprint !== targetRepo.repoFingerprint) return null;\n    return resolution.identity;\n  };\n\n  // Cutoff filter shared by both Claude and Cursor scan loops. Returns\n  // true iff the slice should be UPLOADED (i.e. its occurredAt is\n  // strictly before the cutoff, or no cutoff is configured). A slice\n  // with an unparseable occurredAt is treated as \"before cutoff\" so we\n  // never accidentally drop turns the user expects to see imported.\n  const isBeforeCutoff = (occurredAt: string): boolean => {\n    if (!Number.isFinite(cutoffAtMs)) return true;\n    const sliceMs = Date.parse(occurredAt);\n    if (!Number.isFinite(sliceMs)) return true;\n    return sliceMs < cutoffAtMs;\n  };\n\n  // ---- Claude Code scan ----\n  log(pc.dim(\"Scanning local Claude Code transcripts…\"));\n  const claudeSessions = await walkClaudeTranscripts({\n    projectsRoot: options.claudeProjectsRoot,\n    capturedAt,\n    modifiedSinceMs: options.modifiedSinceMs,\n  });\n  let claudeSliceTotal = 0;\n  for (const session of claudeSessions) {\n    if (session.slices.length === 0) continue;\n    if (!session.primaryCwd) continue;\n    claudeSliceTotal += session.slices.length;\n\n    const identity = await matchTarget(session.primaryCwd);\n    if (!identity) {\n      droppedOutsideTarget += session.slices.length;\n      continue;\n    }\n    for (const slice of session.slices) {\n      if (!isBeforeCutoff(slice.occurredAt)) {\n        droppedAfterCutoff += 1;\n        continue;\n      }\n      records.push(\n        buildClaudeRecord({\n          slice,\n          identity,\n          importBatchId,\n          importerVersion,\n          rawCwd: session.primaryCwd,\n          includePromptText,\n        }),\n      );\n    }\n  }\n\n  // ---- Cursor scan ----\n  // Disabled-on-error rather than disabled-by-default: the optional\n  // better-sqlite3 dep may be absent (returns module_not_available); we\n  // emit a dim notice and keep going. cursorSqlitePath === null means\n  // the caller explicitly opted out.\n  let cursorComposerCount = 0;\n  let cursorSliceTotal = 0;\n  let cursorSchemaFingerprint: string | null = null;\n  let cursorDrift = false;\n  if (options.cursorSqlitePath !== null) {\n    log(pc.dim(\"Scanning local Cursor composers…\"));\n    const cursorResult = await walkCursorComposers({\n      cursorSqlitePath: options.cursorSqlitePath ?? undefined,\n      capturedAt,\n    });\n    if (!cursorResult.ok) {\n      log(pc.dim(`  Cursor scan skipped (${cursorResult.reason}${cursorResult.detail ? `: ${cursorResult.detail}` : \"\"}).`));\n    } else {\n      cursorSchemaFingerprint = cursorResult.schemaFingerprint;\n      cursorDrift = cursorResult.driftDetected;\n      cursorComposerCount = cursorResult.composers.length;\n      for (const composer of cursorResult.composers) {\n        if (composer.turns.length === 0) continue;\n        cursorSliceTotal += composer.turns.length;\n        for (const turn of composer.turns) {\n          if (!turn.inferredCwd) {\n            droppedOutsideTarget += 1;\n            continue;\n          }\n          const identity = await matchTarget(turn.inferredCwd);\n          if (!identity) {\n            droppedOutsideTarget += 1;\n            continue;\n          }\n          if (!isBeforeCutoff(turn.occurredAt)) {\n            droppedAfterCutoff += 1;\n            continue;\n          }\n          records.push(\n            buildCursorRecord({\n              turn,\n              schema: composer.schema,\n              identity,\n              importBatchId,\n              importerVersion,\n              schemaFingerprint: cursorResult.schemaFingerprint,\n              driftDetected: cursorResult.driftDetected,\n              rawCwd: turn.inferredCwd,\n              includePromptText,\n            }),\n          );\n        }\n      }\n    }\n  }\n\n  log(\n    pc.dim(\n      `Found ${claudeSessions.length} Claude sessions / ${cursorComposerCount} Cursor composers; ` +\n        `${claudeSliceTotal + cursorSliceTotal} turns scanned; ` +\n        `${records.length} eligible (target repo), ` +\n        `${droppedOutsideTarget} dropped (other repos / unattributed)` +\n        (Number.isFinite(cutoffAtMs)\n          ? `, ${droppedAfterCutoff} dropped (>= cutoff ${cutoffAtIso}).`\n          : \".\"),\n    ),\n  );\n  log(\n    pc.dim(\n      includePromptText\n        ? \"  promptText: INCLUDED in upload (truncated to 20K each).\"\n        : \"  promptText: NOT included in upload (use --include-prompt-text to opt in).\",\n    ),\n  );\n  if (cursorDrift) {\n    log(\n      pc.yellow(\n        \"  Cursor schema drift detected — some composers were tagged 'cursor_local_v1_drift' for dashboard review.\",\n      ),\n    );\n  }\n\n  const serverTotals = {\n    inserted: 0,\n    skipped: 0,\n    failed: 0,\n    perRepo: [] as ImportHistoryResponse[\"perRepo\"],\n    failures: [] as ImportHistoryResponse[\"failures\"],\n  };\n\n  if (records.length === 0) {\n    log(pc.dim(\"Nothing to upload.\"));\n    // Even when there's nothing to upload we still drop the auto-spawn\n    // marker (with the cutoff applied) so future `collab init` runs and\n    // manual re-runs see a \"history was processed for this repo\" signal\n    // and reuse the same boundary.\n    try {\n      await writeAutoSpawnMarker(\n        targetRepo.canonicalRepoRoot,\n        {\n          importBatchId,\n          importerVersion,\n          inserted: 0,\n          skipped: 0,\n          failed: 0,\n          cutoffAt: cutoffAtIso,\n        },\n        targetRepo.repoFingerprint,\n      );\n    } catch {\n      // Best-effort: matches the post-upload writer below.\n    }\n    return buildResult({\n      importBatchId,\n      targetRepoFingerprint: targetRepo.repoFingerprint,\n      includedPromptText: includePromptText,\n      cutoffAt: cutoffAtIso,\n      claudeSessionCount: claudeSessions.length,\n      claudeSliceTotal,\n      cursorComposerCount,\n      cursorSliceTotal,\n      cursorSchemaFingerprint,\n      cursorDrift,\n      droppedOutsideTarget,\n      droppedAfterCutoff,\n      serverTotals,\n    });\n  }\n\n  const apiClient = options.apiClientFactory\n    ? options.apiClientFactory()\n    : createApiClient(await resolveConfig({}));\n\n  const perRepoAgg = new Map<string, { inserted: number; skipped: number; failed: number }>();\n  const totalBatches = Math.max(1, Math.ceil(records.length / RECORDS_PER_BATCH));\n  let batchIndex = 0;\n  const uploadStart = Date.now();\n  for (let offset = 0; offset < records.length; offset += RECORDS_PER_BATCH) {\n    const batch = records.slice(offset, offset + RECORDS_PER_BATCH);\n    batchIndex += 1;\n    const batchStart = Date.now();\n    let response: ImportHistoryResponse;\n    try {\n      response = await apiClient.importHistory({ records: batch });\n    } catch (err) {\n      const reason = err instanceof Error ? err.message : String(err);\n      log(\n        pc.yellow(\n          `  [${batchIndex}/${totalBatches}] batch failed (${batch.length} records, ${Date.now() - batchStart}ms): ${reason}`,\n        ),\n      );\n      for (const record of batch) {\n        serverTotals.failed += 1;\n        serverTotals.failures.push({\n          dedupKey: record.dedupKey,\n          outcome: \"insert_failed\",\n          reason,\n        });\n      }\n      continue;\n    }\n\n    serverTotals.inserted += response.inserted;\n    serverTotals.skipped += response.skipped;\n    serverTotals.failed += response.failed;\n    serverTotals.failures.push(...response.failures);\n    for (const repoEntry of response.perRepo) {\n      const agg = perRepoAgg.get(repoEntry.repoFingerprint) ?? { inserted: 0, skipped: 0, failed: 0 };\n      agg.inserted += repoEntry.inserted;\n      agg.skipped += repoEntry.skipped;\n      agg.failed += repoEntry.failed;\n      perRepoAgg.set(repoEntry.repoFingerprint, agg);\n    }\n    log(\n      pc.dim(\n        `  [${batchIndex}/${totalBatches}] uploaded ${batch.length} rows in ${Date.now() - batchStart}ms ` +\n          `(running total: +${serverTotals.inserted} inserted, ${serverTotals.skipped} dedup-skipped, ${serverTotals.failed} failed)`,\n      ),\n    );\n  }\n  log(\n    pc.dim(`Upload complete in ${((Date.now() - uploadStart) / 1000).toFixed(1)}s.`),\n  );\n\n  serverTotals.perRepo = Array.from(perRepoAgg.entries()).map(([repoFingerprint, counts]) => ({\n    repoFingerprint,\n    ...counts,\n  }));\n\n  // Drop the auto-spawn marker in local collab state so future\n  // `remix collab init` calls on this repo don't re-spawn the\n  // import. We do this regardless of whether records were inserted vs\n  // dedup-skipped — the marker just records \"the importer ran cleanly\n  // for this repo at least once\", which is exactly the gate for the\n  // auto-spawn helper. If `serverTotals.failed` is non-zero we still\n  // write the marker because partial-failure runs can be re-attempted\n  // safely; the value is in stopping the auto-spawn loop, not in\n  // gating on perfection.\n  try {\n    await writeAutoSpawnMarker(\n      targetRepo.canonicalRepoRoot,\n      {\n        importBatchId,\n        importerVersion,\n        inserted: serverTotals.inserted,\n        skipped: serverTotals.skipped,\n        failed: serverTotals.failed,\n        cutoffAt: cutoffAtIso,\n      },\n      targetRepo.repoFingerprint,\n    );\n  } catch (err) {\n    // Marker write failures are non-fatal: the import already\n    // succeeded server-side. The next init might re-spawn us, which\n    // dedup-skips everything — annoying but not destructive.\n    log(\n      pc.yellow(\n        `  warning: could not write auto-spawn marker (${err instanceof Error ? err.message : String(err)}); future inits may re-trigger this import`,\n      ),\n    );\n  }\n\n  return buildResult({\n    importBatchId,\n    targetRepoFingerprint: targetRepo.repoFingerprint,\n    includedPromptText: includePromptText,\n    cutoffAt: cutoffAtIso,\n    claudeSessionCount: claudeSessions.length,\n    claudeSliceTotal,\n    cursorComposerCount,\n    cursorSliceTotal,\n    cursorSchemaFingerprint,\n    cursorDrift,\n    droppedOutsideTarget,\n    droppedAfterCutoff,\n    serverTotals,\n  });\n}\n\nfunction buildClaudeRecord(input: {\n  slice: SlicedTurn;\n  identity: RepoIdentity;\n  importBatchId: string;\n  importerVersion: string;\n  rawCwd: string;\n  includePromptText: boolean;\n}): HistoricalTurnRecord {\n  const { slice, identity, importBatchId, importerVersion, rawCwd, includePromptText } = input;\n  const providerTurnId = slice.promptId ?? slice.occurredAt;\n  const provider: HistoryImportProvider = \"claude_code\";\n\n  const dedupKey = computeDedupKey({\n    provider,\n    providerSessionId: slice.sessionId,\n    providerTurnId,\n  });\n\n  return {\n    provider,\n    providerSessionId: slice.sessionId,\n    providerTurnId,\n    repoFingerprint: identity.repoFingerprint,\n    captureSource: \"claude_local_v1\",\n    occurredAt: slice.occurredAt,\n    promptText: includePromptText ? clipPromptText(slice.promptText) : null,\n    // assistantText shares the same opt-in as promptText. Both fields\n    // are literal AI dialogue — same sensitivity ceiling, same 20k\n    // server cap (clipPromptText handles the truncation symmetrically\n    // for both strings). Without --include-prompt-text we send null\n    // so the row still lands but no model output text leaves the\n    // machine.\n    assistantText: includePromptText ? clipPromptText(slice.assistantText) : null,\n    workspaceMetadata: {\n      turnUsage: slice.usage,\n      ...(slice.gitBranch ? { branch: slice.gitBranch } : {}),\n    },\n    metadata: {\n      importBatchId,\n      importerVersion,\n      // RELATIVE to the canonical repo root — never the absolute path.\n      // See safeRelativeCwd above for the contract.\n      rawCwd: safeRelativeCwd(identity.canonicalRepoRoot, rawCwd),\n    },\n    dedupKey,\n  };\n}\n\nfunction buildCursorRecord(input: {\n  turn: CursorTurnSlice;\n  schema: \"v1_inline\" | \"v2_headers\" | \"drift\";\n  identity: RepoIdentity;\n  importBatchId: string;\n  importerVersion: string;\n  schemaFingerprint: string;\n  driftDetected: boolean;\n  rawCwd: string;\n  includePromptText: boolean;\n}): HistoricalTurnRecord {\n  const {\n    turn,\n    schema,\n    identity,\n    importBatchId,\n    importerVersion,\n    schemaFingerprint,\n    driftDetected,\n    rawCwd,\n    includePromptText,\n  } = input;\n  const provider: HistoryImportProvider = \"cursor\";\n  const dedupKey = computeDedupKey({\n    provider,\n    providerSessionId: turn.composerId,\n    providerTurnId: turn.userBubbleId,\n  });\n\n  const perRecordDrift = schema === \"drift\" || driftDetected;\n  const captureSource: HistoryImportCaptureSource = perRecordDrift\n    ? \"cursor_local_v1_drift\"\n    : \"cursor_local_v1\";\n\n  return {\n    provider,\n    providerSessionId: turn.composerId,\n    providerTurnId: turn.userBubbleId,\n    repoFingerprint: identity.repoFingerprint,\n    captureSource,\n    occurredAt: turn.occurredAt,\n    promptText: includePromptText ? clipPromptText(turn.promptText) : null,\n    assistantText: includePromptText ? clipPromptText(turn.assistantText) : null,\n    workspaceMetadata: {\n      turnUsage: turn.usage,\n    },\n    metadata: {\n      importBatchId,\n      importerVersion,\n      scannerSchemaFingerprint: schemaFingerprint,\n      driftDetected: perRecordDrift,\n      rawCwd: safeRelativeCwd(identity.canonicalRepoRoot, rawCwd),\n    },\n    dedupKey,\n  };\n}\n\nfunction buildResult(input: {\n  importBatchId: string;\n  targetRepoFingerprint: string;\n  includedPromptText: boolean;\n  cutoffAt: string | null;\n  claudeSessionCount: number;\n  claudeSliceTotal: number;\n  cursorComposerCount: number;\n  cursorSliceTotal: number;\n  cursorSchemaFingerprint: string | null;\n  cursorDrift: boolean;\n  droppedOutsideTarget: number;\n  droppedAfterCutoff: number;\n  serverTotals: RunHistoryImportResult[\"serverTotals\"];\n}): RunHistoryImportResult {\n  return {\n    importBatchId: input.importBatchId,\n    targetRepoFingerprint: input.targetRepoFingerprint,\n    includedPromptText: input.includedPromptText,\n    cutoffAt: input.cutoffAt,\n    scanned: {\n      claude: { sessionCount: input.claudeSessionCount, sliceCount: input.claudeSliceTotal },\n      cursor: {\n        composerCount: input.cursorComposerCount,\n        sliceCount: input.cursorSliceTotal,\n        schemaFingerprint: input.cursorSchemaFingerprint,\n        driftDetected: input.cursorDrift,\n      },\n    },\n    droppedOutsideTarget: { sliceCount: input.droppedOutsideTarget },\n    droppedAfterCutoff: { sliceCount: input.droppedAfterCutoff },\n    serverTotals: input.serverTotals,\n  };\n}\n\n// Reads the CLI's own version from package.json. Matches what cli.ts does\n// for --version. Cached on first call.\ndeclare const __REMIX_CLI_VERSION__: string;\nlet cachedImporterVersion: string | null = null;\nfunction readImporterVersion(): string {\n  if (cachedImporterVersion) return cachedImporterVersion;\n  try {\n    // Prefer the build-time injected constant; works in any output\n    // format (CJS/ESM) and survives the desktop app staging the bundle\n    // away from its source `package.json`.\n    if (typeof __REMIX_CLI_VERSION__ === \"string\" && __REMIX_CLI_VERSION__.length > 0) {\n      cachedImporterVersion = __REMIX_CLI_VERSION__;\n      return cachedImporterVersion;\n    }\n    const here = fileURLToPath(import.meta.url);\n    // src/services/historyImport → up 3 → repo root.\n    const candidate = path.resolve(path.dirname(here), \"..\", \"..\", \"..\", \"package.json\");\n    const pkg = JSON.parse(readFileSync(candidate, \"utf8\")) as { version?: unknown };\n    if (typeof pkg.version === \"string\" && pkg.version.length > 0) {\n      cachedImporterVersion = pkg.version;\n      return pkg.version;\n    }\n  } catch {\n    // best-effort\n  }\n  cachedImporterVersion = \"0.0.0-unknown\";\n  return cachedImporterVersion;\n}\n","import { createHash } from \"node:crypto\";\n\n// MUST match exactly: remix-backend/src/api/historyImport/dedupKey.ts\n//\n// The CLI hashes every record before sending and the server independently\n// recomputes the digest with this same formula, rejecting any mismatch as\n// `dedup_key_mismatch`. So a drift here means a working CLI sends rows the\n// backend refuses to ingest. Don't tweak the namespace string, the \":\"\n// separator, or the field order without bumping the version namespace AND\n// landing the matching backend change in the same release.\n//\n// FORMULAS (must match backend):\n//   claude_code: sha256(\"claude_local_v1:\" + sessionId + \":\" + promptId)\n//   cursor:      sha256(\"cursor_local_v1:\"  + composerId + \":\" + userBubbleId)\n\nexport type DedupKeyProvider = \"claude_code\" | \"cursor\";\n\nconst VERSION_NAMESPACE: Record<DedupKeyProvider, string> = {\n  claude_code: \"claude_local_v1\",\n  cursor: \"cursor_local_v1\",\n};\n\nexport function computeDedupKey(input: {\n  provider: DedupKeyProvider;\n  providerSessionId: string | null;\n  providerTurnId: string;\n}): string {\n  const namespace = VERSION_NAMESPACE[input.provider];\n  const session = input.providerSessionId ?? \"\";\n  const payload = `${namespace}:${session}:${input.providerTurnId}`;\n  return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport {\n  readAndParseTranscript,\n  sliceTranscriptIntoTurns,\n  type SlicedTurn,\n  type TranscriptEvent,\n} from \"@remixhq/core/history\";\n\n// Walks the local Claude Code transcript store and produces one\n// SlicedTurn per user-boundary, tagged with the cwd Claude wrote at the\n// time the turn was recorded. Repo attribution (cwd → repoFingerprint) is\n// done by the caller via RepoFingerprintCache.\n//\n// LAYOUT (verified on macOS, Claude Code 2.1.114+):\n//   ~/.claude/projects/<sanitized-cwd>/<sessionId>.jsonl\n// where <sanitized-cwd> is the absolute project path with `/` → `-`.\n// Each .jsonl is a single Claude session and contains every event that\n// session emitted, including user prompts and assistant turns. We treat\n// each .jsonl as one session; the slicer walks every user-boundary inside.\n//\n// CWD ATTRIBUTION:\n//   Claude stamps the active cwd on every user event. We could derive the\n//   repo from the directory name (it's the cwd path with `/` → `-`), but\n//   that's lossy for paths containing literal `-`. Reading the cwd off the\n//   first user event in the session is exact and only adds one O(events)\n//   pass over data we'd parse anyway. The walker returns the first cwd it\n//   sees per session — sessions that change cwd mid-flight (rare;\n//   typically `cd` inside a tool call doesn't mutate Claude's tracked cwd)\n//   would be misattributed only for the post-cd turns, which we accept.\n\nexport type ClaudeTranscriptSession = {\n  // Absolute path to the .jsonl file on disk. Useful for warnings/logs.\n  transcriptPath: string;\n  // sessionId == basename(transcriptPath, \".jsonl\"); we re-derive it from\n  // the events themselves to catch cases where a sysadmin renamed the file.\n  sessionId: string;\n  // First non-null cwd seen on a user event in this session. May be null\n  // if the session contains no qualifying user events.\n  primaryCwd: string | null;\n  // Sliced turns produced by sliceTranscriptIntoTurns. Empty array means\n  // the file existed but had no captureable user-boundary turns.\n  slices: SlicedTurn[];\n};\n\nexport type WalkClaudeTranscriptsOptions = {\n  // Override the root directory. Defaults to ~/.claude/projects. Tests\n  // pass a temp dir.\n  projectsRoot?: string;\n  // ISO timestamp stamped on every TurnUsage's `capturedAt` field.\n  // The slicer threads this through buildTurnUsage so re-running the\n  // import on the same fixture produces deterministic output.\n  capturedAt: string;\n  // If non-null, transcripts whose mtime is older than this are skipped.\n  // Wired up so a future `--since` flag can trim the import to recent\n  // history without changing the walker contract.\n  modifiedSinceMs?: number;\n};\n\nexport function getDefaultClaudeProjectsRoot(): string {\n  return path.join(os.homedir(), \".claude\", \"projects\");\n}\n\nexport async function walkClaudeTranscripts(\n  options: WalkClaudeTranscriptsOptions,\n): Promise<ClaudeTranscriptSession[]> {\n  const root = options.projectsRoot ?? getDefaultClaudeProjectsRoot();\n\n  let projectDirents: import(\"node:fs\").Dirent[];\n  try {\n    projectDirents = await fs.readdir(root, { withFileTypes: true });\n  } catch (err) {\n    const code = err && typeof err === \"object\" && \"code\" in err ? (err as { code?: string }).code : null;\n    if (code === \"ENOENT\") return [];\n    throw err;\n  }\n\n  const transcriptPaths: string[] = [];\n  for (const dirent of projectDirents) {\n    if (!dirent.isDirectory()) continue;\n    const projectDir = path.join(root, dirent.name);\n    let files: import(\"node:fs\").Dirent[];\n    try {\n      files = await fs.readdir(projectDir, { withFileTypes: true });\n    } catch {\n      continue;\n    }\n    for (const file of files) {\n      if (!file.isFile()) continue;\n      if (!file.name.endsWith(\".jsonl\")) continue;\n      transcriptPaths.push(path.join(projectDir, file.name));\n    }\n  }\n\n  // Recent-first: when there are thousands of historical transcripts we\n  // want the dashboard to light up with the user's *current* repo first.\n  // Pure mtime sort is enough for this; it doesn't have to perfectly\n  // reflect logical chronology.\n  const withMtime: Array<{ pathname: string; mtimeMs: number }> = [];\n  for (const pathname of transcriptPaths) {\n    try {\n      const stat = await fs.stat(pathname);\n      if (typeof options.modifiedSinceMs === \"number\" && stat.mtimeMs < options.modifiedSinceMs) continue;\n      withMtime.push({ pathname, mtimeMs: stat.mtimeMs });\n    } catch {\n      // stat failures (perm denied, race with deletion) just skip; the\n      // rest of the import keeps going.\n    }\n  }\n  withMtime.sort((a, b) => b.mtimeMs - a.mtimeMs);\n\n  const sessions: ClaudeTranscriptSession[] = [];\n  for (const { pathname } of withMtime) {\n    const session = await processTranscript(pathname, options.capturedAt);\n    if (session) sessions.push(session);\n  }\n  return sessions;\n}\n\nasync function processTranscript(\n  transcriptPath: string,\n  capturedAt: string,\n): Promise<ClaudeTranscriptSession | null> {\n  const result = await readAndParseTranscript(transcriptPath);\n  if (!result.ok) return null;\n\n  const sessionId = deriveSessionId(transcriptPath, result.events);\n  if (!sessionId) return null;\n\n  const slices = sliceTranscriptIntoTurns({\n    events: result.events,\n    sessionId,\n    capturedAt,\n    extensions: null,\n  });\n\n  const primaryCwd = firstUserEventCwd(result.events);\n\n  return {\n    transcriptPath,\n    sessionId,\n    primaryCwd,\n    slices,\n  };\n}\n\nfunction deriveSessionId(transcriptPath: string, events: TranscriptEvent[]): string | null {\n  // Prefer the in-event sessionId (matches what the live hook sees). Fall\n  // back to the filename so a renamed jsonl still gets imported.\n  for (const event of events) {\n    const id = (event as { sessionId?: unknown }).sessionId;\n    if (typeof id === \"string\" && id.trim().length > 0) return id.trim();\n  }\n  const base = path.basename(transcriptPath, \".jsonl\");\n  return base.length > 0 ? base : null;\n}\n\nfunction firstUserEventCwd(events: TranscriptEvent[]): string | null {\n  for (const event of events) {\n    if ((event as { type?: unknown }).type !== \"user\") continue;\n    const cwd = (event as { cwd?: unknown }).cwd;\n    if (typeof cwd === \"string\" && cwd.trim().length > 0) return cwd.trim();\n  }\n  return null;\n}\n","// src/history/claudeCodeTranscript.ts\nimport fs from \"fs/promises\";\nasync function readAndParseTranscript(transcriptPath) {\n  let raw;\n  try {\n    raw = await fs.readFile(transcriptPath, \"utf8\");\n  } catch (err) {\n    const code = err && typeof err === \"object\" && \"code\" in err ? err.code : null;\n    if (code === \"ENOENT\") {\n      return { ok: false, reason: \"transcript_not_found\" };\n    }\n    return { ok: false, reason: \"transcript_unreadable\" };\n  }\n  const events = [];\n  for (const line of raw.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (!trimmed) continue;\n    try {\n      const parsed = JSON.parse(trimmed);\n      if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n        events.push(parsed);\n      }\n    } catch {\n    }\n  }\n  return { ok: true, events };\n}\n\n// src/history/claudeCodeUsageHarvester.ts\nvar HARVESTER_WARNING_CODES = [\n  \"cache_split_unavailable\",\n  \"unknown_server_tool\",\n  \"transcript_truncated\",\n  \"subagent_model_differs\",\n  \"server_tool_count_mismatch\"\n];\nvar BOUNDARY_TIMESTAMP_TOLERANCE_MS = 500;\nfunction parseTimestamp(value) {\n  if (typeof value !== \"string\") return null;\n  const ms = Date.parse(value);\n  return Number.isFinite(ms) ? ms : null;\n}\nfunction extractUserContentText(message) {\n  if (!message || typeof message !== \"object\") return null;\n  const content = message.content;\n  if (typeof content === \"string\") return content;\n  if (Array.isArray(content)) {\n    const textBlocks = content.filter((block) => Boolean(block) && typeof block === \"object\").filter((block) => block.type === \"text\" && typeof block.text === \"string\").map((block) => block.text);\n    if (textBlocks.length === 0) return null;\n    return textBlocks.join(\"\\n\");\n  }\n  return null;\n}\nfunction isUserBoundary(event) {\n  return event.type === \"user\" && event.isMeta !== true && event.isSidechain !== true;\n}\nfunction extractAssistantContentText(turnEvents) {\n  const chunks = [];\n  for (const ev of turnEvents) {\n    if (ev.type !== \"assistant\") continue;\n    const text = extractUserContentText(ev.message);\n    if (text && text.length > 0) chunks.push(text);\n  }\n  if (chunks.length === 0) return null;\n  const deduped = [];\n  for (const chunk of chunks) {\n    if (deduped[deduped.length - 1] !== chunk) deduped.push(chunk);\n  }\n  return deduped.join(\"\\n\");\n}\nfunction findBoundary(sessionEvents, promptText, submittedAt, upperMs) {\n  const isWithinUpperBound = (ev) => {\n    if (upperMs === null) return true;\n    const ms = parseTimestamp(ev.timestamp);\n    return ms !== null && ms < upperMs;\n  };\n  let contentMatch = null;\n  for (let i = sessionEvents.length - 1; i >= 0; i--) {\n    const ev = sessionEvents[i];\n    if (!isUserBoundary(ev)) continue;\n    if (!isWithinUpperBound(ev)) continue;\n    const text = extractUserContentText(ev.message);\n    if (text !== null && text === promptText) {\n      contentMatch = ev;\n      break;\n    }\n  }\n  if (contentMatch) return { boundary: contentMatch, usedFallback: false };\n  const submittedMs = parseTimestamp(submittedAt);\n  if (submittedMs === null) return { boundary: null, usedFallback: false };\n  for (let i = sessionEvents.length - 1; i >= 0; i--) {\n    const ev = sessionEvents[i];\n    if (!isUserBoundary(ev)) continue;\n    if (!isWithinUpperBound(ev)) continue;\n    const ms = parseTimestamp(ev.timestamp);\n    if (ms === null) continue;\n    if (ms >= submittedMs - BOUNDARY_TIMESTAMP_TOLERANCE_MS) {\n      return { boundary: ev, usedFallback: true };\n    }\n  }\n  return { boundary: null, usedFallback: false };\n}\nfunction asNumberOrNull(value) {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\nfunction asStringOrNull(value) {\n  return typeof value === \"string\" ? value : null;\n}\nfunction extractAssistantMessage(event) {\n  const message = event.message;\n  if (!message || typeof message !== \"object\") return null;\n  const msg = message;\n  if (msg.role !== \"assistant\" && msg.role !== void 0) {\n  }\n  const content = Array.isArray(msg.content) ? msg.content : [];\n  const usage = msg.usage && typeof msg.usage === \"object\" ? msg.usage : null;\n  return {\n    id: asStringOrNull(msg.id),\n    model: asStringOrNull(msg.model),\n    content,\n    usage\n  };\n}\nfunction usageIsComplete(usage) {\n  if (!usage) return false;\n  const hasInput = typeof usage.input_tokens === \"number\";\n  const hasOutput = typeof usage.output_tokens === \"number\";\n  const hasCacheRead = typeof usage.cache_read_input_tokens === \"number\";\n  return hasInput && hasOutput && hasCacheRead;\n}\nfunction buildModelCall(event, msg) {\n  const usage = msg.usage ?? {};\n  const cacheCreation = usage.cache_creation && typeof usage.cache_creation === \"object\" ? usage.cache_creation : null;\n  const has5m = cacheCreation && typeof cacheCreation.ephemeral_5m_input_tokens === \"number\";\n  const has1h = cacheCreation && typeof cacheCreation.ephemeral_1h_input_tokens === \"number\";\n  const cacheWrite5mTokens = has5m ? cacheCreation.ephemeral_5m_input_tokens : null;\n  const cacheWrite1hTokens = has1h ? cacheCreation.ephemeral_1h_input_tokens : null;\n  const splitAvailable = has5m || has1h;\n  const cacheWriteTokens = splitAvailable ? null : asNumberOrNull(usage.cache_creation_input_tokens);\n  return {\n    provider: \"anthropic\",\n    model: msg.model,\n    tier: asStringOrNull(usage.service_tier),\n    requestId: asStringOrNull(event.requestId),\n    timestamp: asStringOrNull(event.timestamp),\n    isSidechain: event.isSidechain === true,\n    inputTokens: asNumberOrNull(usage.input_tokens),\n    outputTokens: asNumberOrNull(usage.output_tokens),\n    cacheReadTokens: asNumberOrNull(usage.cache_read_input_tokens),\n    cacheWriteTokens,\n    cacheWrite5mTokens,\n    cacheWrite1hTokens,\n    reasoningTokens: null,\n    audioInputTokens: null,\n    imageInputTokens: null\n  };\n}\nfunction scanServerToolUses(content) {\n  const uses = [];\n  for (const block of content) {\n    if (!block || typeof block !== \"object\") continue;\n    const b = block;\n    const id = b.id;\n    if (typeof id !== \"string\" || !id.startsWith(\"srvtoolu_\")) continue;\n    const name = typeof b.name === \"string\" ? b.name : \"\";\n    switch (name) {\n      case \"web_search\":\n        uses.push({ tool: \"web_search\", unit: \"per_request\", isKnown: true, id, source: \"direct\" });\n        break;\n      case \"web_fetch\":\n        uses.push({ tool: \"web_fetch\", unit: \"per_request\", isKnown: true, id, source: \"direct\" });\n        break;\n      case \"code_execution\":\n        uses.push({ tool: \"code_execution\", unit: \"invocation\", isKnown: true, id, source: \"direct\" });\n        break;\n      default:\n        uses.push({ tool: name || \"unknown\", unit: \"invocation\", isKnown: false, id, source: \"direct\" });\n        break;\n    }\n  }\n  return uses;\n}\nfunction buildClientToolNameMap(turnEvents) {\n  const map = /* @__PURE__ */ new Map();\n  for (const ev of turnEvents) {\n    if (ev.type !== \"assistant\") continue;\n    const msg = ev.message;\n    if (!msg || typeof msg !== \"object\") continue;\n    const content = msg.content;\n    if (!Array.isArray(content)) continue;\n    for (const block of content) {\n      if (!block || typeof block !== \"object\") continue;\n      const b = block;\n      if (b.type !== \"tool_use\") continue;\n      const id = b.id;\n      const name = b.name;\n      if (typeof id !== \"string\" || typeof name !== \"string\") continue;\n      if (!id.startsWith(\"toolu_\")) continue;\n      map.set(id, name);\n    }\n  }\n  return map;\n}\nfunction scanEmbeddedServerToolUses(turnEvents, clientToolNames) {\n  const uses = [];\n  for (const ev of turnEvents) {\n    if (ev.type !== \"user\") continue;\n    const tur = ev.toolUseResult;\n    if (!tur || typeof tur !== \"object\") continue;\n    const results = tur.results;\n    if (!Array.isArray(results)) continue;\n    let parentToolName = \"\";\n    const userMsg = ev.message;\n    if (userMsg && typeof userMsg === \"object\") {\n      const userContent = userMsg.content;\n      if (Array.isArray(userContent)) {\n        for (const block of userContent) {\n          if (!block || typeof block !== \"object\") continue;\n          const b = block;\n          if (b.type !== \"tool_result\") continue;\n          const parentId = b.tool_use_id;\n          if (typeof parentId === \"string\") {\n            parentToolName = clientToolNames.get(parentId) ?? \"\";\n            break;\n          }\n        }\n      }\n    }\n    for (const entry of results) {\n      if (!entry || typeof entry !== \"object\") continue;\n      const srvId = entry.tool_use_id;\n      if (typeof srvId !== \"string\" || !srvId.startsWith(\"srvtoolu_\")) continue;\n      if (parentToolName === \"WebFetch\") {\n        uses.push({ tool: \"web_fetch\", unit: \"per_request\", isKnown: true, id: srvId, source: \"embedded\" });\n      } else {\n        uses.push({ tool: \"web_search\", unit: \"per_request\", isKnown: true, id: srvId, source: \"embedded\" });\n      }\n    }\n  }\n  return uses;\n}\nfunction dedupeByServerToolId(records) {\n  const seen = /* @__PURE__ */ new Map();\n  for (const r of records) {\n    const existing = seen.get(r.id);\n    if (!existing) {\n      seen.set(r.id, r);\n      continue;\n    }\n    if (existing.source === \"embedded\" && r.source === \"direct\") {\n      seen.set(r.id, r);\n    }\n  }\n  return Array.from(seen.values());\n}\nfunction aggregateServerTools(uses) {\n  const map = /* @__PURE__ */ new Map();\n  let sawUnknown = false;\n  let sawEmbedded = false;\n  for (const use of uses) {\n    if (!use.isKnown) sawUnknown = true;\n    if (use.source === \"embedded\") sawEmbedded = true;\n    const key = `anthropic|${use.tool}|${use.unit}`;\n    const existing = map.get(key);\n    if (existing) {\n      existing.quantity += 1;\n    } else {\n      map.set(key, { provider: \"anthropic\", tool: use.tool, unit: use.unit, quantity: 1 });\n    }\n  }\n  return { serverTools: Array.from(map.values()), sawUnknown, sawEmbedded };\n}\nfunction sumCrossCheckCounts(usageBlocks) {\n  const totals = /* @__PURE__ */ new Map();\n  const keyFor = (raw) => {\n    if (raw === \"web_search_requests\") return \"web_search\";\n    if (raw === \"web_fetch_requests\") return \"web_fetch\";\n    return null;\n  };\n  for (const usage of usageBlocks) {\n    const stu = usage.server_tool_use;\n    if (!stu || typeof stu !== \"object\") continue;\n    for (const [rawKey, rawVal] of Object.entries(stu)) {\n      const mapped = keyFor(rawKey);\n      if (!mapped) continue;\n      if (typeof rawVal !== \"number\" || !Number.isFinite(rawVal)) continue;\n      totals.set(mapped, (totals.get(mapped) ?? 0) + rawVal);\n    }\n  }\n  return totals;\n}\nfunction primaryToolCounts(serverTools) {\n  const map = /* @__PURE__ */ new Map();\n  for (const entry of serverTools) {\n    map.set(entry.tool, (map.get(entry.tool) ?? 0) + entry.quantity);\n  }\n  return map;\n}\nfunction resolveVersion(events) {\n  for (const ev of events) {\n    if (typeof ev.version === \"string\" && ev.version.trim()) return ev.version.trim();\n  }\n  return null;\n}\nfunction buildTurnUsage(args) {\n  const assistantEvents = args.turnEvents.filter((ev) => ev.type === \"assistant\");\n  if (assistantEvents.length === 0) {\n    return { ok: false, reason: \"no_messages_for_turn\" };\n  }\n  const warnings = [...args.initialWarnings];\n  const calls = [];\n  const usageBlocks = [];\n  let anyIncomplete = false;\n  let anyComplete = false;\n  let sawLumpSumFallback = false;\n  const collectedServerToolUses = [];\n  const mainModels = /* @__PURE__ */ new Set();\n  const sidechainModels = /* @__PURE__ */ new Set();\n  for (const ev of assistantEvents) {\n    const msg = extractAssistantMessage(ev);\n    if (!msg) continue;\n    if (usageIsComplete(msg.usage)) {\n      anyComplete = true;\n    } else {\n      anyIncomplete = true;\n    }\n    if (msg.usage) usageBlocks.push(msg.usage);\n    const call = buildModelCall(ev, msg);\n    calls.push(call);\n    if (call.cacheWrite5mTokens === null && call.cacheWrite1hTokens === null && call.cacheWriteTokens !== null) {\n      sawLumpSumFallback = true;\n    }\n    collectedServerToolUses.push(...scanServerToolUses(msg.content));\n    if (call.model) {\n      if (call.isSidechain) sidechainModels.add(call.model);\n      else mainModels.add(call.model);\n    }\n  }\n  if (calls.length === 0) {\n    return { ok: false, reason: \"no_messages_for_turn\" };\n  }\n  if (sawLumpSumFallback) {\n    warnings.push({\n      code: \"cache_split_unavailable\",\n      message: \"Assistant message reported lump-sum cache_creation_input_tokens without the 5m/1h split.\"\n    });\n  }\n  const clientToolNames = buildClientToolNameMap(args.turnEvents);\n  const embeddedUses = scanEmbeddedServerToolUses(args.turnEvents, clientToolNames);\n  const merged = dedupeByServerToolId([...collectedServerToolUses, ...embeddedUses]);\n  const { serverTools, sawUnknown, sawEmbedded } = aggregateServerTools(merged);\n  if (sawUnknown) {\n    warnings.push({\n      code: \"unknown_server_tool\",\n      message: \"Encountered a server tool whose name is not in the known list (web_search, web_fetch, code_execution).\"\n    });\n  }\n  const crossCheck = sumCrossCheckCounts(usageBlocks);\n  const primary = primaryToolCounts(serverTools);\n  const allTools = /* @__PURE__ */ new Set([...crossCheck.keys(), ...primary.keys()]);\n  for (const tool of allTools) {\n    const crossVal = crossCheck.get(tool) ?? 0;\n    const primVal = primary.get(tool) ?? 0;\n    if (crossVal === primVal) continue;\n    if (sawEmbedded && crossVal === 0) continue;\n    warnings.push({\n      code: \"server_tool_count_mismatch\",\n      message: `Server-tool ${tool} count mismatch: srvtoolu_ scan=${primVal}, usage.server_tool_use=${crossVal}. Trusting srvtoolu_ count.`\n    });\n    break;\n  }\n  const subagentMismatch = mainModels.size > 0 && sidechainModels.size > 0 && [...sidechainModels].some((m) => !mainModels.has(m));\n  if (subagentMismatch) {\n    warnings.push({\n      code: \"subagent_model_differs\",\n      message: \"At least one sidechain ModelCall uses a model different from the main-chain model in this turn.\"\n    });\n  }\n  let confidence;\n  if (!anyComplete && anyIncomplete) confidence = \"unknown\";\n  else if (anyIncomplete) confidence = \"partial\";\n  else if (anyComplete) confidence = \"exact\";\n  else confidence = \"unknown\";\n  if (args.checkSubsequentEvent) {\n    const lastAssistantMs = (() => {\n      const msList = assistantEvents.map((ev) => parseTimestamp(ev.timestamp)).filter((ms) => ms !== null);\n      return msList.length ? Math.max(...msList) : null;\n    })();\n    const hasSubsequent = lastAssistantMs !== null && args.sessionEvents.some((ev) => {\n      const ms = parseTimestamp(ev.timestamp);\n      if (ms === null || ms <= lastAssistantMs) return false;\n      if (args.upperMs !== null && ms >= args.upperMs) return false;\n      return true;\n    });\n    if (!hasSubsequent && confidence === \"exact\") {\n      confidence = \"partial\";\n      warnings.push({\n        code: \"transcript_truncated\",\n        message: \"Previous turn has no subsequent event after its last assistant message; transcript may be truncated.\"\n      });\n    }\n  }\n  const resolvedVersion = args.agent.version ?? resolveVersion(args.turnEvents) ?? resolveVersion(args.sessionEvents);\n  const usage = {\n    schemaVersion: 1,\n    capturedAt: args.capturedAt,\n    captureSource: args.captureSource,\n    confidence,\n    agent: {\n      name: args.agent.name,\n      version: resolvedVersion,\n      sessionId: args.agent.sessionId,\n      turnId: args.agent.turnId,\n      plan: args.agent.plan\n    },\n    calls,\n    serverTools,\n    warnings,\n    extensions: args.extensions\n  };\n  return { ok: true, usage };\n}\nfunction harvestClaudeCodeUsage(input) {\n  const sessionEvents = input.events.filter((ev) => ev.sessionId === input.sessionId);\n  const upperMs = input.nextBoundaryAt ? parseTimestamp(input.nextBoundaryAt) : null;\n  const { boundary, usedFallback } = findBoundary(\n    sessionEvents,\n    input.promptText,\n    input.submittedAt,\n    upperMs\n  );\n  if (!boundary) {\n    return { ok: false, reason: \"no_user_boundary_found\" };\n  }\n  const boundaryMs = parseTimestamp(boundary.timestamp);\n  if (boundaryMs === null) {\n    return { ok: false, reason: \"no_user_boundary_found\" };\n  }\n  const turnEvents = sessionEvents.filter((ev) => {\n    const ms = parseTimestamp(ev.timestamp);\n    if (ms === null || ms <= boundaryMs) return false;\n    if (upperMs !== null && ms >= upperMs) return false;\n    return true;\n  });\n  const initialWarnings = [];\n  if (usedFallback) {\n    initialWarnings.push({\n      code: \"transcript_truncated\",\n      message: \"Prompt-text equality match failed; used timestamp-tolerance fallback to locate the user boundary.\"\n    });\n  }\n  const built = buildTurnUsage({\n    sessionEvents,\n    turnEvents,\n    upperMs,\n    initialWarnings,\n    agent: input.agent,\n    capturedAt: input.capturedAt,\n    captureSource: \"hook\",\n    extensions: input.extensions,\n    checkSubsequentEvent: input.checkSubsequentEvent === true\n  });\n  if (!built.ok) return built;\n  return {\n    ok: true,\n    usage: built.usage,\n    boundaryAt: typeof boundary.timestamp === \"string\" ? boundary.timestamp : null\n  };\n}\nfunction sliceTranscriptIntoTurns(input) {\n  const sessionEvents = input.events.filter((ev) => ev.sessionId === input.sessionId);\n  const boundaries = sessionEvents.filter(isUserBoundary);\n  const result = [];\n  for (let i = 0; i < boundaries.length; i++) {\n    const boundary = boundaries[i];\n    const nextBoundary = boundaries[i + 1] ?? null;\n    const boundaryMs = parseTimestamp(boundary.timestamp);\n    if (boundaryMs === null) continue;\n    const occurredAt = asStringOrNull(boundary.timestamp);\n    if (occurredAt === null) continue;\n    const upperMs = nextBoundary ? parseTimestamp(nextBoundary.timestamp) : null;\n    const turnEvents = sessionEvents.filter((ev) => {\n      const ms = parseTimestamp(ev.timestamp);\n      if (ms === null || ms <= boundaryMs) return false;\n      if (upperMs !== null && ms >= upperMs) return false;\n      return true;\n    });\n    const promptId = asStringOrNull(boundary.promptId);\n    const promptText = extractUserContentText(boundary.message);\n    const assistantText = extractAssistantContentText(turnEvents);\n    const gitBranch = asStringOrNull(boundary.gitBranch);\n    const cwd = asStringOrNull(boundary.cwd);\n    const built = buildTurnUsage({\n      sessionEvents,\n      turnEvents,\n      upperMs,\n      initialWarnings: [],\n      agent: {\n        name: \"claude-code\",\n        version: null,\n        sessionId: input.sessionId,\n        turnId: promptId,\n        plan: null\n      },\n      capturedAt: input.capturedAt,\n      captureSource: \"historical_import\",\n      extensions: input.extensions ?? null,\n      checkSubsequentEvent: false\n    });\n    if (!built.ok) continue;\n    result.push({\n      sessionId: input.sessionId,\n      promptId,\n      promptText,\n      assistantText,\n      occurredAt,\n      gitBranch,\n      cwd,\n      usage: built.usage\n    });\n  }\n  return result;\n}\nexport {\n  HARVESTER_WARNING_CODES,\n  harvestClaudeCodeUsage,\n  readAndParseTranscript,\n  sliceTranscriptIntoTurns\n};\n","import { createHash } from \"node:crypto\";\n\nimport type { TurnUsage } from \"@remixhq/core/collab\";\n\nimport { openCursorSqlite, type CursorSqliteOpenResult } from \"./cursorSqliteReader.js\";\n\n// Cursor's local conversation store lives in two layouts depending on the\n// Cursor version that wrote the row. Both are present concurrently (newer\n// composers use schema 2, older ones still hold schema 1 state).\n//\n// SCHEMA 1 (pre-2025-06ish, observed in the wild): composerData:<id> JSON\n// has an inline `conversation: BubbleV1[]` array. Each bubble has\n// {bubbleId, type (1=user, 2=assistant), text, timingInfo?,\n//  context?: { fileSelections: [{ uri.fsPath }] }}.\n//\n// SCHEMA 2 (newer): composerData:<id> JSON has\n// `fullConversationHeadersOnly: [{ bubbleId, type }]` and bubble bodies\n// live under `bubbleId:<composerId>:<bubbleId>` rows; same per-bubble shape\n// otherwise.\n//\n// SHAPE PINS (must be present on a \"good\" composer; missing → drift):\nconst PINNED_COMPOSER_FIELDS = [\"composerId\", \"createdAt\"] as const;\n//\n// SCHEMA-FINGERPRINT POLICY:\n//   We sample up to 50 composer rows, take the union of their top-level\n//   keys, and hash the *sorted* set. Pinning a single fingerprint per\n//   release is too brittle (Cursor adds incidental fields constantly), so\n//   we treat the fingerprint as a content-addressed tag on the import:\n//     * Every record carries the fingerprint we observed (in metadata).\n//     * Records flagged drift (no recognizable bubble layout) get\n//       captureSource='cursor_local_v1_drift' so the dashboard can render\n//       a \"schema unfamiliar\" badge instead of silently dropping them.\n//\n// ATTRIBUTION:\n//   Cursor doesn't stamp gitBranch on a composer. We infer the repo from\n//   stable local path hints Cursor stores: bubble file selections first,\n//   then composer-level workspace/repo paths, then created/touched files.\n//   RepoFingerprintCache still validates the inferred cwd against the\n//   single target repo, so unattributed or wrong-repo composers are DROPPED.\n//   Bucketing unattributed composers under a placeholder repoFingerprint\n//   was rejected.\n\nexport type CursorBubble = {\n  bubbleId: string;\n  // 1 = user, 2 = assistant. Other values exist for system messages /\n  // tool calls and are ignored for turn slicing.\n  type: number;\n  text: string | null;\n  // Only present on assistant bubbles, in epoch-ms.\n  clientStartMs: number | null;\n  clientEndMs: number | null;\n  createdAtMs: number | null;\n  // File paths the user attached (only meaningful on user bubbles in\n  // schema 1; schema 2 echoes them under context too).\n  filePaths: string[];\n};\n\nexport type CursorTurnSlice = {\n  composerId: string;\n  // Always the user bubble's id — makes the dedup key stable across\n  // re-runs even if the assistant bubble id mutates after editing.\n  userBubbleId: string;\n  occurredAt: string;\n  promptText: string | null;\n  // Concatenation of every assistant bubble's text in this turn,\n  // joined with newlines. Null when the turn has no assistant bubbles\n  // (a half-finished prompt the user never let Cursor complete) or\n  // when every assistant bubble has empty text. Sensitivity-paired\n  // with promptText: gated behind --include-prompt-text on upload.\n  assistantText: string | null;\n  // Best-guess cwd, derived from the longest common ancestor of all\n  // file paths attached to either the user bubble or the assistant turn\n  // following it. Null if no file paths are present.\n  inferredCwd: string | null;\n  // Wraps the (mostly empty) Cursor turn into the same TurnUsage shape\n  // the live pipeline uses, so the backend's pricing pass treats both\n  // sources symmetrically. Confidence is \"partial\" because Cursor lacks\n  // per-turn token counts and per-call provider/model info.\n  usage: TurnUsage;\n};\n\nexport type CursorComposerScan = {\n  composerId: string;\n  createdAt: string | null;\n  // Empty if the composer has no usable user→assistant pair; the runner\n  // drops these silently.\n  turns: CursorTurnSlice[];\n  // Detected schema for this composer. `drift` when neither known shape\n  // applies (e.g. Cursor introduces a v3 layout we haven't taught the\n  // walker about).\n  schema: \"v1_inline\" | \"v2_headers\" | \"drift\";\n};\n\nexport type WalkCursorOptions = {\n  // Test seam — overrides the default macOS path.\n  cursorSqlitePath?: string;\n  // ISO timestamp threaded into TurnUsage.capturedAt. Same semantics as\n  // the Claude walker.\n  capturedAt: string;\n};\n\nexport type WalkCursorResult =\n  | {\n      ok: true;\n      schemaFingerprint: string;\n      driftDetected: boolean;\n      composers: CursorComposerScan[];\n    }\n  | {\n      ok: false;\n      reason: \"module_not_available\" | \"db_not_found\" | \"open_failed\";\n      detail?: string;\n    };\n\nexport async function walkCursorComposers(options: WalkCursorOptions): Promise<WalkCursorResult> {\n  const opened = await openCursorSqlite(options.cursorSqlitePath);\n  if (!opened.ok) return { ok: false, reason: opened.reason, detail: opened.detail };\n\n  try {\n    return scanOpenedDb(opened.db, options.capturedAt);\n  } finally {\n    try {\n      opened.db.close();\n    } catch {\n      // close errors on a readonly conn don't matter; the temp copy\n      // (if any) is left for the OS to clean up.\n    }\n  }\n}\n\ntype SqliteStmt = {\n  all(...args: unknown[]): unknown[];\n  get(...args: unknown[]): unknown;\n};\n\nfunction scanOpenedDb(\n  db: { prepare(sql: string): SqliteStmt },\n  capturedAt: string,\n): WalkCursorResult {\n  const composerRows = db\n    .prepare(\"SELECT key, value FROM cursorDiskKV WHERE key LIKE 'composerData:%'\")\n    .all() as Array<{ key: string; value: Buffer | string }>;\n\n  const observedKeys = new Set<string>();\n  const composers: CursorComposerScan[] = [];\n  let driftDetected = false;\n\n  // Tiny lazy fetcher for schema-2 bubble bodies. Only built when we hit\n  // a v2 composer so the v1-only common case stays fast.\n  let bubbleStmt: SqliteStmt | null = null;\n  const fetchBubble = (composerId: string, bubbleId: string): unknown => {\n    if (!bubbleStmt) {\n      bubbleStmt = db.prepare(\"SELECT value FROM cursorDiskKV WHERE key = ? LIMIT 1\");\n    }\n    const row = bubbleStmt.get(`bubbleId:${composerId}:${bubbleId}`) as\n      | { value: Buffer | string }\n      | undefined;\n    if (!row) return null;\n    return parseJson(row.value);\n  };\n\n  for (const row of composerRows) {\n    const parsed = parseJson(row.value);\n    if (!parsed || typeof parsed !== \"object\") continue;\n    const composerObj = parsed as Record<string, unknown>;\n\n    for (const k of Object.keys(composerObj)) observedKeys.add(k);\n\n    const composerId = stringOrNull(composerObj.composerId) ?? row.key.replace(/^composerData:/, \"\");\n\n    // Pinned-field check — anything missing the basic skeleton goes to\n    // drift.\n    const missingPinned = PINNED_COMPOSER_FIELDS.some((field) => composerObj[field] == null);\n\n    const scan = scanComposer(composerObj, composerId, fetchBubble, capturedAt);\n    if (scan.schema === \"drift\" || missingPinned) driftDetected = true;\n    composers.push(scan);\n  }\n\n  const schemaFingerprint = createHash(\"sha256\")\n    .update(JSON.stringify(Array.from(observedKeys).sort()))\n    .digest(\"hex\")\n    .slice(0, 32);\n\n  return { ok: true, schemaFingerprint, driftDetected, composers };\n}\n\nfunction scanComposer(\n  composerObj: Record<string, unknown>,\n  composerId: string,\n  fetchBubble: (composerId: string, bubbleId: string) => unknown,\n  capturedAt: string,\n): CursorComposerScan {\n  const composerCreatedAtMs = epochMsOrNull(composerObj.createdAt);\n  const createdAt = epochMsToIso(composerObj.createdAt);\n  const composerPathHints = extractComposerPathHints(composerObj);\n\n  // Schema 1: inline conversation array.\n  if (Array.isArray(composerObj.conversation)) {\n    const bubbles = (composerObj.conversation as unknown[])\n      .map((b) => normalizeBubble(b))\n      .filter((b): b is CursorBubble => b !== null);\n    return {\n      composerId,\n      createdAt,\n      turns: bubblesToTurns(bubbles, composerId, capturedAt, composerPathHints, composerCreatedAtMs),\n      schema: \"v1_inline\",\n    };\n  }\n\n  // Schema 2: headers-only — fan out to bubbleId rows.\n  if (Array.isArray(composerObj.fullConversationHeadersOnly)) {\n    const headers = composerObj.fullConversationHeadersOnly as Array<Record<string, unknown>>;\n    const bubbles: CursorBubble[] = [];\n    for (const header of headers) {\n      const bubbleId = stringOrNull(header.bubbleId);\n      if (!bubbleId) continue;\n      const body = fetchBubble(composerId, bubbleId);\n      const merged = body && typeof body === \"object\" ? { ...header, ...(body as Record<string, unknown>) } : header;\n      const normalized = normalizeBubble(merged);\n      if (normalized) bubbles.push(normalized);\n    }\n    return {\n      composerId,\n      createdAt,\n      turns: bubblesToTurns(bubbles, composerId, capturedAt, composerPathHints, composerCreatedAtMs),\n      schema: \"v2_headers\",\n    };\n  }\n\n  return { composerId, createdAt, turns: [], schema: \"drift\" };\n}\n\nfunction bubblesToTurns(\n  bubbles: CursorBubble[],\n  composerId: string,\n  capturedAt: string,\n  composerPathHints: ComposerPathHints,\n  composerCreatedAtMs: number | null,\n): CursorTurnSlice[] {\n  const turns: CursorTurnSlice[] = [];\n  // Pair each user bubble with the assistant bubbles that follow it,\n  // up to (but not including) the next user bubble. This mirrors how\n  // the Claude slicer treats user→assistant→tool_result sequences.\n  for (let i = 0; i < bubbles.length; i++) {\n    const userBubble = bubbles[i]!;\n    if (userBubble.type !== 1) continue;\n    const assistantBubbles: CursorBubble[] = [];\n    let j = i + 1;\n    while (j < bubbles.length && bubbles[j]!.type !== 1) {\n      if (bubbles[j]!.type === 2) assistantBubbles.push(bubbles[j]!);\n      j++;\n    }\n\n    const allFilePaths = [\n      ...userBubble.filePaths,\n      ...assistantBubbles.flatMap((b) => b.filePaths),\n    ].filter((p) => typeof p === \"string\" && p.length > 0);\n\n    const occurredAtMs =\n      userBubble.clientStartMs ??\n      userBubble.createdAtMs ??\n      assistantBubbles[0]?.clientStartMs ??\n      assistantBubbles[0]?.clientEndMs ??\n      assistantBubbles[0]?.createdAtMs ??\n      composerCreatedAtMs ??\n      null;\n    const occurredAt =\n      occurredAtMs !== null ? new Date(occurredAtMs).toISOString() : new Date(0).toISOString();\n\n    const assistantTextChunks = assistantBubbles\n      .map((b) => (typeof b.text === \"string\" ? b.text : \"\"))\n      .filter((t) => t.length > 0);\n    const assistantText =\n      assistantTextChunks.length > 0 ? assistantTextChunks.join(\"\\n\") : null;\n\n    turns.push({\n      composerId,\n      userBubbleId: userBubble.bubbleId,\n      occurredAt,\n      promptText: userBubble.text,\n      assistantText,\n      inferredCwd: inferTurnCwd(allFilePaths, composerPathHints),\n      usage: buildCursorTurnUsage({\n        composerId,\n        userBubbleId: userBubble.bubbleId,\n        capturedAt,\n        assistantCount: assistantBubbles.length,\n      }),\n    });\n  }\n  return turns;\n}\n\nfunction normalizeBubble(raw: unknown): CursorBubble | null {\n  if (!raw || typeof raw !== \"object\") return null;\n  const r = raw as Record<string, unknown>;\n  const bubbleId = stringOrNull(r.bubbleId);\n  const type = typeof r.type === \"number\" ? r.type : null;\n  if (!bubbleId || type === null) return null;\n\n  const timingInfo = r.timingInfo as Record<string, unknown> | undefined;\n  const clientStartMs = numberOrNull(timingInfo?.clientStartTime);\n  const clientEndMs = numberOrNull(timingInfo?.clientEndTime ?? timingInfo?.clientSettleTime);\n  const createdAtMs = epochMsOrNull(r.createdAt);\n  const text = stringOrNull(r.text);\n\n  // File-path extraction works against `context.fileSelections[].uri`.\n  // Cursor sometimes also stores them under `relevantFiles[]` on\n  // assistant bubbles; we union both.\n  const filePaths: string[] = [];\n  const ctxSel = (r.context as Record<string, unknown> | undefined)?.fileSelections;\n  if (Array.isArray(ctxSel)) {\n    for (const sel of ctxSel) {\n      const uri = (sel as Record<string, unknown> | undefined)?.uri as Record<string, unknown> | undefined;\n      const fsPath = absolutePathOrNull(uri?.fsPath ?? uri?.path);\n      if (fsPath) filePaths.push(fsPath);\n    }\n  }\n  const rel = r.relevantFiles;\n  if (Array.isArray(rel)) {\n    for (const item of rel) {\n      const fsPath = absolutePathOrNull((item as Record<string, unknown>)?.fsPath ?? item);\n      if (fsPath) filePaths.push(fsPath);\n    }\n  }\n\n  return { bubbleId, type, text, clientStartMs, clientEndMs, createdAtMs, filePaths };\n}\n\ntype ComposerPathHints = {\n  cwdPaths: string[];\n  filePaths: string[];\n};\n\nfunction extractComposerPathHints(composerObj: Record<string, unknown>): ComposerPathHints {\n  const cwdPaths: string[] = [];\n  const filePaths: string[] = [];\n\n  const pushCwdFromUri = (value: unknown) => {\n    const uri = value as Record<string, unknown> | undefined;\n    const fsPath = absolutePathOrNull(uri?.fsPath ?? uri?.path);\n    if (fsPath) cwdPaths.push(fsPath);\n  };\n\n  const pushFileFromUri = (value: unknown) => {\n    const uri = value as Record<string, unknown> | undefined;\n    const fsPath = absolutePathOrNull(uri?.fsPath ?? uri?.path);\n    if (fsPath) filePaths.push(fsPath);\n  };\n\n  pushCwdFromUri((composerObj.workspaceIdentifier as Record<string, unknown> | undefined)?.uri);\n\n  const trackedGitRepos = composerObj.trackedGitRepos;\n  if (Array.isArray(trackedGitRepos)) {\n    for (const repo of trackedGitRepos) {\n      const repoPath = absolutePathOrNull((repo as Record<string, unknown>)?.repoPath);\n      if (repoPath) cwdPaths.push(repoPath);\n    }\n  }\n\n  const ctx = composerObj.context as Record<string, unknown> | undefined;\n  const fileSelections = ctx?.fileSelections;\n  if (Array.isArray(fileSelections)) {\n    for (const sel of fileSelections) {\n      pushFileFromUri((sel as Record<string, unknown> | undefined)?.uri);\n    }\n  }\n\n  const folderSelections = ctx?.folderSelections;\n  if (Array.isArray(folderSelections)) {\n    for (const sel of folderSelections) {\n      pushCwdFromUri((sel as Record<string, unknown> | undefined)?.uri);\n    }\n  }\n\n  for (const key of [\"newlyCreatedFiles\", \"addedFiles\"] as const) {\n    const entries = composerObj[key];\n    if (!Array.isArray(entries)) continue;\n    for (const entry of entries) {\n      pushFileFromUri((entry as Record<string, unknown> | undefined)?.uri);\n    }\n  }\n\n  return {\n    cwdPaths: uniqueAbsolutePaths(cwdPaths),\n    filePaths: uniqueAbsolutePaths(filePaths),\n  };\n}\n\nfunction inferTurnCwd(\n  turnFilePaths: string[],\n  composerPathHints: ComposerPathHints,\n): string | null {\n  return (\n    longestCommonAncestor(turnFilePaths) ??\n    bestDirectoryCandidate(composerPathHints.cwdPaths) ??\n    longestCommonAncestor(composerPathHints.filePaths)\n  );\n}\n\nfunction buildCursorTurnUsage(input: {\n  composerId: string;\n  userBubbleId: string;\n  capturedAt: string;\n  assistantCount: number;\n}): TurnUsage {\n  // Cursor doesn't expose token counts on local bubbles, so we ship a\n  // zero-filled ModelCall per assistant bubble. The pricing calculator\n  // sees provider=\"cursor\", model=null and emits an \"unpriced\" warning;\n  // the dashboard renders this as the \"estimate\" tier which the user\n  // explicitly accepted (see chat history).\n  return {\n    schemaVersion: 1,\n    capturedAt: input.capturedAt,\n    captureSource: \"historical_import\",\n    confidence: \"partial\",\n    agent: {\n      name: \"cursor\",\n      version: null,\n      sessionId: input.composerId,\n      turnId: input.userBubbleId,\n      plan: null,\n    },\n    calls: Array.from({ length: input.assistantCount }, () => ({\n      provider: \"cursor\",\n      model: null,\n      tier: null,\n      requestId: null,\n      timestamp: null,\n      isSidechain: false,\n      inputTokens: null,\n      outputTokens: null,\n      cacheReadTokens: null,\n      cacheWriteTokens: null,\n      cacheWrite5mTokens: null,\n      cacheWrite1hTokens: null,\n      reasoningTokens: null,\n      audioInputTokens: null,\n      imageInputTokens: null,\n    })),\n    serverTools: [],\n    warnings: [\n      {\n        code: \"cursor_local_no_token_counts\",\n        message:\n          \"Cursor's local SQLite store doesn't include per-turn token counts; this row is priced as an estimate.\",\n      },\n    ],\n    extensions: null,\n  };\n}\n\nfunction parseJson(value: Buffer | string | null | undefined): unknown {\n  if (value == null) return null;\n  const str = typeof value === \"string\" ? value : value.toString(\"utf8\");\n  try {\n    return JSON.parse(str);\n  } catch {\n    return null;\n  }\n}\n\nfunction stringOrNull(value: unknown): string | null {\n  if (typeof value !== \"string\") return null;\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction absolutePathOrNull(value: unknown): string | null {\n  const raw = stringOrNull(value);\n  if (!raw) return null;\n  if (raw.startsWith(\"/\")) return raw;\n  if (raw.startsWith(\"file://\")) {\n    try {\n      const pathname = new URL(raw).pathname;\n      return pathname.startsWith(\"/\") ? decodeURIComponent(pathname) : null;\n    } catch {\n      return null;\n    }\n  }\n  return null;\n}\n\nfunction numberOrNull(value: unknown): number | null {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction epochMsOrNull(value: unknown): number | null {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) return null;\n  // Guard against absurd values; Cursor occasionally writes 0.\n  if (value <= 0) return null;\n  return value;\n}\n\nfunction epochMsToIso(value: unknown): string | null {\n  const ms = epochMsOrNull(value);\n  return ms === null ? null : new Date(ms).toISOString();\n}\n\nfunction uniqueAbsolutePaths(paths: string[]): string[] {\n  return Array.from(\n    new Set(paths.filter((p) => typeof p === \"string\" && p.startsWith(\"/\"))),\n  );\n}\n\nfunction bestDirectoryCandidate(paths: string[]): string | null {\n  const candidates = uniqueAbsolutePaths(paths);\n  if (candidates.length === 0) return null;\n  if (candidates.length === 1) return candidates[0]!;\n\n  const sorted = [...candidates].sort((a, b) => b.length - a.length);\n  const deepest = sorted[0]!;\n  const hasOnlyNestedCandidates = sorted.every(\n    (p) => p === deepest || isSameOrChildPath(deepest, p) || isSameOrChildPath(p, deepest),\n  );\n  if (hasOnlyNestedCandidates) return deepest;\n\n  return longestCommonDirectory(candidates);\n}\n\nfunction longestCommonDirectory(paths: string[]): string | null {\n  const filtered = uniqueAbsolutePaths(paths);\n  if (filtered.length === 0) return null;\n  const split = filtered.map((p) => p.split(\"/\").filter(Boolean));\n  const minLen = Math.min(...split.map((s) => s.length));\n  const prefix: string[] = [];\n  for (let i = 0; i < minLen; i++) {\n    const segment = split[0]![i];\n    if (split.every((s) => s[i] === segment)) prefix.push(segment!);\n    else break;\n  }\n  if (prefix.length === 0) return null;\n  return \"/\" + prefix.join(\"/\");\n}\n\nfunction isSameOrChildPath(candidate: string, parent: string): boolean {\n  return candidate === parent || candidate.startsWith(`${parent.replace(/\\/+$/, \"\")}/`);\n}\n\n// Longest common path ancestor across an array of absolute file paths.\n// Used to guess \"this composer was about repo X\" without being told. We\n// require the result to have at least one path segment so a single file\n// in `/` doesn't degenerate to \"/\".\nexport function longestCommonAncestor(paths: string[]): string | null {\n  const filtered = paths.filter((p) => typeof p === \"string\" && p.startsWith(\"/\"));\n  if (filtered.length === 0) return null;\n  const split = filtered.map((p) => p.split(\"/\").filter(Boolean));\n  const minLen = Math.min(...split.map((s) => s.length));\n  const prefix: string[] = [];\n  for (let i = 0; i < minLen; i++) {\n    const segment = split[0]![i];\n    if (split.every((s) => s[i] === segment)) prefix.push(segment!);\n    else break;\n  }\n  if (prefix.length === 0) return null;\n  // If the LCA is the file itself, drop the last segment (we want the\n  // containing directory, which `findGitRoot` will walk up from).\n  if (prefix.length === split[0]!.length) prefix.pop();\n  if (prefix.length === 0) return null;\n  return \"/\" + prefix.join(\"/\");\n}\n","import { copyFileSync, existsSync, mkdtempSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Thin shim around better-sqlite3 with two contracts:\n//   1. NEVER mutate the source database — always open readonly.\n//   2. If the source is locked (Cursor is running and holding an exclusive\n//      write lock), fall back to a temp-dir COPY of the .vscdb trio\n//      (state.vscdb + -wal + -shm). Reading the copy is safe; we'll see a\n//      slightly stale snapshot but the importer is idempotent so the next\n//      run picks up the freshest rows. We document this as an EFFICIENCY\n//      fallback (not a correctness one) since SQLite WAL mode normally\n//      lets a readonly connection coexist with an active writer.\n//\n// `better-sqlite3` is an optional dependency; we resolve it dynamically so\n// installs without native build tools still get a working CLI minus the\n// Cursor scanner. Callers must always check the returned `ok` boolean.\n\nexport type CursorSqliteOpenResult =\n  | { ok: true; db: BetterSqliteDatabase; openedFrom: \"original\" | \"copy\" }\n  | { ok: false; reason: \"module_not_available\" | \"db_not_found\" | \"open_failed\"; detail?: string };\n\ntype BetterSqliteDatabase = {\n  prepare(sql: string): {\n    all(...args: unknown[]): unknown[];\n    get(...args: unknown[]): unknown;\n  };\n  close(): void;\n};\n\ntype BetterSqliteCtor = new (\n  filename: string,\n  options?: { readonly?: boolean; fileMustExist?: boolean; timeout?: number },\n) => BetterSqliteDatabase;\n\nexport function getDefaultCursorSqlitePath(): string {\n  // macOS layout. Linux puts it under ~/.config/Cursor; Windows under\n  // %APPDATA%\\Cursor. We document and gate on the macOS path for v1\n  // since that's what the user-facing flows have been verified against.\n  return path.join(\n    os.homedir(),\n    \"Library\",\n    \"Application Support\",\n    \"Cursor\",\n    \"User\",\n    \"globalStorage\",\n    \"state.vscdb\",\n  );\n}\n\nasync function loadBetterSqlite(): Promise<BetterSqliteCtor | null> {\n  try {\n    // Optional dep — types may not be present in every install. The\n    // dynamic import is intentionally typed loose.\n    const mod = await import(\"better-sqlite3\");\n    const ctor = ((mod as { default?: unknown }).default ?? mod) as unknown as BetterSqliteCtor;\n    return ctor;\n  } catch {\n    return null;\n  }\n}\n\nexport async function openCursorSqlite(\n  dbPath: string = getDefaultCursorSqlitePath(),\n): Promise<CursorSqliteOpenResult> {\n  const Ctor = await loadBetterSqlite();\n  if (!Ctor) {\n    return {\n      ok: false,\n      reason: \"module_not_available\",\n      detail:\n        \"better-sqlite3 is an optional dependency; install it (or rebuild with native toolchain) to enable Cursor history import.\",\n    };\n  }\n  if (!existsSync(dbPath)) {\n    return { ok: false, reason: \"db_not_found\", detail: dbPath };\n  }\n\n  // First attempt: open the source directly, readonly. WAL-mode SQLite\n  // normally lets us read while Cursor writes. We use a short timeout so\n  // a brief contention burst doesn't block the importer indefinitely.\n  try {\n    const db = new Ctor(dbPath, { readonly: true, fileMustExist: true, timeout: 1500 });\n    return { ok: true, db, openedFrom: \"original\" };\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    // Anything other than a lock-related failure is fatal — bad path,\n    // corrupt file, missing native binary etc.\n    if (!/SQLITE_BUSY|locked|EBUSY/i.test(msg)) {\n      return { ok: false, reason: \"open_failed\", detail: msg };\n    }\n    // Fall through to copy fallback.\n  }\n\n  // Copy fallback: snapshot the .vscdb trio into a tempdir and open the\n  // copy. We copy the WAL + SHM siblings even though we open readonly,\n  // because SQLite refuses to open a db that has WAL frames if the\n  // sibling files are missing.\n  try {\n    const tmpDir = mkdtempSync(path.join(os.tmpdir(), \"remix-cursor-copy-\"));\n    const tmpDb = path.join(tmpDir, \"state.vscdb\");\n    copyFileSync(dbPath, tmpDb);\n    for (const suffix of [\"-wal\", \"-shm\"] as const) {\n      const sibling = `${dbPath}${suffix}`;\n      if (existsSync(sibling)) {\n        copyFileSync(sibling, `${tmpDb}${suffix}`);\n      }\n    }\n    const db = new Ctor(tmpDb, { readonly: true, fileMustExist: true, timeout: 1500 });\n    return { ok: true, db, openedFrom: \"copy\" };\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    return { ok: false, reason: \"open_failed\", detail: `copy fallback failed: ${msg}` };\n  }\n}\n","import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Single-flight lock for `remix history import`. We treat the lock as an\n// EFFICIENCY signal — if another import is in progress, a concurrent run\n// adds nothing because every record is server-side idempotent (PR 2's\n// unique (user_id, dedup_key) constraint catches duplicates). The lock\n// just keeps us from doing the same disk-walk twice.\n//\n// LAYOUT: ~/.remix/history-import.lock containing JSON\n//   { hostname, pid, startedAt, importBatchId }\n//\n// HOSTNAME:\n//   Folks who sync ~/.remix across machines (dotfiles repos, syncthing,\n//   etc.) would otherwise see one machine's stale lock block another\n//   machine's fresh import. Recording hostname lets us treat any lock\n//   from a different machine as automatically stale.\n//\n// PID LIVENESS:\n//   We probe `process.kill(pid, 0)` to see if the recorded pid is still\n//   alive on this host. If it isn't, the lock is stale (the prior\n//   process crashed before cleanup) and we steal it. The lock file\n//   itself doesn't get cleaned by the OS for us.\n//\n// STALE TTL:\n//   Any lock older than STALE_AFTER_MS is treated as stale even if its\n//   pid happens to still resolve (could be a recycled pid). One hour is\n//   generous: a real foreground import on a heavy laptop completes in\n//   minutes; the background spawn aborts immediately on its own retry\n//   timeout, never holding past the TTL.\n\nconst LOCK_RELATIVE = path.join(\".remix\", \"history-import.lock\");\nconst STALE_AFTER_MS = 60 * 60 * 1000;\n\nexport type LockEnvelope = {\n  hostname: string;\n  pid: number;\n  startedAt: string;\n  importBatchId: string;\n};\n\nexport type AcquireOk = {\n  ok: true;\n  lockPath: string;\n  envelope: LockEnvelope;\n  release: () => void;\n};\n\nexport type AcquireBlocked = {\n  ok: false;\n  reason: \"another_import_running\";\n  blockedBy: LockEnvelope;\n};\n\nexport function getDefaultLockPath(): string {\n  return path.join(os.homedir(), LOCK_RELATIVE);\n}\n\nexport function tryAcquireImportLock(input: {\n  importBatchId: string;\n  lockPath?: string;\n  now?: () => Date;\n}): AcquireOk | AcquireBlocked {\n  const lockPath = input.lockPath ?? getDefaultLockPath();\n  const now = input.now ?? (() => new Date());\n\n  const existing = readLockFile(lockPath);\n  if (existing && !isStale(existing, now())) {\n    return { ok: false, reason: \"another_import_running\", blockedBy: existing };\n  }\n  // Stale-or-missing → steal it.\n\n  mkdirSync(path.dirname(lockPath), { recursive: true });\n  const envelope: LockEnvelope = {\n    hostname: os.hostname(),\n    pid: process.pid,\n    startedAt: now().toISOString(),\n    importBatchId: input.importBatchId,\n  };\n  writeFileSync(lockPath, JSON.stringify(envelope, null, 2), { encoding: \"utf8\" });\n\n  let released = false;\n  const release = () => {\n    if (released) return;\n    released = true;\n    try {\n      // Double-check we still own the lock before deleting. If a stale-\n      // steal raced ours, leave the other owner's file alone.\n      const onDisk = readLockFile(lockPath);\n      if (onDisk && onDisk.pid === envelope.pid && onDisk.hostname === envelope.hostname) {\n        unlinkSync(lockPath);\n      }\n    } catch {\n      // best-effort\n    }\n  };\n\n  // Best-effort cleanup on signals + normal exit. Detached children also\n  // hit these paths via process.exit, so the lock survives at most until\n  // the process disappears.\n  const cleanup = () => release();\n  process.once(\"exit\", cleanup);\n  process.once(\"SIGINT\", () => {\n    cleanup();\n    process.exit(130);\n  });\n  process.once(\"SIGTERM\", () => {\n    cleanup();\n    process.exit(143);\n  });\n\n  return { ok: true, lockPath, envelope, release };\n}\n\nfunction readLockFile(lockPath: string): LockEnvelope | null {\n  try {\n    const raw = readFileSync(lockPath, \"utf8\");\n    const parsed = JSON.parse(raw) as Partial<LockEnvelope>;\n    if (\n      typeof parsed.hostname !== \"string\" ||\n      typeof parsed.pid !== \"number\" ||\n      typeof parsed.startedAt !== \"string\" ||\n      typeof parsed.importBatchId !== \"string\"\n    ) {\n      return null;\n    }\n    return parsed as LockEnvelope;\n  } catch {\n    return null;\n  }\n}\n\nfunction isStale(envelope: LockEnvelope, nowDate: Date): boolean {\n  const ageMs = nowDate.getTime() - new Date(envelope.startedAt).getTime();\n  if (Number.isFinite(ageMs) && ageMs > STALE_AFTER_MS) return true;\n\n  // Cross-host lock — never mine to wait on.\n  if (envelope.hostname !== os.hostname()) return true;\n\n  // Same host: probe pid liveness. process.kill(pid, 0) throws if the\n  // pid is gone (ESRCH) or owned by a different user (EPERM). EPERM\n  // means SOMEONE owns the pid — treat the lock as live to err on the\n  // side of caution.\n  try {\n    process.kill(envelope.pid, 0);\n    return false;\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException).code;\n    if (code === \"ESRCH\") return true;\n    return false;\n  }\n}\n","import path from \"node:path\";\n\nimport {\n  buildRepoFingerprint,\n  findGitRoot,\n  getCurrentBranch,\n  getDefaultBranch,\n  getGitCommonDir,\n  getRemoteOriginUrl,\n  normalizeGitRemote,\n} from \"@remixhq/core/repo\";\nimport { readCollabBindingState } from \"@remixhq/core/binding\";\n\n// Resolves a working-directory path (e.g. the `cwd` field on a Claude Code\n// transcript event) into the canonical repo fingerprint Remix uses\n// elsewhere — and tells the caller whether that repo is currently bound to\n// Remix (i.e. has a usable `.remix/config.json`).\n//\n// CANONICALIZATION VIA --git-common-dir:\n//   We resolve to the repo's COMMON git dir and then take its parent. This\n//   gives us a single fingerprint shared across:\n//     * the main worktree\n//     * any `git worktree add` worktrees pointing at the same repo\n//     * shells started in subdirectories\n//   …which matches how the backend treats them (one repo_fingerprint per\n//   physical repository). Without this step, two worktrees of the same\n//   project would land under separate fingerprints and the dashboard would\n//   double-count their imported history.\n//\n// CACHE:\n//   Walking ~/.claude/projects produces hundreds of transcript events, all\n//   typically pointing at one of a few repos. Re-running git twice per\n//   distinct cwd is acceptable; we cache by canonical gitRoot so repeat\n//   lookups for sibling cwds (e.g. /repo/src vs /repo/test) hit the cache.\n//\n// IS-BOUND CHECK:\n//   The product requirement is \"only import history for repos already bound\n//   to Remix\". `readCollabBindingState` returns null if .remix/config.json\n//   is missing or unreadable. We treat ANY non-null state as bound, even if\n//   the binding has no live `binding` (e.g. v3 file with branch bindings on\n//   other branches but not this one) — the historical_repo_turn table is\n//   keyed by repoFingerprint, not by appId, so cross-branch history makes\n//   sense as long as the user has touched this repo through Remix at all.\n\nexport type RepoIdentity = {\n  // Absolute path to the repo's main worktree (parent of --git-common-dir).\n  // Used as the cache key and as the source of truth for binding lookups.\n  canonicalRepoRoot: string;\n  remoteUrl: string | null;\n  defaultBranch: string | null;\n  repoFingerprint: string;\n  isBound: boolean;\n};\n\nexport type RepoIdentityResolution =\n  | { ok: true; identity: RepoIdentity }\n  | { ok: false; reason: \"not_a_git_repo\" | \"git_failed\" };\n\ntype CacheEntry =\n  | { kind: \"ok\"; identity: RepoIdentity }\n  | { kind: \"err\"; reason: \"not_a_git_repo\" | \"git_failed\" };\n\nexport class RepoFingerprintCache {\n  // Cache by canonical repo root (post --git-common-dir), so multiple\n  // sub-cwds of the same repo coalesce.\n  private readonly byRepoRoot = new Map<string, CacheEntry>();\n  // Cache by raw cwd, which short-circuits the git-resolve path entirely\n  // on the second hit. The mapping points into byRepoRoot for storage.\n  private readonly cwdToRepoRoot = new Map<string, string>();\n\n  async resolve(cwd: string): Promise<RepoIdentityResolution> {\n    const cwdAbs = path.resolve(cwd);\n    const cachedRoot = this.cwdToRepoRoot.get(cwdAbs);\n    if (cachedRoot) {\n      const hit = this.byRepoRoot.get(cachedRoot);\n      if (hit) return hit.kind === \"ok\" ? { ok: true, identity: hit.identity } : { ok: false, reason: hit.reason };\n    }\n\n    let repoRoot: string;\n    try {\n      // findGitRoot throws (CliError, exitCode 2) when cwd isn't inside any\n      // git repo. That's expected for transcripts captured outside repos —\n      // we just can't attribute those turns and bubble up \"not_a_git_repo\".\n      const gitRoot = await findGitRoot(cwdAbs);\n      const commonDir = await getGitCommonDir(gitRoot);\n      // commonDir for a primary worktree is `<repoRoot>/.git`; for a linked\n      // worktree it's `<mainRepoRoot>/.git`. Either way, parent(commonDir)\n      // is the canonical main repo root, which is exactly what the live\n      // binding flow uses too (see collabInit.ts).\n      repoRoot = path.dirname(commonDir);\n    } catch (err) {\n      // Distinguish \"you're not in a repo\" (expected) from \"git crashed\"\n      // (worth surfacing). The CliError thrown by findGitRoot uses exitCode\n      // 2, but rather than tunneling that out we just classify by the\n      // raised message — both buckets get logged-and-skipped at the runner.\n      const reason: \"not_a_git_repo\" | \"git_failed\" =\n        err instanceof Error && /not inside a git repository/i.test(err.message)\n          ? \"not_a_git_repo\"\n          : \"git_failed\";\n      const entry: CacheEntry = { kind: \"err\", reason };\n      this.cwdToRepoRoot.set(cwdAbs, cwdAbs);\n      this.byRepoRoot.set(cwdAbs, entry);\n      return { ok: false, reason };\n    }\n\n    const cached = this.byRepoRoot.get(repoRoot);\n    if (cached) {\n      this.cwdToRepoRoot.set(cwdAbs, repoRoot);\n      return cached.kind === \"ok\"\n        ? { ok: true, identity: cached.identity }\n        : { ok: false, reason: cached.reason };\n    }\n\n    let remoteUrl: string | null = null;\n    let defaultBranch: string | null = null;\n    try {\n      remoteUrl = normalizeGitRemote(await getRemoteOriginUrl(repoRoot));\n      defaultBranch = await getDefaultBranch(repoRoot).catch(() => null);\n      // Mirror collabInit's fallback: when there's no `origin/HEAD` (e.g.\n      // a fresh `git init` repo with no remote), use the current branch as\n      // the defaultBranch input to the fingerprint. Without this, the\n      // importer hashes `defaultBranch=\"\"` while the lane (anchored at\n      // collab init time) hashed `defaultBranch=<currentBranch>`, and the\n      // two fingerprints diverge for the same physical repo. See\n      // collabInit.ts:458.\n      if (!defaultBranch) {\n        defaultBranch = await getCurrentBranch(repoRoot).catch(() => null);\n      }\n    } catch {\n      // Missing remote / detached HEAD: still produce a fingerprint from\n      // the local path so the row can land. The backend won't reject it;\n      // the dashboard will just show a \"no remote\" badge.\n    }\n\n    // Source-of-truth precedence:\n    //   1. The binding state's recorded `repoFingerprint`, if the repo is\n    //      already bound to Remix. This is what the lane is keyed on, so\n    //      historical turns we upload under it always join correctly with\n    //      the per-app timeline query (which resolves via collab_lane).\n    //   2. Freshly computed from current git inputs (with the\n    //      currentBranch fallback above). Used for unbound paths.\n    let bindingFingerprint: string | null = null;\n    let isBound = false;\n    try {\n      const bindingState = await readCollabBindingState(repoRoot);\n      isBound = bindingState !== null;\n      bindingFingerprint = bindingState?.repoFingerprint ?? null;\n    } catch {\n      isBound = false;\n    }\n\n    const repoFingerprint =\n      bindingFingerprint ??\n      (await buildRepoFingerprint({\n        gitRoot: repoRoot,\n        remoteUrl,\n        defaultBranch,\n      }));\n\n    const identity: RepoIdentity = {\n      canonicalRepoRoot: repoRoot,\n      remoteUrl,\n      defaultBranch,\n      repoFingerprint,\n      isBound,\n    };\n    this.byRepoRoot.set(repoRoot, { kind: \"ok\", identity });\n    this.cwdToRepoRoot.set(cwdAbs, repoRoot);\n    return { ok: true, identity };\n  }\n}\n","import pc from \"picocolors\";\nimport type { AppPreviewResponse, RuntimeTargetKind } from \"@remixhq/core\";\n\nimport { createAuthedApi, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype PreviewOpts = {\n  appId?: string | null;\n  cwd?: string;\n  environment?: string | null;\n  autostart?: boolean;\n  // Maximum time to wait for a `pending` preview to resolve to a terminal\n  // kind. 0 (default) returns immediately after one fetch — callers that\n  // want polling pass e.g. 60000.\n  waitMs?: number;\n  pollMs?: number;\n  // \"metadata\" tells the backend to skip the E2B sandbox round-trips and\n  // return just the target shape (kind: \"none\" | \"pending\" with\n  // expectedKind). ~10x faster — designed for visibility probes by GUIs\n  // that need to decide whether to render a \"Run\" affordance without\n  // committing to the cost of a live status check.\n  probe?: \"metadata\" | \"full\";\n  targetKind?: RuntimeTargetKind;\n  yes: boolean;\n  json: boolean;\n};\n\nfunction describePreview(preview: AppPreviewResponse): string {\n  switch (preview.kind) {\n    case \"url\":\n      return `URL preview ready: ${preview.previewUrl}`;\n    case \"api\":\n      return `API preview ready: ${preview.baseUrl}`;\n    case \"qr\":\n      return [\n        `QR preview ready (payload: ${preview.qrPayload})`,\n        preview.platformQrPayloads?.ios ? `iOS QR payload: ${preview.platformQrPayloads.ios}` : null,\n        preview.platformQrPayloads?.android ? `Android QR payload: ${preview.platformQrPayloads.android}` : null,\n        preview.metroBundleUrls?.ios ? `Embedded iOS Metro bundle: ${preview.metroBundleUrls.ios}` : null,\n        preview.metroBundleUrls?.android ? `Embedded Android Metro bundle: ${preview.metroBundleUrls.android}` : null,\n      ].filter(Boolean).join(\"\\n\");\n    case \"logs\":\n      return `Logs preview running (target ${preview.targetId}); use \\`remix collab runtime logs ${preview.targetId}\\` for output.`;\n    case \"pending\":\n      return `Preview pending — expecting kind ${preview.expectedKind} (target ${preview.targetId}, status ${preview.status}).`;\n    case \"none\":\n      return `No previewable runtime target (${preview.reason}).`;\n    default:\n      return \"Preview response.\";\n  }\n}\n\nexport async function previewApp(opts: PreviewOpts): Promise<AppPreviewResponse> {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({ appId: opts.appId, cwd: opts.cwd ?? process.cwd() });\n  const params = {\n    environment: opts.environment?.trim() || \"development\",\n    autostart: opts.autostart !== false,\n    ...(opts.probe ? { probe: opts.probe } : {}),\n    ...(opts.targetKind ? { targetKind: opts.targetKind } : {}),\n  } as const;\n\n  const fetchOnce = async (): Promise<AppPreviewResponse> =>\n    unwrapResponseObject<AppPreviewResponse>(await api.getAppPreview(appId, params), \"app preview\");\n\n  let preview = await fetchOnce();\n  const waitMs = Math.max(0, opts.waitMs ?? 0);\n  const pollMs = Math.max(500, opts.pollMs ?? 5000);\n  if (waitMs > 0) {\n    const deadline = Date.now() + waitMs;\n    while (preview.kind === \"pending\" && Date.now() < deadline) {\n      const remaining = deadline - Date.now();\n      const sleep = Math.min(pollMs, Math.max(250, remaining));\n      await new Promise((resolve) => setTimeout(resolve, sleep));\n      preview = await fetchOnce();\n    }\n  }\n\n  if (opts.json) {\n    console.log(JSON.stringify(preview, null, 2));\n  } else {\n    console.log(pc.bold(\"App preview\"));\n    console.log(describePreview(preview));\n  }\n  return preview;\n}\n","import type { Command } from \"commander\";\nimport type { RuntimeTargetKind } from \"@remixhq/core\";\n\nimport { previewApp } from \"../services/preview.js\";\n\nconst RUNTIME_TARGET_KINDS = new Set<RuntimeTargetKind>([\"web\", \"api\", \"desktop\", \"cli\", \"mobile\", \"test\", \"worker\"]);\n\nfunction parseInteger(value: string, label: string): number {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isInteger(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative integer.`);\n  }\n  return parsed;\n}\n\nfunction parseTargetKind(value: string): RuntimeTargetKind {\n  const kind = value.trim();\n  if (!RUNTIME_TARGET_KINDS.has(kind as RuntimeTargetKind)) {\n    throw new Error(`target-kind must be one of: ${Array.from(RUNTIME_TARGET_KINDS).join(\", \")}.`);\n  }\n  return kind as RuntimeTargetKind;\n}\n\nexport function registerPreviewCommand(program: Command) {\n  program\n    .command(\"preview [appId]\")\n    .description(\"Resolve the runnable preview (URL, QR, API, logs, …) for an app via the unified backend endpoint\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository binding\")\n    .option(\"--environment <name>\", \"Runtime environment label\", \"development\")\n    .option(\"--no-autostart\", \"Do not start the dev runtime target if it is not running\")\n    .option(\"--wait <ms>\", \"Poll until the preview leaves the pending state or this many milliseconds elapse\", (value) =>\n      parseInteger(value, \"wait\"),\n    )\n    .option(\"--poll <ms>\", \"Polling interval used with --wait\", (value) => parseInteger(value, \"poll\"))\n    .option(\n      \"--probe <mode>\",\n      \"Probe mode: 'metadata' skips the live sandbox check (fast visibility probe), 'full' (default) returns the live URL/status\",\n    )\n    .option(\"--target-kind <kind>\", \"Preview a specific runtime target kind, e.g. web or mobile\", parseTargetKind)\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      await previewApp({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        environment: opts.environment ? String(opts.environment) : \"development\",\n        autostart: opts.autostart !== false,\n        waitMs: typeof opts.wait === \"number\" ? opts.wait : 0,\n        pollMs: typeof opts.poll === \"number\" ? opts.poll : 5000,\n        probe: opts.probe === \"metadata\" || opts.probe === \"full\" ? opts.probe : undefined,\n        targetKind: opts.targetKind,\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n    });\n}\n","import pc from \"picocolors\";\nimport type { AppShareLinkSummary } from \"@remixhq/core\";\n\nimport { createAuthedApi, resolveAppId, unwrapResponseObject } from \"./serviceHelpers.js\";\n\ntype ShareLinkOpts = {\n  appId?: string | null;\n  cwd?: string;\n  yes: boolean;\n  json: boolean;\n};\n\nexport async function fetchAppShareLink(opts: ShareLinkOpts): Promise<AppShareLinkSummary> {\n  const api = await createAuthedApi({ yes: opts.yes, json: opts.json });\n  const { appId } = await resolveAppId({\n    appId: opts.appId,\n    cwd: opts.cwd ?? process.cwd(),\n  });\n  const summary = unwrapResponseObject<AppShareLinkSummary>(\n    await api.createAppShareLink(appId, {}),\n    \"share link\",\n  );\n  if (!summary?.url || typeof summary.url !== \"string\") {\n    throw new Error(\"Share link response did not include a URL.\");\n  }\n  if (opts.json) {\n    console.log(JSON.stringify(summary, null, 2));\n  } else {\n    console.log(pc.bold(\"Share link\"));\n    console.log(summary.url);\n  }\n  return summary;\n}\n","import type { Command } from \"commander\";\n\nimport { fetchAppShareLink } from \"../services/shareLink.js\";\n\nexport function registerShareLinkCommand(program: Command) {\n  program\n    .command(\"share-link [appId]\")\n    .description(\"Create or fetch the public /r/… share link for an app's preview\")\n    .option(\"--app-id <id>\", \"Explicit app id instead of the current bound repository\")\n    .option(\"--cwd <path>\", \"Working directory for repository binding\")\n    .option(\"--yes\", \"Run non-interactively\", false)\n    .option(\"--non-interactive\", \"Run non-interactively\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (appId, opts) => {\n      await fetchAppShareLink({\n        appId: opts.appId ? String(opts.appId) : appId ? String(appId) : null,\n        cwd: opts.cwd ? String(opts.cwd) : process.cwd(),\n        json: Boolean(opts.json),\n        yes: Boolean(opts.yes || opts.nonInteractive),\n      });\n    });\n}\n","import type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { createApiClient } from \"../clients/api.js\";\nimport { resolveConfig } from \"../config/config.js\";\nimport { openBrowser } from \"../utils/browser.js\";\n\nfunction printJson(value: unknown): void {\n  console.log(JSON.stringify(value, null, 2));\n}\n\nfunction positiveIntegerValue(value: unknown, label: string): number {\n  const parsed = Number(value);\n  if (!Number.isInteger(parsed) || parsed <= 0) {\n    throw new Error(`${label} must be a positive integer.`);\n  }\n  return parsed;\n}\n\nexport function registerGithubCommands(program: Command) {\n  const github = program.command(\"github\").description(\"Manage GitHub integration\");\n\n  github.command(\"status\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.getGithubStatus();\n    if (opts.json) return printJson(result);\n    const payload = (result as any)?.responseObject;\n    console.log(payload?.connected ? pc.green(\"GitHub connected\") : pc.yellow(\"GitHub not connected\"));\n    if (payload?.installUrl) console.log(`Install URL: ${payload.installUrl}`);\n  });\n\n  github.command(\"connect\").option(\"--no-browser\", \"Do not open a browser; print the URLs\").option(\"--port <port>\", \"Ignored; GitHub OAuth uses the backend callback\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const config = await resolveConfig();\n    const api = createApiClient(config);\n    const oauthResult = await api.startGithubOAuth();\n    const installResult = await api.getGithubInstallUrl();\n    const oauthUrl = (oauthResult as any)?.responseObject?.url;\n    const installUrl = (installResult as any)?.responseObject?.url;\n    if (opts.json) return printJson({ oauth: oauthResult, install: installResult });\n    if (!oauthUrl) {\n      console.log(\"GitHub OAuth URL is not configured.\");\n      return;\n    }\n    if (!installUrl) {\n      console.log(\"GitHub install URL is not configured.\");\n      return;\n    }\n    const shouldOpenBrowser = Boolean((opts as any).browser ?? true);\n    if (shouldOpenBrowser) {\n      try {\n        await openBrowser(oauthUrl);\n        console.log(pc.dim(\"Opened a browser for GitHub authorization.\"));\n      } catch (err) {\n        console.error(pc.yellow(\"Could not open the GitHub authorization URL automatically.\"));\n        console.error(pc.dim((err as Error)?.message ?? String(err)));\n        console.log(`Authorize GitHub:\\n${oauthUrl}`);\n      }\n    } else {\n      console.log(`Authorize GitHub:\\n${oauthUrl}`);\n    }\n    console.log(`Install GitHub App:\\n${installUrl}`);\n  });\n\n  github.command(\"sync\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.syncGithubInstallations();\n    if (opts.json) return printJson(result);\n    console.log(pc.green(\"GitHub installations synced.\"));\n  });\n\n  github.command(\"installations\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.listGithubInstallations();\n    if (opts.json) return printJson(result);\n    for (const item of ((result as any)?.responseObject?.installations ?? []) as any[]) {\n      console.log(`${item.installationId}\\t${item.accountLogin}`);\n    }\n  });\n\n  github.command(\"repos\").requiredOption(\"--installation <id>\", \"GitHub installation id\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const installationId = positiveIntegerValue(opts.installation, \"installation id\");\n    const api = createApiClient(await resolveConfig());\n    const result = await api.listGithubRepositories(installationId);\n    if (opts.json) return printJson(result);\n    for (const repo of ((result as any)?.responseObject?.repositories ?? []) as any[]) {\n      console.log(`${repo.id}\\t${repo.full_name}`);\n    }\n  });\n\n  github\n    .command(\"import\")\n    .requiredOption(\"--repo <owner/name>\", \"GitHub repository full name\")\n    .requiredOption(\"--installation <id>\", \"GitHub installation id\")\n    .option(\"--repo-id <id>\", \"GitHub repository id\")\n    .option(\"--branch <branch>\", \"GitHub branch\")\n    .option(\"--path <path>\", \"Repository subdirectory\")\n    .option(\"--name <name>\", \"Imported app name\")\n    .option(\"--app <id>\", \"Existing Remix app id to import into\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const installationId = positiveIntegerValue(opts.installation, \"installation id\");\n      const githubRepoId = opts.repoId ? positiveIntegerValue(opts.repoId, \"repository id\") : undefined;\n      const api = createApiClient(await resolveConfig());\n      const result = await api.importFromGithubFirstParty({\n        repoFullName: opts.repo,\n        installationId,\n        githubRepoId,\n        branch: opts.branch,\n        path: opts.path,\n        appName: opts.name,\n        appId: opts.app,\n      });\n      if (opts.json) return printJson(result);\n      console.log(pc.green(\"GitHub import started.\"));\n    });\n\n  github\n    .command(\"link\")\n    .requiredOption(\"--app <id>\", \"Remix app id\")\n    .requiredOption(\"--installation <id>\", \"GitHub installation id\")\n    .requiredOption(\"--repo <owner/name>\", \"GitHub repository full name\")\n    .requiredOption(\"--branch <branch>\", \"GitHub base branch\")\n    .option(\"--repo-id <id>\", \"GitHub repository id\")\n    .option(\"--path <path>\", \"Repository subdirectory\")\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n      const installationId = positiveIntegerValue(opts.installation, \"installation id\");\n      const githubRepoId = opts.repoId ? positiveIntegerValue(opts.repoId, \"repository id\") : undefined;\n      const api = createApiClient(await resolveConfig());\n      const result = await api.linkAppGithubSource(opts.app, {\n        installationId,\n        githubRepoId,\n        repoFullName: opts.repo,\n        branch: opts.branch,\n        path: opts.path,\n      });\n      if (opts.json) return printJson(result);\n      console.log(pc.green(\"GitHub repository linked.\"));\n    });\n\n  const pr = github.command(\"pr\").description(\"Manage GitHub pull requests\");\n  pr.command(\"status\").requiredOption(\"--app <id>\", \"Remix app id\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.getAppGithubPullRequest(opts.app);\n    if (opts.json) return printJson(result);\n    const item = (result as any)?.responseObject;\n    console.log(item?.pr_url ? `${item.pr_state}: ${item.pr_url}` : \"No GitHub pull request found.\");\n  });\n  pr.command(\"create\")\n    .requiredOption(\"--app <id>\", \"Remix app id\")\n    .option(\"--title <title>\", \"Pull request title\")\n    .option(\"--body <body>\", \"Pull request body\")\n    .option(\"--base-branch <branch>\", \"GitHub base branch\")\n    .option(\"--draft\", \"Create a draft pull request\", false)\n    .option(\"--json\", \"Output JSON\", false)\n    .action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.createAppGithubPullRequest(opts.app, {\n      title: opts.title,\n      body: opts.body,\n      baseBranch: opts.baseBranch,\n      draft: Boolean(opts.draft),\n    });\n    if (opts.json) return printJson(result);\n    console.log((result as any)?.responseObject?.pr_url ?? pc.green(\"GitHub pull request created.\"));\n  });\n  pr.command(\"update\").requiredOption(\"--app <id>\", \"Remix app id\").option(\"--title <title>\", \"Pull request title\").option(\"--body <body>\", \"Pull request body\").option(\"--json\", \"Output JSON\", false).action(async (opts) => {\n    const api = createApiClient(await resolveConfig());\n    const result = await api.updateAppGithubPullRequest(opts.app, { title: opts.title, body: opts.body });\n    if (opts.json) return printJson(result);\n    console.log((result as any)?.responseObject?.pr_url ?? pc.green(\"GitHub pull request updated.\"));\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,wCAAAA,UAAA;AAAA;AAGA,QAAMC,kBAAN,cAA6B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjC,YAAY,UAAU,MAAM,SAAS;AACnC,cAAM,OAAO;AAEb,cAAM,kBAAkB,MAAM,KAAK,WAAW;AAC9C,aAAK,OAAO,KAAK,YAAY;AAC7B,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AAKA,QAAMC,wBAAN,cAAmCD,gBAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhD,YAAY,SAAS;AACnB,cAAM,GAAG,6BAA6B,OAAO;AAE7C,cAAM,kBAAkB,MAAM,KAAK,WAAW;AAC9C,aAAK,OAAO,KAAK,YAAY;AAAA,MAC/B;AAAA,IACF;AAEA,IAAAD,SAAQ,iBAAiBC;AACzB,IAAAD,SAAQ,uBAAuBE;AAAA;AAAA;;;ACtC/B;AAAA,2CAAAC,UAAA;AAAA;AAAA,QAAM,EAAE,sBAAAC,sBAAqB,IAAI;AAEjC,QAAMC,YAAN,MAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUb,YAAY,MAAM,aAAa;AAC7B,aAAK,cAAc,eAAe;AAClC,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,eAAe;AACpB,aAAK,0BAA0B;AAC/B,aAAK,aAAa;AAElB,gBAAQ,KAAK,CAAC,GAAG;AAAA,UACf,KAAK;AACH,iBAAK,WAAW;AAChB,iBAAK,QAAQ,KAAK,MAAM,GAAG,EAAE;AAC7B;AAAA,UACF,KAAK;AACH,iBAAK,WAAW;AAChB,iBAAK,QAAQ,KAAK,MAAM,GAAG,EAAE;AAC7B;AAAA,UACF;AACE,iBAAK,WAAW;AAChB,iBAAK,QAAQ;AACb;AAAA,QACJ;AAEA,YAAI,KAAK,MAAM,SAAS,KAAK,GAAG;AAC9B,eAAK,WAAW;AAChB,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,EAAE;AAAA,QACrC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,OAAO;AACL,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAMA,cAAc,OAAO,UAAU;AAC7B,YAAI,aAAa,KAAK,gBAAgB,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC9D,iBAAO,CAAC,KAAK;AAAA,QACf;AAEA,iBAAS,KAAK,KAAK;AACnB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,QAAQ,OAAO,aAAa;AAC1B,aAAK,eAAe;AACpB,aAAK,0BAA0B;AAC/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,IAAI;AACZ,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQ,QAAQ;AACd,aAAK,aAAa,OAAO,MAAM;AAC/B,aAAK,WAAW,CAAC,KAAK,aAAa;AACjC,cAAI,CAAC,KAAK,WAAW,SAAS,GAAG,GAAG;AAClC,kBAAM,IAAID;AAAA,cACR,uBAAuB,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,YACnD;AAAA,UACF;AACA,cAAI,KAAK,UAAU;AACjB,mBAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,UACzC;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,cAAc;AACZ,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,cAAc;AACZ,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAUA,aAAS,qBAAqB,KAAK;AACjC,YAAM,aAAa,IAAI,KAAK,KAAK,IAAI,aAAa,OAAO,QAAQ;AAEjE,aAAO,IAAI,WAAW,MAAM,aAAa,MAAM,MAAM,aAAa;AAAA,IACpE;AAEA,IAAAD,SAAQ,WAAWE;AACnB,IAAAF,SAAQ,uBAAuB;AAAA;AAAA;;;ACrJ/B;AAAA,uCAAAG,UAAA;AAAA;AAAA,QAAM,EAAE,qBAAqB,IAAI;AAWjC,QAAMC,QAAN,MAAW;AAAA,MACT,cAAc;AACZ,aAAK,YAAY;AACjB,aAAK,iBAAiB;AACtB,aAAK,kBAAkB;AACvB,aAAK,cAAc;AACnB,aAAK,oBAAoB;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,gBAAgB;AAC7B,aAAK,YAAY,KAAK,aAAa,eAAe,aAAa;AAAA,MACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,KAAK;AACnB,cAAM,kBAAkB,IAAI,SAAS,OAAO,CAACC,SAAQ,CAACA,KAAI,OAAO;AACjE,cAAM,cAAc,IAAI,gBAAgB;AACxC,YAAI,eAAe,CAAC,YAAY,SAAS;AACvC,0BAAgB,KAAK,WAAW;AAAA,QAClC;AACA,YAAI,KAAK,iBAAiB;AACxB,0BAAgB,KAAK,CAACC,IAAG,MAAM;AAE7B,mBAAOA,GAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC;AAAA,UACxC,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAeA,IAAG,GAAG;AACnB,cAAM,aAAa,CAAC,WAAW;AAE7B,iBAAO,OAAO,QACV,OAAO,MAAM,QAAQ,MAAM,EAAE,IAC7B,OAAO,KAAK,QAAQ,OAAO,EAAE;AAAA,QACnC;AACA,eAAO,WAAWA,EAAC,EAAE,cAAc,WAAW,CAAC,CAAC;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,KAAK;AAClB,cAAM,iBAAiB,IAAI,QAAQ,OAAO,CAAC,WAAW,CAAC,OAAO,MAAM;AAEpE,cAAM,aAAa,IAAI,eAAe;AACtC,YAAI,cAAc,CAAC,WAAW,QAAQ;AAEpC,gBAAM,cAAc,WAAW,SAAS,IAAI,YAAY,WAAW,KAAK;AACxE,gBAAM,aAAa,WAAW,QAAQ,IAAI,YAAY,WAAW,IAAI;AACrE,cAAI,CAAC,eAAe,CAAC,YAAY;AAC/B,2BAAe,KAAK,UAAU;AAAA,UAChC,WAAW,WAAW,QAAQ,CAAC,YAAY;AACzC,2BAAe;AAAA,cACb,IAAI,aAAa,WAAW,MAAM,WAAW,WAAW;AAAA,YAC1D;AAAA,UACF,WAAW,WAAW,SAAS,CAAC,aAAa;AAC3C,2BAAe;AAAA,cACb,IAAI,aAAa,WAAW,OAAO,WAAW,WAAW;AAAA,YAC3D;AAAA,UACF;AAAA,QACF;AACA,YAAI,KAAK,aAAa;AACpB,yBAAe,KAAK,KAAK,cAAc;AAAA,QACzC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,qBAAqB,KAAK;AACxB,YAAI,CAAC,KAAK,kBAAmB,QAAO,CAAC;AAErC,cAAM,gBAAgB,CAAC;AACvB,iBACM,cAAc,IAAI,QACtB,aACA,cAAc,YAAY,QAC1B;AACA,gBAAM,iBAAiB,YAAY,QAAQ;AAAA,YACzC,CAAC,WAAW,CAAC,OAAO;AAAA,UACtB;AACA,wBAAc,KAAK,GAAG,cAAc;AAAA,QACtC;AACA,YAAI,KAAK,aAAa;AACpB,wBAAc,KAAK,KAAK,cAAc;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,iBAAiB,KAAK;AAEpB,YAAI,IAAI,kBAAkB;AACxB,cAAI,oBAAoB,QAAQ,CAAC,aAAa;AAC5C,qBAAS,cACP,SAAS,eAAe,IAAI,iBAAiB,SAAS,KAAK,CAAC,KAAK;AAAA,UACrE,CAAC;AAAA,QACH;AAGA,YAAI,IAAI,oBAAoB,KAAK,CAAC,aAAa,SAAS,WAAW,GAAG;AACpE,iBAAO,IAAI;AAAA,QACb;AACA,eAAO,CAAC;AAAA,MACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,KAAK;AAElB,cAAM,OAAO,IAAI,oBACd,IAAI,CAAC,QAAQ,qBAAqB,GAAG,CAAC,EACtC,KAAK,GAAG;AACX,eACE,IAAI,SACH,IAAI,SAAS,CAAC,IAAI,MAAM,IAAI,SAAS,CAAC,IAAI,OAC1C,IAAI,QAAQ,SAAS,eAAe;AAAA,SACpC,OAAO,MAAM,OAAO;AAAA,MAEzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,WAAW,QAAQ;AACjB,eAAO,OAAO;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,UAAU;AACrB,eAAO,SAAS,KAAK;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,4BAA4B,KAAK,QAAQ;AACvC,eAAO,OAAO,gBAAgB,GAAG,EAAE,OAAO,CAAC,KAAK,YAAY;AAC1D,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,KAAK;AAAA,cACH,OAAO,oBAAoB,OAAO,eAAe,OAAO,CAAC;AAAA,YAC3D;AAAA,UACF;AAAA,QACF,GAAG,CAAC;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,wBAAwB,KAAK,QAAQ;AACnC,eAAO,OAAO,eAAe,GAAG,EAAE,OAAO,CAAC,KAAK,WAAW;AACxD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,KAAK,aAAa,OAAO,gBAAgB,OAAO,WAAW,MAAM,CAAC,CAAC;AAAA,UACrE;AAAA,QACF,GAAG,CAAC;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,8BAA8B,KAAK,QAAQ;AACzC,eAAO,OAAO,qBAAqB,GAAG,EAAE,OAAO,CAAC,KAAK,WAAW;AAC9D,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,KAAK,aAAa,OAAO,gBAAgB,OAAO,WAAW,MAAM,CAAC,CAAC;AAAA,UACrE;AAAA,QACF,GAAG,CAAC;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,0BAA0B,KAAK,QAAQ;AACrC,eAAO,OAAO,iBAAiB,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAC5D,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,KAAK;AAAA,cACH,OAAO,kBAAkB,OAAO,aAAa,QAAQ,CAAC;AAAA,YACxD;AAAA,UACF;AAAA,QACF,GAAG,CAAC;AAAA,MACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,KAAK;AAEhB,YAAI,UAAU,IAAI;AAClB,YAAI,IAAI,SAAS,CAAC,GAAG;AACnB,oBAAU,UAAU,MAAM,IAAI,SAAS,CAAC;AAAA,QAC1C;AACA,YAAI,mBAAmB;AACvB,iBACM,cAAc,IAAI,QACtB,aACA,cAAc,YAAY,QAC1B;AACA,6BAAmB,YAAY,KAAK,IAAI,MAAM;AAAA,QAChD;AACA,eAAO,mBAAmB,UAAU,MAAM,IAAI,MAAM;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,mBAAmB,KAAK;AAEtB,eAAO,IAAI,YAAY;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,sBAAsB,KAAK;AAEzB,eAAO,IAAI,QAAQ,KAAK,IAAI,YAAY;AAAA,MAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,kBAAkB,QAAQ;AACxB,cAAM,YAAY,CAAC;AAEnB,YAAI,OAAO,YAAY;AACrB,oBAAU;AAAA;AAAA,YAER,YAAY,OAAO,WAAW,IAAI,CAAC,WAAW,KAAK,UAAU,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,UAClF;AAAA,QACF;AACA,YAAI,OAAO,iBAAiB,QAAW;AAGrC,gBAAM,cACJ,OAAO,YACP,OAAO,YACN,OAAO,UAAU,KAAK,OAAO,OAAO,iBAAiB;AACxD,cAAI,aAAa;AACf,sBAAU;AAAA,cACR,YAAY,OAAO,2BAA2B,KAAK,UAAU,OAAO,YAAY,CAAC;AAAA,YACnF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,OAAO,cAAc,UAAa,OAAO,UAAU;AACrD,oBAAU,KAAK,WAAW,KAAK,UAAU,OAAO,SAAS,CAAC,EAAE;AAAA,QAC9D;AACA,YAAI,OAAO,WAAW,QAAW;AAC/B,oBAAU,KAAK,QAAQ,OAAO,MAAM,EAAE;AAAA,QACxC;AACA,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,mBAAmB,IAAI,UAAU,KAAK,IAAI,CAAC;AACjD,cAAI,OAAO,aAAa;AACtB,mBAAO,GAAG,OAAO,WAAW,IAAI,gBAAgB;AAAA,UAClD;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,OAAO;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,oBAAoB,UAAU;AAC5B,cAAM,YAAY,CAAC;AACnB,YAAI,SAAS,YAAY;AACvB,oBAAU;AAAA;AAAA,YAER,YAAY,SAAS,WAAW,IAAI,CAAC,WAAW,KAAK,UAAU,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,UACpF;AAAA,QACF;AACA,YAAI,SAAS,iBAAiB,QAAW;AACvC,oBAAU;AAAA,YACR,YAAY,SAAS,2BAA2B,KAAK,UAAU,SAAS,YAAY,CAAC;AAAA,UACvF;AAAA,QACF;AACA,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,mBAAmB,IAAI,UAAU,KAAK,IAAI,CAAC;AACjD,cAAI,SAAS,aAAa;AACxB,mBAAO,GAAG,SAAS,WAAW,IAAI,gBAAgB;AAAA,UACpD;AACA,iBAAO;AAAA,QACT;AACA,eAAO,SAAS;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,SAAS,OAAO,QAAQ;AACrC,YAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,eAAO,CAAC,OAAO,WAAW,OAAO,GAAG,GAAG,OAAO,EAAE;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAW,eAAe,cAAc,UAAU;AAChD,cAAM,SAAS,oBAAI,IAAI;AAEvB,sBAAc,QAAQ,CAAC,SAAS;AAC9B,gBAAM,QAAQ,SAAS,IAAI;AAC3B,cAAI,CAAC,OAAO,IAAI,KAAK,EAAG,QAAO,IAAI,OAAO,CAAC,CAAC;AAAA,QAC9C,CAAC;AAED,qBAAa,QAAQ,CAAC,SAAS;AAC7B,gBAAM,QAAQ,SAAS,IAAI;AAC3B,cAAI,CAAC,OAAO,IAAI,KAAK,GAAG;AACtB,mBAAO,IAAI,OAAO,CAAC,CAAC;AAAA,UACtB;AACA,iBAAO,IAAI,KAAK,EAAE,KAAK,IAAI;AAAA,QAC7B,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAW,KAAK,QAAQ;AACtB,cAAM,YAAY,OAAO,SAAS,KAAK,MAAM;AAC7C,cAAM,YAAY,OAAO,aAAa;AAEtC,iBAAS,eAAe,MAAM,aAAa;AACzC,iBAAO,OAAO,WAAW,MAAM,WAAW,aAAa,MAAM;AAAA,QAC/D;AAGA,YAAI,SAAS;AAAA,UACX,GAAG,OAAO,WAAW,QAAQ,CAAC,IAAI,OAAO,WAAW,OAAO,aAAa,GAAG,CAAC,CAAC;AAAA,UAC7E;AAAA,QACF;AAGA,cAAM,qBAAqB,OAAO,mBAAmB,GAAG;AACxD,YAAI,mBAAmB,SAAS,GAAG;AACjC,mBAAS,OAAO,OAAO;AAAA,YACrB,OAAO;AAAA,cACL,OAAO,wBAAwB,kBAAkB;AAAA,cACjD;AAAA,YACF;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAGA,cAAM,eAAe,OAAO,iBAAiB,GAAG,EAAE,IAAI,CAAC,aAAa;AAClE,iBAAO;AAAA,YACL,OAAO,kBAAkB,OAAO,aAAa,QAAQ,CAAC;AAAA,YACtD,OAAO,yBAAyB,OAAO,oBAAoB,QAAQ,CAAC;AAAA,UACtE;AAAA,QACF,CAAC;AACD,iBAAS,OAAO;AAAA,UACd,KAAK,eAAe,cAAc,cAAc,MAAM;AAAA,QACxD;AAGA,cAAM,eAAe,KAAK;AAAA,UACxB,IAAI;AAAA,UACJ,OAAO,eAAe,GAAG;AAAA,UACzB,CAAC,WAAW,OAAO,oBAAoB;AAAA,QACzC;AACA,qBAAa,QAAQ,CAAC,SAAS,UAAU;AACvC,gBAAM,aAAa,QAAQ,IAAI,CAAC,WAAW;AACzC,mBAAO;AAAA,cACL,OAAO,gBAAgB,OAAO,WAAW,MAAM,CAAC;AAAA,cAChD,OAAO,uBAAuB,OAAO,kBAAkB,MAAM,CAAC;AAAA,YAChE;AAAA,UACF,CAAC;AACD,mBAAS,OAAO,OAAO,KAAK,eAAe,OAAO,YAAY,MAAM,CAAC;AAAA,QACvE,CAAC;AAED,YAAI,OAAO,mBAAmB;AAC5B,gBAAM,mBAAmB,OACtB,qBAAqB,GAAG,EACxB,IAAI,CAAC,WAAW;AACf,mBAAO;AAAA,cACL,OAAO,gBAAgB,OAAO,WAAW,MAAM,CAAC;AAAA,cAChD,OAAO,uBAAuB,OAAO,kBAAkB,MAAM,CAAC;AAAA,YAChE;AAAA,UACF,CAAC;AACH,mBAAS,OAAO;AAAA,YACd,KAAK,eAAe,mBAAmB,kBAAkB,MAAM;AAAA,UACjE;AAAA,QACF;AAGA,cAAM,gBAAgB,KAAK;AAAA,UACzB,IAAI;AAAA,UACJ,OAAO,gBAAgB,GAAG;AAAA,UAC1B,CAAC,QAAQ,IAAI,UAAU,KAAK;AAAA,QAC9B;AACA,sBAAc,QAAQ,CAAC,UAAU,UAAU;AACzC,gBAAM,cAAc,SAAS,IAAI,CAAC,QAAQ;AACxC,mBAAO;AAAA,cACL,OAAO,oBAAoB,OAAO,eAAe,GAAG,CAAC;AAAA,cACrD,OAAO,2BAA2B,OAAO,sBAAsB,GAAG,CAAC;AAAA,YACrE;AAAA,UACF,CAAC;AACD,mBAAS,OAAO,OAAO,KAAK,eAAe,OAAO,aAAa,MAAM,CAAC;AAAA,QACxE,CAAC;AAED,eAAO,OAAO,KAAK,IAAI;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,aAAa,KAAK;AAChB,eAAO,WAAW,GAAG,EAAE;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,KAAK;AACd,eAAO;AAAA,MACT;AAAA,MAEA,WAAW,KAAK;AAGd,eAAO,IACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,cAAI,SAAS,YAAa,QAAO,KAAK,gBAAgB,IAAI;AAC1D,cAAI,SAAS,YAAa,QAAO,KAAK,oBAAoB,IAAI;AAC9D,cAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM;AACjC,mBAAO,KAAK,kBAAkB,IAAI;AACpC,iBAAO,KAAK,iBAAiB,IAAI;AAAA,QACnC,CAAC,EACA,KAAK,GAAG;AAAA,MACb;AAAA,MACA,wBAAwB,KAAK;AAC3B,eAAO,KAAK,qBAAqB,GAAG;AAAA,MACtC;AAAA,MACA,uBAAuB,KAAK;AAC1B,eAAO,KAAK,qBAAqB,GAAG;AAAA,MACtC;AAAA,MACA,2BAA2B,KAAK;AAC9B,eAAO,KAAK,qBAAqB,GAAG;AAAA,MACtC;AAAA,MACA,yBAAyB,KAAK;AAC5B,eAAO,KAAK,qBAAqB,GAAG;AAAA,MACtC;AAAA,MACA,qBAAqB,KAAK;AACxB,eAAO;AAAA,MACT;AAAA,MACA,gBAAgB,KAAK;AACnB,eAAO,KAAK,gBAAgB,GAAG;AAAA,MACjC;AAAA,MACA,oBAAoB,KAAK;AAGvB,eAAO,IACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,cAAI,SAAS,YAAa,QAAO,KAAK,gBAAgB,IAAI;AAC1D,cAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM;AACjC,mBAAO,KAAK,kBAAkB,IAAI;AACpC,iBAAO,KAAK,oBAAoB,IAAI;AAAA,QACtC,CAAC,EACA,KAAK,GAAG;AAAA,MACb;AAAA,MACA,kBAAkB,KAAK;AACrB,eAAO,KAAK,kBAAkB,GAAG;AAAA,MACnC;AAAA,MACA,gBAAgB,KAAK;AACnB,eAAO;AAAA,MACT;AAAA,MACA,kBAAkB,KAAK;AACrB,eAAO;AAAA,MACT;AAAA,MACA,oBAAoB,KAAK;AACvB,eAAO;AAAA,MACT;AAAA,MACA,iBAAiB,KAAK;AACpB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,SAAS,KAAK,QAAQ;AACpB,eAAO,KAAK;AAAA,UACV,OAAO,wBAAwB,KAAK,MAAM;AAAA,UAC1C,OAAO,8BAA8B,KAAK,MAAM;AAAA,UAChD,OAAO,4BAA4B,KAAK,MAAM;AAAA,UAC9C,OAAO,0BAA0B,KAAK,MAAM;AAAA,QAC9C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,aAAa,KAAK;AAChB,eAAO,cAAc,KAAK,GAAG;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,WAAW,MAAM,WAAW,aAAa,QAAQ;AAC/C,cAAM,aAAa;AACnB,cAAM,gBAAgB,IAAI,OAAO,UAAU;AAC3C,YAAI,CAAC,YAAa,QAAO,gBAAgB;AAGzC,cAAM,aAAa,KAAK;AAAA,UACtB,YAAY,KAAK,SAAS,OAAO,aAAa,IAAI;AAAA,QACpD;AAGA,cAAM,cAAc;AACpB,cAAM,YAAY,KAAK,aAAa;AACpC,cAAM,iBAAiB,YAAY,YAAY,cAAc;AAC7D,YAAI;AACJ,YACE,iBAAiB,KAAK,kBACtB,OAAO,aAAa,WAAW,GAC/B;AACA,iCAAuB;AAAA,QACzB,OAAO;AACL,gBAAM,qBAAqB,OAAO,QAAQ,aAAa,cAAc;AACrE,iCAAuB,mBAAmB;AAAA,YACxC;AAAA,YACA,OAAO,IAAI,OAAO,YAAY,WAAW;AAAA,UAC3C;AAAA,QACF;AAGA,eACE,gBACA,aACA,IAAI,OAAO,WAAW,IACtB,qBAAqB,QAAQ,OAAO;AAAA,EAAK,aAAa,EAAE;AAAA,MAE5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,QAAQ,KAAK,OAAO;AAClB,YAAI,QAAQ,KAAK,eAAgB,QAAO;AAExC,cAAM,WAAW,IAAI,MAAM,SAAS;AAEpC,cAAM,eAAe;AACrB,cAAM,eAAe,CAAC;AACtB,iBAAS,QAAQ,CAAC,SAAS;AACzB,gBAAM,SAAS,KAAK,MAAM,YAAY;AACtC,cAAI,WAAW,MAAM;AACnB,yBAAa,KAAK,EAAE;AACpB;AAAA,UACF;AAEA,cAAI,YAAY,CAAC,OAAO,MAAM,CAAC;AAC/B,cAAI,WAAW,KAAK,aAAa,UAAU,CAAC,CAAC;AAC7C,iBAAO,QAAQ,CAACC,WAAU;AACxB,kBAAM,eAAe,KAAK,aAAaA,MAAK;AAE5C,gBAAI,WAAW,gBAAgB,OAAO;AACpC,wBAAU,KAAKA,MAAK;AACpB,0BAAY;AACZ;AAAA,YACF;AACA,yBAAa,KAAK,UAAU,KAAK,EAAE,CAAC;AAEpC,kBAAM,YAAYA,OAAM,UAAU;AAClC,wBAAY,CAAC,SAAS;AACtB,uBAAW,KAAK,aAAa,SAAS;AAAA,UACxC,CAAC;AACD,uBAAa,KAAK,UAAU,KAAK,EAAE,CAAC;AAAA,QACtC,CAAC;AAED,eAAO,aAAa,KAAK,IAAI;AAAA,MAC/B;AAAA,IACF;AAUA,aAAS,WAAW,KAAK;AAEvB,YAAM,aAAa;AACnB,aAAO,IAAI,QAAQ,YAAY,EAAE;AAAA,IACnC;AAEA,IAAAJ,SAAQ,OAAOC;AACf,IAAAD,SAAQ,aAAa;AAAA;AAAA;;;AC1uBrB;AAAA,yCAAAK,UAAA;AAAA;AAAA,QAAM,EAAE,sBAAAC,sBAAqB,IAAI;AAEjC,QAAMC,UAAN,MAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQX,YAAY,OAAO,aAAa;AAC9B,aAAK,QAAQ;AACb,aAAK,cAAc,eAAe;AAElC,aAAK,WAAW,MAAM,SAAS,GAAG;AAClC,aAAK,WAAW,MAAM,SAAS,GAAG;AAElC,aAAK,WAAW,iBAAiB,KAAK,KAAK;AAC3C,aAAK,YAAY;AACjB,cAAM,cAAc,iBAAiB,KAAK;AAC1C,aAAK,QAAQ,YAAY;AACzB,aAAK,OAAO,YAAY;AACxB,aAAK,SAAS;AACd,YAAI,KAAK,MAAM;AACb,eAAK,SAAS,KAAK,KAAK,WAAW,OAAO;AAAA,QAC5C;AACA,aAAK,eAAe;AACpB,aAAK,0BAA0B;AAC/B,aAAK,YAAY;AACjB,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,aAAa;AAClB,aAAK,gBAAgB,CAAC;AACtB,aAAK,UAAU;AACf,aAAK,mBAAmB;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,QAAQ,OAAO,aAAa;AAC1B,aAAK,eAAe;AACpB,aAAK,0BAA0B;AAC/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,OAAO,KAAK;AACV,aAAK,YAAY;AACjB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,UAAU,OAAO;AACf,aAAK,gBAAgB,KAAK,cAAc,OAAO,KAAK;AACpD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,QAAQ,qBAAqB;AAC3B,YAAI,aAAa;AACjB,YAAI,OAAO,wBAAwB,UAAU;AAE3C,uBAAa,EAAE,CAAC,mBAAmB,GAAG,KAAK;AAAA,QAC7C;AACA,aAAK,UAAU,OAAO,OAAO,KAAK,WAAW,CAAC,GAAG,UAAU;AAC3D,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,IAAI,MAAM;AACR,aAAK,SAAS;AACd,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,IAAI;AACZ,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,oBAAoB,YAAY,MAAM;AACpC,aAAK,YAAY,CAAC,CAAC;AACnB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,SAAS,OAAO,MAAM;AACpB,aAAK,SAAS,CAAC,CAAC;AAChB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAMA,cAAc,OAAO,UAAU;AAC7B,YAAI,aAAa,KAAK,gBAAgB,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC9D,iBAAO,CAAC,KAAK;AAAA,QACf;AAEA,iBAAS,KAAK,KAAK;AACnB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQ,QAAQ;AACd,aAAK,aAAa,OAAO,MAAM;AAC/B,aAAK,WAAW,CAAC,KAAK,aAAa;AACjC,cAAI,CAAC,KAAK,WAAW,SAAS,GAAG,GAAG;AAClC,kBAAM,IAAID;AAAA,cACR,uBAAuB,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,YACnD;AAAA,UACF;AACA,cAAI,KAAK,UAAU;AACjB,mBAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,UACzC;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,OAAO;AACL,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,KAAK,QAAQ,OAAO,EAAE;AAAA,QACpC;AACA,eAAO,KAAK,MAAM,QAAQ,MAAM,EAAE;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB;AACd,YAAI,KAAK,QAAQ;AACf,iBAAO,UAAU,KAAK,KAAK,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAAA,QAClD;AACA,eAAO,UAAU,KAAK,KAAK,CAAC;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAU,SAAS;AACjB,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,GAAG,KAAK;AACN,eAAO,KAAK,UAAU,OAAO,KAAK,SAAS;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,YAAY;AACV,eAAO,CAAC,KAAK,YAAY,CAAC,KAAK,YAAY,CAAC,KAAK;AAAA,MACnD;AAAA,IACF;AASA,QAAM,cAAN,MAAkB;AAAA;AAAA;AAAA;AAAA,MAIhB,YAAY,SAAS;AACnB,aAAK,kBAAkB,oBAAI,IAAI;AAC/B,aAAK,kBAAkB,oBAAI,IAAI;AAC/B,aAAK,cAAc,oBAAI,IAAI;AAC3B,gBAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAI,OAAO,QAAQ;AACjB,iBAAK,gBAAgB,IAAI,OAAO,cAAc,GAAG,MAAM;AAAA,UACzD,OAAO;AACL,iBAAK,gBAAgB,IAAI,OAAO,cAAc,GAAG,MAAM;AAAA,UACzD;AAAA,QACF,CAAC;AACD,aAAK,gBAAgB,QAAQ,CAAC,OAAO,QAAQ;AAC3C,cAAI,KAAK,gBAAgB,IAAI,GAAG,GAAG;AACjC,iBAAK,YAAY,IAAI,GAAG;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,OAAO,QAAQ;AAC7B,cAAM,YAAY,OAAO,cAAc;AACvC,YAAI,CAAC,KAAK,YAAY,IAAI,SAAS,EAAG,QAAO;AAG7C,cAAM,SAAS,KAAK,gBAAgB,IAAI,SAAS,EAAE;AACnD,cAAM,gBAAgB,WAAW,SAAY,SAAS;AACtD,eAAO,OAAO,YAAY,kBAAkB;AAAA,MAC9C;AAAA,IACF;AAUA,aAAS,UAAU,KAAK;AACtB,aAAO,IAAI,MAAM,GAAG,EAAE,OAAO,CAACE,MAAK,SAAS;AAC1C,eAAOA,OAAM,KAAK,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAQA,aAAS,iBAAiB,OAAO;AAC/B,UAAI;AACJ,UAAI;AAEJ,YAAM,eAAe;AAErB,YAAM,cAAc;AAEpB,YAAM,YAAY,MAAM,MAAM,QAAQ,EAAE,OAAO,OAAO;AAEtD,UAAI,aAAa,KAAK,UAAU,CAAC,CAAC,EAAG,aAAY,UAAU,MAAM;AACjE,UAAI,YAAY,KAAK,UAAU,CAAC,CAAC,EAAG,YAAW,UAAU,MAAM;AAE/D,UAAI,CAAC,aAAa,aAAa,KAAK,UAAU,CAAC,CAAC;AAC9C,oBAAY,UAAU,MAAM;AAG9B,UAAI,CAAC,aAAa,YAAY,KAAK,UAAU,CAAC,CAAC,GAAG;AAChD,oBAAY;AACZ,mBAAW,UAAU,MAAM;AAAA,MAC7B;AAGA,UAAI,UAAU,CAAC,EAAE,WAAW,GAAG,GAAG;AAChC,cAAM,kBAAkB,UAAU,CAAC;AACnC,cAAM,YAAY,kCAAkC,eAAe,sBAAsB,KAAK;AAC9F,YAAI,aAAa,KAAK,eAAe;AACnC,gBAAM,IAAI;AAAA,YACR,GAAG,SAAS;AAAA;AAAA;AAAA;AAAA,UAId;AACF,YAAI,aAAa,KAAK,eAAe;AACnC,gBAAM,IAAI,MAAM,GAAG,SAAS;AAAA,uBACX;AACnB,YAAI,YAAY,KAAK,eAAe;AAClC,gBAAM,IAAI,MAAM,GAAG,SAAS;AAAA,sBACZ;AAElB,cAAM,IAAI,MAAM,GAAG,SAAS;AAAA,2BACL;AAAA,MACzB;AACA,UAAI,cAAc,UAAa,aAAa;AAC1C,cAAM,IAAI;AAAA,UACR,oDAAoD,KAAK;AAAA,QAC3D;AAEF,aAAO,EAAE,WAAW,SAAS;AAAA,IAC/B;AAEA,IAAAH,SAAQ,SAASE;AACjB,IAAAF,SAAQ,cAAc;AAAA;AAAA;;;AC3XtB;AAAA,iDAAAI,UAAA;AAAA;AAAA,QAAM,cAAc;AAEpB,aAAS,aAAaC,IAAG,GAAG;AAM1B,UAAI,KAAK,IAAIA,GAAE,SAAS,EAAE,MAAM,IAAI;AAClC,eAAO,KAAK,IAAIA,GAAE,QAAQ,EAAE,MAAM;AAGpC,YAAM,IAAI,CAAC;AAGX,eAASC,KAAI,GAAGA,MAAKD,GAAE,QAAQC,MAAK;AAClC,UAAEA,EAAC,IAAI,CAACA,EAAC;AAAA,MACX;AAEA,eAAS,IAAI,GAAG,KAAK,EAAE,QAAQ,KAAK;AAClC,UAAE,CAAC,EAAE,CAAC,IAAI;AAAA,MACZ;AAGA,eAAS,IAAI,GAAG,KAAK,EAAE,QAAQ,KAAK;AAClC,iBAASA,KAAI,GAAGA,MAAKD,GAAE,QAAQC,MAAK;AAClC,cAAI,OAAO;AACX,cAAID,GAAEC,KAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AACzB,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO;AAAA,UACT;AACA,YAAEA,EAAC,EAAE,CAAC,IAAI,KAAK;AAAA,YACb,EAAEA,KAAI,CAAC,EAAE,CAAC,IAAI;AAAA;AAAA,YACd,EAAEA,EAAC,EAAE,IAAI,CAAC,IAAI;AAAA;AAAA,YACd,EAAEA,KAAI,CAAC,EAAE,IAAI,CAAC,IAAI;AAAA;AAAA,UACpB;AAEA,cAAIA,KAAI,KAAK,IAAI,KAAKD,GAAEC,KAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAKD,GAAEC,KAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AACpE,cAAEA,EAAC,EAAE,CAAC,IAAI,KAAK,IAAI,EAAEA,EAAC,EAAE,CAAC,GAAG,EAAEA,KAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAED,GAAE,MAAM,EAAE,EAAE,MAAM;AAAA,IAC7B;AAUA,aAAS,eAAe,MAAM,YAAY;AACxC,UAAI,CAAC,cAAc,WAAW,WAAW,EAAG,QAAO;AAEnD,mBAAa,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC;AAE3C,YAAM,mBAAmB,KAAK,WAAW,IAAI;AAC7C,UAAI,kBAAkB;AACpB,eAAO,KAAK,MAAM,CAAC;AACnB,qBAAa,WAAW,IAAI,CAAC,cAAc,UAAU,MAAM,CAAC,CAAC;AAAA,MAC/D;AAEA,UAAI,UAAU,CAAC;AACf,UAAI,eAAe;AACnB,YAAM,gBAAgB;AACtB,iBAAW,QAAQ,CAAC,cAAc;AAChC,YAAI,UAAU,UAAU,EAAG;AAE3B,cAAM,WAAW,aAAa,MAAM,SAAS;AAC7C,cAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,UAAU,MAAM;AACrD,cAAM,cAAc,SAAS,YAAY;AACzC,YAAI,aAAa,eAAe;AAC9B,cAAI,WAAW,cAAc;AAE3B,2BAAe;AACf,sBAAU,CAAC,SAAS;AAAA,UACtB,WAAW,aAAa,cAAc;AACpC,oBAAQ,KAAK,SAAS;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAED,cAAQ,KAAK,CAACA,IAAG,MAAMA,GAAE,cAAc,CAAC,CAAC;AACzC,UAAI,kBAAkB;AACpB,kBAAU,QAAQ,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;AAAA,MACvD;AAEA,UAAI,QAAQ,SAAS,GAAG;AACtB,eAAO;AAAA,uBAA0B,QAAQ,KAAK,IAAI,CAAC;AAAA,MACrD;AACA,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,gBAAmB,QAAQ,CAAC,CAAC;AAAA,MACtC;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,SAAQ,iBAAiB;AAAA;AAAA;;;ACpGzB;AAAA,0CAAAG,UAAA;AAAA;AAAA,QAAMC,gBAAe,QAAQ,QAAa,EAAE;AAC5C,QAAM,eAAe,QAAQ,eAAoB;AACjD,QAAMC,SAAO,QAAQ,MAAW;AAChC,QAAMC,OAAK,QAAQ,IAAS;AAC5B,QAAMC,YAAU,QAAQ,SAAc;AAEtC,QAAM,EAAE,UAAAC,WAAU,qBAAqB,IAAI;AAC3C,QAAM,EAAE,gBAAAC,gBAAe,IAAI;AAC3B,QAAM,EAAE,MAAAC,OAAM,WAAW,IAAI;AAC7B,QAAM,EAAE,QAAAC,SAAQ,YAAY,IAAI;AAChC,QAAM,EAAE,eAAe,IAAI;AAE3B,QAAMC,WAAN,MAAM,iBAAgBR,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjC,YAAY,MAAM;AAChB,cAAM;AAEN,aAAK,WAAW,CAAC;AAEjB,aAAK,UAAU,CAAC;AAChB,aAAK,SAAS;AACd,aAAK,sBAAsB;AAC3B,aAAK,wBAAwB;AAE7B,aAAK,sBAAsB,CAAC;AAC5B,aAAK,QAAQ,KAAK;AAElB,aAAK,OAAO,CAAC;AACb,aAAK,UAAU,CAAC;AAChB,aAAK,gBAAgB,CAAC;AACtB,aAAK,cAAc;AACnB,aAAK,QAAQ,QAAQ;AACrB,aAAK,gBAAgB,CAAC;AACtB,aAAK,sBAAsB,CAAC;AAC5B,aAAK,4BAA4B;AACjC,aAAK,iBAAiB;AACtB,aAAK,qBAAqB;AAC1B,aAAK,kBAAkB;AACvB,aAAK,iBAAiB;AACtB,aAAK,sBAAsB;AAC3B,aAAK,gBAAgB;AACrB,aAAK,WAAW,CAAC;AACjB,aAAK,+BAA+B;AACpC,aAAK,eAAe;AACpB,aAAK,WAAW;AAChB,aAAK,mBAAmB;AACxB,aAAK,2BAA2B;AAChC,aAAK,sBAAsB;AAC3B,aAAK,kBAAkB,CAAC;AAExB,aAAK,sBAAsB;AAC3B,aAAK,4BAA4B;AACjC,aAAK,cAAc;AAGnB,aAAK,uBAAuB;AAAA,UAC1B,UAAU,CAAC,QAAQG,UAAQ,OAAO,MAAM,GAAG;AAAA,UAC3C,UAAU,CAAC,QAAQA,UAAQ,OAAO,MAAM,GAAG;AAAA,UAC3C,aAAa,CAAC,KAAK,UAAU,MAAM,GAAG;AAAA,UACtC,iBAAiB,MACfA,UAAQ,OAAO,QAAQA,UAAQ,OAAO,UAAU;AAAA,UAClD,iBAAiB,MACfA,UAAQ,OAAO,QAAQA,UAAQ,OAAO,UAAU;AAAA,UAClD,iBAAiB,MACf,SAAS,MAAMA,UAAQ,OAAO,SAASA,UAAQ,OAAO,YAAY;AAAA,UACpE,iBAAiB,MACf,SAAS,MAAMA,UAAQ,OAAO,SAASA,UAAQ,OAAO,YAAY;AAAA,UACpE,YAAY,CAAC,QAAQ,WAAW,GAAG;AAAA,QACrC;AAEA,aAAK,UAAU;AAEf,aAAK,cAAc;AACnB,aAAK,0BAA0B;AAE/B,aAAK,eAAe;AACpB,aAAK,qBAAqB,CAAC;AAE3B,aAAK,oBAAoB;AAEzB,aAAK,uBAAuB;AAE5B,aAAK,sBAAsB;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,sBAAsB,eAAe;AACnC,aAAK,uBAAuB,cAAc;AAC1C,aAAK,cAAc,cAAc;AACjC,aAAK,eAAe,cAAc;AAClC,aAAK,qBAAqB,cAAc;AACxC,aAAK,gBAAgB,cAAc;AACnC,aAAK,4BAA4B,cAAc;AAC/C,aAAK,+BACH,cAAc;AAChB,aAAK,wBAAwB,cAAc;AAC3C,aAAK,2BAA2B,cAAc;AAC9C,aAAK,sBAAsB,cAAc;AACzC,aAAK,4BAA4B,cAAc;AAE/C,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,0BAA0B;AACxB,cAAM,SAAS,CAAC;AAEhB,iBAAS,UAAU,MAAM,SAAS,UAAU,QAAQ,QAAQ;AAC1D,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA2BA,QAAQ,aAAa,sBAAsB,UAAU;AACnD,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,iBAAO;AACP,iBAAO;AAAA,QACT;AACA,eAAO,QAAQ,CAAC;AAChB,cAAM,CAAC,EAAE,MAAM,IAAI,IAAI,YAAY,MAAM,eAAe;AAExD,cAAM,MAAM,KAAK,cAAc,IAAI;AACnC,YAAI,MAAM;AACR,cAAI,YAAY,IAAI;AACpB,cAAI,qBAAqB;AAAA,QAC3B;AACA,YAAI,KAAK,UAAW,MAAK,sBAAsB,IAAI;AACnD,YAAI,UAAU,CAAC,EAAE,KAAK,UAAU,KAAK;AACrC,YAAI,kBAAkB,KAAK,kBAAkB;AAC7C,YAAI,KAAM,KAAI,UAAU,IAAI;AAC5B,aAAK,iBAAiB,GAAG;AACzB,YAAI,SAAS;AACb,YAAI,sBAAsB,IAAI;AAE9B,YAAI,KAAM,QAAO;AACjB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,cAAc,MAAM;AAClB,eAAO,IAAI,SAAQ,IAAI;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa;AACX,eAAO,OAAO,OAAO,IAAIG,MAAK,GAAG,KAAK,cAAc,CAAC;AAAA,MACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,cAAc,eAAe;AAC3B,YAAI,kBAAkB,OAAW,QAAO,KAAK;AAE7C,aAAK,qBAAqB;AAC1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBA,gBAAgB,eAAe;AAC7B,YAAI,kBAAkB,OAAW,QAAO,KAAK;AAE7C,aAAK,uBAAuB;AAAA,UAC1B,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACL;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB,cAAc,MAAM;AACrC,YAAI,OAAO,gBAAgB,SAAU,eAAc,CAAC,CAAC;AACrD,aAAK,sBAAsB;AAC3B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,yBAAyB,oBAAoB,MAAM;AACjD,aAAK,4BAA4B,CAAC,CAAC;AACnC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,WAAW,KAAK,MAAM;AACpB,YAAI,CAAC,IAAI,OAAO;AACd,gBAAM,IAAI,MAAM;AAAA,2DACqC;AAAA,QACvD;AAEA,eAAO,QAAQ,CAAC;AAChB,YAAI,KAAK,UAAW,MAAK,sBAAsB,IAAI;AACnD,YAAI,KAAK,UAAU,KAAK,OAAQ,KAAI,UAAU;AAE9C,aAAK,iBAAiB,GAAG;AACzB,YAAI,SAAS;AACb,YAAI,2BAA2B;AAE/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,eAAe,MAAM,aAAa;AAChC,eAAO,IAAIF,UAAS,MAAM,WAAW;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,SAAS,MAAM,aAAa,UAAU,cAAc;AAClD,cAAM,WAAW,KAAK,eAAe,MAAM,WAAW;AACtD,YAAI,OAAO,aAAa,YAAY;AAClC,mBAAS,QAAQ,YAAY,EAAE,UAAU,QAAQ;AAAA,QACnD,OAAO;AACL,mBAAS,QAAQ,QAAQ;AAAA,QAC3B;AACA,aAAK,YAAY,QAAQ;AACzB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,UAAU,OAAO;AACf,cACG,KAAK,EACL,MAAM,IAAI,EACV,QAAQ,CAAC,WAAW;AACnB,eAAK,SAAS,MAAM;AAAA,QACtB,CAAC;AACH,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,YAAY,UAAU;AACpB,cAAM,mBAAmB,KAAK,oBAAoB,MAAM,EAAE,EAAE,CAAC;AAC7D,YAAI,kBAAkB,UAAU;AAC9B,gBAAM,IAAI;AAAA,YACR,2CAA2C,iBAAiB,KAAK,CAAC;AAAA,UACpE;AAAA,QACF;AACA,YACE,SAAS,YACT,SAAS,iBAAiB,UAC1B,SAAS,aAAa,QACtB;AACA,gBAAM,IAAI;AAAA,YACR,2DAA2D,SAAS,KAAK,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,aAAK,oBAAoB,KAAK,QAAQ;AACtC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,YAAY,qBAAqB,aAAa;AAC5C,YAAI,OAAO,wBAAwB,WAAW;AAC5C,eAAK,0BAA0B;AAC/B,cAAI,uBAAuB,KAAK,sBAAsB;AAEpD,iBAAK,kBAAkB,KAAK,gBAAgB,CAAC;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AAEA,cAAM,cAAc,uBAAuB;AAC3C,cAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,YAAY,MAAM,eAAe;AAChE,cAAM,kBAAkB,eAAe;AAEvC,cAAM,cAAc,KAAK,cAAc,QAAQ;AAC/C,oBAAY,WAAW,KAAK;AAC5B,YAAI,SAAU,aAAY,UAAU,QAAQ;AAC5C,YAAI,gBAAiB,aAAY,YAAY,eAAe;AAE5D,aAAK,0BAA0B;AAC/B,aAAK,eAAe;AAEpB,YAAI,uBAAuB,YAAa,MAAK,kBAAkB,WAAW;AAE1E,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,aAAa,uBAAuB;AAGjD,YAAI,OAAO,gBAAgB,UAAU;AACnC,eAAK,YAAY,aAAa,qBAAqB;AACnD,iBAAO;AAAA,QACT;AAEA,aAAK,0BAA0B;AAC/B,aAAK,eAAe;AACpB,aAAK,kBAAkB,WAAW;AAClC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,kBAAkB;AAChB,cAAM,yBACJ,KAAK,4BACJ,KAAK,SAAS,UACb,CAAC,KAAK,kBACN,CAAC,KAAK,aAAa,MAAM;AAE7B,YAAI,wBAAwB;AAC1B,cAAI,KAAK,iBAAiB,QAAW;AACnC,iBAAK,YAAY,QAAW,MAAS;AAAA,UACvC;AACA,iBAAO,KAAK;AAAA,QACd;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAK,OAAO,UAAU;AACpB,cAAM,gBAAgB,CAAC,iBAAiB,aAAa,YAAY;AACjE,YAAI,CAAC,cAAc,SAAS,KAAK,GAAG;AAClC,gBAAM,IAAI,MAAM,gDAAgD,KAAK;AAAA,oBACvD,cAAc,KAAK,MAAM,CAAC,GAAG;AAAA,QAC7C;AACA,YAAI,KAAK,gBAAgB,KAAK,GAAG;AAC/B,eAAK,gBAAgB,KAAK,EAAE,KAAK,QAAQ;AAAA,QAC3C,OAAO;AACL,eAAK,gBAAgB,KAAK,IAAI,CAAC,QAAQ;AAAA,QACzC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,IAAI;AACf,YAAI,IAAI;AACN,eAAK,gBAAgB;AAAA,QACvB,OAAO;AACL,eAAK,gBAAgB,CAAC,QAAQ;AAC5B,gBAAI,IAAI,SAAS,oCAAoC;AACnD,oBAAM;AAAA,YACR,OAAO;AAAA,YAEP;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,MAAM,UAAU,MAAM,SAAS;AAC7B,YAAI,KAAK,eAAe;AACtB,eAAK,cAAc,IAAIC,gBAAe,UAAU,MAAM,OAAO,CAAC;AAAA,QAEhE;AACA,QAAAF,UAAQ,KAAK,QAAQ;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,OAAO,IAAI;AACT,cAAM,WAAW,CAAC,SAAS;AAEzB,gBAAM,oBAAoB,KAAK,oBAAoB;AACnD,gBAAM,aAAa,KAAK,MAAM,GAAG,iBAAiB;AAClD,cAAI,KAAK,2BAA2B;AAClC,uBAAW,iBAAiB,IAAI;AAAA,UAClC,OAAO;AACL,uBAAW,iBAAiB,IAAI,KAAK,KAAK;AAAA,UAC5C;AACA,qBAAW,KAAK,IAAI;AAEpB,iBAAO,GAAG,MAAM,MAAM,UAAU;AAAA,QAClC;AACA,aAAK,iBAAiB;AACtB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,aAAa,OAAO,aAAa;AAC/B,eAAO,IAAII,QAAO,OAAO,WAAW;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,cAAc,QAAQ,OAAO,UAAU,wBAAwB;AAC7D,YAAI;AACF,iBAAO,OAAO,SAAS,OAAO,QAAQ;AAAA,QACxC,SAAS,KAAK;AACZ,cAAI,IAAI,SAAS,6BAA6B;AAC5C,kBAAM,UAAU,GAAG,sBAAsB,IAAI,IAAI,OAAO;AACxD,iBAAK,MAAM,SAAS,EAAE,UAAU,IAAI,UAAU,MAAM,IAAI,KAAK,CAAC;AAAA,UAChE;AACA,gBAAM;AAAA,QACR;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,gBAAgB,QAAQ;AACtB,cAAM,iBACH,OAAO,SAAS,KAAK,YAAY,OAAO,KAAK,KAC7C,OAAO,QAAQ,KAAK,YAAY,OAAO,IAAI;AAC9C,YAAI,gBAAgB;AAClB,gBAAM,eACJ,OAAO,QAAQ,KAAK,YAAY,OAAO,IAAI,IACvC,OAAO,OACP,OAAO;AACb,gBAAM,IAAI,MAAM,sBAAsB,OAAO,KAAK,IAAI,KAAK,SAAS,gBAAgB,KAAK,KAAK,GAAG,6BAA6B,YAAY;AAAA,6BACnH,eAAe,KAAK,GAAG;AAAA,QAChD;AAEA,aAAK,iBAAiB,MAAM;AAC5B,aAAK,QAAQ,KAAK,MAAM;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,iBAAiB,SAAS;AACxB,cAAM,UAAU,CAAC,QAAQ;AACvB,iBAAO,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI,QAAQ,CAAC;AAAA,QAC1C;AAEA,cAAM,cAAc,QAAQ,OAAO,EAAE;AAAA,UAAK,CAAC,SACzC,KAAK,aAAa,IAAI;AAAA,QACxB;AACA,YAAI,aAAa;AACf,gBAAM,cAAc,QAAQ,KAAK,aAAa,WAAW,CAAC,EAAE,KAAK,GAAG;AACpE,gBAAM,SAAS,QAAQ,OAAO,EAAE,KAAK,GAAG;AACxC,gBAAM,IAAI;AAAA,YACR,uBAAuB,MAAM,8BAA8B,WAAW;AAAA,UACxE;AAAA,QACF;AAEA,aAAK,kBAAkB,OAAO;AAC9B,aAAK,SAAS,KAAK,OAAO;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAU,QAAQ;AAChB,aAAK,gBAAgB,MAAM;AAE3B,cAAM,QAAQ,OAAO,KAAK;AAC1B,cAAM,OAAO,OAAO,cAAc;AAGlC,YAAI,OAAO,QAAQ;AAEjB,gBAAM,mBAAmB,OAAO,KAAK,QAAQ,UAAU,IAAI;AAC3D,cAAI,CAAC,KAAK,YAAY,gBAAgB,GAAG;AACvC,iBAAK;AAAA,cACH;AAAA,cACA,OAAO,iBAAiB,SAAY,OAAO,OAAO;AAAA,cAClD;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,OAAO,iBAAiB,QAAW;AAC5C,eAAK,yBAAyB,MAAM,OAAO,cAAc,SAAS;AAAA,QACpE;AAGA,cAAM,oBAAoB,CAAC,KAAK,qBAAqB,gBAAgB;AAGnE,cAAI,OAAO,QAAQ,OAAO,cAAc,QAAW;AACjD,kBAAM,OAAO;AAAA,UACf;AAGA,gBAAM,WAAW,KAAK,eAAe,IAAI;AACzC,cAAI,QAAQ,QAAQ,OAAO,UAAU;AACnC,kBAAM,KAAK,cAAc,QAAQ,KAAK,UAAU,mBAAmB;AAAA,UACrE,WAAW,QAAQ,QAAQ,OAAO,UAAU;AAC1C,kBAAM,OAAO,cAAc,KAAK,QAAQ;AAAA,UAC1C;AAGA,cAAI,OAAO,MAAM;AACf,gBAAI,OAAO,QAAQ;AACjB,oBAAM;AAAA,YACR,WAAW,OAAO,UAAU,KAAK,OAAO,UAAU;AAChD,oBAAM;AAAA,YACR,OAAO;AACL,oBAAM;AAAA,YACR;AAAA,UACF;AACA,eAAK,yBAAyB,MAAM,KAAK,WAAW;AAAA,QACtD;AAEA,aAAK,GAAG,YAAY,OAAO,CAAC,QAAQ;AAClC,gBAAM,sBAAsB,kBAAkB,OAAO,KAAK,eAAe,GAAG;AAC5E,4BAAkB,KAAK,qBAAqB,KAAK;AAAA,QACnD,CAAC;AAED,YAAI,OAAO,QAAQ;AACjB,eAAK,GAAG,eAAe,OAAO,CAAC,QAAQ;AACrC,kBAAM,sBAAsB,kBAAkB,OAAO,KAAK,YAAY,GAAG,eAAe,OAAO,MAAM;AACrG,8BAAkB,KAAK,qBAAqB,KAAK;AAAA,UACnD,CAAC;AAAA,QACH;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAU,QAAQ,OAAO,aAAa,IAAI,cAAc;AACtD,YAAI,OAAO,UAAU,YAAY,iBAAiBA,SAAQ;AACxD,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS,KAAK,aAAa,OAAO,WAAW;AACnD,eAAO,oBAAoB,CAAC,CAAC,OAAO,SAAS;AAC7C,YAAI,OAAO,OAAO,YAAY;AAC5B,iBAAO,QAAQ,YAAY,EAAE,UAAU,EAAE;AAAA,QAC3C,WAAW,cAAc,QAAQ;AAE/B,gBAAM,QAAQ;AACd,eAAK,CAAC,KAAK,QAAQ;AACjB,kBAAM,IAAI,MAAM,KAAK,GAAG;AACxB,mBAAO,IAAI,EAAE,CAAC,IAAI;AAAA,UACpB;AACA,iBAAO,QAAQ,YAAY,EAAE,UAAU,EAAE;AAAA,QAC3C,OAAO;AACL,iBAAO,QAAQ,EAAE;AAAA,QACnB;AAEA,eAAO,KAAK,UAAU,MAAM;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAwBA,OAAO,OAAO,aAAa,UAAU,cAAc;AACjD,eAAO,KAAK,UAAU,CAAC,GAAG,OAAO,aAAa,UAAU,YAAY;AAAA,MACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,eAAe,OAAO,aAAa,UAAU,cAAc;AACzD,eAAO,KAAK;AAAA,UACV,EAAE,WAAW,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,4BAA4B,UAAU,MAAM;AAC1C,aAAK,+BAA+B,CAAC,CAAC;AACtC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB,eAAe,MAAM;AACtC,aAAK,sBAAsB,CAAC,CAAC;AAC7B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,qBAAqB,cAAc,MAAM;AACvC,aAAK,wBAAwB,CAAC,CAAC;AAC/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,wBAAwB,aAAa,MAAM;AACzC,aAAK,2BAA2B,CAAC,CAAC;AAClC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,mBAAmB,cAAc,MAAM;AACrC,aAAK,sBAAsB,CAAC,CAAC;AAC7B,aAAK,2BAA2B;AAChC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAMA,6BAA6B;AAC3B,YACE,KAAK,UACL,KAAK,uBACL,CAAC,KAAK,OAAO,0BACb;AACA,gBAAM,IAAI;AAAA,YACR,0CAA0C,KAAK,KAAK;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,yBAAyB,oBAAoB,MAAM;AACjD,YAAI,KAAK,QAAQ,QAAQ;AACvB,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AACA,YAAI,OAAO,KAAK,KAAK,aAAa,EAAE,QAAQ;AAC1C,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,aAAK,4BAA4B,CAAC,CAAC;AACnC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,KAAK;AAClB,YAAI,KAAK,2BAA2B;AAClC,iBAAO,KAAK,GAAG;AAAA,QACjB;AACA,eAAO,KAAK,cAAc,GAAG;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,KAAK,OAAO;AACzB,eAAO,KAAK,yBAAyB,KAAK,OAAO,MAAS;AAAA,MAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,yBAAyB,KAAK,OAAO,QAAQ;AAC3C,YAAI,KAAK,2BAA2B;AAClC,eAAK,GAAG,IAAI;AAAA,QACd,OAAO;AACL,eAAK,cAAc,GAAG,IAAI;AAAA,QAC5B;AACA,aAAK,oBAAoB,GAAG,IAAI;AAChC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,qBAAqB,KAAK;AACxB,eAAO,KAAK,oBAAoB,GAAG;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,gCAAgC,KAAK;AAEnC,YAAI;AACJ,aAAK,wBAAwB,EAAE,QAAQ,CAAC,QAAQ;AAC9C,cAAI,IAAI,qBAAqB,GAAG,MAAM,QAAW;AAC/C,qBAAS,IAAI,qBAAqB,GAAG;AAAA,UACvC;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,iBAAiB,MAAM,cAAc;AACnC,YAAI,SAAS,UAAa,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC9C,gBAAM,IAAI,MAAM,qDAAqD;AAAA,QACvE;AACA,uBAAe,gBAAgB,CAAC;AAGhC,YAAI,SAAS,UAAa,aAAa,SAAS,QAAW;AACzD,cAAIJ,UAAQ,UAAU,UAAU;AAC9B,yBAAa,OAAO;AAAA,UACtB;AAEA,gBAAMM,YAAWN,UAAQ,YAAY,CAAC;AACtC,cACEM,UAAS,SAAS,IAAI,KACtBA,UAAS,SAAS,QAAQ,KAC1BA,UAAS,SAAS,IAAI,KACtBA,UAAS,SAAS,SAAS,GAC3B;AACA,yBAAa,OAAO;AAAA,UACtB;AAAA,QACF;AAGA,YAAI,SAAS,QAAW;AACtB,iBAAON,UAAQ;AAAA,QACjB;AACA,aAAK,UAAU,KAAK,MAAM;AAG1B,YAAI;AACJ,gBAAQ,aAAa,MAAM;AAAA,UACzB,KAAK;AAAA,UACL,KAAK;AACH,iBAAK,cAAc,KAAK,CAAC;AACzB,uBAAW,KAAK,MAAM,CAAC;AACvB;AAAA,UACF,KAAK;AAEH,gBAAIA,UAAQ,YAAY;AACtB,mBAAK,cAAc,KAAK,CAAC;AACzB,yBAAW,KAAK,MAAM,CAAC;AAAA,YACzB,OAAO;AACL,yBAAW,KAAK,MAAM,CAAC;AAAA,YACzB;AACA;AAAA,UACF,KAAK;AACH,uBAAW,KAAK,MAAM,CAAC;AACvB;AAAA,UACF,KAAK;AACH,uBAAW,KAAK,MAAM,CAAC;AACvB;AAAA,UACF;AACE,kBAAM,IAAI;AAAA,cACR,oCAAoC,aAAa,IAAI;AAAA,YACvD;AAAA,QACJ;AAGA,YAAI,CAAC,KAAK,SAAS,KAAK;AACtB,eAAK,iBAAiB,KAAK,WAAW;AACxC,aAAK,QAAQ,KAAK,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBA,MAAM,MAAM,cAAc;AACxB,aAAK,iBAAiB;AACtB,cAAM,WAAW,KAAK,iBAAiB,MAAM,YAAY;AACzD,aAAK,cAAc,CAAC,GAAG,QAAQ;AAE/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBA,MAAM,WAAW,MAAM,cAAc;AACnC,aAAK,iBAAiB;AACtB,cAAM,WAAW,KAAK,iBAAiB,MAAM,YAAY;AACzD,cAAM,KAAK,cAAc,CAAC,GAAG,QAAQ;AAErC,eAAO;AAAA,MACT;AAAA,MAEA,mBAAmB;AACjB,YAAI,KAAK,gBAAgB,MAAM;AAC7B,eAAK,qBAAqB;AAAA,QAC5B,OAAO;AACL,eAAK,wBAAwB;AAAA,QAC/B;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,uBAAuB;AACrB,aAAK,cAAc;AAAA;AAAA,UAEjB,OAAO,KAAK;AAAA;AAAA;AAAA,UAGZ,eAAe,EAAE,GAAG,KAAK,cAAc;AAAA,UACvC,qBAAqB,EAAE,GAAG,KAAK,oBAAoB;AAAA,QACrD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B;AACxB,YAAI,KAAK;AACP,gBAAM,IAAI,MAAM;AAAA,0FACoE;AAGtF,aAAK,QAAQ,KAAK,YAAY;AAC9B,aAAK,cAAc;AACnB,aAAK,UAAU,CAAC;AAEhB,aAAK,gBAAgB,EAAE,GAAG,KAAK,YAAY,cAAc;AACzD,aAAK,sBAAsB,EAAE,GAAG,KAAK,YAAY,oBAAoB;AAErE,aAAK,OAAO,CAAC;AAEb,aAAK,gBAAgB,CAAC;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,2BAA2B,gBAAgB,eAAe,gBAAgB;AACxE,YAAID,KAAG,WAAW,cAAc,EAAG;AAEnC,cAAM,uBAAuB,gBACzB,wDAAwD,aAAa,MACrE;AACJ,cAAM,oBAAoB,IAAI,cAAc;AAAA,SACvC,cAAc;AAAA;AAAA,KAElB,oBAAoB;AACrB,cAAM,IAAI,MAAM,iBAAiB;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB,YAAY,MAAM;AACnC,eAAO,KAAK,MAAM;AAClB,YAAI,iBAAiB;AACrB,cAAM,YAAY,CAAC,OAAO,OAAO,QAAQ,QAAQ,MAAM;AAEvD,iBAAS,SAAS,SAAS,UAAU;AAEnC,gBAAM,WAAWD,OAAK,QAAQ,SAAS,QAAQ;AAC/C,cAAIC,KAAG,WAAW,QAAQ,EAAG,QAAO;AAGpC,cAAI,UAAU,SAASD,OAAK,QAAQ,QAAQ,CAAC,EAAG,QAAO;AAGvD,gBAAM,WAAW,UAAU;AAAA,YAAK,CAAC,QAC/BC,KAAG,WAAW,GAAG,QAAQ,GAAG,GAAG,EAAE;AAAA,UACnC;AACA,cAAI,SAAU,QAAO,GAAG,QAAQ,GAAG,QAAQ;AAE3C,iBAAO;AAAA,QACT;AAGA,aAAK,iCAAiC;AACtC,aAAK,4BAA4B;AAGjC,YAAI,iBACF,WAAW,mBAAmB,GAAG,KAAK,KAAK,IAAI,WAAW,KAAK;AACjE,YAAI,gBAAgB,KAAK,kBAAkB;AAC3C,YAAI,KAAK,aAAa;AACpB,cAAI;AACJ,cAAI;AACF,iCAAqBA,KAAG,aAAa,KAAK,WAAW;AAAA,UACvD,QAAQ;AACN,iCAAqB,KAAK;AAAA,UAC5B;AACA,0BAAgBD,OAAK;AAAA,YACnBA,OAAK,QAAQ,kBAAkB;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAGA,YAAI,eAAe;AACjB,cAAI,YAAY,SAAS,eAAe,cAAc;AAGtD,cAAI,CAAC,aAAa,CAAC,WAAW,mBAAmB,KAAK,aAAa;AACjE,kBAAM,aAAaA,OAAK;AAAA,cACtB,KAAK;AAAA,cACLA,OAAK,QAAQ,KAAK,WAAW;AAAA,YAC/B;AACA,gBAAI,eAAe,KAAK,OAAO;AAC7B,0BAAY;AAAA,gBACV;AAAA,gBACA,GAAG,UAAU,IAAI,WAAW,KAAK;AAAA,cACnC;AAAA,YACF;AAAA,UACF;AACA,2BAAiB,aAAa;AAAA,QAChC;AAEA,yBAAiB,UAAU,SAASA,OAAK,QAAQ,cAAc,CAAC;AAEhE,YAAI;AACJ,YAAIE,UAAQ,aAAa,SAAS;AAChC,cAAI,gBAAgB;AAClB,iBAAK,QAAQ,cAAc;AAE3B,mBAAO,2BAA2BA,UAAQ,QAAQ,EAAE,OAAO,IAAI;AAE/D,mBAAO,aAAa,MAAMA,UAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,UAAU,CAAC;AAAA,UACvE,OAAO;AACL,mBAAO,aAAa,MAAM,gBAAgB,MAAM,EAAE,OAAO,UAAU,CAAC;AAAA,UACtE;AAAA,QACF,OAAO;AACL,eAAK;AAAA,YACH;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACb;AACA,eAAK,QAAQ,cAAc;AAE3B,iBAAO,2BAA2BA,UAAQ,QAAQ,EAAE,OAAO,IAAI;AAC/D,iBAAO,aAAa,MAAMA,UAAQ,UAAU,MAAM,EAAE,OAAO,UAAU,CAAC;AAAA,QACxE;AAEA,YAAI,CAAC,KAAK,QAAQ;AAEhB,gBAAMO,WAAU,CAAC,WAAW,WAAW,WAAW,UAAU,QAAQ;AACpE,UAAAA,SAAQ,QAAQ,CAAC,WAAW;AAC1B,YAAAP,UAAQ,GAAG,QAAQ,MAAM;AACvB,kBAAI,KAAK,WAAW,SAAS,KAAK,aAAa,MAAM;AAEnD,qBAAK,KAAK,MAAM;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAGA,cAAM,eAAe,KAAK;AAC1B,aAAK,GAAG,SAAS,CAAC,SAAS;AACzB,iBAAO,QAAQ;AACf,cAAI,CAAC,cAAc;AACjB,YAAAA,UAAQ,KAAK,IAAI;AAAA,UACnB,OAAO;AACL;AAAA,cACE,IAAIE;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,aAAK,GAAG,SAAS,CAAC,QAAQ;AAExB,cAAI,IAAI,SAAS,UAAU;AACzB,iBAAK;AAAA,cACH;AAAA,cACA;AAAA,cACA,WAAW;AAAA,YACb;AAAA,UAEF,WAAW,IAAI,SAAS,UAAU;AAChC,kBAAM,IAAI,MAAM,IAAI,cAAc,kBAAkB;AAAA,UACtD;AACA,cAAI,CAAC,cAAc;AACjB,YAAAF,UAAQ,KAAK,CAAC;AAAA,UAChB,OAAO;AACL,kBAAM,eAAe,IAAIE;AAAA,cACvB;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,yBAAa,cAAc;AAC3B,yBAAa,YAAY;AAAA,UAC3B;AAAA,QACF,CAAC;AAGD,aAAK,iBAAiB;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA,MAMA,oBAAoB,aAAa,UAAU,SAAS;AAClD,cAAM,aAAa,KAAK,aAAa,WAAW;AAChD,YAAI,CAAC,WAAY,MAAK,KAAK,EAAE,OAAO,KAAK,CAAC;AAE1C,mBAAW,iBAAiB;AAC5B,YAAI;AACJ,uBAAe,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,uBAAe,KAAK,aAAa,cAAc,MAAM;AACnD,cAAI,WAAW,oBAAoB;AACjC,iBAAK,mBAAmB,YAAY,SAAS,OAAO,OAAO,CAAC;AAAA,UAC9D,OAAO;AACL,mBAAO,WAAW,cAAc,UAAU,OAAO;AAAA,UACnD;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,qBAAqB,gBAAgB;AACnC,YAAI,CAAC,gBAAgB;AACnB,eAAK,KAAK;AAAA,QACZ;AACA,cAAM,aAAa,KAAK,aAAa,cAAc;AACnD,YAAI,cAAc,CAAC,WAAW,oBAAoB;AAChD,qBAAW,KAAK;AAAA,QAClB;AAGA,eAAO,KAAK;AAAA,UACV;AAAA,UACA,CAAC;AAAA,UACD,CAAC,KAAK,eAAe,GAAG,QAAQ,KAAK,eAAe,GAAG,SAAS,QAAQ;AAAA,QAC1E;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B;AAExB,aAAK,oBAAoB,QAAQ,CAAC,KAAKM,OAAM;AAC3C,cAAI,IAAI,YAAY,KAAK,KAAKA,EAAC,KAAK,MAAM;AACxC,iBAAK,gBAAgB,IAAI,KAAK,CAAC;AAAA,UACjC;AAAA,QACF,CAAC;AAED,YACE,KAAK,oBAAoB,SAAS,KAClC,KAAK,oBAAoB,KAAK,oBAAoB,SAAS,CAAC,EAAE,UAC9D;AACA;AAAA,QACF;AACA,YAAI,KAAK,KAAK,SAAS,KAAK,oBAAoB,QAAQ;AACtD,eAAK,iBAAiB,KAAK,IAAI;AAAA,QACjC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,oBAAoB;AAClB,cAAM,aAAa,CAAC,UAAU,OAAO,aAAa;AAEhD,cAAI,cAAc;AAClB,cAAI,UAAU,QAAQ,SAAS,UAAU;AACvC,kBAAM,sBAAsB,kCAAkC,KAAK,8BAA8B,SAAS,KAAK,CAAC;AAChH,0BAAc,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,aAAK,wBAAwB;AAE7B,cAAM,gBAAgB,CAAC;AACvB,aAAK,oBAAoB,QAAQ,CAAC,aAAaC,WAAU;AACvD,cAAI,QAAQ,YAAY;AACxB,cAAI,YAAY,UAAU;AAExB,gBAAIA,SAAQ,KAAK,KAAK,QAAQ;AAC5B,sBAAQ,KAAK,KAAK,MAAMA,MAAK;AAC7B,kBAAI,YAAY,UAAU;AACxB,wBAAQ,MAAM,OAAO,CAAC,WAAW,MAAM;AACrC,yBAAO,WAAW,aAAa,GAAG,SAAS;AAAA,gBAC7C,GAAG,YAAY,YAAY;AAAA,cAC7B;AAAA,YACF,WAAW,UAAU,QAAW;AAC9B,sBAAQ,CAAC;AAAA,YACX;AAAA,UACF,WAAWA,SAAQ,KAAK,KAAK,QAAQ;AACnC,oBAAQ,KAAK,KAAKA,MAAK;AACvB,gBAAI,YAAY,UAAU;AACxB,sBAAQ,WAAW,aAAa,OAAO,YAAY,YAAY;AAAA,YACjE;AAAA,UACF;AACA,wBAAcA,MAAK,IAAI;AAAA,QACzB,CAAC;AACD,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,aAAa,SAAS,IAAI;AAExB,YAAI,SAAS,QAAQ,OAAO,QAAQ,SAAS,YAAY;AAEvD,iBAAO,QAAQ,KAAK,MAAM,GAAG,CAAC;AAAA,QAChC;AAEA,eAAO,GAAG;AAAA,MACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,kBAAkB,SAAS,OAAO;AAChC,YAAI,SAAS;AACb,cAAM,QAAQ,CAAC;AACf,aAAK,wBAAwB,EAC1B,QAAQ,EACR,OAAO,CAAC,QAAQ,IAAI,gBAAgB,KAAK,MAAM,MAAS,EACxD,QAAQ,CAAC,kBAAkB;AAC1B,wBAAc,gBAAgB,KAAK,EAAE,QAAQ,CAAC,aAAa;AACzD,kBAAM,KAAK,EAAE,eAAe,SAAS,CAAC;AAAA,UACxC,CAAC;AAAA,QACH,CAAC;AACH,YAAI,UAAU,cAAc;AAC1B,gBAAM,QAAQ;AAAA,QAChB;AAEA,cAAM,QAAQ,CAAC,eAAe;AAC5B,mBAAS,KAAK,aAAa,QAAQ,MAAM;AACvC,mBAAO,WAAW,SAAS,WAAW,eAAe,IAAI;AAAA,UAC3D,CAAC;AAAA,QACH,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,2BAA2B,SAAS,YAAY,OAAO;AACrD,YAAI,SAAS;AACb,YAAI,KAAK,gBAAgB,KAAK,MAAM,QAAW;AAC7C,eAAK,gBAAgB,KAAK,EAAE,QAAQ,CAAC,SAAS;AAC5C,qBAAS,KAAK,aAAa,QAAQ,MAAM;AACvC,qBAAO,KAAK,MAAM,UAAU;AAAA,YAC9B,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,cAAc,UAAU,SAAS;AAC/B,cAAM,SAAS,KAAK,aAAa,OAAO;AACxC,aAAK,iBAAiB;AACtB,aAAK,qBAAqB;AAC1B,mBAAW,SAAS,OAAO,OAAO,QAAQ;AAC1C,kBAAU,OAAO;AACjB,aAAK,OAAO,SAAS,OAAO,OAAO;AAEnC,YAAI,YAAY,KAAK,aAAa,SAAS,CAAC,CAAC,GAAG;AAC9C,iBAAO,KAAK,oBAAoB,SAAS,CAAC,GAAG,SAAS,MAAM,CAAC,GAAG,OAAO;AAAA,QACzE;AACA,YACE,KAAK,gBAAgB,KACrB,SAAS,CAAC,MAAM,KAAK,gBAAgB,EAAE,KAAK,GAC5C;AACA,iBAAO,KAAK,qBAAqB,SAAS,CAAC,CAAC;AAAA,QAC9C;AACA,YAAI,KAAK,qBAAqB;AAC5B,eAAK,uBAAuB,OAAO;AACnC,iBAAO,KAAK;AAAA,YACV,KAAK;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,YACE,KAAK,SAAS,UACd,KAAK,KAAK,WAAW,KACrB,CAAC,KAAK,kBACN,CAAC,KAAK,qBACN;AAEA,eAAK,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,QAC3B;AAEA,aAAK,uBAAuB,OAAO,OAAO;AAC1C,aAAK,iCAAiC;AACtC,aAAK,4BAA4B;AAGjC,cAAM,yBAAyB,MAAM;AACnC,cAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,iBAAK,cAAc,OAAO,QAAQ,CAAC,CAAC;AAAA,UACtC;AAAA,QACF;AAEA,cAAM,eAAe,WAAW,KAAK,KAAK,CAAC;AAC3C,YAAI,KAAK,gBAAgB;AACvB,iCAAuB;AACvB,eAAK,kBAAkB;AAEvB,cAAI;AACJ,yBAAe,KAAK,kBAAkB,cAAc,WAAW;AAC/D,yBAAe,KAAK;AAAA,YAAa;AAAA,YAAc,MAC7C,KAAK,eAAe,KAAK,aAAa;AAAA,UACxC;AACA,cAAI,KAAK,QAAQ;AACf,2BAAe,KAAK,aAAa,cAAc,MAAM;AACnD,mBAAK,OAAO,KAAK,cAAc,UAAU,OAAO;AAAA,YAClD,CAAC;AAAA,UACH;AACA,yBAAe,KAAK,kBAAkB,cAAc,YAAY;AAChE,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,cAAc,YAAY,GAAG;AAC5C,iCAAuB;AACvB,eAAK,kBAAkB;AACvB,eAAK,OAAO,KAAK,cAAc,UAAU,OAAO;AAAA,QAClD,WAAW,SAAS,QAAQ;AAC1B,cAAI,KAAK,aAAa,GAAG,GAAG;AAE1B,mBAAO,KAAK,oBAAoB,KAAK,UAAU,OAAO;AAAA,UACxD;AACA,cAAI,KAAK,cAAc,WAAW,GAAG;AAEnC,iBAAK,KAAK,aAAa,UAAU,OAAO;AAAA,UAC1C,WAAW,KAAK,SAAS,QAAQ;AAC/B,iBAAK,eAAe;AAAA,UACtB,OAAO;AACL,mCAAuB;AACvB,iBAAK,kBAAkB;AAAA,UACzB;AAAA,QACF,WAAW,KAAK,SAAS,QAAQ;AAC/B,iCAAuB;AAEvB,eAAK,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,QAC3B,OAAO;AACL,iCAAuB;AACvB,eAAK,kBAAkB;AAAA,QAEzB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,aAAa,MAAM;AACjB,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,KAAK,SAAS;AAAA,UACnB,CAAC,QAAQ,IAAI,UAAU,QAAQ,IAAI,SAAS,SAAS,IAAI;AAAA,QAC3D;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,YAAY,KAAK;AACf,eAAO,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,GAAG,GAAG,CAAC;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,mCAAmC;AAEjC,aAAK,wBAAwB,EAAE,QAAQ,CAAC,QAAQ;AAC9C,cAAI,QAAQ,QAAQ,CAAC,aAAa;AAChC,gBACE,SAAS,aACT,IAAI,eAAe,SAAS,cAAc,CAAC,MAAM,QACjD;AACA,kBAAI,4BAA4B,QAAQ;AAAA,YAC1C;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,mCAAmC;AACjC,cAAM,2BAA2B,KAAK,QAAQ,OAAO,CAAC,WAAW;AAC/D,gBAAM,YAAY,OAAO,cAAc;AACvC,cAAI,KAAK,eAAe,SAAS,MAAM,QAAW;AAChD,mBAAO;AAAA,UACT;AACA,iBAAO,KAAK,qBAAqB,SAAS,MAAM;AAAA,QAClD,CAAC;AAED,cAAM,yBAAyB,yBAAyB;AAAA,UACtD,CAAC,WAAW,OAAO,cAAc,SAAS;AAAA,QAC5C;AAEA,+BAAuB,QAAQ,CAAC,WAAW;AACzC,gBAAM,wBAAwB,yBAAyB;AAAA,YAAK,CAAC,YAC3D,OAAO,cAAc,SAAS,QAAQ,cAAc,CAAC;AAAA,UACvD;AACA,cAAI,uBAAuB;AACzB,iBAAK,mBAAmB,QAAQ,qBAAqB;AAAA,UACvD;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,8BAA8B;AAE5B,aAAK,wBAAwB,EAAE,QAAQ,CAAC,QAAQ;AAC9C,cAAI,iCAAiC;AAAA,QACvC,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa,MAAM;AACjB,cAAM,WAAW,CAAC;AAClB,cAAM,UAAU,CAAC;AACjB,YAAI,OAAO;AAEX,iBAAS,YAAY,KAAK;AACxB,iBAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM;AAAA,QACtC;AAEA,cAAM,oBAAoB,CAAC,QAAQ;AAEjC,cAAI,CAAC,gCAAgC,KAAK,GAAG,EAAG,QAAO;AAEvD,iBAAO,CAAC,KAAK,wBAAwB,EAAE;AAAA,YAAK,CAAC,QAC3C,IAAI,QACD,IAAI,CAAC,QAAQ,IAAI,KAAK,EACtB,KAAK,CAAC,UAAU,QAAQ,KAAK,KAAK,CAAC;AAAA,UACxC;AAAA,QACF;AAGA,YAAI,uBAAuB;AAC3B,YAAI,cAAc;AAClB,YAAID,KAAI;AACR,eAAOA,KAAI,KAAK,UAAU,aAAa;AACrC,gBAAM,MAAM,eAAe,KAAKA,IAAG;AACnC,wBAAc;AAGd,cAAI,QAAQ,MAAM;AAChB,gBAAI,SAAS,QAAS,MAAK,KAAK,GAAG;AACnC,iBAAK,KAAK,GAAG,KAAK,MAAMA,EAAC,CAAC;AAC1B;AAAA,UACF;AAEA,cACE,yBACC,CAAC,YAAY,GAAG,KAAK,kBAAkB,GAAG,IAC3C;AACA,iBAAK,KAAK,UAAU,qBAAqB,KAAK,CAAC,IAAI,GAAG;AACtD;AAAA,UACF;AACA,iCAAuB;AAEvB,cAAI,YAAY,GAAG,GAAG;AACpB,kBAAM,SAAS,KAAK,YAAY,GAAG;AAEnC,gBAAI,QAAQ;AACV,kBAAI,OAAO,UAAU;AACnB,sBAAM,QAAQ,KAAKA,IAAG;AACtB,oBAAI,UAAU,OAAW,MAAK,sBAAsB,MAAM;AAC1D,qBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,IAAI,KAAK;AAAA,cAC5C,WAAW,OAAO,UAAU;AAC1B,oBAAI,QAAQ;AAEZ,oBACEA,KAAI,KAAK,WACR,CAAC,YAAY,KAAKA,EAAC,CAAC,KAAK,kBAAkB,KAAKA,EAAC,CAAC,IACnD;AACA,0BAAQ,KAAKA,IAAG;AAAA,gBAClB;AACA,qBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,IAAI,KAAK;AAAA,cAC5C,OAAO;AAEL,qBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,cACrC;AACA,qCAAuB,OAAO,WAAW,SAAS;AAClD;AAAA,YACF;AAAA,UACF;AAGA,cAAI,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,KAAK;AACtD,kBAAM,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,EAAE;AAC5C,gBAAI,QAAQ;AACV,kBACE,OAAO,YACN,OAAO,YAAY,KAAK,8BACzB;AAEA,qBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AAAA,cACnD,OAAO;AAEL,qBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,EAAE;AAEnC,8BAAc,IAAI,IAAI,MAAM,CAAC,CAAC;AAAA,cAChC;AACA;AAAA,YACF;AAAA,UACF;AAGA,cAAI,YAAY,KAAK,GAAG,GAAG;AACzB,kBAAMC,SAAQ,IAAI,QAAQ,GAAG;AAC7B,kBAAM,SAAS,KAAK,YAAY,IAAI,MAAM,GAAGA,MAAK,CAAC;AACnD,gBAAI,WAAW,OAAO,YAAY,OAAO,WAAW;AAClD,mBAAK,KAAK,UAAU,OAAO,KAAK,CAAC,IAAI,IAAI,MAAMA,SAAQ,CAAC,CAAC;AACzD;AAAA,YACF;AAAA,UACF;AAOA,cACE,SAAS,YACT,YAAY,GAAG,KACf,EAAE,KAAK,SAAS,WAAW,KAAK,kBAAkB,GAAG,IACrD;AACA,mBAAO;AAAA,UACT;AAGA,eACG,KAAK,4BAA4B,KAAK,wBACvC,SAAS,WAAW,KACpB,QAAQ,WAAW,GACnB;AACA,gBAAI,KAAK,aAAa,GAAG,GAAG;AAC1B,uBAAS,KAAK,GAAG;AACjB,sBAAQ,KAAK,GAAG,KAAK,MAAMD,EAAC,CAAC;AAC7B;AAAA,YACF,WACE,KAAK,gBAAgB,KACrB,QAAQ,KAAK,gBAAgB,EAAE,KAAK,GACpC;AACA,uBAAS,KAAK,KAAK,GAAG,KAAK,MAAMA,EAAC,CAAC;AACnC;AAAA,YACF,WAAW,KAAK,qBAAqB;AACnC,sBAAQ,KAAK,KAAK,GAAG,KAAK,MAAMA,EAAC,CAAC;AAClC;AAAA,YACF;AAAA,UACF;AAGA,cAAI,KAAK,qBAAqB;AAC5B,iBAAK,KAAK,KAAK,GAAG,KAAK,MAAMA,EAAC,CAAC;AAC/B;AAAA,UACF;AAGA,eAAK,KAAK,GAAG;AAAA,QACf;AAEA,eAAO,EAAE,UAAU,QAAQ;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO;AACL,YAAI,KAAK,2BAA2B;AAElC,gBAAM,SAAS,CAAC;AAChB,gBAAM,MAAM,KAAK,QAAQ;AAEzB,mBAASA,KAAI,GAAGA,KAAI,KAAKA,MAAK;AAC5B,kBAAM,MAAM,KAAK,QAAQA,EAAC,EAAE,cAAc;AAC1C,mBAAO,GAAG,IACR,QAAQ,KAAK,qBAAqB,KAAK,WAAW,KAAK,GAAG;AAAA,UAC9D;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,kBAAkB;AAEhB,eAAO,KAAK,wBAAwB,EAAE;AAAA,UACpC,CAAC,iBAAiB,QAAQ,OAAO,OAAO,iBAAiB,IAAI,KAAK,CAAC;AAAA,UACnE,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,MAAM,SAAS,cAAc;AAE3B,aAAK,qBAAqB;AAAA,UACxB,GAAG,OAAO;AAAA;AAAA,UACV,KAAK,qBAAqB;AAAA,QAC5B;AACA,YAAI,OAAO,KAAK,wBAAwB,UAAU;AAChD,eAAK,qBAAqB,SAAS,GAAG,KAAK,mBAAmB;AAAA,CAAI;AAAA,QACpE,WAAW,KAAK,qBAAqB;AACnC,eAAK,qBAAqB,SAAS,IAAI;AACvC,eAAK,WAAW,EAAE,OAAO,KAAK,CAAC;AAAA,QACjC;AAGA,cAAM,SAAS,gBAAgB,CAAC;AAChC,cAAM,WAAW,OAAO,YAAY;AACpC,cAAM,OAAO,OAAO,QAAQ;AAC5B,aAAK,MAAM,UAAU,MAAM,OAAO;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB;AACjB,aAAK,QAAQ,QAAQ,CAAC,WAAW;AAC/B,cAAI,OAAO,UAAU,OAAO,UAAUR,UAAQ,KAAK;AACjD,kBAAM,YAAY,OAAO,cAAc;AAEvC,gBACE,KAAK,eAAe,SAAS,MAAM,UACnC,CAAC,WAAW,UAAU,KAAK,EAAE;AAAA,cAC3B,KAAK,qBAAqB,SAAS;AAAA,YACrC,GACA;AACA,kBAAI,OAAO,YAAY,OAAO,UAAU;AAGtC,qBAAK,KAAK,aAAa,OAAO,KAAK,CAAC,IAAIA,UAAQ,IAAI,OAAO,MAAM,CAAC;AAAA,cACpE,OAAO;AAGL,qBAAK,KAAK,aAAa,OAAO,KAAK,CAAC,EAAE;AAAA,cACxC;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,uBAAuB;AACrB,cAAM,aAAa,IAAI,YAAY,KAAK,OAAO;AAC/C,cAAM,uBAAuB,CAAC,cAAc;AAC1C,iBACE,KAAK,eAAe,SAAS,MAAM,UACnC,CAAC,CAAC,WAAW,SAAS,EAAE,SAAS,KAAK,qBAAqB,SAAS,CAAC;AAAA,QAEzE;AACA,aAAK,QACF;AAAA,UACC,CAAC,WACC,OAAO,YAAY,UACnB,qBAAqB,OAAO,cAAc,CAAC,KAC3C,WAAW;AAAA,YACT,KAAK,eAAe,OAAO,cAAc,CAAC;AAAA,YAC1C;AAAA,UACF;AAAA,QACJ,EACC,QAAQ,CAAC,WAAW;AACnB,iBAAO,KAAK,OAAO,OAAO,EACvB,OAAO,CAAC,eAAe,CAAC,qBAAqB,UAAU,CAAC,EACxD,QAAQ,CAAC,eAAe;AACvB,iBAAK;AAAA,cACH;AAAA,cACA,OAAO,QAAQ,UAAU;AAAA,cACzB;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,MAAM;AACpB,cAAM,UAAU,qCAAqC,IAAI;AACzD,aAAK,MAAM,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,sBAAsB,QAAQ;AAC5B,cAAM,UAAU,kBAAkB,OAAO,KAAK;AAC9C,aAAK,MAAM,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAAA,MACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,4BAA4B,QAAQ;AAClC,cAAM,UAAU,2BAA2B,OAAO,KAAK;AACvD,aAAK,MAAM,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAAA,MACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,mBAAmB,QAAQ,mBAAmB;AAG5C,cAAM,0BAA0B,CAACU,YAAW;AAC1C,gBAAM,YAAYA,QAAO,cAAc;AACvC,gBAAM,cAAc,KAAK,eAAe,SAAS;AACjD,gBAAM,iBAAiB,KAAK,QAAQ;AAAA,YAClC,CAAC,WAAW,OAAO,UAAU,cAAc,OAAO,cAAc;AAAA,UAClE;AACA,gBAAM,iBAAiB,KAAK,QAAQ;AAAA,YAClC,CAAC,WAAW,CAAC,OAAO,UAAU,cAAc,OAAO,cAAc;AAAA,UACnE;AACA,cACE,mBACE,eAAe,cAAc,UAAa,gBAAgB,SACzD,eAAe,cAAc,UAC5B,gBAAgB,eAAe,YACnC;AACA,mBAAO;AAAA,UACT;AACA,iBAAO,kBAAkBA;AAAA,QAC3B;AAEA,cAAMC,mBAAkB,CAACD,YAAW;AAClC,gBAAM,aAAa,wBAAwBA,OAAM;AACjD,gBAAM,YAAY,WAAW,cAAc;AAC3C,gBAAM,SAAS,KAAK,qBAAqB,SAAS;AAClD,cAAI,WAAW,OAAO;AACpB,mBAAO,yBAAyB,WAAW,MAAM;AAAA,UACnD;AACA,iBAAO,WAAW,WAAW,KAAK;AAAA,QACpC;AAEA,cAAM,UAAU,UAAUC,iBAAgB,MAAM,CAAC,wBAAwBA,iBAAgB,iBAAiB,CAAC;AAC3G,aAAK,MAAM,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAAA,MAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,cAAc,MAAM;AAClB,YAAI,KAAK,oBAAqB;AAC9B,YAAI,aAAa;AAEjB,YAAI,KAAK,WAAW,IAAI,KAAK,KAAK,2BAA2B;AAE3D,cAAI,iBAAiB,CAAC;AAEtB,cAAI,UAAU;AACd,aAAG;AACD,kBAAM,YAAY,QACf,WAAW,EACX,eAAe,OAAO,EACtB,OAAO,CAAC,WAAW,OAAO,IAAI,EAC9B,IAAI,CAAC,WAAW,OAAO,IAAI;AAC9B,6BAAiB,eAAe,OAAO,SAAS;AAChD,sBAAU,QAAQ;AAAA,UACpB,SAAS,WAAW,CAAC,QAAQ;AAC7B,uBAAa,eAAe,MAAM,cAAc;AAAA,QAClD;AAEA,cAAM,UAAU,0BAA0B,IAAI,IAAI,UAAU;AAC5D,aAAK,MAAM,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,iBAAiB,cAAc;AAC7B,YAAI,KAAK,sBAAuB;AAEhC,cAAM,WAAW,KAAK,oBAAoB;AAC1C,cAAM,IAAI,aAAa,IAAI,KAAK;AAChC,cAAM,gBAAgB,KAAK,SAAS,SAAS,KAAK,KAAK,CAAC,MAAM;AAC9D,cAAM,UAAU,4BAA4B,aAAa,cAAc,QAAQ,YAAY,CAAC,YAAY,aAAa,MAAM;AAC3H,aAAK,MAAM,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,iBAAiB;AACf,cAAM,cAAc,KAAK,KAAK,CAAC;AAC/B,YAAI,aAAa;AAEjB,YAAI,KAAK,2BAA2B;AAClC,gBAAM,iBAAiB,CAAC;AACxB,eAAK,WAAW,EACb,gBAAgB,IAAI,EACpB,QAAQ,CAAC,YAAY;AACpB,2BAAe,KAAK,QAAQ,KAAK,CAAC;AAElC,gBAAI,QAAQ,MAAM,EAAG,gBAAe,KAAK,QAAQ,MAAM,CAAC;AAAA,UAC1D,CAAC;AACH,uBAAa,eAAe,aAAa,cAAc;AAAA,QACzD;AAEA,cAAM,UAAU,2BAA2B,WAAW,IAAI,UAAU;AACpE,aAAK,MAAM,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAAA,MAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,QAAQ,KAAK,OAAO,aAAa;AAC/B,YAAI,QAAQ,OAAW,QAAO,KAAK;AACnC,aAAK,WAAW;AAChB,gBAAQ,SAAS;AACjB,sBAAc,eAAe;AAC7B,cAAM,gBAAgB,KAAK,aAAa,OAAO,WAAW;AAC1D,aAAK,qBAAqB,cAAc,cAAc;AACtD,aAAK,gBAAgB,aAAa;AAElC,aAAK,GAAG,YAAY,cAAc,KAAK,GAAG,MAAM;AAC9C,eAAK,qBAAqB,SAAS,GAAG,GAAG;AAAA,CAAI;AAC7C,eAAK,MAAM,GAAG,qBAAqB,GAAG;AAAA,QACxC,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,YAAY,KAAK,iBAAiB;AAChC,YAAI,QAAQ,UAAa,oBAAoB;AAC3C,iBAAO,KAAK;AACd,aAAK,eAAe;AACpB,YAAI,iBAAiB;AACnB,eAAK,mBAAmB;AAAA,QAC1B;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,KAAK;AACX,YAAI,QAAQ,OAAW,QAAO,KAAK;AACnC,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,MAAM,OAAO;AACX,YAAI,UAAU,OAAW,QAAO,KAAK,SAAS,CAAC;AAI/C,YAAI,UAAU;AACd,YACE,KAAK,SAAS,WAAW,KACzB,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC,EAAE,oBACxC;AAEA,oBAAU,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC;AAAA,QAClD;AAEA,YAAI,UAAU,QAAQ;AACpB,gBAAM,IAAI,MAAM,6CAA6C;AAC/D,cAAM,kBAAkB,KAAK,QAAQ,aAAa,KAAK;AACvD,YAAI,iBAAiB;AAEnB,gBAAM,cAAc,CAAC,gBAAgB,KAAK,CAAC,EACxC,OAAO,gBAAgB,QAAQ,CAAC,EAChC,KAAK,GAAG;AACX,gBAAM,IAAI;AAAA,YACR,qBAAqB,KAAK,iBAAiB,KAAK,KAAK,CAAC,8BAA8B,WAAW;AAAA,UACjG;AAAA,QACF;AAEA,gBAAQ,SAAS,KAAK,KAAK;AAC3B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,QAAQ,SAAS;AAEf,YAAI,YAAY,OAAW,QAAO,KAAK;AAEvC,gBAAQ,QAAQ,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC;AAC5C,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,KAAK;AACT,YAAI,QAAQ,QAAW;AACrB,cAAI,KAAK,OAAQ,QAAO,KAAK;AAE7B,gBAAM,OAAO,KAAK,oBAAoB,IAAI,CAAC,QAAQ;AACjD,mBAAO,qBAAqB,GAAG;AAAA,UACjC,CAAC;AACD,iBAAO,CAAC,EACL;AAAA,YACC,KAAK,QAAQ,UAAU,KAAK,gBAAgB,OAAO,cAAc,CAAC;AAAA,YAClE,KAAK,SAAS,SAAS,cAAc,CAAC;AAAA,YACtC,KAAK,oBAAoB,SAAS,OAAO,CAAC;AAAA,UAC5C,EACC,KAAK,GAAG;AAAA,QACb;AAEA,aAAK,SAAS;AACd,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,KAAK,KAAK;AACR,YAAI,QAAQ,OAAW,QAAO,KAAK;AACnC,aAAK,QAAQ;AACb,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,SAAS;AACjB,YAAI,YAAY,OAAW,QAAO,KAAK,qBAAqB;AAC5D,aAAK,oBAAoB;AACzB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,cAAc,SAAS;AACrB,YAAI,YAAY,OAAW,QAAO,KAAK,wBAAwB;AAC/D,aAAK,uBAAuB;AAC5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,aAAa,SAAS;AACpB,YAAI,YAAY,OAAW,QAAO,KAAK,uBAAuB;AAC9D,aAAK,sBAAsB;AAC3B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,iBAAiB,QAAQ;AACvB,YAAI,KAAK,uBAAuB,CAAC,OAAO;AACtC,iBAAO,UAAU,KAAK,mBAAmB;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBAAkB,KAAK;AACrB,YAAI,KAAK,wBAAwB,CAAC,IAAI,UAAU;AAC9C,cAAI,UAAU,KAAK,oBAAoB;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,iBAAiB,UAAU;AACzB,aAAK,QAAQb,OAAK,SAAS,UAAUA,OAAK,QAAQ,QAAQ,CAAC;AAE3D,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,cAAcA,QAAM;AAClB,YAAIA,WAAS,OAAW,QAAO,KAAK;AACpC,aAAK,iBAAiBA;AACtB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,gBAAgB;AAC9B,cAAM,SAAS,KAAK,WAAW;AAC/B,cAAM,UAAU,KAAK,kBAAkB,cAAc;AACrD,eAAO,eAAe;AAAA,UACpB,OAAO,QAAQ;AAAA,UACf,WAAW,QAAQ;AAAA,UACnB,iBAAiB,QAAQ;AAAA,QAC3B,CAAC;AACD,cAAM,OAAO,OAAO,WAAW,MAAM,MAAM;AAC3C,YAAI,QAAQ,UAAW,QAAO;AAC9B,eAAO,KAAK,qBAAqB,WAAW,IAAI;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,kBAAkB,gBAAgB;AAChC,yBAAiB,kBAAkB,CAAC;AACpC,cAAM,QAAQ,CAAC,CAAC,eAAe;AAC/B,YAAI;AACJ,YAAIc;AACJ,YAAI;AACJ,YAAI,OAAO;AACT,sBAAY,CAAC,QAAQ,KAAK,qBAAqB,SAAS,GAAG;AAC3D,UAAAA,aAAY,KAAK,qBAAqB,gBAAgB;AACtD,sBAAY,KAAK,qBAAqB,gBAAgB;AAAA,QACxD,OAAO;AACL,sBAAY,CAAC,QAAQ,KAAK,qBAAqB,SAAS,GAAG;AAC3D,UAAAA,aAAY,KAAK,qBAAqB,gBAAgB;AACtD,sBAAY,KAAK,qBAAqB,gBAAgB;AAAA,QACxD;AACA,cAAM,QAAQ,CAAC,QAAQ;AACrB,cAAI,CAACA,WAAW,OAAM,KAAK,qBAAqB,WAAW,GAAG;AAC9D,iBAAO,UAAU,GAAG;AAAA,QACtB;AACA,eAAO,EAAE,OAAO,OAAO,WAAAA,YAAW,UAAU;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAW,gBAAgB;AACzB,YAAI;AACJ,YAAI,OAAO,mBAAmB,YAAY;AACxC,+BAAqB;AACrB,2BAAiB;AAAA,QACnB;AAEA,cAAM,gBAAgB,KAAK,kBAAkB,cAAc;AAE3D,cAAM,eAAe;AAAA,UACnB,OAAO,cAAc;AAAA,UACrB,OAAO,cAAc;AAAA,UACrB,SAAS;AAAA,QACX;AAEA,aAAK,wBAAwB,EAC1B,QAAQ,EACR,QAAQ,CAAC,YAAY,QAAQ,KAAK,iBAAiB,YAAY,CAAC;AACnE,aAAK,KAAK,cAAc,YAAY;AAEpC,YAAI,kBAAkB,KAAK,gBAAgB,EAAE,OAAO,cAAc,MAAM,CAAC;AACzE,YAAI,oBAAoB;AACtB,4BAAkB,mBAAmB,eAAe;AACpD,cACE,OAAO,oBAAoB,YAC3B,CAAC,OAAO,SAAS,eAAe,GAChC;AACA,kBAAM,IAAI,MAAM,sDAAsD;AAAA,UACxE;AAAA,QACF;AACA,sBAAc,MAAM,eAAe;AAEnC,YAAI,KAAK,eAAe,GAAG,MAAM;AAC/B,eAAK,KAAK,KAAK,eAAe,EAAE,IAAI;AAAA,QACtC;AACA,aAAK,KAAK,aAAa,YAAY;AACnC,aAAK,wBAAwB,EAAE;AAAA,UAAQ,CAAC,YACtC,QAAQ,KAAK,gBAAgB,YAAY;AAAA,QAC3C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,WAAW,OAAO,aAAa;AAE7B,YAAI,OAAO,UAAU,WAAW;AAC9B,cAAI,OAAO;AACT,gBAAI,KAAK,gBAAgB,KAAM,MAAK,cAAc;AAClD,gBAAI,KAAK,qBAAqB;AAE5B,mBAAK,iBAAiB,KAAK,eAAe,CAAC;AAAA,YAC7C;AAAA,UACF,OAAO;AACL,iBAAK,cAAc;AAAA,UACrB;AACA,iBAAO;AAAA,QACT;AAGA,aAAK,cAAc,KAAK;AAAA,UACtB,SAAS;AAAA,UACT,eAAe;AAAA,QACjB;AAEA,YAAI,SAAS,YAAa,MAAK,iBAAiB,KAAK,WAAW;AAEhE,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,iBAAiB;AAEf,YAAI,KAAK,gBAAgB,QAAW;AAClC,eAAK,WAAW,QAAW,MAAS;AAAA,QACtC;AACA,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,cAAc,QAAQ;AACpB,aAAK,cAAc;AACnB,aAAK,iBAAiB,MAAM;AAC5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAK,gBAAgB;AACnB,aAAK,WAAW,cAAc;AAC9B,YAAI,WAAW,OAAOZ,UAAQ,YAAY,CAAC;AAC3C,YACE,aAAa,KACb,kBACA,OAAO,mBAAmB,cAC1B,eAAe,OACf;AACA,qBAAW;AAAA,QACb;AAEA,aAAK,MAAM,UAAU,kBAAkB,cAAc;AAAA,MACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,YAAY,UAAU,MAAM;AAC1B,cAAM,gBAAgB,CAAC,aAAa,UAAU,SAAS,UAAU;AACjE,YAAI,CAAC,cAAc,SAAS,QAAQ,GAAG;AACrC,gBAAM,IAAI,MAAM;AAAA,oBACF,cAAc,KAAK,MAAM,CAAC,GAAG;AAAA,QAC7C;AAEA,cAAM,YAAY,GAAG,QAAQ;AAC7B,aAAK,GAAG,WAAW,CAAqC,YAAY;AAClE,cAAI;AACJ,cAAI,OAAO,SAAS,YAAY;AAC9B,sBAAU,KAAK,EAAE,OAAO,QAAQ,OAAO,SAAS,QAAQ,QAAQ,CAAC;AAAA,UACnE,OAAO;AACL,sBAAU;AAAA,UACZ;AAEA,cAAI,SAAS;AACX,oBAAQ,MAAM,GAAG,OAAO;AAAA,CAAI;AAAA,UAC9B;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,uBAAuB,MAAM;AAC3B,cAAM,aAAa,KAAK,eAAe;AACvC,cAAM,gBAAgB,cAAc,KAAK,KAAK,CAAC,QAAQ,WAAW,GAAG,GAAG,CAAC;AACzE,YAAI,eAAe;AACjB,eAAK,WAAW;AAEhB,eAAK,MAAM,GAAG,2BAA2B,cAAc;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAUA,aAAS,2BAA2B,MAAM;AAKxC,aAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,YAAI,CAAC,IAAI,WAAW,WAAW,GAAG;AAChC,iBAAO;AAAA,QACT;AACA,YAAI;AACJ,YAAI,YAAY;AAChB,YAAI,YAAY;AAChB,YAAI;AACJ,aAAK,QAAQ,IAAI,MAAM,sBAAsB,OAAO,MAAM;AAExD,wBAAc,MAAM,CAAC;AAAA,QACvB,YACG,QAAQ,IAAI,MAAM,oCAAoC,OAAO,MAC9D;AACA,wBAAc,MAAM,CAAC;AACrB,cAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,GAAG;AAE1B,wBAAY,MAAM,CAAC;AAAA,UACrB,OAAO;AAEL,wBAAY,MAAM,CAAC;AAAA,UACrB;AAAA,QACF,YACG,QAAQ,IAAI,MAAM,0CAA0C,OAAO,MACpE;AAEA,wBAAc,MAAM,CAAC;AACrB,sBAAY,MAAM,CAAC;AACnB,sBAAY,MAAM,CAAC;AAAA,QACrB;AAEA,YAAI,eAAe,cAAc,KAAK;AACpC,iBAAO,GAAG,WAAW,IAAI,SAAS,IAAI,SAAS,SAAS,IAAI,CAAC;AAAA,QAC/D;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAMA,aAAS,WAAW;AAalB,UACEA,UAAQ,IAAI,YACZA,UAAQ,IAAI,gBAAgB,OAC5BA,UAAQ,IAAI,gBAAgB;AAE5B,eAAO;AACT,UAAIA,UAAQ,IAAI,eAAeA,UAAQ,IAAI,mBAAmB;AAC5D,eAAO;AACT,aAAO;AAAA,IACT;AAEA,IAAAJ,SAAQ,UAAUS;AAClB,IAAAT,SAAQ,WAAW;AAAA;AAAA;;;ACxtFnB;AAAA,oCAAAiB,UAAA;AAAA;AAAA,QAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,QAAM,EAAE,SAAAC,SAAQ,IAAI;AACpB,QAAM,EAAE,gBAAAC,iBAAgB,sBAAAC,sBAAqB,IAAI;AACjD,QAAM,EAAE,MAAAC,MAAK,IAAI;AACjB,QAAM,EAAE,QAAAC,QAAO,IAAI;AAEnB,IAAAN,SAAQ,UAAU,IAAIE,SAAQ;AAE9B,IAAAF,SAAQ,gBAAgB,CAAC,SAAS,IAAIE,SAAQ,IAAI;AAClD,IAAAF,SAAQ,eAAe,CAAC,OAAO,gBAAgB,IAAIM,QAAO,OAAO,WAAW;AAC5E,IAAAN,SAAQ,iBAAiB,CAAC,MAAM,gBAAgB,IAAIC,UAAS,MAAM,WAAW;AAM9E,IAAAD,SAAQ,UAAUE;AAClB,IAAAF,SAAQ,SAASM;AACjB,IAAAN,SAAQ,WAAWC;AACnB,IAAAD,SAAQ,OAAOK;AAEf,IAAAL,SAAQ,iBAAiBG;AACzB,IAAAH,SAAQ,uBAAuBI;AAC/B,IAAAJ,SAAQ,6BAA6BI;AAAA;AAAA;;;ACvBrC;AAAA,0CAAAG,UAAAC,SAAA;AAAA;AAAA,QAAI,IAAI,WAAW,CAAC;AAApB,QAAuB,OAAO,EAAE,QAAQ,CAAC;AAAzC,QAA4C,MAAM,EAAE,OAAO,CAAC;AAC5D,QAAI,mBACH,EAAE,CAAC,CAAC,IAAI,YAAY,KAAK,SAAS,YAAY,OAC7C,CAAC,CAAC,IAAI,eAAe,KAAK,SAAS,SAAS,KAAK,EAAE,aAAa,YAAa,EAAE,UAAU,CAAC,GAAG,SAAS,IAAI,SAAS,UAAW,CAAC,CAAC,IAAI;AAEtI,QAAI,YAAY,CAAC,MAAM,OAAO,UAAU,SACvC,WAAS;AACR,UAAI,SAAS,KAAK,OAAOC,SAAQ,OAAO,QAAQ,OAAO,KAAK,MAAM;AAClE,aAAO,CAACA,SAAQ,OAAO,aAAa,QAAQ,OAAO,SAASA,MAAK,IAAI,QAAQ,OAAO,SAAS;AAAA,IAC9F;AAED,QAAI,eAAe,CAAC,QAAQ,OAAO,SAASA,WAAU;AACrD,UAAI,SAAS,IAAI,SAAS;AAC1B,SAAG;AACF,kBAAU,OAAO,UAAU,QAAQA,MAAK,IAAI;AAC5C,iBAASA,SAAQ,MAAM;AACvB,QAAAA,SAAQ,OAAO,QAAQ,OAAO,MAAM;AAAA,MACrC,SAAS,CAACA;AACV,aAAO,SAAS,OAAO,UAAU,MAAM;AAAA,IACxC;AAEA,QAAI,eAAe,CAAC,UAAU,qBAAqB;AAClD,UAAI,IAAI,UAAU,YAAY,MAAM;AACpC,aAAO;AAAA,QACN,kBAAkB;AAAA,QAClB,OAAO,EAAE,WAAW,SAAS;AAAA,QAC7B,MAAM,EAAE,WAAW,YAAY,iBAAiB;AAAA,QAChD,KAAK,EAAE,WAAW,YAAY,iBAAiB;AAAA,QAC/C,QAAQ,EAAE,WAAW,UAAU;AAAA,QAC/B,WAAW,EAAE,WAAW,UAAU;AAAA,QAClC,SAAS,EAAE,WAAW,UAAU;AAAA,QAChC,QAAQ,EAAE,WAAW,UAAU;AAAA,QAC/B,eAAe,EAAE,WAAW,UAAU;AAAA,QAEtC,OAAO,EAAE,YAAY,UAAU;AAAA,QAC/B,KAAK,EAAE,YAAY,UAAU;AAAA,QAC7B,OAAO,EAAE,YAAY,UAAU;AAAA,QAC/B,QAAQ,EAAE,YAAY,UAAU;AAAA,QAChC,MAAM,EAAE,YAAY,UAAU;AAAA,QAC9B,SAAS,EAAE,YAAY,UAAU;AAAA,QACjC,MAAM,EAAE,YAAY,UAAU;AAAA,QAC9B,OAAO,EAAE,YAAY,UAAU;AAAA,QAC/B,MAAM,EAAE,YAAY,UAAU;AAAA,QAE9B,SAAS,EAAE,YAAY,UAAU;AAAA,QACjC,OAAO,EAAE,YAAY,UAAU;AAAA,QAC/B,SAAS,EAAE,YAAY,UAAU;AAAA,QACjC,UAAU,EAAE,YAAY,UAAU;AAAA,QAClC,QAAQ,EAAE,YAAY,UAAU;AAAA,QAChC,WAAW,EAAE,YAAY,UAAU;AAAA,QACnC,QAAQ,EAAE,YAAY,UAAU;AAAA,QAChC,SAAS,EAAE,YAAY,UAAU;AAAA,QAEjC,aAAa,EAAE,YAAY,UAAU;AAAA,QACrC,WAAW,EAAE,YAAY,UAAU;AAAA,QACnC,aAAa,EAAE,YAAY,UAAU;AAAA,QACrC,cAAc,EAAE,YAAY,UAAU;AAAA,QACtC,YAAY,EAAE,YAAY,UAAU;AAAA,QACpC,eAAe,EAAE,YAAY,UAAU;AAAA,QACvC,YAAY,EAAE,YAAY,UAAU;AAAA,QACpC,aAAa,EAAE,YAAY,UAAU;AAAA,QAErC,eAAe,EAAE,aAAa,UAAU;AAAA,QACxC,aAAa,EAAE,aAAa,UAAU;AAAA,QACtC,eAAe,EAAE,aAAa,UAAU;AAAA,QACxC,gBAAgB,EAAE,aAAa,UAAU;AAAA,QACzC,cAAc,EAAE,aAAa,UAAU;AAAA,QACvC,iBAAiB,EAAE,aAAa,UAAU;AAAA,QAC1C,cAAc,EAAE,aAAa,UAAU;AAAA,QACvC,eAAe,EAAE,aAAa,UAAU;AAAA,MACzC;AAAA,IACD;AAEA,IAAAD,QAAO,UAAU,aAAa;AAC9B,IAAAA,QAAO,QAAQ,eAAe;AAAA;AAAA;;;AC1E9B,IACI;AADJ;AAAA;AAAA;AACA,IAAI,oBAAoB;AAAA,MACtB,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,2BAA2B;AAAA,MAC3B,qCAAqC;AAAA,MACrC,2BAA2B;AAAA,IAC7B;AAAA;AAAA;;;ACPA,IACI;AADJ;AAAA;AAAA;AACA,IAAI,aAAa,cAAc,MAAM;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA;AAAA,MACA,YAAY,SAAS,MAAM;AACzB,cAAM,OAAO;AACb,aAAK,OAAO;AACZ,aAAK,OAAO,MAAM,QAAQ;AAC1B,aAAK,WAAW,MAAM,YAAY;AAClC,aAAK,OAAO,MAAM,QAAQ;AAC1B,aAAK,aAAa,MAAM,cAAc;AAAA,MACxC;AAAA,IACF;AAAA;AAAA;;;AClBA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAW,MA6DA,YASE,eAsBA;AA5Fb;AAAA;AAAA;AACA,KAAC,SAAUE,OAAM;AACb,MAAAA,MAAK,cAAc,CAACC,OAAM;AAAA,MAAE;AAC5B,eAAS,SAAS,MAAM;AAAA,MAAE;AAC1B,MAAAD,MAAK,WAAW;AAChB,eAAS,YAAY,IAAI;AACrB,cAAM,IAAI,MAAM;AAAA,MACpB;AACA,MAAAA,MAAK,cAAc;AACnB,MAAAA,MAAK,cAAc,CAAC,UAAU;AAC1B,cAAM,MAAM,CAAC;AACb,mBAAW,QAAQ,OAAO;AACtB,cAAI,IAAI,IAAI;AAAA,QAChB;AACA,eAAO;AAAA,MACX;AACA,MAAAA,MAAK,qBAAqB,CAAC,QAAQ;AAC/B,cAAM,YAAYA,MAAK,WAAW,GAAG,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ;AACpF,cAAM,WAAW,CAAC;AAClB,mBAAW,KAAK,WAAW;AACvB,mBAAS,CAAC,IAAI,IAAI,CAAC;AAAA,QACvB;AACA,eAAOA,MAAK,aAAa,QAAQ;AAAA,MACrC;AACA,MAAAA,MAAK,eAAe,CAAC,QAAQ;AACzB,eAAOA,MAAK,WAAW,GAAG,EAAE,IAAI,SAAU,GAAG;AACzC,iBAAO,IAAI,CAAC;AAAA,QAChB,CAAC;AAAA,MACL;AACA,MAAAA,MAAK,aAAa,OAAO,OAAO,SAAS,aACnC,CAAC,QAAQ,OAAO,KAAK,GAAG,IACxB,CAAC,WAAW;AACV,cAAM,OAAO,CAAC;AACd,mBAAW,OAAO,QAAQ;AACtB,cAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACnD,iBAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AACJ,MAAAA,MAAK,OAAO,CAAC,KAAK,YAAY;AAC1B,mBAAW,QAAQ,KAAK;AACpB,cAAI,QAAQ,IAAI;AACZ,mBAAO;AAAA,QACf;AACA,eAAO;AAAA,MACX;AACA,MAAAA,MAAK,YAAY,OAAO,OAAO,cAAc,aACvC,CAAC,QAAQ,OAAO,UAAU,GAAG,IAC7B,CAAC,QAAQ,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,KAAK,KAAK,MAAM,GAAG,MAAM;AACtF,eAAS,WAAW,OAAO,YAAY,OAAO;AAC1C,eAAO,MAAM,IAAI,CAAC,QAAS,OAAO,QAAQ,WAAW,IAAI,GAAG,MAAM,GAAI,EAAE,KAAK,SAAS;AAAA,MAC1F;AACA,MAAAA,MAAK,aAAa;AAClB,MAAAA,MAAK,wBAAwB,CAACC,IAAG,UAAU;AACvC,YAAI,OAAO,UAAU,UAAU;AAC3B,iBAAO,MAAM,SAAS;AAAA,QAC1B;AACA,eAAO;AAAA,MACX;AAAA,IACJ,GAAG,SAAS,OAAO,CAAC,EAAE;AAEtB,KAAC,SAAUC,aAAY;AACnB,MAAAA,YAAW,cAAc,CAAC,OAAO,WAAW;AACxC,eAAO;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA;AAAA,QACP;AAAA,MACJ;AAAA,IACJ,GAAG,eAAe,aAAa,CAAC,EAAE;AAC3B,IAAM,gBAAgB,KAAK,YAAY;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,SAAS;AACnC,YAAM,IAAI,OAAO;AACjB,cAAQ,GAAG;AAAA,QACP,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,OAAO,MAAM,IAAI,IAAI,cAAc,MAAM,cAAc;AAAA,QAClE,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,iBAAO,cAAc;AAAA,QACzB,KAAK;AACD,cAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,SAAS,MAAM;AACf,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY;AAChG,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,QAAQ,eAAe,gBAAgB,KAAK;AACnD,mBAAO,cAAc;AAAA,UACzB;AACA,cAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM;AACrD,mBAAO,cAAc;AAAA,UACzB;AACA,iBAAO,cAAc;AAAA,QACzB;AACI,iBAAO,cAAc;AAAA,MAC7B;AAAA,IACJ;AAAA;AAAA;;;ACpIA,IACa,cAkBA,eAIA;AAvBb;AAAA;AAAA;AAAA;AACO,IAAM,eAAe,KAAK,YAAY;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACM,IAAM,gBAAgB,CAAC,QAAQ;AAClC,YAAM,OAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACxC,aAAO,KAAK,QAAQ,eAAe,KAAK;AAAA,IAC5C;AACO,IAAM,WAAN,MAAM,kBAAiB,MAAM;AAAA,MAChC,IAAI,SAAS;AACT,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,YAAY,QAAQ;AAChB,cAAM;AACN,aAAK,SAAS,CAAC;AACf,aAAK,WAAW,CAAC,QAAQ;AACrB,eAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG;AAAA,QACtC;AACA,aAAK,YAAY,CAAC,OAAO,CAAC,MAAM;AAC5B,eAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI;AAAA,QAC1C;AACA,cAAM,cAAc,WAAW;AAC/B,YAAI,OAAO,gBAAgB;AAEvB,iBAAO,eAAe,MAAM,WAAW;AAAA,QAC3C,OACK;AACD,eAAK,YAAY;AAAA,QACrB;AACA,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAClB;AAAA,MACA,OAAO,SAAS;AACZ,cAAM,SAAS,WACX,SAAU,OAAO;AACb,iBAAO,MAAM;AAAA,QACjB;AACJ,cAAM,cAAc,EAAE,SAAS,CAAC,EAAE;AAClC,cAAM,eAAe,CAAC,UAAU;AAC5B,qBAAW,SAAS,MAAM,QAAQ;AAC9B,gBAAI,MAAM,SAAS,iBAAiB;AAChC,oBAAM,YAAY,IAAI,YAAY;AAAA,YACtC,WACS,MAAM,SAAS,uBAAuB;AAC3C,2BAAa,MAAM,eAAe;AAAA,YACtC,WACS,MAAM,SAAS,qBAAqB;AACzC,2BAAa,MAAM,cAAc;AAAA,YACrC,WACS,MAAM,KAAK,WAAW,GAAG;AAC9B,0BAAY,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,YAC1C,OACK;AACD,kBAAI,OAAO;AACX,kBAAIC,KAAI;AACR,qBAAOA,KAAI,MAAM,KAAK,QAAQ;AAC1B,sBAAM,KAAK,MAAM,KAAKA,EAAC;AACvB,sBAAM,WAAWA,OAAM,MAAM,KAAK,SAAS;AAC3C,oBAAI,CAAC,UAAU;AACX,uBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AAAA,gBAQzC,OACK;AACD,uBAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;AACrC,uBAAK,EAAE,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,gBACvC;AACA,uBAAO,KAAK,EAAE;AACd,gBAAAA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,qBAAa,IAAI;AACjB,eAAO;AAAA,MACX;AAAA,MACA,OAAO,OAAO,OAAO;AACjB,YAAI,EAAE,iBAAiB,YAAW;AAC9B,gBAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,QAC9C;AAAA,MACJ;AAAA,MACA,WAAW;AACP,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,uBAAuB,CAAC;AAAA,MACpE;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,OAAO,WAAW;AAAA,MAClC;AAAA,MACA,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS;AACvC,cAAM,cAAc,CAAC;AACrB,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,QAAQ;AAC3B,cAAI,IAAI,KAAK,SAAS,GAAG;AACrB,kBAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,wBAAY,OAAO,IAAI,YAAY,OAAO,KAAK,CAAC;AAChD,wBAAY,OAAO,EAAE,KAAK,OAAO,GAAG,CAAC;AAAA,UACzC,OACK;AACD,uBAAW,KAAK,OAAO,GAAG,CAAC;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,EAAE,YAAY,YAAY;AAAA,MACrC;AAAA,MACA,IAAI,aAAa;AACb,eAAO,KAAK,QAAQ;AAAA,MACxB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,WAAW;AAC1B,YAAM,QAAQ,IAAI,SAAS,MAAM;AACjC,aAAO;AAAA,IACX;AAAA;AAAA;;;ACpIA,IAEM,UA0GC;AA5GP;AAAA;AAAA;AAAA;AACA;AACA,IAAM,WAAW,CAAC,OAAO,SAAS;AAC9B,UAAI;AACJ,cAAQ,MAAM,MAAM;AAAA,QAChB,KAAK,aAAa;AACd,cAAI,MAAM,aAAa,cAAc,WAAW;AAC5C,sBAAU;AAAA,UACd,OACK;AACD,sBAAU,YAAY,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,UACpE;AACA;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,mCAAmC,KAAK,UAAU,MAAM,UAAU,KAAK,qBAAqB,CAAC;AACvG;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,kCAAkC,KAAK,WAAW,MAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,yCAAyC,KAAK,WAAW,MAAM,OAAO,CAAC;AACjF;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,gCAAgC,KAAK,WAAW,MAAM,OAAO,CAAC,eAAe,MAAM,QAAQ;AACrG;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,OAAO,MAAM,eAAe,UAAU;AACtC,gBAAI,cAAc,MAAM,YAAY;AAChC,wBAAU,gCAAgC,MAAM,WAAW,QAAQ;AACnE,kBAAI,OAAO,MAAM,WAAW,aAAa,UAAU;AAC/C,0BAAU,GAAG,OAAO,sDAAsD,MAAM,WAAW,QAAQ;AAAA,cACvG;AAAA,YACJ,WACS,gBAAgB,MAAM,YAAY;AACvC,wBAAU,mCAAmC,MAAM,WAAW,UAAU;AAAA,YAC5E,WACS,cAAc,MAAM,YAAY;AACrC,wBAAU,iCAAiC,MAAM,WAAW,QAAQ;AAAA,YACxE,OACK;AACD,mBAAK,YAAY,MAAM,UAAU;AAAA,YACrC;AAAA,UACJ,WACS,MAAM,eAAe,SAAS;AACnC,sBAAU,WAAW,MAAM,UAAU;AAAA,UACzC,OACK;AACD,sBAAU;AAAA,UACd;AACA;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,MAAM,SAAS;AACf,sBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,WAAW,IAAI,MAAM,OAAO;AAAA,mBAChH,MAAM,SAAS;AACpB,sBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,MAAM,IAAI,MAAM,OAAO;AAAA,mBAC5G,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,mBAC1I,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,MAAM,OAAO;AAAA,mBAC1I,MAAM,SAAS;AACpB,sBAAU,gBAAgB,MAAM,QAAQ,sBAAsB,MAAM,YAAY,8BAA8B,eAAe,GAAG,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAE/J,sBAAU;AACd;AAAA,QACJ,KAAK,aAAa;AACd,cAAI,MAAM,SAAS;AACf,sBAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,OAAO;AAAA,mBAC/G,MAAM,SAAS;AACpB,sBAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO,IAAI,MAAM,OAAO;AAAA,mBAC5G,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,mBACzH,MAAM,SAAS;AACpB,sBAAU,kBAAkB,MAAM,QAAQ,YAAY,MAAM,YAAY,0BAA0B,WAAW,IAAI,MAAM,OAAO;AAAA,mBACzH,MAAM,SAAS;AACpB,sBAAU,gBAAgB,MAAM,QAAQ,YAAY,MAAM,YAAY,6BAA6B,cAAc,IAAI,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAAA;AAEpJ,sBAAU;AACd;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU,gCAAgC,MAAM,UAAU;AAC1D;AAAA,QACJ,KAAK,aAAa;AACd,oBAAU;AACV;AAAA,QACJ;AACI,oBAAU,KAAK;AACf,eAAK,YAAY,KAAK;AAAA,MAC9B;AACA,aAAO,EAAE,QAAQ;AAAA,IACrB;AACA,IAAO,aAAQ;AAAA;AAAA;;;ACzGR,SAAS,YAAYC,MAAK;AAC7B,qBAAmBA;AACvB;AACO,SAAS,cAAc;AAC1B,SAAO;AACX;AARA,IACI;AADJ,IAAAC,eAAA;AAAA;AAAA;AAAA;AACA,IAAI,mBAAmB;AAAA;AAAA;;;AC8BhB,SAAS,kBAAkB,KAAK,WAAW;AAC9C,QAAM,cAAc,YAAY;AAChC,QAAM,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,WAAW;AAAA,MACP,IAAI,OAAO;AAAA;AAAA,MACX,IAAI;AAAA;AAAA,MACJ;AAAA;AAAA,MACA,gBAAgB,aAAkB,SAAY;AAAA;AAAA,IAClD,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EACvB,CAAC;AACD,MAAI,OAAO,OAAO,KAAK,KAAK;AAChC;AA7CA,IAEa,WA4BA,YAgBA,aAsDA,SAGA,OACA,IACA,WACA,SACA,SACA;AA5Gb;AAAA;AAAA;AAAA,IAAAC;AACA;AACO,IAAM,YAAY,CAAC,WAAW;AACjC,YAAM,EAAE,MAAM,MAAAC,QAAM,WAAW,UAAU,IAAI;AAC7C,YAAM,WAAW,CAAC,GAAGA,QAAM,GAAI,UAAU,QAAQ,CAAC,CAAE;AACpD,YAAM,YAAY;AAAA,QACd,GAAG;AAAA,QACH,MAAM;AAAA,MACV;AACA,UAAI,UAAU,YAAY,QAAW;AACjC,eAAO;AAAA,UACH,GAAG;AAAA,UACH,MAAM;AAAA,UACN,SAAS,UAAU;AAAA,QACvB;AAAA,MACJ;AACA,UAAI,eAAe;AACnB,YAAM,OAAO,UACR,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EACN,QAAQ;AACb,iBAAWC,QAAO,MAAM;AACpB,uBAAeA,KAAI,WAAW,EAAE,MAAM,cAAc,aAAa,CAAC,EAAE;AAAA,MACxE;AACA,aAAO;AAAA,QACH,GAAG;AAAA,QACH,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,IACJ;AACO,IAAM,aAAa,CAAC;AAgBpB,IAAM,cAAN,MAAM,aAAY;AAAA,MACrB,cAAc;AACV,aAAK,QAAQ;AAAA,MACjB;AAAA,MACA,QAAQ;AACJ,YAAI,KAAK,UAAU;AACf,eAAK,QAAQ;AAAA,MACrB;AAAA,MACA,QAAQ;AACJ,YAAI,KAAK,UAAU;AACf,eAAK,QAAQ;AAAA,MACrB;AAAA,MACA,OAAO,WAAW,QAAQ,SAAS;AAC/B,cAAM,aAAa,CAAC;AACpB,mBAAW,KAAK,SAAS;AACrB,cAAI,EAAE,WAAW;AACb,mBAAO;AACX,cAAI,EAAE,WAAW;AACb,mBAAO,MAAM;AACjB,qBAAW,KAAK,EAAE,KAAK;AAAA,QAC3B;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,WAAW;AAAA,MACrD;AAAA,MACA,aAAa,iBAAiB,QAAQ,OAAO;AACzC,cAAM,YAAY,CAAC;AACnB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,MAAM,MAAM,KAAK;AACvB,gBAAM,QAAQ,MAAM,KAAK;AACzB,oBAAU,KAAK;AAAA,YACX;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL;AACA,eAAO,aAAY,gBAAgB,QAAQ,SAAS;AAAA,MACxD;AAAA,MACA,OAAO,gBAAgB,QAAQ,OAAO;AAClC,cAAM,cAAc,CAAC;AACrB,mBAAW,QAAQ,OAAO;AACtB,gBAAM,EAAE,KAAK,MAAM,IAAI;AACvB,cAAI,IAAI,WAAW;AACf,mBAAO;AACX,cAAI,MAAM,WAAW;AACjB,mBAAO;AACX,cAAI,IAAI,WAAW;AACf,mBAAO,MAAM;AACjB,cAAI,MAAM,WAAW;AACjB,mBAAO,MAAM;AACjB,cAAI,IAAI,UAAU,gBAAgB,OAAO,MAAM,UAAU,eAAe,KAAK,YAAY;AACrF,wBAAY,IAAI,KAAK,IAAI,MAAM;AAAA,UACnC;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,MACtD;AAAA,IACJ;AACO,IAAM,UAAU,OAAO,OAAO;AAAA,MACjC,QAAQ;AAAA,IACZ,CAAC;AACM,IAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AACnD,IAAM,KAAK,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM;AAChD,IAAM,YAAY,CAAC,MAAM,EAAE,WAAW;AACtC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,EAAE,WAAW;AACpC,IAAM,UAAU,CAAC,MAAM,OAAO,YAAY,eAAe,aAAa;AAAA;AAAA;;;AC5G7E;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAW;AAAX;AAAA;AAAA;AACA,KAAC,SAAUC,YAAW;AAClB,MAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC;AAE1F,MAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,YAAY,WAAW,UAAU,SAAS;AAAA,IACvF,GAAG,cAAc,YAAY,CAAC,EAAE;AAAA;AAAA;;;ACwChC,SAAS,oBAAoB,QAAQ;AACjC,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,QAAM,EAAE,UAAAC,WAAU,oBAAoB,gBAAgB,YAAY,IAAI;AACtE,MAAIA,cAAa,sBAAsB,iBAAiB;AACpD,UAAM,IAAI,MAAM,0FAA0F;AAAA,EAC9G;AACA,MAAIA;AACA,WAAO,EAAE,UAAUA,WAAU,YAAY;AAC7C,QAAM,YAAY,CAAC,KAAK,QAAQ;AAC5B,UAAM,EAAE,QAAQ,IAAI;AACpB,QAAI,IAAI,SAAS,sBAAsB;AACnC,aAAO,EAAE,SAAS,WAAW,IAAI,aAAa;AAAA,IAClD;AACA,QAAI,OAAO,IAAI,SAAS,aAAa;AACjC,aAAO,EAAE,SAAS,WAAW,kBAAkB,IAAI,aAAa;AAAA,IACpE;AACA,QAAI,IAAI,SAAS;AACb,aAAO,EAAE,SAAS,IAAI,aAAa;AACvC,WAAO,EAAE,SAAS,WAAW,sBAAsB,IAAI,aAAa;AAAA,EACxE;AACA,SAAO,EAAE,UAAU,WAAW,YAAY;AAC9C;AAoVA,SAAS,gBAAgB,MAAM;AAC3B,MAAI,qBAAqB;AACzB,MAAI,KAAK,WAAW;AAChB,yBAAqB,GAAG,kBAAkB,UAAU,KAAK,SAAS;AAAA,EACtE,WACS,KAAK,aAAa,MAAM;AAC7B,yBAAqB,GAAG,kBAAkB;AAAA,EAC9C;AACA,QAAM,oBAAoB,KAAK,YAAY,MAAM;AACjD,SAAO,8BAA8B,kBAAkB,IAAI,iBAAiB;AAChF;AACA,SAAS,UAAU,MAAM;AACrB,SAAO,IAAI,OAAO,IAAI,gBAAgB,IAAI,CAAC,GAAG;AAClD;AAEO,SAAS,cAAc,MAAM;AAChC,MAAI,QAAQ,GAAG,eAAe,IAAI,gBAAgB,IAAI,CAAC;AACvD,QAAM,OAAO,CAAC;AACd,OAAK,KAAK,KAAK,QAAQ,OAAO,GAAG;AACjC,MAAI,KAAK;AACL,SAAK,KAAK,sBAAsB;AACpC,UAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;AAClC,SAAO,IAAI,OAAO,IAAI,KAAK,GAAG;AAClC;AACA,SAAS,UAAU,IAAIC,UAAS;AAC5B,OAAKA,aAAY,QAAQ,CAACA,aAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,OAAKA,aAAY,QAAQ,CAACA,aAAY,UAAU,KAAK,EAAE,GAAG;AACtD,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,SAAS,WAAW,KAAK,KAAK;AAC1B,MAAI,CAAC,SAAS,KAAK,GAAG;AAClB,WAAO;AACX,MAAI;AACA,UAAM,CAAC,MAAM,IAAI,IAAI,MAAM,GAAG;AAC9B,QAAI,CAAC;AACD,aAAO;AAEX,UAAM,SAAS,OACV,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAO,OAAO,UAAW,IAAK,OAAO,SAAS,KAAM,GAAI,GAAG;AAChE,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,CAAC;AACvC,QAAI,OAAO,YAAY,YAAY,YAAY;AAC3C,aAAO;AACX,QAAI,SAAS,WAAW,SAAS,QAAQ;AACrC,aAAO;AACX,QAAI,CAAC,QAAQ;AACT,aAAO;AACX,QAAI,OAAO,QAAQ,QAAQ;AACvB,aAAO;AACX,WAAO;AAAA,EACX,QACM;AACF,WAAO;AAAA,EACX;AACJ;AACA,SAAS,YAAY,IAAIA,UAAS;AAC9B,OAAKA,aAAY,QAAQ,CAACA,aAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,OAAKA,aAAY,QAAQ,CAACA,aAAY,cAAc,KAAK,EAAE,GAAG;AAC1D,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAmkBA,SAAS,mBAAmB,KAAK,MAAM;AACnC,QAAM,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AACzD,QAAM,gBAAgB,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAC3D,QAAM,WAAW,cAAc,eAAe,cAAc;AAC5D,QAAM,SAAS,OAAO,SAAS,IAAI,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACrE,QAAM,UAAU,OAAO,SAAS,KAAK,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AACvE,SAAQ,SAAS,UAAW,MAAM;AACtC;AAkxBA,SAAS,eAAe,QAAQ;AAC5B,MAAI,kBAAkB,WAAW;AAC7B,UAAM,WAAW,CAAC;AAClB,eAAW,OAAO,OAAO,OAAO;AAC5B,YAAM,cAAc,OAAO,MAAM,GAAG;AACpC,eAAS,GAAG,IAAI,YAAY,OAAO,eAAe,WAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAI,UAAU;AAAA,MACjB,GAAG,OAAO;AAAA,MACV,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL,WACS,kBAAkB,UAAU;AACjC,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,OAAO;AAAA,MACV,MAAM,eAAe,OAAO,OAAO;AAAA,IACvC,CAAC;AAAA,EACL,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,aAAa;AACpC,WAAO,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7D,WACS,kBAAkB,UAAU;AACjC,WAAO,SAAS,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC;AAAA,EAC3E,OACK;AACD,WAAO;AAAA,EACX;AACJ;AAwmBA,SAAS,YAAYC,IAAG,GAAG;AACvB,QAAM,QAAQ,cAAcA,EAAC;AAC7B,QAAM,QAAQ,cAAc,CAAC;AAC7B,MAAIA,OAAM,GAAG;AACT,WAAO,EAAE,OAAO,MAAM,MAAMA,GAAE;AAAA,EAClC,WACS,UAAU,cAAc,UAAU,UAAU,cAAc,QAAQ;AACvE,UAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAM,aAAa,KAAK,WAAWA,EAAC,EAAE,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE;AAC/E,UAAM,SAAS,EAAE,GAAGA,IAAG,GAAG,EAAE;AAC5B,eAAW,OAAO,YAAY;AAC1B,YAAM,cAAc,YAAYA,GAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,aAAO,GAAG,IAAI,YAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO;AAAA,EACvC,WACS,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AACrE,QAAIA,GAAE,WAAW,EAAE,QAAQ;AACvB,aAAO,EAAE,OAAO,MAAM;AAAA,IAC1B;AACA,UAAM,WAAW,CAAC;AAClB,aAASC,SAAQ,GAAGA,SAAQD,GAAE,QAAQC,UAAS;AAC3C,YAAM,QAAQD,GAAEC,MAAK;AACrB,YAAM,QAAQ,EAAEA,MAAK;AACrB,YAAM,cAAc,YAAY,OAAO,KAAK;AAC5C,UAAI,CAAC,YAAY,OAAO;AACpB,eAAO,EAAE,OAAO,MAAM;AAAA,MAC1B;AACA,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,MAAM,MAAM,SAAS;AAAA,EACzC,WACS,UAAU,cAAc,QAAQ,UAAU,cAAc,QAAQ,CAACD,OAAM,CAAC,GAAG;AAChF,WAAO,EAAE,OAAO,MAAM,MAAMA,GAAE;AAAA,EAClC,OACK;AACD,WAAO,EAAE,OAAO,MAAM;AAAA,EAC1B;AACJ;AAweA,SAAS,cAAc,QAAQ,QAAQ;AACnC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AA8gBA,SAAS,YAAY,QAAQ,MAAM;AAC/B,QAAM,IAAI,OAAO,WAAW,aAAa,OAAO,IAAI,IAAI,OAAO,WAAW,WAAW,EAAE,SAAS,OAAO,IAAI;AAC3G,QAAM,KAAK,OAAO,MAAM,WAAW,EAAE,SAAS,EAAE,IAAI;AACpD,SAAO;AACX;AACO,SAAS,OAAO,OAAO,UAAU,CAAC,GAWzC,OAAO;AACH,MAAI;AACA,WAAO,OAAO,OAAO,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC9C,YAAM,IAAI,MAAM,IAAI;AACpB,UAAI,aAAa,SAAS;AACtB,eAAO,EAAE,KAAK,CAACE,OAAM;AACjB,cAAI,CAACA,IAAG;AACJ,kBAAM,SAAS,YAAY,SAAS,IAAI;AACxC,kBAAM,SAAS,OAAO,SAAS,SAAS;AACxC,gBAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,UAC7D;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,CAAC,GAAG;AACJ,cAAM,SAAS,YAAY,SAAS,IAAI;AACxC,cAAM,SAAS,OAAO,SAAS,SAAS;AACxC,YAAI,SAAS,EAAE,MAAM,UAAU,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC7D;AACA;AAAA,IACJ,CAAC;AACL,SAAO,OAAO,OAAO;AACzB;AAvgHA,IAKM,oBAoBA,cA2CO,SAsSP,WACA,YACA,WAGA,WACA,aACA,UACA,eAaA,YAIA,aACF,YAEE,WACA,eAGA,WACA,eAEA,aAEA,gBAMA,iBACA,WAsEO,WA0kBA,WA+OA,WAgLA,YAyBA,SA+GA,WAqBA,cAqBA,SAqBA,QAgBA,YAgBA,UAiBA,SAqBA,UAoIA,WAoYA,UAuGP,kBA6CO,uBAyHA,iBAuDA,UAsEA,WAsDA,QAmEA,QAsFA,aAkHA,SAiBA,YA+BA,SAiEA,eAsCA,YA8BA,YAmJA,aAmBA,aAmBA,YAyBA,UA2DA,QAqBA,OACA,YAcA,aA0DA,aAoEA,MAGF,uBA2CL,gBAKA,YACA,YACA,SACA,YACA,aACA,UACA,YACA,eACA,UACA,SACA,aACA,WACA,UACA,WACA,YACA,kBACA,WACA,wBACA,kBACA,WACA,YACA,SACA,SACA,cACA,UACA,aACA,UACA,gBACA,aACA,aACA,cACA,cACA,gBACA,cACA,SACA,SACA,UACO,QAWA;AA5mHb;AAAA;AAAA;AAAA;AACA,IAAAC;AACA;AACA;AACA;AACA,IAAM,qBAAN,MAAyB;AAAA,MACrB,YAAYC,SAAQ,OAAOC,QAAM,KAAK;AAClC,aAAK,cAAc,CAAC;AACpB,aAAK,SAASD;AACd,aAAK,OAAO;AACZ,aAAK,QAAQC;AACb,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,IAAI,OAAO;AACP,YAAI,CAAC,KAAK,YAAY,QAAQ;AAC1B,cAAI,MAAM,QAAQ,KAAK,IAAI,GAAG;AAC1B,iBAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI;AAAA,UACrD,OACK;AACD,iBAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI;AAAA,UAClD;AAAA,QACJ;AACA,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ;AACA,IAAM,eAAe,CAAC,KAAK,WAAW;AAClC,UAAI,QAAQ,MAAM,GAAG;AACjB,eAAO,EAAE,SAAS,MAAM,MAAM,OAAO,MAAM;AAAA,MAC/C,OACK;AACD,YAAI,CAAC,IAAI,OAAO,OAAO,QAAQ;AAC3B,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC/D;AACA,eAAO;AAAA,UACH,SAAS;AAAA,UACT,IAAI,QAAQ;AACR,gBAAI,KAAK;AACL,qBAAO,KAAK;AAChB,kBAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,MAAM;AAC5C,iBAAK,SAAS;AACd,mBAAO,KAAK;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAwBO,IAAM,UAAN,MAAc;AAAA,MACjB,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,SAAS,OAAO;AACZ,eAAO,cAAc,MAAM,IAAI;AAAA,MACnC;AAAA,MACA,gBAAgB,OAAO,KAAK;AACxB,eAAQ,OAAO;AAAA,UACX,QAAQ,MAAM,OAAO;AAAA,UACrB,MAAM,MAAM;AAAA,UACZ,YAAY,cAAc,MAAM,IAAI;AAAA,UACpC,gBAAgB,KAAK,KAAK;AAAA,UAC1B,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,oBAAoB,OAAO;AACvB,eAAO;AAAA,UACH,QAAQ,IAAI,YAAY;AAAA,UACxB,KAAK;AAAA,YACD,QAAQ,MAAM,OAAO;AAAA,YACrB,MAAM,MAAM;AAAA,YACZ,YAAY,cAAc,MAAM,IAAI;AAAA,YACpC,gBAAgB,KAAK,KAAK;AAAA,YAC1B,MAAM,MAAM;AAAA,YACZ,QAAQ,MAAM;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,WAAW,OAAO;AACd,cAAM,SAAS,KAAK,OAAO,KAAK;AAChC,YAAI,QAAQ,MAAM,GAAG;AACjB,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC5D;AACA,eAAO;AAAA,MACX;AAAA,MACA,YAAY,OAAO;AACf,cAAM,SAAS,KAAK,OAAO,KAAK;AAChC,eAAO,QAAQ,QAAQ,MAAM;AAAA,MACjC;AAAA,MACA,MAAM,MAAM,QAAQ;AAChB,cAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAC1C,YAAI,OAAO;AACP,iBAAO,OAAO;AAClB,cAAM,OAAO;AAAA,MACjB;AAAA,MACA,UAAU,MAAM,QAAQ;AACpB,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,OAAO,QAAQ,SAAS;AAAA,YACxB,oBAAoB,QAAQ;AAAA,UAChC;AAAA,UACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,UACvB,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,cAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AACpE,eAAO,aAAa,KAAK,MAAM;AAAA,MACnC;AAAA,MACA,YAAY,MAAM;AACd,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,OAAO,CAAC,CAAC,KAAK,WAAW,EAAE;AAAA,UAC/B;AAAA,UACA,MAAM,CAAC;AAAA,UACP,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,YAAI,CAAC,KAAK,WAAW,EAAE,OAAO;AAC1B,cAAI;AACA,kBAAM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC;AAC9D,mBAAO,QAAQ,MAAM,IACf;AAAA,cACE,OAAO,OAAO;AAAA,YAClB,IACE;AAAA,cACE,QAAQ,IAAI,OAAO;AAAA,YACvB;AAAA,UACR,SACO,KAAK;AACR,gBAAI,KAAK,SAAS,YAAY,GAAG,SAAS,aAAa,GAAG;AACtD,mBAAK,WAAW,EAAE,QAAQ;AAAA,YAC9B;AACA,gBAAI,SAAS;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,OAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AACA,eAAO,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,QAAQ,MAAM,IAClF;AAAA,UACE,OAAO,OAAO;AAAA,QAClB,IACE;AAAA,UACE,QAAQ,IAAI,OAAO;AAAA,QACvB,CAAC;AAAA,MACT;AAAA,MACA,MAAM,WAAW,MAAM,QAAQ;AAC3B,cAAM,SAAS,MAAM,KAAK,eAAe,MAAM,MAAM;AACrD,YAAI,OAAO;AACP,iBAAO,OAAO;AAClB,cAAM,OAAO;AAAA,MACjB;AAAA,MACA,MAAM,eAAe,MAAM,QAAQ;AAC/B,cAAM,MAAM;AAAA,UACR,QAAQ;AAAA,YACJ,QAAQ,CAAC;AAAA,YACT,oBAAoB,QAAQ;AAAA,YAC5B,OAAO;AAAA,UACX;AAAA,UACA,MAAM,QAAQ,QAAQ,CAAC;AAAA,UACvB,gBAAgB,KAAK,KAAK;AAAA,UAC1B,QAAQ;AAAA,UACR;AAAA,UACA,YAAY,cAAc,IAAI;AAAA,QAClC;AACA,cAAM,mBAAmB,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAC1E,cAAM,SAAS,OAAO,QAAQ,gBAAgB,IAAI,mBAAmB,QAAQ,QAAQ,gBAAgB;AACrG,eAAO,aAAa,KAAK,MAAM;AAAA,MACnC;AAAA,MACA,OAAO,OAAO,SAAS;AACnB,cAAM,qBAAqB,CAAC,QAAQ;AAChC,cAAI,OAAO,YAAY,YAAY,OAAO,YAAY,aAAa;AAC/D,mBAAO,EAAE,QAAQ;AAAA,UACrB,WACS,OAAO,YAAY,YAAY;AACpC,mBAAO,QAAQ,GAAG;AAAA,UACtB,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,eAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,gBAAM,SAAS,MAAM,GAAG;AACxB,gBAAM,WAAW,MAAM,IAAI,SAAS;AAAA,YAChC,MAAM,aAAa;AAAA,YACnB,GAAG,mBAAmB,GAAG;AAAA,UAC7B,CAAC;AACD,cAAI,OAAO,YAAY,eAAe,kBAAkB,SAAS;AAC7D,mBAAO,OAAO,KAAK,CAAC,SAAS;AACzB,kBAAI,CAAC,MAAM;AACP,yBAAS;AACT,uBAAO;AAAA,cACX,OACK;AACD,uBAAO;AAAA,cACX;AAAA,YACJ,CAAC;AAAA,UACL;AACA,cAAI,CAAC,QAAQ;AACT,qBAAS;AACT,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,gBAAgB;AAC9B,eAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,cAAI,CAAC,MAAM,GAAG,GAAG;AACb,gBAAI,SAAS,OAAO,mBAAmB,aAAa,eAAe,KAAK,GAAG,IAAI,cAAc;AAC7F,mBAAO;AAAA,UACX,OACK;AACD,mBAAO;AAAA,UACX;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,YAAY,YAAY;AACpB,eAAO,IAAI,WAAW;AAAA,UAClB,QAAQ;AAAA,UACR,UAAU,sBAAsB;AAAA,UAChC,QAAQ,EAAE,MAAM,cAAc,WAAW;AAAA,QAC7C,CAAC;AAAA,MACL;AAAA,MACA,YAAY,YAAY;AACpB,eAAO,KAAK,YAAY,UAAU;AAAA,MACtC;AAAA,MACA,YAAY,KAAK;AAEb,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO;AACZ,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,aAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,aAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,KAAK,KAAK,GAAG,KAAK,IAAI;AAC3B,aAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,aAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,aAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,aAAK,WAAW,IAAI;AAAA,UAChB,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,IAAI;AAAA,QAC9C;AAAA,MACJ;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,MAC7C;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,MAC7C;AAAA,MACA,UAAU;AACN,eAAO,KAAK,SAAS,EAAE,SAAS;AAAA,MACpC;AAAA,MACA,QAAQ;AACJ,eAAO,SAAS,OAAO,IAAI;AAAA,MAC/B;AAAA,MACA,UAAU;AACN,eAAO,WAAW,OAAO,MAAM,KAAK,IAAI;AAAA,MAC5C;AAAA,MACA,GAAG,QAAQ;AACP,eAAO,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI;AAAA,MACpD;AAAA,MACA,IAAI,UAAU;AACV,eAAO,gBAAgB,OAAO,MAAM,UAAU,KAAK,IAAI;AAAA,MAC3D;AAAA,MACA,UAAUC,YAAW;AACjB,eAAO,IAAI,WAAW;AAAA,UAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,QAAQ;AAAA,UACR,UAAU,sBAAsB;AAAA,UAChC,QAAQ,EAAE,MAAM,aAAa,WAAAA,WAAU;AAAA,QAC3C,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,KAAK;AACT,cAAM,mBAAmB,OAAO,QAAQ,aAAa,MAAM,MAAM;AACjE,eAAO,IAAI,WAAW;AAAA,UAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,WAAW;AAAA,UACX,cAAc;AAAA,UACd,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,IAAI,WAAW;AAAA,UAClB,UAAU,sBAAsB;AAAA,UAChC,MAAM;AAAA,UACN,GAAG,oBAAoB,KAAK,IAAI;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,MAAM,KAAK;AACP,cAAM,iBAAiB,OAAO,QAAQ,aAAa,MAAM,MAAM;AAC/D,eAAO,IAAI,SAAS;AAAA,UAChB,GAAG,oBAAoB,KAAK,IAAI;AAAA,UAChC,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,aAAa;AAClB,cAAM,OAAO,KAAK;AAClB,eAAO,IAAI,KAAK;AAAA,UACZ,GAAG,KAAK;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,KAAK,QAAQ;AACT,eAAO,YAAY,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,MACA,WAAW;AACP,eAAO,YAAY,OAAO,IAAI;AAAA,MAClC;AAAA,MACA,aAAa;AACT,eAAO,KAAK,UAAU,MAAS,EAAE;AAAA,MACrC;AAAA,MACA,aAAa;AACT,eAAO,KAAK,UAAU,IAAI,EAAE;AAAA,MAChC;AAAA,IACJ;AACA,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,YAAY;AAGlB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,gBAAgB;AAatB,IAAM,aAAa;AAInB,IAAM,cAAc;AAGpB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAGtB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAEtB,IAAM,cAAc;AAEpB,IAAM,iBAAiB;AAMvB,IAAM,kBAAkB;AACxB,IAAM,YAAY,IAAI,OAAO,IAAI,eAAe,GAAG;AAsE5C,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,QAClC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMC,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,SAAS,IAAI,YAAY;AAC/B,YAAI,MAAM;AACV,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,MAAM,KAAK,SAAS,MAAM,OAAO;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,kBAAM,SAAS,MAAM,KAAK,SAAS,MAAM;AACzC,kBAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AAC3C,gBAAI,UAAU,UAAU;AACpB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,kBAAI,QAAQ;AACR,kCAAkB,KAAK;AAAA,kBACnB,MAAM,aAAa;AAAA,kBACnB,SAAS,MAAM;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS,MAAM;AAAA,gBACnB,CAAC;AAAA,cACL,WACS,UAAU;AACf,kCAAkB,KAAK;AAAA,kBACnB,MAAM,aAAa;AAAA,kBACnB,SAAS,MAAM;AAAA,kBACf,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS,MAAM;AAAA,gBACnB,CAAC;AAAA,cACL;AACA,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,YAAY;AACb,2BAAa,IAAI,OAAO,aAAa,GAAG;AAAA,YAC5C;AACA,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,gBAAI,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI;AACA,kBAAI,IAAI,MAAM,IAAI;AAAA,YACtB,QACM;AACF,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,SAAS;AAC7B,kBAAM,MAAM,YAAY;AACxB,kBAAM,aAAa,MAAM,MAAM,KAAK,MAAM,IAAI;AAC9C,gBAAI,CAAC,YAAY;AACb,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,OAAO,MAAM,KAAK,KAAK;AAAA,UACjC,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,MAAM,KAAK,SAAS,MAAM,OAAO,MAAM,QAAQ,GAAG;AACnD,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,UAAU,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,gBAC9D,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,eAAe;AACnC,kBAAM,OAAO,MAAM,KAAK,YAAY;AAAA,UACxC,WACS,MAAM,SAAS,eAAe;AACnC,kBAAM,OAAO,MAAM,KAAK,YAAY;AAAA,UACxC,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,CAAC,MAAM,KAAK,WAAW,MAAM,KAAK,GAAG;AACrC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,YAAY,MAAM,MAAM;AAAA,gBACtC,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AACnC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,EAAE,UAAU,MAAM,MAAM;AAAA,gBACpC,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,kBAAM,QAAQ,cAAc,KAAK;AACjC,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,QAAQ;AACd,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,kBAAM,QAAQ,UAAU,KAAK;AAC7B,gBAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG;AACzB,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY;AAAA,gBACZ,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,YAAY;AAChC,gBAAI,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG;AACjC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,MAAM;AAC1B,gBAAI,CAAC,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG;AACvC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,CAAC,WAAW,MAAM,MAAM,MAAM,GAAG,GAAG;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,QAAQ;AAC5B,gBAAI,CAAC,YAAY,MAAM,MAAM,MAAM,OAAO,GAAG;AACzC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG;AAC/B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,aAAa;AACjC,gBAAI,CAAC,eAAe,KAAK,MAAM,IAAI,GAAG;AAClC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,YAAY;AAAA,gBACZ,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,OAAO,OAAO,YAAY,SAAS;AAC/B,eAAO,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,IAAI,GAAG;AAAA,UAC/C;AAAA,UACA,MAAM,aAAa;AAAA,UACnB,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACzE;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC5E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,MAAM,SAAS;AACX,eAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3E;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU,EAAE,MAAM,UAAU,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC5E;AAAA,MACA,UAAU,SAAS;AAEf,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACzE;AAAA,MACA,GAAG,SAAS;AACR,eAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MACxE;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC1E;AAAA,MACA,SAAS,SAAS;AACd,YAAI,OAAO,YAAY,UAAU;AAC7B,iBAAO,KAAK,UAAU;AAAA,YAClB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,UACb,CAAC;AAAA,QACL;AACA,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,UACvE,QAAQ,SAAS,UAAU;AAAA,UAC3B,OAAO,SAAS,SAAS;AAAA,UACzB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACV,YAAI,OAAO,YAAY,UAAU;AAC7B,iBAAO,KAAK,UAAU;AAAA,YAClB,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,UACb,CAAC;AAAA,QACL;AACA,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW,OAAO,SAAS,cAAc,cAAc,OAAO,SAAS;AAAA,UACvE,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU,EAAE,MAAM,YAAY,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,MAC9E;AAAA,MACA,MAAM,OAAO,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,OAAO,SAAS;AACrB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,UAAU,SAAS;AAAA,UACnB,GAAG,UAAU,SAAS,SAAS,OAAO;AAAA,QAC1C,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,OAAO,SAAS;AACrB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,MACA,OAAO,KAAK,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,GAAG,UAAU,SAAS,OAAO;AAAA,QACjC,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,UAAU,SAAS,OAAO,CAAC;AAAA,MAClD;AAAA,MACA,OAAO;AACH,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,QAClD,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,IAAI,aAAa;AACb,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,MACjE;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,aAAa;AACb,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,MACjE;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK;AAAA,MAC5D;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,WAAW;AACX,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,MAC/D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,UAAU;AACV,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,MAC9D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,OAAO;AACP,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAAA,MAC3D;AAAA,MACA,IAAI,SAAS;AACT,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,MAC7D;AAAA,MACA,IAAI,WAAW;AACX,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,MAC/D;AAAA,MACA,IAAI,cAAc;AAEd,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,WAAW;AAAA,MAClE;AAAA,MACA,IAAI,YAAY;AACZ,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,YAAY;AACZ,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAUO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,MAAM,KAAK;AAChB,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,QAClC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,MAAM;AACV,cAAM,SAAS,IAAI,YAAY;AAC/B,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,CAAC,KAAK,UAAU,MAAM,IAAI,GAAG;AAC7B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,gBAAI,UAAU;AACV,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,gBACjB,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,gBAAI,QAAQ;AACR,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,gBACjB,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,mBAAmB,MAAM,MAAM,MAAM,KAAK,MAAM,GAAG;AACnD,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,MAAM;AAAA,gBAClB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,UAAU;AAC9B,gBAAI,CAAC,OAAO,SAAS,MAAM,IAAI,GAAG;AAC9B,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ;AAAA,YACJ,GAAG,KAAK,KAAK;AAAA,YACb;AAAA,cACI;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,UAAU,SAAS,OAAO;AAAA,YACvC;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS;AACT,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AACZ,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,KAAK,SAAS;AACV,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO,OAAO;AAAA,UACd,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC,EAAE,UAAU;AAAA,UACT,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO,OAAO;AAAA,UACd,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,SAAU,GAAG,SAAS,gBAAgB,KAAK,UAAU,GAAG,KAAK,CAAE;AAAA,MACtH;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,YAAY,GAAG,SAAS,SAAS,GAAG,SAAS,cAAc;AACvE,mBAAO;AAAA,UACX,WACS,GAAG,SAAS,OAAO;AACxB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB,WACS,GAAG,SAAS,OAAO;AACxB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AAAA,MACtD;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,MAAM,KAAK;AAChB,aAAK,MAAM,KAAK;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,cAAI;AACA,kBAAM,OAAO,OAAO,MAAM,IAAI;AAAA,UAClC,QACM;AACF,mBAAO,KAAK,iBAAiB,KAAK;AAAA,UACtC;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,iBAAO,KAAK,iBAAiB,KAAK;AAAA,QACtC;AACA,YAAI,MAAM;AACV,cAAM,SAAS,IAAI,YAAY;AAC/B,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,kBAAM,WAAW,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClF,gBAAI,UAAU;AACV,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,WAAW,MAAM;AAAA,gBACjB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,kBAAM,SAAS,MAAM,YAAY,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAChF,gBAAI,QAAQ;AACR,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,WAAW,MAAM;AAAA,gBACjB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,cAAc;AAClC,gBAAI,MAAM,OAAO,MAAM,UAAU,OAAO,CAAC,GAAG;AACxC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,YAAY,MAAM;AAAA,gBAClB,SAAS,MAAM;AAAA,cACnB,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,MACrD;AAAA,MACA,iBAAiB,OAAO;AACpB,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,UAAU,cAAc;AAAA,UACxB,UAAU,IAAI;AAAA,QAClB,CAAC;AACD,eAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,IAAI,OAAO,SAAS;AAChB,eAAO,KAAK,SAAS,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,CAAC;AAAA,MACxE;AAAA,MACA,GAAG,OAAO,SAAS;AACf,eAAO,KAAK,SAAS,OAAO,OAAO,OAAO,UAAU,SAAS,OAAO,CAAC;AAAA,MACzE;AAAA,MACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ;AAAA,YACJ,GAAG,KAAK,KAAK;AAAA,YACb;AAAA,cACI;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,UAAU,SAAS,OAAO;AAAA,YACvC;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AACjB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,OAAO,CAAC;AAAA,UACf,WAAW;AAAA,UACX,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,WAAW,OAAO,SAAS;AACvB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,WAAW;AACX,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,QAAQ,CAAC;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,QAAQ,MAAM,IAAI;AAAA,QACnC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,SAAS;AACtC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,WAAW;AAC5B,aAAO,IAAI,WAAW;AAAA,QAClB,UAAU,sBAAsB;AAAA,QAChC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,YAAI,KAAK,KAAK,QAAQ;AAClB,gBAAM,OAAO,IAAI,KAAK,MAAM,IAAI;AAAA,QACpC;AACA,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,OAAO,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG;AACpC,gBAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,SAAS,IAAI,YAAY;AAC/B,YAAI,MAAM;AACV,mBAAW,SAAS,KAAK,KAAK,QAAQ;AAClC,cAAI,MAAM,SAAS,OAAO;AACtB,gBAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,MAAM,SAAS,OAAO;AAC3B,gBAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,OAAO;AACpC,oBAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,SAAS,MAAM;AAAA,gBACf,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,OACK;AACD,iBAAK,YAAY,KAAK;AAAA,UAC1B;AAAA,QACJ;AACA,eAAO;AAAA,UACH,QAAQ,OAAO;AAAA,UACf,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,QACxC;AAAA,MACJ;AAAA,MACA,UAAU,OAAO;AACb,eAAO,IAAI,SAAQ;AAAA,UACf,GAAG,KAAK;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,QAAQ,QAAQ;AAAA,UACvB,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,KAAK,UAAU;AAAA,UAClB,MAAM;AAAA,UACN,OAAO,QAAQ,QAAQ;AAAA,UACvB,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC,CAAC;AAAA,MACL;AAAA,MACA,IAAI,UAAU;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,MACzC;AAAA,MACA,IAAI,UAAU;AACV,YAAI,MAAM;AACV,mBAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,cAAI,GAAG,SAAS,OAAO;AACnB,gBAAI,QAAQ,QAAQ,GAAG,QAAQ;AAC3B,oBAAM,GAAG;AAAA,UACjB;AAAA,QACJ;AACA,eAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,MACzC;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,QAAQ,CAAC;AAAA,QACT,QAAQ,QAAQ,UAAU;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,cAAwB,QAAQ;AAAA,MACnC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,WAAW;AAC3B,aAAO,IAAI,UAAU;AAAA,QACjB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,eAAN,cAA2B,QAAQ;AAAA,MACtC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,iBAAa,SAAS,CAAC,WAAW;AAC9B,aAAO,IAAI,aAAa;AAAA,QACpB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,cAAc;AACV,cAAM,GAAG,SAAS;AAElB,aAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO,OAAO;AACV,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW;AACxB,aAAO,IAAI,OAAO;AAAA,QACd,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,cAAc;AACV,cAAM,GAAG,SAAS;AAElB,aAAK,WAAW;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,WAAW;AAC5B,aAAO,IAAI,WAAW;AAAA,QAClB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,0BAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,UAAU,cAAc;AAAA,UACxB,UAAU,IAAI;AAAA,QAClB,CAAC;AACD,eAAO;AAAA,MACX;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,WAAW;AAC1B,aAAO,IAAI,SAAS;AAAA,QAChB,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,WAAW;AACzB,aAAO,IAAI,QAAQ;AAAA,QACf,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,KAAK,OAAO,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI,eAAe,cAAc,OAAO;AACxC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,gBAAgB,MAAM;AAC1B,gBAAM,SAAS,IAAI,KAAK,SAAS,IAAI,YAAY;AACjD,gBAAM,WAAW,IAAI,KAAK,SAAS,IAAI,YAAY;AACnD,cAAI,UAAU,UAAU;AACpB,8BAAkB,KAAK;AAAA,cACnB,MAAM,SAAS,aAAa,UAAU,aAAa;AAAA,cACnD,SAAU,WAAW,IAAI,YAAY,QAAQ;AAAA,cAC7C,SAAU,SAAS,IAAI,YAAY,QAAQ;AAAA,cAC3C,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,YAAY;AAAA,YAC7B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,cAAc,MAAM;AACxB,cAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,UAAU;AAAA,cACvB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,UAAU;AAAA,YAC3B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,cAAc,MAAM;AACxB,cAAI,IAAI,KAAK,SAAS,IAAI,UAAU,OAAO;AACvC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,UAAU;AAAA,cACvB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,UAAU;AAAA,YAC3B,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAMC,OAAM;AAC9C,mBAAO,IAAI,KAAK,YAAY,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAMA,EAAC,CAAC;AAAA,UAC9E,CAAC,CAAC,EAAE,KAAK,CAACC,YAAW;AACjB,mBAAO,YAAY,WAAW,QAAQA,OAAM;AAAA,UAChD,CAAC;AAAA,QACL;AACA,cAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAMD,OAAM;AAC1C,iBAAO,IAAI,KAAK,WAAW,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAMA,EAAC,CAAC;AAAA,QAC7E,CAAC;AACD,eAAO,YAAY,WAAW,QAAQ,MAAM;AAAA,MAChD;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACxE,CAAC;AAAA,MACL;AAAA,MACA,IAAI,WAAW,SAAS;AACpB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACxE,CAAC;AAAA,MACL;AAAA,MACA,OAAO,KAAK,SAAS;AACjB,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR,aAAa,EAAE,OAAO,KAAK,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,OAAO;AAAA,MAC9B;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,QAAQ,WAAW;AAClC,aAAO,IAAI,SAAS;AAAA,QAChB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAgCO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,UAAU;AAKf,aAAK,YAAY,KAAK;AAqCtB,aAAK,UAAU,KAAK;AAAA,MACxB;AAAA,MACA,aAAa;AACT,YAAI,KAAK,YAAY;AACjB,iBAAO,KAAK;AAChB,cAAM,QAAQ,KAAK,KAAK,MAAM;AAC9B,cAAM,OAAO,KAAK,WAAW,KAAK;AAClC,aAAK,UAAU,EAAE,OAAO,KAAK;AAC7B,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,QAAQ;AACrC,gBAAMD,OAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkBA,MAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAUA,KAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,EAAE,OAAO,MAAM,UAAU,IAAI,KAAK,WAAW;AACnD,cAAM,YAAY,CAAC;AACnB,YAAI,EAAE,KAAK,KAAK,oBAAoB,YAAY,KAAK,KAAK,gBAAgB,UAAU;AAChF,qBAAW,OAAO,IAAI,MAAM;AACxB,gBAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC1B,wBAAU,KAAK,GAAG;AAAA,YACtB;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,WAAW;AACzB,gBAAM,eAAe,MAAM,GAAG;AAC9B,gBAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,gBAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,YACnC,OAAO,aAAa,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,YAC5E,WAAW,OAAO,IAAI;AAAA,UAC1B,CAAC;AAAA,QACL;AACA,YAAI,KAAK,KAAK,oBAAoB,UAAU;AACxC,gBAAM,cAAc,KAAK,KAAK;AAC9B,cAAI,gBAAgB,eAAe;AAC/B,uBAAW,OAAO,WAAW;AACzB,oBAAM,KAAK;AAAA,gBACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,gBACnC,OAAO,EAAE,QAAQ,SAAS,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,cACnD,CAAC;AAAA,YACL;AAAA,UACJ,WACS,gBAAgB,UAAU;AAC/B,gBAAI,UAAU,SAAS,GAAG;AACtB,gCAAkB,KAAK;AAAA,gBACnB,MAAM,aAAa;AAAA,gBACnB,MAAM;AAAA,cACV,CAAC;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ,WACS,gBAAgB,SAAS;AAAA,UAClC,OACK;AACD,kBAAM,IAAI,MAAM,sDAAsD;AAAA,UAC1E;AAAA,QACJ,OACK;AAED,gBAAM,WAAW,KAAK,KAAK;AAC3B,qBAAW,OAAO,WAAW;AACzB,kBAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,kBAAM,KAAK;AAAA,cACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,cACnC,OAAO,SAAS;AAAA,gBAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,cACvE;AAAA,cACA,WAAW,OAAO,IAAI;AAAA,YAC1B,CAAC;AAAA,UACL;AAAA,QACJ;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,QAAQ,EAClB,KAAK,YAAY;AAClB,kBAAM,YAAY,CAAC;AACnB,uBAAW,QAAQ,OAAO;AACtB,oBAAM,MAAM,MAAM,KAAK;AACvB,oBAAM,QAAQ,MAAM,KAAK;AACzB,wBAAU,KAAK;AAAA,gBACX;AAAA,gBACA;AAAA,gBACA,WAAW,KAAK;AAAA,cACpB,CAAC;AAAA,YACL;AACA,mBAAO;AAAA,UACX,CAAC,EACI,KAAK,CAAC,cAAc;AACrB,mBAAO,YAAY,gBAAgB,QAAQ,SAAS;AAAA,UACxD,CAAC;AAAA,QACL,OACK;AACD,iBAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,QACpD;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK,MAAM;AAAA,MAC3B;AAAA,MACA,OAAO,SAAS;AACZ,kBAAU;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,UACb,GAAI,YAAY,SACV;AAAA,YACE,UAAU,CAAC,OAAO,QAAQ;AACtB,oBAAM,eAAe,KAAK,KAAK,WAAW,OAAO,GAAG,EAAE,WAAW,IAAI;AACrE,kBAAI,MAAM,SAAS;AACf,uBAAO;AAAA,kBACH,SAAS,UAAU,SAAS,OAAO,EAAE,WAAW;AAAA,gBACpD;AACJ,qBAAO;AAAA,gBACH,SAAS;AAAA,cACb;AAAA,YACJ;AAAA,UACJ,IACE,CAAC;AAAA,QACX,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,cAAc;AACV,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,OAAO,cAAc;AACjB,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,OAAO;AAAA,YACV,GAAG,KAAK,KAAK,MAAM;AAAA,YACnB,GAAG;AAAA,UACP;AAAA,QACJ,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,SAAS;AACX,cAAM,SAAS,IAAI,WAAU;AAAA,UACzB,aAAa,QAAQ,KAAK;AAAA,UAC1B,UAAU,QAAQ,KAAK;AAAA,UACvB,OAAO,OAAO;AAAA,YACV,GAAG,KAAK,KAAK,MAAM;AAAA,YACnB,GAAG,QAAQ,KAAK,MAAM;AAAA,UAC1B;AAAA,UACA,UAAU,sBAAsB;AAAA,QACpC,CAAC;AACD,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoCA,OAAO,KAAK,QAAQ;AAChB,eAAO,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,SAASN,QAAO;AACZ,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,UAAUA;AAAA,QACd,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM;AACP,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,KAAK,WAAW,IAAI,GAAG;AACrC,cAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,GAAG;AAC9B,kBAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM;AACP,cAAM,QAAQ,CAAC;AACf,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,cAAI,CAAC,KAAK,GAAG,GAAG;AACZ,kBAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAC/B;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA;AAAA;AAAA;AAAA,MAIA,cAAc;AACV,eAAO,eAAe,IAAI;AAAA,MAC9B;AAAA,MACA,QAAQ,MAAM;AACV,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,gBAAM,cAAc,KAAK,MAAM,GAAG;AAClC,cAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,qBAAS,GAAG,IAAI;AAAA,UACpB,OACK;AACD,qBAAS,GAAG,IAAI,YAAY,SAAS;AAAA,UACzC;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AACX,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,KAAK,WAAW,KAAK,KAAK,GAAG;AAC3C,cAAI,QAAQ,CAAC,KAAK,GAAG,GAAG;AACpB,qBAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,UAClC,OACK;AACD,kBAAM,cAAc,KAAK,MAAM,GAAG;AAClC,gBAAI,WAAW;AACf,mBAAO,oBAAoB,aAAa;AACpC,yBAAW,SAAS,KAAK;AAAA,YAC7B;AACA,qBAAS,GAAG,IAAI;AAAA,UACpB;AAAA,QACJ;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,GAAG,KAAK;AAAA,UACR,OAAO,MAAM;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,MACA,QAAQ;AACJ,eAAO,cAAc,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,MACpD;AAAA,IACJ;AACA,cAAU,SAAS,CAAC,OAAO,WAAW;AAClC,aAAO,IAAI,UAAU;AAAA,QACjB,OAAO,MAAM;AAAA,QACb,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,cAAU,eAAe,CAAC,OAAO,WAAW;AACxC,aAAO,IAAI,UAAU;AAAA,QACjB,OAAO,MAAM;AAAA,QACb,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,cAAU,aAAa,CAAC,OAAO,WAAW;AACtC,aAAO,IAAI,UAAU;AAAA,QACjB;AAAA,QACA,aAAa;AAAA,QACb,UAAU,SAAS,OAAO;AAAA,QAC1B,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,UAAU,KAAK,KAAK;AAC1B,iBAAS,cAAc,SAAS;AAE5B,qBAAW,UAAU,SAAS;AAC1B,gBAAI,OAAO,OAAO,WAAW,SAAS;AAClC,qBAAO,OAAO;AAAA,YAClB;AAAA,UACJ;AACA,qBAAW,UAAU,SAAS;AAC1B,gBAAI,OAAO,OAAO,WAAW,SAAS;AAElC,kBAAI,OAAO,OAAO,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM;AAClD,qBAAO,OAAO;AAAA,YAClB;AAAA,UACJ;AAEA,gBAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC;AAClF,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,QAAQ,IAAI,OAAO,WAAW;AAC7C,kBAAM,WAAW;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,gBACJ,GAAG,IAAI;AAAA,gBACP,QAAQ,CAAC;AAAA,cACb;AAAA,cACA,QAAQ;AAAA,YACZ;AACA,mBAAO;AAAA,cACH,QAAQ,MAAM,OAAO,YAAY;AAAA,gBAC7B,MAAM,IAAI;AAAA,gBACV,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AAAA,cACD,KAAK;AAAA,YACT;AAAA,UACJ,CAAC,CAAC,EAAE,KAAK,aAAa;AAAA,QAC1B,OACK;AACD,cAAI,QAAQ;AACZ,gBAAM,SAAS,CAAC;AAChB,qBAAW,UAAU,SAAS;AAC1B,kBAAM,WAAW;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,gBACJ,GAAG,IAAI;AAAA,gBACP,QAAQ,CAAC;AAAA,cACb;AAAA,cACA,QAAQ;AAAA,YACZ;AACA,kBAAM,SAAS,OAAO,WAAW;AAAA,cAC7B,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,OAAO,WAAW,SAAS;AAC3B,qBAAO;AAAA,YACX,WACS,OAAO,WAAW,WAAW,CAAC,OAAO;AAC1C,sBAAQ,EAAE,QAAQ,KAAK,SAAS;AAAA,YACpC;AACA,gBAAI,SAAS,OAAO,OAAO,QAAQ;AAC/B,qBAAO,KAAK,SAAS,OAAO,MAAM;AAAA,YACtC;AAAA,UACJ;AACA,cAAI,OAAO;AACP,gBAAI,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM;AACjD,mBAAO,MAAM;AAAA,UACjB;AACA,gBAAM,cAAc,OAAO,IAAI,CAACS,YAAW,IAAI,SAASA,OAAM,CAAC;AAC/D,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,OAAO,WAAW;AACjC,aAAO,IAAI,SAAS;AAAA,QAChB,SAAS;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAQA,IAAM,mBAAmB,CAAC,SAAS;AAC/B,UAAI,gBAAgB,SAAS;AACzB,eAAO,iBAAiB,KAAK,MAAM;AAAA,MACvC,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,UAAU,CAAC;AAAA,MAC5C,WACS,gBAAgB,YAAY;AACjC,eAAO,CAAC,KAAK,KAAK;AAAA,MACtB,WACS,gBAAgB,SAAS;AAC9B,eAAO,KAAK;AAAA,MAChB,WACS,gBAAgB,eAAe;AAEpC,eAAO,KAAK,aAAa,KAAK,IAAI;AAAA,MACtC,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,MAC/C,WACS,gBAAgB,cAAc;AACnC,eAAO,CAAC,MAAS;AAAA,MACrB,WACS,gBAAgB,SAAS;AAC9B,eAAO,CAAC,IAAI;AAAA,MAChB,WACS,gBAAgB,aAAa;AAClC,eAAO,CAAC,QAAW,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,MACzD,WACS,gBAAgB,aAAa;AAClC,eAAO,CAAC,MAAM,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAAA,MACpD,WACS,gBAAgB,YAAY;AACjC,eAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,MACzC,WACS,gBAAgB,aAAa;AAClC,eAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,MACzC,WACS,gBAAgB,UAAU;AAC/B,eAAO,iBAAiB,KAAK,KAAK,SAAS;AAAA,MAC/C,OACK;AACD,eAAO,CAAC;AAAA,MACZ;AAAA,IACJ;AACO,IAAM,wBAAN,MAAM,+BAA8B,QAAQ;AAAA,MAC/C,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,gBAAgB,KAAK;AAC3B,cAAM,qBAAqB,IAAI,KAAK,aAAa;AACjD,cAAM,SAAS,KAAK,WAAW,IAAI,kBAAkB;AACrD,YAAI,CAAC,QAAQ;AACT,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,YAC1C,MAAM,CAAC,aAAa;AAAA,UACxB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,OAAO,YAAY;AAAA,YACtB,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL,OACK;AACD,iBAAO,OAAO,WAAW;AAAA,YACrB,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,MACA,IAAI,gBAAgB;AAChB,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,aAAa;AACb,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,OAAO,eAAe,SAAS,QAAQ;AAE1C,cAAM,aAAa,oBAAI,IAAI;AAE3B,mBAAW,QAAQ,SAAS;AACxB,gBAAM,sBAAsB,iBAAiB,KAAK,MAAM,aAAa,CAAC;AACtE,cAAI,CAAC,oBAAoB,QAAQ;AAC7B,kBAAM,IAAI,MAAM,mCAAmC,aAAa,mDAAmD;AAAA,UACvH;AACA,qBAAW,SAAS,qBAAqB;AACrC,gBAAI,WAAW,IAAI,KAAK,GAAG;AACvB,oBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,CAAC,wBAAwB,OAAO,KAAK,CAAC,EAAE;AAAA,YAC1G;AACA,uBAAW,IAAI,OAAO,IAAI;AAAA,UAC9B;AAAA,QACJ;AACA,eAAO,IAAI,uBAAsB;AAAA,UAC7B,UAAU,sBAAsB;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AA2CO,IAAM,kBAAN,cAA8B,QAAQ;AAAA,MACzC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,eAAe,CAAC,YAAY,gBAAgB;AAC9C,cAAI,UAAU,UAAU,KAAK,UAAU,WAAW,GAAG;AACjD,mBAAO;AAAA,UACX;AACA,gBAAM,SAAS,YAAY,WAAW,OAAO,YAAY,KAAK;AAC9D,cAAI,CAAC,OAAO,OAAO;AACf,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,YACvB,CAAC;AACD,mBAAO;AAAA,UACX;AACA,cAAI,QAAQ,UAAU,KAAK,QAAQ,WAAW,GAAG;AAC7C,mBAAO,MAAM;AAAA,UACjB;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QACtD;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI;AAAA,YACf,KAAK,KAAK,KAAK,YAAY;AAAA,cACvB,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,YACD,KAAK,KAAK,MAAM,YAAY;AAAA,cACxB,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,aAAa,MAAM,KAAK,CAAC;AAAA,QACxD,OACK;AACD,iBAAO,aAAa,KAAK,KAAK,KAAK,WAAW;AAAA,YAC1C,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,YAC3B,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC,CAAC;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,oBAAgB,SAAS,CAAC,MAAM,OAAO,WAAW;AAC9C,aAAO,IAAI,gBAAgB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAEO,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,OAAO;AACxC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,KAAK,KAAK,MAAM;AAAA,YACzB,WAAW;AAAA,YACX,OAAO;AAAA,YACP,MAAM;AAAA,UACV,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,KAAK,KAAK;AACvB,YAAI,CAAC,QAAQ,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,QAAQ;AACnD,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,SAAS,KAAK,KAAK,MAAM;AAAA,YACzB,WAAW;AAAA,YACX,OAAO;AAAA,YACP,MAAM;AAAA,UACV,CAAC;AACD,iBAAO,MAAM;AAAA,QACjB;AACA,cAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,EACrB,IAAI,CAAC,MAAM,cAAc;AAC1B,gBAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK;AACvD,cAAI,CAAC;AACD,mBAAO;AACX,iBAAO,OAAO,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,QAC/E,CAAC,EACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtB,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY;AACxC,mBAAO,YAAY,WAAW,QAAQ,OAAO;AAAA,UACjD,CAAC;AAAA,QACL,OACK;AACD,iBAAO,YAAY,WAAW,QAAQ,KAAK;AAAA,QAC/C;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,KAAK,MAAM;AACP,eAAO,IAAI,UAAS;AAAA,UAChB,GAAG,KAAK;AAAA,UACR;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,SAAS,WAAW;AACnC,UAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,cAAM,IAAI,MAAM,uDAAuD;AAAA,MAC3E;AACA,aAAO,IAAI,SAAS;AAAA,QAChB,OAAO;AAAA,QACP,UAAU,sBAAsB;AAAA,QAChC,MAAM;AAAA,QACN,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,MACnC,IAAI,YAAY;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,QAAQ,CAAC;AACf,cAAM,UAAU,KAAK,KAAK;AAC1B,cAAM,YAAY,KAAK,KAAK;AAC5B,mBAAW,OAAO,IAAI,MAAM;AACxB,gBAAM,KAAK;AAAA,YACP,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,YACnE,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,YACjF,WAAW,OAAO,IAAI;AAAA,UAC1B,CAAC;AAAA,QACL;AACA,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,YAAY,iBAAiB,QAAQ,KAAK;AAAA,QACrD,OACK;AACD,iBAAO,YAAY,gBAAgB,QAAQ,KAAK;AAAA,QACpD;AAAA,MACJ;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO,OAAO,QAAQ,OAAO;AAChC,YAAI,kBAAkB,SAAS;AAC3B,iBAAO,IAAI,WAAU;AAAA,YACjB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU,sBAAsB;AAAA,YAChC,GAAG,oBAAoB,KAAK;AAAA,UAChC,CAAC;AAAA,QACL;AACA,eAAO,IAAI,WAAU;AAAA,UACjB,SAAS,UAAU,OAAO;AAAA,UAC1B,WAAW;AAAA,UACX,UAAU,sBAAsB;AAAA,UAChC,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,IAAI,YAAY;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,cAAc;AACd,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,KAAK,KAAK;AAC1B,cAAM,YAAY,KAAK,KAAK;AAC5B,cAAM,QAAQ,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAGT,WAAU;AAC/D,iBAAO;AAAA,YACH,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAACA,QAAO,KAAK,CAAC,CAAC;AAAA,YAC9E,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,CAACA,QAAO,OAAO,CAAC,CAAC;AAAA,UAC1F;AAAA,QACJ,CAAC;AACD,YAAI,IAAI,OAAO,OAAO;AAClB,gBAAM,WAAW,oBAAI,IAAI;AACzB,iBAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACtC,uBAAW,QAAQ,OAAO;AACtB,oBAAM,MAAM,MAAM,KAAK;AACvB,oBAAM,QAAQ,MAAM,KAAK;AACzB,kBAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,uBAAO;AAAA,cACX;AACA,kBAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,uBAAO,MAAM;AAAA,cACjB;AACA,uBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,YACvC;AACA,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,UACnD,CAAC;AAAA,QACL,OACK;AACD,gBAAM,WAAW,oBAAI,IAAI;AACzB,qBAAW,QAAQ,OAAO;AACtB,kBAAM,MAAM,KAAK;AACjB,kBAAM,QAAQ,KAAK;AACnB,gBAAI,IAAI,WAAW,aAAa,MAAM,WAAW,WAAW;AACxD,qBAAO;AAAA,YACX;AACA,gBAAI,IAAI,WAAW,WAAW,MAAM,WAAW,SAAS;AACpD,qBAAO,MAAM;AAAA,YACjB;AACA,qBAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,UACvC;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,SAAS,WAAW,WAAW;AAC5C,aAAO,IAAI,OAAO;AAAA,QACd;AAAA,QACA;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,MAAM,gBAAe,QAAQ;AAAA,MAChC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,eAAe,cAAc,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,MAAM,KAAK;AACjB,YAAI,IAAI,YAAY,MAAM;AACtB,cAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,QAAQ;AAAA,cACrB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,QAAQ;AAAA,YACzB,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,YAAI,IAAI,YAAY,MAAM;AACtB,cAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,OAAO;AACnC,8BAAkB,KAAK;AAAA,cACnB,MAAM,aAAa;AAAA,cACnB,SAAS,IAAI,QAAQ;AAAA,cACrB,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS,IAAI,QAAQ;AAAA,YACzB,CAAC;AACD,mBAAO,MAAM;AAAA,UACjB;AAAA,QACJ;AACA,cAAM,YAAY,KAAK,KAAK;AAC5B,iBAAS,YAAYU,WAAU;AAC3B,gBAAM,YAAY,oBAAI,IAAI;AAC1B,qBAAW,WAAWA,WAAU;AAC5B,gBAAI,QAAQ,WAAW;AACnB,qBAAO;AACX,gBAAI,QAAQ,WAAW;AACnB,qBAAO,MAAM;AACjB,sBAAU,IAAI,QAAQ,KAAK;AAAA,UAC/B;AACA,iBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,UAAU;AAAA,QACpD;AACA,cAAM,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MAAMH,OAAM,UAAU,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAMA,EAAC,CAAC,CAAC;AACzH,YAAI,IAAI,OAAO,OAAO;AAClB,iBAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAACG,cAAa,YAAYA,SAAQ,CAAC;AAAA,QACzE,OACK;AACD,iBAAO,YAAY,QAAQ;AAAA,QAC/B;AAAA,MACJ;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,IAAI,QAAO;AAAA,UACd,GAAG,KAAK;AAAA,UACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,IAAI,SAAS,SAAS;AAClB,eAAO,IAAI,QAAO;AAAA,UACd,GAAG,KAAK;AAAA,UACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,QACpE,CAAC;AAAA,MACL;AAAA,MACA,KAAK,MAAM,SAAS;AAChB,eAAO,KAAK,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO;AAAA,MACpD;AAAA,MACA,SAAS,SAAS;AACd,eAAO,KAAK,IAAI,GAAG,OAAO;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW,WAAW;AACnC,aAAO,IAAI,OAAO;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,MACrC,cAAc;AACV,cAAM,GAAG,SAAS;AAClB,aAAK,WAAW,KAAK;AAAA,MACzB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,UAAU;AAC3C,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,iBAAS,cAAc,MAAM,OAAO;AAChC,iBAAO,UAAU;AAAA,YACb,MAAM;AAAA,YACN,MAAM,IAAI;AAAA,YACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,YAChH,WAAW;AAAA,cACP,MAAM,aAAa;AAAA,cACnB,gBAAgB;AAAA,YACpB;AAAA,UACJ,CAAC;AAAA,QACL;AACA,iBAAS,iBAAiB,SAAS,OAAO;AACtC,iBAAO,UAAU;AAAA,YACb,MAAM;AAAA,YACN,MAAM,IAAI;AAAA,YACV,WAAW,CAAC,IAAI,OAAO,oBAAoB,IAAI,gBAAgB,YAAY,GAAG,UAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,YAChH,WAAW;AAAA,cACP,MAAM,aAAa;AAAA,cACnB,iBAAiB;AAAA,YACrB;AAAA,UACJ,CAAC;AAAA,QACL;AACA,cAAM,SAAS,EAAE,UAAU,IAAI,OAAO,mBAAmB;AACzD,cAAM,KAAK,IAAI;AACf,YAAI,KAAK,KAAK,mBAAmB,YAAY;AAIzC,gBAAM,KAAK;AACX,iBAAO,GAAG,kBAAmB,MAAM;AAC/B,kBAAM,QAAQ,IAAI,SAAS,CAAC,CAAC;AAC7B,kBAAM,aAAa,MAAM,GAAG,KAAK,KAAK,WAAW,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AACxE,oBAAM,SAAS,cAAc,MAAM,CAAC,CAAC;AACrC,oBAAM;AAAA,YACV,CAAC;AACD,kBAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU;AACvD,kBAAM,gBAAgB,MAAM,GAAG,KAAK,QAAQ,KAAK,KAC5C,WAAW,QAAQ,MAAM,EACzB,MAAM,CAAC,MAAM;AACd,oBAAM,SAAS,iBAAiB,QAAQ,CAAC,CAAC;AAC1C,oBAAM;AAAA,YACV,CAAC;AACD,mBAAO;AAAA,UACX,CAAC;AAAA,QACL,OACK;AAID,gBAAM,KAAK;AACX,iBAAO,GAAG,YAAa,MAAM;AACzB,kBAAM,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM,MAAM;AACtD,gBAAI,CAAC,WAAW,SAAS;AACrB,oBAAM,IAAI,SAAS,CAAC,cAAc,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,YAC9D;AACA,kBAAM,SAAS,QAAQ,MAAM,IAAI,MAAM,WAAW,IAAI;AACtD,kBAAM,gBAAgB,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AAC9D,gBAAI,CAAC,cAAc,SAAS;AACxB,oBAAM,IAAI,SAAS,CAAC,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;AAAA,YACtE;AACA,mBAAO,cAAc;AAAA,UACzB,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,QAAQ,OAAO;AACX,eAAO,IAAI,aAAY;AAAA,UACnB,GAAG,KAAK;AAAA,UACR,MAAM,SAAS,OAAO,KAAK,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,QACzD,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,YAAY;AAChB,eAAO,IAAI,aAAY;AAAA,UACnB,GAAG,KAAK;AAAA,UACR,SAAS;AAAA,QACb,CAAC;AAAA,MACL;AAAA,MACA,UAAU,MAAM;AACZ,cAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,eAAO;AAAA,MACX;AAAA,MACA,gBAAgB,MAAM;AAClB,cAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,eAAO;AAAA,MACX;AAAA,MACA,OAAO,OAAO,MAAM,SAAS,QAAQ;AACjC,eAAO,IAAI,aAAY;AAAA,UACnB,MAAO,OAAO,OAAO,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,UACjE,SAAS,WAAW,WAAW,OAAO;AAAA,UACtC,UAAU,sBAAsB;AAAA,UAChC,GAAG,oBAAoB,MAAM;AAAA,QACjC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,UAAN,cAAsB,QAAQ;AAAA,MACjC,IAAI,SAAS;AACT,eAAO,KAAK,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,aAAa,KAAK,KAAK,OAAO;AACpC,eAAO,WAAW,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC5E;AAAA,IACJ;AACA,YAAQ,SAAS,CAAC,QAAQ,WAAW;AACjC,aAAO,IAAI,QAAQ;AAAA,QACf;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,YAAI,MAAM,SAAS,KAAK,KAAK,OAAO;AAChC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,UAAU,KAAK,KAAK;AAAA,UACxB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,MAChD;AAAA,MACA,IAAI,QAAQ;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,OAAO,WAAW;AACnC,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAQO,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,MACjC,OAAO,OAAO;AACV,YAAI,OAAO,MAAM,SAAS,UAAU;AAChC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,gBAAM,iBAAiB,KAAK,KAAK;AACjC,4BAAkB,KAAK;AAAA,YACnB,UAAU,KAAK,WAAW,cAAc;AAAA,YACxC,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,SAAS,IAAI,IAAI,KAAK,KAAK,MAAM;AAAA,QAC1C;AACA,YAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,gBAAM,iBAAiB,KAAK,KAAK;AACjC,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,SAAS;AAAA,UACb,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,MACA,IAAI,UAAU;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,OAAO;AACP,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,SAAS;AACT,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,OAAO;AACP,cAAM,aAAa,CAAC;AACpB,mBAAW,OAAO,KAAK,KAAK,QAAQ;AAChC,qBAAW,GAAG,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,eAAO,SAAQ,OAAO,QAAQ;AAAA,UAC1B,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACP,CAAC;AAAA,MACL;AAAA,MACA,QAAQ,QAAQ,SAAS,KAAK,MAAM;AAChC,eAAO,SAAQ,OAAO,KAAK,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC,GAAG;AAAA,UACvE,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QACP,CAAC;AAAA,MACL;AAAA,IACJ;AACA,YAAQ,SAAS;AACV,IAAM,gBAAN,cAA4B,QAAQ;AAAA,MACvC,OAAO,OAAO;AACV,cAAM,mBAAmB,KAAK,mBAAmB,KAAK,KAAK,MAAM;AACjE,cAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,YAAI,IAAI,eAAe,cAAc,UAAU,IAAI,eAAe,cAAc,QAAQ;AACpF,gBAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,4BAAkB,KAAK;AAAA,YACnB,UAAU,KAAK,WAAW,cAAc;AAAA,YACxC,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,SAAS,IAAI,IAAI,KAAK,mBAAmB,KAAK,KAAK,MAAM,CAAC;AAAA,QACnE;AACA,YAAI,CAAC,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG;AAC9B,gBAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,4BAAkB,KAAK;AAAA,YACnB,UAAU,IAAI;AAAA,YACd,MAAM,aAAa;AAAA,YACnB,SAAS;AAAA,UACb,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,GAAG,MAAM,IAAI;AAAA,MACxB;AAAA,MACA,IAAI,OAAO;AACP,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,kBAAc,SAAS,CAAC,QAAQ,WAAW;AACvC,aAAO,IAAI,cAAc;AAAA,QACrB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,IAAI,eAAe,cAAc,WAAW,IAAI,OAAO,UAAU,OAAO;AACxE,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,cAAM,cAAc,IAAI,eAAe,cAAc,UAAU,IAAI,OAAO,QAAQ,QAAQ,IAAI,IAAI;AAClG,eAAO,GAAG,YAAY,KAAK,CAAC,SAAS;AACjC,iBAAO,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,YACnC,MAAM,IAAI;AAAA,YACV,UAAU,IAAI,OAAO;AAAA,UACzB,CAAC;AAAA,QACL,CAAC,CAAC;AAAA,MACN;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,QAAQ,WAAW;AACpC,aAAO,IAAI,WAAW;AAAA,QAClB,MAAM;AAAA,QACN,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,YAAY;AACR,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MACA,aAAa;AACT,eAAO,KAAK,KAAK,OAAO,KAAK,aAAa,sBAAsB,aAC1D,KAAK,KAAK,OAAO,WAAW,IAC5B,KAAK,KAAK;AAAA,MACpB;AAAA,MACA,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,cAAM,SAAS,KAAK,KAAK,UAAU;AACnC,cAAM,WAAW;AAAA,UACb,UAAU,CAAC,QAAQ;AACf,8BAAkB,KAAK,GAAG;AAC1B,gBAAI,IAAI,OAAO;AACX,qBAAO,MAAM;AAAA,YACjB,OACK;AACD,qBAAO,MAAM;AAAA,YACjB;AAAA,UACJ;AAAA,UACA,IAAI,OAAO;AACP,mBAAO,IAAI;AAAA,UACf;AAAA,QACJ;AACA,iBAAS,WAAW,SAAS,SAAS,KAAK,QAAQ;AACnD,YAAI,OAAO,SAAS,cAAc;AAC9B,gBAAM,YAAY,OAAO,UAAU,IAAI,MAAM,QAAQ;AACrD,cAAI,IAAI,OAAO,OAAO;AAClB,mBAAO,QAAQ,QAAQ,SAAS,EAAE,KAAK,OAAOC,eAAc;AACxD,kBAAI,OAAO,UAAU;AACjB,uBAAO;AACX,oBAAM,SAAS,MAAM,KAAK,KAAK,OAAO,YAAY;AAAA,gBAC9C,MAAMA;AAAA,gBACN,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AACD,kBAAI,OAAO,WAAW;AAClB,uBAAO;AACX,kBAAI,OAAO,WAAW;AAClB,uBAAO,MAAM,OAAO,KAAK;AAC7B,kBAAI,OAAO,UAAU;AACjB,uBAAO,MAAM,OAAO,KAAK;AAC7B,qBAAO;AAAA,YACX,CAAC;AAAA,UACL,OACK;AACD,gBAAI,OAAO,UAAU;AACjB,qBAAO;AACX,kBAAM,SAAS,KAAK,KAAK,OAAO,WAAW;AAAA,cACvC,MAAM;AAAA,cACN,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,OAAO,WAAW;AAClB,qBAAO;AACX,gBAAI,OAAO,WAAW;AAClB,qBAAO,MAAM,OAAO,KAAK;AAC7B,gBAAI,OAAO,UAAU;AACjB,qBAAO,MAAM,OAAO,KAAK;AAC7B,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,OAAO,SAAS,cAAc;AAC9B,gBAAM,oBAAoB,CAAC,QAAQ;AAC/B,kBAAM,SAAS,OAAO,WAAW,KAAK,QAAQ;AAC9C,gBAAI,IAAI,OAAO,OAAO;AAClB,qBAAO,QAAQ,QAAQ,MAAM;AAAA,YACjC;AACA,gBAAI,kBAAkB,SAAS;AAC3B,oBAAM,IAAI,MAAM,2FAA2F;AAAA,YAC/G;AACA,mBAAO;AAAA,UACX;AACA,cAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,kBAAM,QAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,cACtC,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,MAAM,WAAW;AACjB,qBAAO;AACX,gBAAI,MAAM,WAAW;AACjB,qBAAO,MAAM;AAEjB,8BAAkB,MAAM,KAAK;AAC7B,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,UACtD,OACK;AACD,mBAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU;AACjG,kBAAI,MAAM,WAAW;AACjB,uBAAO;AACX,kBAAI,MAAM,WAAW;AACjB,uBAAO,MAAM;AACjB,qBAAO,kBAAkB,MAAM,KAAK,EAAE,KAAK,MAAM;AAC7C,uBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,cACtD,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAAA,QACJ;AACA,YAAI,OAAO,SAAS,aAAa;AAC7B,cAAI,IAAI,OAAO,UAAU,OAAO;AAC5B,kBAAM,OAAO,KAAK,KAAK,OAAO,WAAW;AAAA,cACrC,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,CAAC,QAAQ,IAAI;AACb,qBAAO;AACX,kBAAM,SAAS,OAAO,UAAU,KAAK,OAAO,QAAQ;AACpD,gBAAI,kBAAkB,SAAS;AAC3B,oBAAM,IAAI,MAAM,iGAAiG;AAAA,YACrH;AACA,mBAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO;AAAA,UACjD,OACK;AACD,mBAAO,KAAK,KAAK,OAAO,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS;AAChG,kBAAI,CAAC,QAAQ,IAAI;AACb,uBAAO;AACX,qBAAO,QAAQ,QAAQ,OAAO,UAAU,KAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY;AAAA,gBAC7E,QAAQ,OAAO;AAAA,gBACf,OAAO;AAAA,cACX,EAAE;AAAA,YACN,CAAC;AAAA,UACL;AAAA,QACJ;AACA,aAAK,YAAY,MAAM;AAAA,MAC3B;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,QAAQ,QAAQ,WAAW;AAC5C,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,UAAU,sBAAsB;AAAA,QAChC;AAAA,QACA,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACA,eAAW,uBAAuB,CAAC,YAAY,QAAQ,WAAW;AAC9D,aAAO,IAAI,WAAW;AAAA,QAClB;AAAA,QACA,QAAQ,EAAE,MAAM,cAAc,WAAW,WAAW;AAAA,QACpD,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AAEO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,WAAW;AACxC,iBAAO,GAAG,MAAS;AAAA,QACvB;AACA,eAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,MAC3C;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,MAAM;AACnC,iBAAO,GAAG,IAAI;AAAA,QAClB;AACA,eAAO,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,MAC3C;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,YAAI,OAAO,IAAI;AACf,YAAI,IAAI,eAAe,cAAc,WAAW;AAC5C,iBAAO,KAAK,KAAK,aAAa;AAAA,QAClC;AACA,eAAO,KAAK,KAAK,UAAU,OAAO;AAAA,UAC9B;AAAA,UACA,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,MACA,gBAAgB;AACZ,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,eAAW,SAAS,CAAC,MAAM,WAAW;AAClC,aAAO,IAAI,WAAW;AAAA,QAClB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,cAAc,OAAO,OAAO,YAAY,aAAa,OAAO,UAAU,MAAM,OAAO;AAAA,QACnF,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,WAAN,cAAuB,QAAQ;AAAA,MAClC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAE9C,cAAM,SAAS;AAAA,UACX,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,QACJ;AACA,cAAM,SAAS,KAAK,KAAK,UAAU,OAAO;AAAA,UACtC,MAAM,OAAO;AAAA,UACb,MAAM,OAAO;AAAA,UACb,QAAQ;AAAA,YACJ,GAAG;AAAA,UACP;AAAA,QACJ,CAAC;AACD,YAAI,QAAQ,MAAM,GAAG;AACjB,iBAAO,OAAO,KAAK,CAACH,YAAW;AAC3B,mBAAO;AAAA,cACH,QAAQ;AAAA,cACR,OAAOA,QAAO,WAAW,UACnBA,QAAO,QACP,KAAK,KAAK,WAAW;AAAA,gBACnB,IAAI,QAAQ;AACR,yBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,gBAC5C;AAAA,gBACA,OAAO,OAAO;AAAA,cAClB,CAAC;AAAA,YACT;AAAA,UACJ,CAAC;AAAA,QACL,OACK;AACD,iBAAO;AAAA,YACH,QAAQ;AAAA,YACR,OAAO,OAAO,WAAW,UACnB,OAAO,QACP,KAAK,KAAK,WAAW;AAAA,cACnB,IAAI,QAAQ;AACR,uBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,cAC5C;AAAA,cACA,OAAO,OAAO;AAAA,YAClB,CAAC;AAAA,UACT;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,cAAc;AACV,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,aAAS,SAAS,CAAC,MAAM,WAAW;AAChC,aAAO,IAAI,SAAS;AAAA,QAChB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,YAAY,OAAO,OAAO,UAAU,aAAa,OAAO,QAAQ,MAAM,OAAO;AAAA,QAC7E,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,SAAN,cAAqB,QAAQ;AAAA,MAChC,OAAO,OAAO;AACV,cAAM,aAAa,KAAK,SAAS,KAAK;AACtC,YAAI,eAAe,cAAc,KAAK;AAClC,gBAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,4BAAkB,KAAK;AAAA,YACnB,MAAM,aAAa;AAAA,YACnB,UAAU,cAAc;AAAA,YACxB,UAAU,IAAI;AAAA,UAClB,CAAC;AACD,iBAAO;AAAA,QACX;AACA,eAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,MAChD;AAAA,IACJ;AACA,WAAO,SAAS,CAAC,WAAW;AACxB,aAAO,IAAI,OAAO;AAAA,QACd,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AACO,IAAM,QAAQ,uBAAO,WAAW;AAChC,IAAM,aAAN,cAAyB,QAAQ;AAAA,MACpC,OAAO,OAAO;AACV,cAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,cAAM,OAAO,IAAI;AACjB,eAAO,KAAK,KAAK,KAAK,OAAO;AAAA,UACzB;AAAA,UACA,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACO,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,YAAI,IAAI,OAAO,OAAO;AAClB,gBAAM,cAAc,YAAY;AAC5B,kBAAM,WAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,cAC5C,MAAM,IAAI;AAAA,cACV,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AACD,gBAAI,SAAS,WAAW;AACpB,qBAAO;AACX,gBAAI,SAAS,WAAW,SAAS;AAC7B,qBAAO,MAAM;AACb,qBAAO,MAAM,SAAS,KAAK;AAAA,YAC/B,OACK;AACD,qBAAO,KAAK,KAAK,IAAI,YAAY;AAAA,gBAC7B,MAAM,SAAS;AAAA,gBACf,MAAM,IAAI;AAAA,gBACV,QAAQ;AAAA,cACZ,CAAC;AAAA,YACL;AAAA,UACJ;AACA,iBAAO,YAAY;AAAA,QACvB,OACK;AACD,gBAAM,WAAW,KAAK,KAAK,GAAG,WAAW;AAAA,YACrC,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AACD,cAAI,SAAS,WAAW;AACpB,mBAAO;AACX,cAAI,SAAS,WAAW,SAAS;AAC7B,mBAAO,MAAM;AACb,mBAAO;AAAA,cACH,QAAQ;AAAA,cACR,OAAO,SAAS;AAAA,YACpB;AAAA,UACJ,OACK;AACD,mBAAO,KAAK,KAAK,IAAI,WAAW;AAAA,cAC5B,MAAM,SAAS;AAAA,cACf,MAAM,IAAI;AAAA,cACV,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,OAAO,OAAOT,IAAG,GAAG;AAChB,eAAO,IAAI,aAAY;AAAA,UACnB,IAAIA;AAAA,UACJ,KAAK;AAAA,UACL,UAAU,sBAAsB;AAAA,QACpC,CAAC;AAAA,MACL;AAAA,IACJ;AACO,IAAM,cAAN,cAA0B,QAAQ;AAAA,MACrC,OAAO,OAAO;AACV,cAAM,SAAS,KAAK,KAAK,UAAU,OAAO,KAAK;AAC/C,cAAM,SAAS,CAAC,SAAS;AACrB,cAAI,QAAQ,IAAI,GAAG;AACf,iBAAK,QAAQ,OAAO,OAAO,KAAK,KAAK;AAAA,UACzC;AACA,iBAAO;AAAA,QACX;AACA,eAAO,QAAQ,MAAM,IAAI,OAAO,KAAK,CAAC,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,MAAM;AAAA,MAChF;AAAA,MACA,SAAS;AACL,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,IACJ;AACA,gBAAY,SAAS,CAAC,MAAM,WAAW;AACnC,aAAO,IAAI,YAAY;AAAA,QACnB,WAAW;AAAA,QACX,UAAU,sBAAsB;AAAA,QAChC,GAAG,oBAAoB,MAAM;AAAA,MACjC,CAAC;AAAA,IACL;AA+CO,IAAM,OAAO;AAAA,MAChB,QAAQ,UAAU;AAAA,IACtB;AAEA,KAAC,SAAUa,wBAAuB;AAC9B,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,cAAc,IAAI;AACxC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,uBAAuB,IAAI;AACjD,MAAAA,uBAAsB,iBAAiB,IAAI;AAC3C,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,WAAW,IAAI;AACrC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,QAAQ,IAAI;AAClC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,SAAS,IAAI;AACnC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,eAAe,IAAI;AACzC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,UAAU,IAAI;AACpC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,YAAY,IAAI;AACtC,MAAAA,uBAAsB,aAAa,IAAI;AACvC,MAAAA,uBAAsB,aAAa,IAAI;AAAA,IAC3C,GAAG,0BAA0B,wBAAwB,CAAC,EAAE;AAKxD,IAAM,iBAAiB,CAEvB,KAAK,SAAS;AAAA,MACV,SAAS,yBAAyB,IAAI,IAAI;AAAA,IAC9C,MAAM,OAAO,CAAC,SAAS,gBAAgB,KAAK,MAAM;AAClD,IAAM,aAAa,UAAU;AAC7B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,aAAa,UAAU;AAC7B,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,aAAa,UAAU;AAC7B,IAAM,gBAAgB,aAAa;AACnC,IAAM,WAAW,QAAQ;AACzB,IAAM,UAAU,OAAO;AACvB,IAAM,cAAc,WAAW;AAC/B,IAAM,YAAY,SAAS;AAC3B,IAAM,WAAW,QAAQ;AACzB,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,mBAAmB,UAAU;AACnC,IAAM,YAAY,SAAS;AAC3B,IAAM,yBAAyB,sBAAsB;AACrD,IAAM,mBAAmB,gBAAgB;AACzC,IAAM,YAAY,SAAS;AAC3B,IAAM,aAAa,UAAU;AAC7B,IAAM,UAAU,OAAO;AACvB,IAAM,UAAU,OAAO;AACvB,IAAM,eAAe,YAAY;AACjC,IAAM,WAAW,QAAQ;AACzB,IAAM,cAAc,WAAW;AAC/B,IAAM,WAAW,QAAQ;AACzB,IAAM,iBAAiB,cAAc;AACrC,IAAM,cAAc,WAAW;AAC/B,IAAM,cAAc,WAAW;AAC/B,IAAM,eAAe,YAAY;AACjC,IAAM,eAAe,YAAY;AACjC,IAAM,iBAAiB,WAAW;AAClC,IAAM,eAAe,YAAY;AACjC,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,UAAU,MAAM,WAAW,EAAE,SAAS;AAC5C,IAAM,WAAW,MAAM,YAAY,EAAE,SAAS;AACvC,IAAM,SAAS;AAAA,MAClB,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,UAAU,CAAC,QAAQ,WAAW,OAAO;AAAA,QACjC,GAAG;AAAA,QACH,QAAQ;AAAA,MACZ,CAAC;AAAA,MACD,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC3D,OAAO,CAAC,QAAQ,QAAQ,OAAO,EAAE,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,IAC3D;AAEO,IAAM,QAAQ;AAAA;AAAA;;;AC5mHrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACLA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU;AACjB,UAAM,OAAO;AAEb,QAAIC,OAAK,QAAQ,IAAI;AAErB,aAAS,aAAcC,QAAM,SAAS;AACpC,UAAI,UAAU,QAAQ,YAAY,SAChC,QAAQ,UAAU,QAAQ,IAAI;AAEhC,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,MACT;AAEA,gBAAU,QAAQ,MAAM,GAAG;AAC3B,UAAI,QAAQ,QAAQ,EAAE,MAAM,IAAI;AAC9B,eAAO;AAAA,MACT;AACA,eAASC,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACvC,YAAI,IAAI,QAAQA,EAAC,EAAE,YAAY;AAC/B,YAAI,KAAKD,OAAK,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,MAAM,GAAG;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,UAAW,MAAMA,QAAM,SAAS;AACvC,UAAI,CAAC,KAAK,eAAe,KAAK,CAAC,KAAK,OAAO,GAAG;AAC5C,eAAO;AAAA,MACT;AACA,aAAO,aAAaA,QAAM,OAAO;AAAA,IACnC;AAEA,aAAS,MAAOA,QAAM,SAAS,IAAI;AACjC,MAAAD,KAAG,KAAKC,QAAM,SAAU,IAAI,MAAM;AAChC,WAAG,IAAI,KAAK,QAAQ,UAAU,MAAMA,QAAM,OAAO,CAAC;AAAA,MACpD,CAAC;AAAA,IACH;AAEA,aAAS,KAAMA,QAAM,SAAS;AAC5B,aAAO,UAAUD,KAAG,SAASC,MAAI,GAAGA,QAAM,OAAO;AAAA,IACnD;AAAA;AAAA;;;ACzCA;AAAA,+BAAAE,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU;AACjB,UAAM,OAAO;AAEb,QAAIC,OAAK,QAAQ,IAAI;AAErB,aAAS,MAAOC,QAAM,SAAS,IAAI;AACjC,MAAAD,KAAG,KAAKC,QAAM,SAAU,IAAI,MAAM;AAChC,WAAG,IAAI,KAAK,QAAQ,UAAU,MAAM,OAAO,CAAC;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,aAAS,KAAMA,QAAM,SAAS;AAC5B,aAAO,UAAUD,KAAG,SAASC,MAAI,GAAG,OAAO;AAAA,IAC7C;AAEA,aAAS,UAAW,MAAM,SAAS;AACjC,aAAO,KAAK,OAAO,KAAK,UAAU,MAAM,OAAO;AAAA,IACjD;AAEA,aAAS,UAAW,MAAM,SAAS;AACjC,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK;AAEf,UAAI,QAAQ,QAAQ,QAAQ,SAC1B,QAAQ,MAAM,QAAQ,UAAU,QAAQ,OAAO;AACjD,UAAI,QAAQ,QAAQ,QAAQ,SAC1B,QAAQ,MAAM,QAAQ,UAAU,QAAQ,OAAO;AAEjD,UAAIC,KAAI,SAAS,OAAO,CAAC;AACzB,UAAI,IAAI,SAAS,OAAO,CAAC;AACzB,UAAIC,KAAI,SAAS,OAAO,CAAC;AACzB,UAAI,KAAKD,KAAI;AAEb,UAAI,MAAO,MAAMC,MACd,MAAM,KAAM,QAAQ,SACpB,MAAMD,MAAM,QAAQ,SACpB,MAAM,MAAO,UAAU;AAE1B,aAAO;AAAA,IACT;AAAA;AAAA;;;ACxCA;AAAA,gCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAIC,OAAK,QAAQ,IAAI;AACrB,QAAI;AACJ,QAAI,QAAQ,aAAa,WAAW,OAAO,iBAAiB;AAC1D,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AACjB,UAAM,OAAO;AAEb,aAAS,MAAOE,QAAM,SAAS,IAAI;AACjC,UAAI,OAAO,YAAY,YAAY;AACjC,aAAK;AACL,kBAAU,CAAC;AAAA,MACb;AAEA,UAAI,CAAC,IAAI;AACP,YAAI,OAAO,YAAY,YAAY;AACjC,gBAAM,IAAI,UAAU,uBAAuB;AAAA,QAC7C;AAEA,eAAO,IAAI,QAAQ,SAAU,SAASC,SAAQ;AAC5C,gBAAMD,QAAM,WAAW,CAAC,GAAG,SAAU,IAAI,IAAI;AAC3C,gBAAI,IAAI;AACN,cAAAC,QAAO,EAAE;AAAA,YACX,OAAO;AACL,sBAAQ,EAAE;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAEA,WAAKD,QAAM,WAAW,CAAC,GAAG,SAAU,IAAI,IAAI;AAE1C,YAAI,IAAI;AACN,cAAI,GAAG,SAAS,YAAY,WAAW,QAAQ,cAAc;AAC3D,iBAAK;AACL,iBAAK;AAAA,UACP;AAAA,QACF;AACA,WAAG,IAAI,EAAE;AAAA,MACX,CAAC;AAAA,IACH;AAEA,aAAS,KAAMA,QAAM,SAAS;AAE5B,UAAI;AACF,eAAO,KAAK,KAAKA,QAAM,WAAW,CAAC,CAAC;AAAA,MACtC,SAAS,IAAI;AACX,YAAI,WAAW,QAAQ,gBAAgB,GAAG,SAAS,UAAU;AAC3D,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxDA;AAAA,gCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAM,YAAY,QAAQ,aAAa,WACnC,QAAQ,IAAI,WAAW,YACvB,QAAQ,IAAI,WAAW;AAE3B,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,QAAQ,YAAY,MAAM;AAChC,QAAM,QAAQ;AAEd,QAAM,mBAAmB,CAAC,QACxB,OAAO,OAAO,IAAI,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAElE,QAAM,cAAc,CAAC,KAAK,QAAQ;AAChC,YAAM,QAAQ,IAAI,SAAS;AAI3B,YAAM,UAAU,IAAI,MAAM,IAAI,KAAK,aAAa,IAAI,MAAM,IAAI,IAAI,CAAC,EAAE,IAEjE;AAAA;AAAA,QAEE,GAAI,YAAY,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC;AAAA,QACnC,IAAI,IAAI,QAAQ,QAAQ,IAAI;AAAA,QACe,IAAI,MAAM,KAAK;AAAA,MAC5D;AAEJ,YAAM,aAAa,YACf,IAAI,WAAW,QAAQ,IAAI,WAAW,wBACtC;AACJ,YAAM,UAAU,YAAY,WAAW,MAAM,KAAK,IAAI,CAAC,EAAE;AAEzD,UAAI,WAAW;AACb,YAAI,IAAI,QAAQ,GAAG,MAAM,MAAM,QAAQ,CAAC,MAAM;AAC5C,kBAAQ,QAAQ,EAAE;AAAA,MACtB;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAM,QAAQ,CAAC,KAAK,KAAK,OAAO;AAC9B,UAAI,OAAO,QAAQ,YAAY;AAC7B,aAAK;AACL,cAAM,CAAC;AAAA,MACT;AACA,UAAI,CAAC;AACH,cAAM,CAAC;AAET,YAAM,EAAE,SAAS,SAAS,WAAW,IAAI,YAAY,KAAK,GAAG;AAC7D,YAAM,QAAQ,CAAC;AAEf,YAAM,OAAO,CAAAC,OAAK,IAAI,QAAQ,CAAC,SAASC,YAAW;AACjD,YAAID,OAAM,QAAQ;AAChB,iBAAO,IAAI,OAAO,MAAM,SAAS,QAAQ,KAAK,IAC1CC,QAAO,iBAAiB,GAAG,CAAC;AAElC,cAAM,QAAQ,QAAQD,EAAC;AACvB,cAAM,WAAW,SAAS,KAAK,KAAK,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI;AAE7D,cAAM,OAAOD,OAAK,KAAK,UAAU,GAAG;AACpC,cAAM,IAAI,CAAC,YAAY,YAAY,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,OAC7D;AAEJ,gBAAQ,QAAQ,GAAGC,IAAG,CAAC,CAAC;AAAA,MAC1B,CAAC;AAED,YAAM,UAAU,CAAC,GAAGA,IAAG,OAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AAC7D,YAAI,OAAO,QAAQ;AACjB,iBAAO,QAAQ,KAAKD,KAAI,CAAC,CAAC;AAC5B,cAAM,MAAM,QAAQ,EAAE;AACtB,cAAM,IAAI,KAAK,EAAE,SAAS,WAAW,GAAG,CAAC,IAAI,OAAO;AAClD,cAAI,CAAC,MAAM,IAAI;AACb,gBAAI,IAAI;AACN,oBAAM,KAAK,IAAI,GAAG;AAAA;AAElB,qBAAO,QAAQ,IAAI,GAAG;AAAA,UAC1B;AACA,iBAAO,QAAQ,QAAQ,GAAGA,IAAG,KAAK,CAAC,CAAC;AAAA,QACtC,CAAC;AAAA,MACH,CAAC;AAED,aAAO,KAAK,KAAK,CAAC,EAAE,KAAK,SAAO,GAAG,MAAM,GAAG,GAAG,EAAE,IAAI,KAAK,CAAC;AAAA,IAC7D;AAEA,QAAM,YAAY,CAAC,KAAK,QAAQ;AAC9B,YAAM,OAAO,CAAC;AAEd,YAAM,EAAE,SAAS,SAAS,WAAW,IAAI,YAAY,KAAK,GAAG;AAC7D,YAAM,QAAQ,CAAC;AAEf,eAASA,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAM;AACxC,cAAM,QAAQ,QAAQA,EAAC;AACvB,cAAM,WAAW,SAAS,KAAK,KAAK,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI;AAE7D,cAAM,OAAOD,OAAK,KAAK,UAAU,GAAG;AACpC,cAAM,IAAI,CAAC,YAAY,YAAY,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,OAC7D;AAEJ,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAM;AACxC,gBAAM,MAAM,IAAI,QAAQ,CAAC;AACzB,cAAI;AACF,kBAAM,KAAK,MAAM,KAAK,KAAK,EAAE,SAAS,WAAW,CAAC;AAClD,gBAAI,IAAI;AACN,kBAAI,IAAI;AACN,sBAAM,KAAK,GAAG;AAAA;AAEd,uBAAO;AAAA,YACX;AAAA,UACF,SAAS,IAAI;AAAA,UAAC;AAAA,QAChB;AAAA,MACF;AAEA,UAAI,IAAI,OAAO,MAAM;AACnB,eAAO;AAET,UAAI,IAAI;AACN,eAAO;AAET,YAAM,iBAAiB,GAAG;AAAA,IAC5B;AAEA,IAAAD,QAAO,UAAU;AACjB,UAAM,OAAO;AAAA;AAAA;;;AC5Hb;AAAA,mCAAAI,UAAAC,SAAA;AAAA;AAEA,QAAMC,WAAU,CAAC,UAAU,CAAC,MAAM;AACjC,YAAM,cAAc,QAAQ,OAAO,QAAQ;AAC3C,YAAMC,YAAW,QAAQ,YAAY,QAAQ;AAE7C,UAAIA,cAAa,SAAS;AACzB,eAAO;AAAA,MACR;AAEA,aAAO,OAAO,KAAK,WAAW,EAAE,QAAQ,EAAE,KAAK,SAAO,IAAI,YAAY,MAAM,MAAM,KAAK;AAAA,IACxF;AAEA,IAAAF,QAAO,UAAUC;AAEjB,IAAAD,QAAO,QAAQ,UAAUC;AAAA;AAAA;;;ACfzB;AAAA,wDAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,QAAQ;AACd,QAAM,aAAa;AAEnB,aAAS,sBAAsB,QAAQ,gBAAgB;AACnD,YAAM,MAAM,OAAO,QAAQ,OAAO,QAAQ;AAC1C,YAAM,MAAM,QAAQ,IAAI;AACxB,YAAM,eAAe,OAAO,QAAQ,OAAO;AAE3C,YAAM,kBAAkB,gBAAgB,QAAQ,UAAU,UAAa,CAAC,QAAQ,MAAM;AAItF,UAAI,iBAAiB;AACjB,YAAI;AACA,kBAAQ,MAAM,OAAO,QAAQ,GAAG;AAAA,QACpC,SAAS,KAAK;AAAA,QAEd;AAAA,MACJ;AAEA,UAAI;AAEJ,UAAI;AACA,mBAAW,MAAM,KAAK,OAAO,SAAS;AAAA,UAClC,MAAM,IAAI,WAAW,EAAE,IAAI,CAAC,CAAC;AAAA,UAC7B,SAAS,iBAAiBA,OAAK,YAAY;AAAA,QAC/C,CAAC;AAAA,MACL,SAAS,GAAG;AAAA,MAEZ,UAAE;AACE,YAAI,iBAAiB;AACjB,kBAAQ,MAAM,GAAG;AAAA,QACrB;AAAA,MACJ;AAIA,UAAI,UAAU;AACV,mBAAWA,OAAK,QAAQ,eAAe,OAAO,QAAQ,MAAM,IAAI,QAAQ;AAAA,MAC5E;AAEA,aAAO;AAAA,IACX;AAEA,aAAS,eAAe,QAAQ;AAC5B,aAAO,sBAAsB,MAAM,KAAK,sBAAsB,QAAQ,IAAI;AAAA,IAC9E;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACnDjB;AAAA,gDAAAE,UAAAC,SAAA;AAAA;AAGA,QAAM,kBAAkB;AAExB,aAAS,cAAc,KAAK;AAExB,YAAM,IAAI,QAAQ,iBAAiB,KAAK;AAExC,aAAO;AAAA,IACX;AAEA,aAAS,eAAe,KAAK,uBAAuB;AAEhD,YAAM,GAAG,GAAG;AAQZ,YAAM,IAAI,QAAQ,mBAAmB,SAAS;AAK9C,YAAM,IAAI,QAAQ,kBAAkB,MAAM;AAK1C,YAAM,IAAI,GAAG;AAGb,YAAM,IAAI,QAAQ,iBAAiB,KAAK;AAGxC,UAAI,uBAAuB;AACvB,cAAM,IAAI,QAAQ,iBAAiB,KAAK;AAAA,MAC5C;AAEA,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,UAAU;AACzB,IAAAA,QAAO,QAAQ,WAAW;AAAA;AAAA;;;AC9C1B;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AACA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACDjB;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AACA,QAAM,eAAe;AAErB,IAAAA,QAAO,UAAU,CAAC,SAAS,OAAO;AACjC,YAAM,QAAQ,OAAO,MAAM,YAAY;AAEvC,UAAI,CAAC,OAAO;AACX,eAAO;AAAA,MACR;AAEA,YAAM,CAACC,QAAM,QAAQ,IAAI,MAAM,CAAC,EAAE,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG;AAC/D,YAAM,SAASA,OAAK,MAAM,GAAG,EAAE,IAAI;AAEnC,UAAI,WAAW,OAAO;AACrB,eAAO;AAAA,MACR;AAEA,aAAO,WAAW,GAAG,MAAM,IAAI,QAAQ,KAAK;AAAA,IAC7C;AAAA;AAAA;;;AClBA;AAAA,qDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK,QAAQ,IAAI;AACvB,QAAM,iBAAiB;AAEvB,aAAS,YAAY,SAAS;AAE1B,YAAM,OAAO;AACb,YAAM,SAAS,OAAO,MAAM,IAAI;AAEhC,UAAI;AAEJ,UAAI;AACA,aAAKA,KAAG,SAAS,SAAS,GAAG;AAC7B,QAAAA,KAAG,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC;AAClC,QAAAA,KAAG,UAAU,EAAE;AAAA,MACnB,SAAS,GAAG;AAAA,MAAc;AAG1B,aAAO,eAAe,OAAO,SAAS,CAAC;AAAA,IAC3C;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA,0CAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,iBAAiB;AACvB,QAAM,SAAS;AACf,QAAM,cAAc;AAEpB,QAAM,QAAQ,QAAQ,aAAa;AACnC,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB;AAExB,aAAS,cAAc,QAAQ;AAC3B,aAAO,OAAO,eAAe,MAAM;AAEnC,YAAM,UAAU,OAAO,QAAQ,YAAY,OAAO,IAAI;AAEtD,UAAI,SAAS;AACT,eAAO,KAAK,QAAQ,OAAO,IAAI;AAC/B,eAAO,UAAU;AAEjB,eAAO,eAAe,MAAM;AAAA,MAChC;AAEA,aAAO,OAAO;AAAA,IAClB;AAEA,aAAS,cAAc,QAAQ;AAC3B,UAAI,CAAC,OAAO;AACR,eAAO;AAAA,MACX;AAGA,YAAM,cAAc,cAAc,MAAM;AAGxC,YAAM,aAAa,CAAC,mBAAmB,KAAK,WAAW;AAIvD,UAAI,OAAO,QAAQ,cAAc,YAAY;AAKzC,cAAM,6BAA6B,gBAAgB,KAAK,WAAW;AAInE,eAAO,UAAUA,OAAK,UAAU,OAAO,OAAO;AAG9C,eAAO,UAAU,OAAO,QAAQ,OAAO,OAAO;AAC9C,eAAO,OAAO,OAAO,KAAK,IAAI,CAAC,QAAQ,OAAO,SAAS,KAAK,0BAA0B,CAAC;AAEvF,cAAM,eAAe,CAAC,OAAO,OAAO,EAAE,OAAO,OAAO,IAAI,EAAE,KAAK,GAAG;AAElE,eAAO,OAAO,CAAC,MAAM,MAAM,MAAM,IAAI,YAAY,GAAG;AACpD,eAAO,UAAU,QAAQ,IAAI,WAAW;AACxC,eAAO,QAAQ,2BAA2B;AAAA,MAC9C;AAEA,aAAO;AAAA,IACX;AAEA,aAAS,MAAM,SAAS,MAAM,SAAS;AAEnC,UAAI,QAAQ,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC9B,kBAAU;AACV,eAAO;AAAA,MACX;AAEA,aAAO,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAC/B,gBAAU,OAAO,OAAO,CAAC,GAAG,OAAO;AAGnC,YAAM,SAAS;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,UACN;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAGA,aAAO,QAAQ,QAAQ,SAAS,cAAc,MAAM;AAAA,IACxD;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC1FjB;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ,QAAQ,aAAa;AAEnC,aAAS,cAAc,UAAU,SAAS;AACtC,aAAO,OAAO,OAAO,IAAI,MAAM,GAAG,OAAO,IAAI,SAAS,OAAO,SAAS,GAAG;AAAA,QACrE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS,GAAG,OAAO,IAAI,SAAS,OAAO;AAAA,QACvC,MAAM,SAAS;AAAA,QACf,WAAW,SAAS;AAAA,MACxB,CAAC;AAAA,IACL;AAEA,aAAS,iBAAiB,IAAI,QAAQ;AAClC,UAAI,CAAC,OAAO;AACR;AAAA,MACJ;AAEA,YAAM,eAAe,GAAG;AAExB,SAAG,OAAO,SAAU,MAAM,MAAM;AAI5B,YAAI,SAAS,QAAQ;AACjB,gBAAM,MAAM,aAAa,MAAM,MAAM;AAErC,cAAI,KAAK;AACL,mBAAO,aAAa,KAAK,IAAI,SAAS,GAAG;AAAA,UAC7C;AAAA,QACJ;AAEA,eAAO,aAAa,MAAM,IAAI,SAAS;AAAA,MAC3C;AAAA,IACJ;AAEA,aAAS,aAAa,QAAQ,QAAQ;AAClC,UAAI,SAAS,WAAW,KAAK,CAAC,OAAO,MAAM;AACvC,eAAO,cAAc,OAAO,UAAU,OAAO;AAAA,MACjD;AAEA,aAAO;AAAA,IACX;AAEA,aAAS,iBAAiB,QAAQ,QAAQ;AACtC,UAAI,SAAS,WAAW,KAAK,CAAC,OAAO,MAAM;AACvC,eAAO,cAAc,OAAO,UAAU,WAAW;AAAA,MACrD;AAEA,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,UAAU;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA;AAAA;;;AC1DA;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,KAAK,QAAQ,eAAe;AAClC,QAAM,QAAQ;AACd,QAAM,SAAS;AAEf,aAASC,OAAM,SAAS,MAAM,SAAS;AAEnC,YAAM,SAAS,MAAM,SAAS,MAAM,OAAO;AAG3C,YAAM,UAAU,GAAG,MAAM,OAAO,SAAS,OAAO,MAAM,OAAO,OAAO;AAIpE,aAAO,iBAAiB,SAAS,MAAM;AAEvC,aAAO;AAAA,IACX;AAEA,aAASC,WAAU,SAAS,MAAM,SAAS;AAEvC,YAAM,SAAS,MAAM,SAAS,MAAM,OAAO;AAG3C,YAAM,SAAS,GAAG,UAAU,OAAO,SAAS,OAAO,MAAM,OAAO,OAAO;AAGvE,aAAO,QAAQ,OAAO,SAAS,OAAO,iBAAiB,OAAO,QAAQ,MAAM;AAE5E,aAAO;AAAA,IACX;AAEA,IAAAF,QAAO,UAAUC;AACjB,IAAAD,QAAO,QAAQ,QAAQC;AACvB,IAAAD,QAAO,QAAQ,OAAOE;AAEtB,IAAAF,QAAO,QAAQ,SAAS;AACxB,IAAAA,QAAO,QAAQ,UAAU;AAAA;AAAA;;;ACTzB,SAAS,kBAAkB,MAAM;AAC/B,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI,YAAY;AAChB,SAAO,eAAe,gBAAgB,IAAI;AACxC,QAAI,WAAW;AACb,YAAM,UAAU,MAAM,MAAM;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,UAAM,OAAO,YAAY;AACvB,YAAM,QAAQ,KAAK,IAAI;AACvB,aAAO,MAAM;AACX,YAAI;AACF,gBAAM,kBAAAG,QAAG,MAAM,aAAAC,QAAK,QAAQ,KAAK,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/D,gBAAM,KAAK,MAAM,kBAAAD,QAAG,KAAK,KAAK,UAAU,IAAI;AAC5C,cAAI;AACF,kBAAM,GAAG,UAAU,GAAG,QAAQ,GAAG;AAAA,EAC3C,KAAK,IAAI,CAAC;AAAA,EACV,WAAAE,QAAG,SAAS,CAAC;AAAA,CACd;AAAA,UACS,UAAE;AACA,kBAAM,GAAG,MAAM,EAAE,MAAM,MAAM;AAAA,YAC7B,CAAC;AAAA,UACH;AACA,cAAI;AACF,mBAAO,MAAM,GAAG;AAAA,UAClB,UAAE;AACA,kBAAM,kBAAAF,QAAG,OAAO,KAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,YAC3C,CAAC;AAAA,UACH;AAAA,QACF,SAAS,KAAK;AACZ,gBAAM,OAAO,KAAK;AAClB,cAAI,SAAS,SAAU,OAAM;AAC7B,gBAAM,OAAO,MAAM,kBAAAA,QAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,MAAM,IAAI;AAC1D,cAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,UAAU,SAAS;AAC/C,kBAAM,kBAAAA,QAAG,OAAO,KAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,YAC3C,CAAC;AACD;AAAA,UACF;AACA,cAAI,KAAK,IAAI,IAAI,QAAQ,WAAW;AAClC,mBAAO,MAAM,GAAG;AAAA,UAClB;AACA,gBAAM,MAAM,MAAM;AAAA,QACpB;AAAA,MACF;AAAA,IACF,GAAG;AACH,gBAAY;AACZ,QAAI;AACF,aAAO,MAAM;AAAA,IACf,UAAE;AACA,UAAI,cAAc,IAAK,aAAY;AAAA,IACrC;AAAA,EACF;AACF;AACA,SAAS,MAAM,IAAI;AACjB,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAIA,SAAS,gBAAgB;AACvB,QAAM,QAAQ,QAAQ,IAAI;AAC1B,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAG,QAAO;AACtD,SAAO,YAAAG,QAAM,KAAK,UAAAC,QAAI,QAAQ,GAAG,SAAS;AAC5C;AA4FA,SAAS,yBAAyB;AAChC,SAAO,YAAAD,QAAM,KAAK,cAAc,GAAG,SAAS,cAAc;AAC5D;AACA,SAAS,yBAAyB,UAAU;AAC1C,QAAM,SAAS,UAAU,KAAK,KAAK,uBAAuB;AAC1D,SAAO,kBAAkB,EAAE,UAAU,GAAG,MAAM,QAAQ,CAAC;AACzD;AAKA,SAAS,eAAe,KAAK;AAC3B,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,IAAI;AACV,QAAM,OAAO,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AACnD,QAAM,QAAQ,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;AACtD,QAAM,MAAM,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AACxD,MAAI,QAAQ,qBAAqB,KAAK,IAAI,EAAG,QAAO;AACpD,MAAI,SAAS,qBAAqB,KAAK,KAAK,EAAG,QAAO;AACtD,MAAI,EAAE,SAAS,eAAe,wBAAwB,KAAK,GAAG,EAAG,QAAO;AACxE,MAAI,EAAE,SAAS,aAAc,QAAO;AACpC,MAAI,wBAAwB,KAAK,GAAG,EAAG,QAAO;AAC9C,MAAI,EAAE,MAAO,QAAO,eAAe,EAAE,KAAK;AAC1C,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAK;AAChC,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,IAAI;AACV,QAAM,OAAO,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AACnD,QAAM,MAAM,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AACxD,MAAI,SAAS,mBAAmB,SAAS,0BAA2B,QAAO;AAC3E,MAAI,8BAA8B,KAAK,GAAG,EAAG,QAAO;AACpD,MAAI,EAAE,MAAO,QAAO,oBAAoB,EAAE,KAAK;AAC/C,SAAO;AACT;AAGA,SAAS,wBAAwB;AAC/B,aAAW,SAAS,CAAC,QAAQ,IAAI,oBAAoB,QAAQ,IAAI,oBAAoB,GAAG;AACtF,QAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,EAAG,QAAO,MAAM,KAAK;AAAA,EAC9E;AACA,SAAO;AACT;AACA,SAAS,kBAAkB,SAAS,cAAc,IAAI;AACpD,QAAM,SAAS,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG;AAC1C,SAAO,QAAQ,cAAc,SAAS;AACxC;AACA,SAAS,iCAAiC,QAAQ;AAChD,QAAM,WAAW,OAAO,oBAAoB,OAAO,OAAO,GAAG;AAC7D,SAAO,OAAO,SAAS;AACrB,UAAM,eAAe,QAAQ,MAAM,YAAY;AAC/C,UAAM,WAAW,sBAAsB;AACvC,QAAI,UAAU;AACZ,aAAO,EAAE,OAAO,UAAU,SAAS,MAAM,SAAS,KAAK;AAAA,IACzD;AACA,QAAI,UAAU,MAAM,OAAO,aAAa,WAAW;AACnD,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,WAAW,kBAAkB;AAAA,QACrC,UAAU;AAAA,QACV,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,QAAI,gBAAgB,kBAAkB,OAAO,GAAG;AAC9C,YAAM,iBAAiB;AACvB,UAAI;AACF,kBAAU,MAAM,SAAS,YAAY;AACnC,gBAAM,SAAS,MAAM,OAAO,aAAa,WAAW;AACpD,gBAAM,OAAO,UAAU;AACvB,cAAI,CAAC,MAAM;AACT,kBAAM,IAAI,WAAW,kBAAkB;AAAA,cACrC,UAAU;AAAA,cACV,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AACA,gBAAM,mBAAmB,UAAU,QAAQ,OAAO,iBAAiB,eAAe;AAClF,cAAI,oBAAoB,CAAC,gBAAgB,CAAC,kBAAkB,MAAM,CAAC,GAAG;AACpE,mBAAO;AAAA,UACT;AACA,gBAAM,YAAY,MAAM,OAAO,qBAAqB;AAAA,YAClD,QAAQ,OAAO;AAAA,YACf,SAAS;AAAA,UACX,CAAC;AACD,gBAAM,OAAO,aAAa,WAAW,SAAS;AAC9C,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,YAAI,oBAAoB,GAAG,GAAG;AAC5B,gBAAM,IAAI,WAAW,0CAA0C;AAAA,YAC7D,UAAU;AAAA,YACV,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AACA,YAAI,eAAe,GAAG,GAAG;AAAA,QACzB,OAAO;AAAA,QACP;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAE,OAAO,QAAQ,cAAc,SAAS,SAAS,MAAM;AAAA,EAChE;AACF;AAYA,SAAS,SAAS,OAAO;AACvB,SAAO,QAAQ,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,CAAC;AAC5E;AACA,SAAS,sBAAsB,OAAO;AACpC,SAAO,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS;AAClD;AACA,eAAe,YAAY,QAAQE,SAAO,MAAM,SAAS;AACvD,QAAM,WAAW,MAAM,MAAM,IAAI,IAAIA,SAAO,OAAO,MAAM,GAAG;AAAA,IAC1D,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,oBAAoB,kBAAkB,YAAY;AAAA,IAC7E,GAAG,SAAS,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IAClE,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AACD,QAAM,UAAU,MAAM,SAAS,KAAK;AACpC,MAAI,SAAS,WAAW,OAAO,CAAC,QAAQ,WAAW,sBAAsB,QAAQ,cAAc,GAAG;AAChG,UAAM,IAAI;AAAA,MACR,QAAQ,WAAW,QAAQ,eAAe,WAAW;AAAA,MACrD;AAAA,QACE,GAAG,QAAQ;AAAA,QACX,SAAS,QAAQ,eAAe,WAAW,QAAQ,WAAW;AAAA,MAChE;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACA,MAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,WAAW,QAAQ,kBAAkB,MAAM;AACtE,UAAM,IAAI,WAAW,QAAQ,WAAW,4CAA4C,SAAS,MAAM,KAAK;AAAA,MACtG,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACA,SAAO,QAAQ;AACjB;AACA,SAAS,gBAAgB,SAAS;AAChC,MAAI,CAAC,QAAQ,eAAe,CAAC,QAAQ,cAAc;AACjD,UAAM,IAAI,WAAW,8CAA8C,EAAE,UAAU,EAAE,CAAC;AAAA,EACpF;AACA,QAAM,YAAY,OAAO,SAAS,QAAQ,SAAS,KAAK,QAAQ,YAAY,QAAQ,YAAY,KAAK;AACrG,SAAO;AAAA,IACL,cAAc,QAAQ;AAAA,IACtB,eAAe,QAAQ;AAAA,IACvB,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,IAAI;AAAA,IAC3C,YAAY,QAAQ,aAAa;AAAA,IACjC,MAAM,QAAQ,MAAM,KAAK,EAAE,IAAI,QAAQ,KAAK,IAAI,OAAO,QAAQ,KAAK,SAAS,KAAK,IAAI;AAAA,EACxF;AACF;AACA,SAAS,iBAAiB;AACxB,QAAM,eAAe,cAAAC,QAAO,YAAY,EAAE,EAAE,SAAS,WAAW;AAChE,QAAM,gBAAgB,cAAAA,QAAO,WAAW,QAAQ,EAAE,OAAO,YAAY,EAAE,OAAO,WAAW;AACzF,SAAO,EAAE,cAAc,cAAc;AACvC;AACA,SAAS,yBAAyB,YAAY;AAC5C,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,QAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACzD,aAAO,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI;AAAA,IAChD;AAAA,EACF,QAAQ;AAAA,EACR;AACA,SAAO;AACT;AACA,SAAS,uBAAuB,QAAQ;AACtC,iBAAe,WAAW,QAAQ;AAChC,UAAMD,UAAQ,OAAO,QAAQ,2BAA2B;AACxD,UAAM,OAAO,OAAO,QAAQ,eAAe,IAAI;AAC/C,UAAM,OAAO,OAAO,QAAQ,EAAE,UAAU,OAAO,YAAY,OAAO,OAAO,OAAO,eAAe,MAAM,eAAe,UAAU,OAAO,YAAY,UAAU,IAAI,EAAE,UAAU,yBAAyB,OAAO,UAAU,GAAG,UAAU,OAAO,YAAY,UAAU;AAC/P,UAAM,SAAS,MAAM,YAAY,QAAQA,SAAO,MAAM,OAAO,QAAQ,SAAS,EAAE,aAAa,UAAU,CAAC;AACxG,QAAI,CAAC,OAAO,IAAK,OAAM,IAAI,WAAW,6CAA6C,EAAE,UAAU,EAAE,CAAC;AAClG,WAAO,OAAO,EAAE,KAAK,OAAO,KAAK,cAAc,KAAK,aAAa,IAAI,EAAE,KAAK,OAAO,IAAI;AAAA,EACzF;AACA,SAAO;AAAA,IACL;AAAA,IACA,MAAM,kBAAkB,QAAQ;AAC9B,aAAO,WAAW,EAAE,GAAG,QAAQ,UAAU,UAAU,CAAC;AAAA,IACtD;AAAA,IACA,MAAM,iBAAiB,QAAQ;AAC7B,aAAO,WAAW,EAAE,GAAG,QAAQ,UAAU,SAAS,CAAC;AAAA,IACrD;AAAA,IACA,MAAM,iBAAiB,QAAQ;AAC7B,aAAO,WAAW,EAAE,GAAG,QAAQ,UAAU,SAAS,CAAC;AAAA,IACrD;AAAA,IACA,MAAM,aAAa,QAAQ;AACzB,YAAM,SAAS,MAAM,YAAY,QAAQ,yBAAyB;AAAA,QAChE,MAAM,OAAO;AAAA,QACb,GAAG,OAAO,eAAe,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACpE,CAAC;AACD,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAAA,IACA,MAAM,uBAAuB,OAAO;AAClC,YAAM,SAAS,MAAM,YAAY,QAAQ,yBAAyB,KAAK;AACvE,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAAA,IACA,MAAM,yBAAyB,QAAQ;AACrC,YAAM,SAAS,MAAM,YAAY,QAAQ,0BAA0B;AAAA,QACjE,cAAc,OAAO,QAAQ;AAAA,MAC/B,CAAC;AACD,aAAO,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EACF;AACF;AA3YA,IAmBA,WACA,aAGAE,mBACAC,YACAC,cAwQA,eA3RI,qBAoBA,kBACA,qBACA,iBAuKA,sBACA,yBAeA,+BA+EA;AAlSJ;AAAA;AAAA;AAAA;AAKA;AAcA,gBAAgB;AAChB,kBAAkB;AAGlB,IAAAF,oBAAe;AACf,IAAAC,aAAe;AACf,IAAAC,eAAiB;AAwQjB,oBAAmB;AA3RnB,IAAI,sBAAsB,iBAAE,OAAO;AAAA,MACjC,cAAc,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC9B,eAAe,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC/B,YAAY,iBAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,MACtC,YAAY,iBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MACvC,MAAM,iBAAE,OAAO;AAAA,QACb,IAAI,iBAAE,OAAO,EAAE,IAAI,CAAC;AAAA,QACpB,OAAO,iBAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;AAAA,MAChD,CAAC,EAAE,SAAS;AAAA,IACd,CAAC;AAWD,IAAI,mBAAmB;AACvB,IAAI,sBAAsB;AAC1B,IAAI,kBAAkB;AAuKtB,IAAI,uBAAuB;AAC3B,IAAI,0BAA0B;AAe9B,IAAI,gCAAgC;AA+EpC,IAAI,6BAA6B,cAAc,WAAW;AAAA,MACxD;AAAA,MACA,YAAY,SAAS,WAAW,YAAY;AAC1C,cAAM,SAAS,EAAE,MAAM,UAAU,MAAM,UAAU,GAAG,WAAW,CAAC;AAChE,aAAK,OAAO;AACZ,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAAA;AAAA;;;ACzSA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;;;ACbA;AAAA,uCAAAC,UAAA;AAAA;AAEA,IAAAA,SAAQ,eAAe,SAAU,IAAI;AACnC,aAAO,OAAO,eAAe,YAAa,MAAM;AAC9C,YAAI,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,WAAY,IAAG,MAAM,MAAM,IAAI;AAAA,aAC/D;AACH,iBAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,iBAAK,KAAK,CAAC,KAAK,QAAS,OAAO,OAAQA,QAAO,GAAG,IAAI,QAAQ,GAAG,CAAC;AAClE,eAAG,MAAM,MAAM,IAAI;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,MACF,GAAG,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;AAAA,IAC/B;AAEA,IAAAD,SAAQ,cAAc,SAAU,IAAI;AAClC,aAAO,OAAO,eAAe,YAAa,MAAM;AAC9C,cAAM,KAAK,KAAK,KAAK,SAAS,CAAC;AAC/B,YAAI,OAAO,OAAO,WAAY,QAAO,GAAG,MAAM,MAAM,IAAI;AAAA,aACnD;AACH,eAAK,IAAI;AACT,aAAG,MAAM,MAAM,IAAI,EAAE,KAAK,OAAK,GAAG,MAAM,CAAC,GAAG,EAAE;AAAA,QAChD;AAAA,MACF,GAAG,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;AAAA,IAC/B;AAAA;AAAA;;;ACvBA;AAAA,0CAAAE,UAAAC,SAAA;AAAA;AAAA,QAAIC,aAAY,QAAQ,WAAW;AAEnC,QAAI,UAAU,QAAQ;AACtB,QAAI,MAAM;AAEV,QAAIC,YAAW,QAAQ,IAAI,wBAAwB,QAAQ;AAE3D,YAAQ,MAAM,WAAW;AACvB,UAAI,CAAC;AACH,cAAM,QAAQ,KAAK,OAAO;AAC5B,aAAO;AAAA,IACT;AACA,QAAI;AACF,cAAQ,IAAI;AAAA,IACd,SAAS,IAAI;AAAA,IAAC;AAGd,QAAI,OAAO,QAAQ,UAAU,YAAY;AACnC,cAAQ,QAAQ;AACpB,cAAQ,QAAQ,SAAU,GAAG;AAC3B,cAAM;AACN,cAAM,KAAK,SAAS,CAAC;AAAA,MACvB;AACA,UAAI,OAAO,eAAgB,QAAO,eAAe,QAAQ,OAAO,KAAK;AAAA,IACvE;AANM;AAQN,IAAAF,QAAO,UAAU;AAEjB,aAAS,MAAOG,MAAI;AAKlB,UAAIF,WAAU,eAAe,WAAW,KACpC,QAAQ,QAAQ,MAAM,wBAAwB,GAAG;AACnD,oBAAYE,IAAE;AAAA,MAChB;AAGA,UAAI,CAACA,KAAG,SAAS;AACf,qBAAaA,IAAE;AAAA,MACjB;AAOA,MAAAA,KAAG,QAAQ,SAASA,KAAG,KAAK;AAC5B,MAAAA,KAAG,SAAS,SAASA,KAAG,MAAM;AAC9B,MAAAA,KAAG,SAAS,SAASA,KAAG,MAAM;AAE9B,MAAAA,KAAG,QAAQ,SAASA,KAAG,KAAK;AAC5B,MAAAA,KAAG,SAAS,SAASA,KAAG,MAAM;AAC9B,MAAAA,KAAG,SAAS,SAASA,KAAG,MAAM;AAE9B,MAAAA,KAAG,YAAY,aAAaA,KAAG,SAAS;AACxC,MAAAA,KAAG,aAAa,aAAaA,KAAG,UAAU;AAC1C,MAAAA,KAAG,aAAa,aAAaA,KAAG,UAAU;AAE1C,MAAAA,KAAG,YAAY,aAAaA,KAAG,SAAS;AACxC,MAAAA,KAAG,aAAa,aAAaA,KAAG,UAAU;AAC1C,MAAAA,KAAG,aAAa,aAAaA,KAAG,UAAU;AAE1C,MAAAA,KAAG,OAAO,QAAQA,KAAG,IAAI;AACzB,MAAAA,KAAG,QAAQ,QAAQA,KAAG,KAAK;AAC3B,MAAAA,KAAG,QAAQ,QAAQA,KAAG,KAAK;AAE3B,MAAAA,KAAG,WAAW,YAAYA,KAAG,QAAQ;AACrC,MAAAA,KAAG,YAAY,YAAYA,KAAG,SAAS;AACvC,MAAAA,KAAG,YAAY,YAAYA,KAAG,SAAS;AAGvC,UAAIA,KAAG,SAAS,CAACA,KAAG,QAAQ;AAC1B,QAAAA,KAAG,SAAS,SAAUC,QAAM,MAAM,IAAI;AACpC,cAAI,GAAI,SAAQ,SAAS,EAAE;AAAA,QAC7B;AACA,QAAAD,KAAG,aAAa,WAAY;AAAA,QAAC;AAAA,MAC/B;AACA,UAAIA,KAAG,SAAS,CAACA,KAAG,QAAQ;AAC1B,QAAAA,KAAG,SAAS,SAAUC,QAAM,KAAK,KAAK,IAAI;AACxC,cAAI,GAAI,SAAQ,SAAS,EAAE;AAAA,QAC7B;AACA,QAAAD,KAAG,aAAa,WAAY;AAAA,QAAC;AAAA,MAC/B;AAWA,UAAID,cAAa,SAAS;AACxB,QAAAC,KAAG,SAAS,OAAOA,KAAG,WAAW,aAAaA,KAAG,UAC9C,SAAU,WAAW;AACtB,mBAAS,OAAQ,MAAM,IAAI,IAAI;AAC7B,gBAAI,QAAQ,KAAK,IAAI;AACrB,gBAAI,UAAU;AACd,sBAAU,MAAM,IAAI,SAAS,GAAI,IAAI;AACnC,kBAAI,OACI,GAAG,SAAS,YAAY,GAAG,SAAS,WAAW,GAAG,SAAS,YAC5D,KAAK,IAAI,IAAI,QAAQ,KAAO;AACjC,2BAAW,WAAW;AACpB,kBAAAA,KAAG,KAAK,IAAI,SAAU,QAAQ,IAAI;AAChC,wBAAI,UAAU,OAAO,SAAS;AAC5B,gCAAU,MAAM,IAAI,EAAE;AAAA;AAEtB,yBAAG,EAAE;AAAA,kBACT,CAAC;AAAA,gBACH,GAAG,OAAO;AACV,oBAAI,UAAU;AACZ,6BAAW;AACb;AAAA,cACF;AACA,kBAAI,GAAI,IAAG,EAAE;AAAA,YACf,CAAC;AAAA,UACH;AACA,cAAI,OAAO,eAAgB,QAAO,eAAe,QAAQ,SAAS;AAClE,iBAAO;AAAA,QACT,GAAGA,KAAG,MAAM;AAAA,MACd;AAGA,MAAAA,KAAG,OAAO,OAAOA,KAAG,SAAS,aAAaA,KAAG,QAC1C,SAAU,SAAS;AACpB,iBAAS,KAAM,IAAI,QAAQ,QAAQ,QAAQ,UAAU,WAAW;AAC9D,cAAI;AACJ,cAAI,aAAa,OAAO,cAAc,YAAY;AAChD,gBAAI,aAAa;AACjB,uBAAW,SAAU,IAAIE,IAAG,IAAI;AAC9B,kBAAI,MAAM,GAAG,SAAS,YAAY,aAAa,IAAI;AACjD;AACA,uBAAO,QAAQ,KAAKF,MAAI,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,cACxE;AACA,wBAAU,MAAM,MAAM,SAAS;AAAA,YACjC;AAAA,UACF;AACA,iBAAO,QAAQ,KAAKA,MAAI,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,QACxE;AAGA,YAAI,OAAO,eAAgB,QAAO,eAAe,MAAM,OAAO;AAC9D,eAAO;AAAA,MACT,GAAGA,KAAG,IAAI;AAEV,MAAAA,KAAG,WAAW,OAAOA,KAAG,aAAa,aAAaA,KAAG,WAClD,0BAAU,aAAa;AAAE,eAAO,SAAU,IAAI,QAAQ,QAAQ,QAAQ,UAAU;AACjF,cAAI,aAAa;AACjB,iBAAO,MAAM;AACX,gBAAI;AACF,qBAAO,YAAY,KAAKA,MAAI,IAAI,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,YAClE,SAAS,IAAI;AACX,kBAAI,GAAG,SAAS,YAAY,aAAa,IAAI;AAC3C;AACA;AAAA,cACF;AACA,oBAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MAAC,GAAGA,KAAG,QAAQ;AAEf,eAAS,YAAaA,MAAI;AACxB,QAAAA,KAAG,SAAS,SAAUC,QAAM,MAAM,UAAU;AAC1C,UAAAD,KAAG;AAAA,YAAMC;AAAA,YACAH,WAAU,WAAWA,WAAU;AAAA,YAC/B;AAAA,YACA,SAAU,KAAK,IAAI;AAC1B,kBAAI,KAAK;AACP,oBAAI,SAAU,UAAS,GAAG;AAC1B;AAAA,cACF;AAGA,cAAAE,KAAG,OAAO,IAAI,MAAM,SAAUG,MAAK;AACjC,gBAAAH,KAAG,MAAM,IAAI,SAASI,OAAM;AAC1B,sBAAI,SAAU,UAASD,QAAOC,KAAI;AAAA,gBACpC,CAAC;AAAA,cACH,CAAC;AAAA,YACH;AAAA,UAAC;AAAA,QACH;AAEA,QAAAJ,KAAG,aAAa,SAAUC,QAAM,MAAM;AACpC,cAAI,KAAKD,KAAG,SAASC,QAAMH,WAAU,WAAWA,WAAU,WAAW,IAAI;AAIzE,cAAI,QAAQ;AACZ,cAAI;AACJ,cAAI;AACF,kBAAME,KAAG,WAAW,IAAI,IAAI;AAC5B,oBAAQ;AAAA,UACV,UAAE;AACA,gBAAI,OAAO;AACT,kBAAI;AACF,gBAAAA,KAAG,UAAU,EAAE;AAAA,cACjB,SAAS,IAAI;AAAA,cAAC;AAAA,YAChB,OAAO;AACL,cAAAA,KAAG,UAAU,EAAE;AAAA,YACjB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,eAAS,aAAcA,MAAI;AACzB,YAAIF,WAAU,eAAe,WAAW,KAAKE,KAAG,SAAS;AACvD,UAAAA,KAAG,UAAU,SAAUC,QAAM,IAAI,IAAI,IAAI;AACvC,YAAAD,KAAG,KAAKC,QAAMH,WAAU,WAAW,SAAU,IAAI,IAAI;AACnD,kBAAI,IAAI;AACN,oBAAI,GAAI,IAAG,EAAE;AACb;AAAA,cACF;AACA,cAAAE,KAAG,QAAQ,IAAI,IAAI,IAAI,SAAUK,KAAI;AACnC,gBAAAL,KAAG,MAAM,IAAI,SAAUM,MAAK;AAC1B,sBAAI,GAAI,IAAGD,OAAMC,IAAG;AAAA,gBACtB,CAAC;AAAA,cACH,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAEA,UAAAN,KAAG,cAAc,SAAUC,QAAM,IAAI,IAAI;AACvC,gBAAI,KAAKD,KAAG,SAASC,QAAMH,WAAU,SAAS;AAC9C,gBAAI;AACJ,gBAAI,QAAQ;AACZ,gBAAI;AACF,oBAAME,KAAG,YAAY,IAAI,IAAI,EAAE;AAC/B,sBAAQ;AAAA,YACV,UAAE;AACA,kBAAI,OAAO;AACT,oBAAI;AACF,kBAAAA,KAAG,UAAU,EAAE;AAAA,gBACjB,SAAS,IAAI;AAAA,gBAAC;AAAA,cAChB,OAAO;AACL,gBAAAA,KAAG,UAAU,EAAE;AAAA,cACjB;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QAEF,WAAWA,KAAG,SAAS;AACrB,UAAAA,KAAG,UAAU,SAAU,IAAI,IAAI,IAAI,IAAI;AAAE,gBAAI,GAAI,SAAQ,SAAS,EAAE;AAAA,UAAE;AACtE,UAAAA,KAAG,cAAc,WAAY;AAAA,UAAC;AAAA,QAChC;AAAA,MACF;AAEA,eAAS,SAAU,MAAM;AACvB,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,SAAU,QAAQ,MAAM,IAAI;AACjC,iBAAO,KAAK,KAAKA,MAAI,QAAQ,MAAM,SAAU,IAAI;AAC/C,gBAAI,UAAU,EAAE,EAAG,MAAK;AACxB,gBAAI,GAAI,IAAG,MAAM,MAAM,SAAS;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF;AAEA,eAAS,aAAc,MAAM;AAC3B,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,SAAU,QAAQ,MAAM;AAC7B,cAAI;AACF,mBAAO,KAAK,KAAKA,MAAI,QAAQ,IAAI;AAAA,UACnC,SAAS,IAAI;AACX,gBAAI,CAAC,UAAU,EAAE,EAAG,OAAM;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAGA,eAAS,SAAU,MAAM;AACvB,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,SAAU,QAAQ,KAAK,KAAK,IAAI;AACrC,iBAAO,KAAK,KAAKA,MAAI,QAAQ,KAAK,KAAK,SAAU,IAAI;AACnD,gBAAI,UAAU,EAAE,EAAG,MAAK;AACxB,gBAAI,GAAI,IAAG,MAAM,MAAM,SAAS;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF;AAEA,eAAS,aAAc,MAAM;AAC3B,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,SAAU,QAAQ,KAAK,KAAK;AACjC,cAAI;AACF,mBAAO,KAAK,KAAKA,MAAI,QAAQ,KAAK,GAAG;AAAA,UACvC,SAAS,IAAI;AACX,gBAAI,CAAC,UAAU,EAAE,EAAG,OAAM;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAEA,eAAS,QAAS,MAAM;AACtB,YAAI,CAAC,KAAM,QAAO;AAGlB,eAAO,SAAU,QAAQ,SAAS,IAAI;AACpC,cAAI,OAAO,YAAY,YAAY;AACjC,iBAAK;AACL,sBAAU;AAAA,UACZ;AACA,mBAAS,SAAU,IAAI,OAAO;AAC5B,gBAAI,OAAO;AACT,kBAAI,MAAM,MAAM,EAAG,OAAM,OAAO;AAChC,kBAAI,MAAM,MAAM,EAAG,OAAM,OAAO;AAAA,YAClC;AACA,gBAAI,GAAI,IAAG,MAAM,MAAM,SAAS;AAAA,UAClC;AACA,iBAAO,UAAU,KAAK,KAAKA,MAAI,QAAQ,SAAS,QAAQ,IACpD,KAAK,KAAKA,MAAI,QAAQ,QAAQ;AAAA,QACpC;AAAA,MACF;AAEA,eAAS,YAAa,MAAM;AAC1B,YAAI,CAAC,KAAM,QAAO;AAGlB,eAAO,SAAU,QAAQ,SAAS;AAChC,cAAI,QAAQ,UAAU,KAAK,KAAKA,MAAI,QAAQ,OAAO,IAC/C,KAAK,KAAKA,MAAI,MAAM;AACxB,cAAI,OAAO;AACT,gBAAI,MAAM,MAAM,EAAG,OAAM,OAAO;AAChC,gBAAI,MAAM,MAAM,EAAG,OAAM,OAAO;AAAA,UAClC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAcA,eAAS,UAAW,IAAI;AACtB,YAAI,CAAC;AACH,iBAAO;AAET,YAAI,GAAG,SAAS;AACd,iBAAO;AAET,YAAI,UAAU,CAAC,QAAQ,UAAU,QAAQ,OAAO,MAAM;AACtD,YAAI,SAAS;AACX,cAAI,GAAG,SAAS,YAAY,GAAG,SAAS;AACtC,mBAAO;AAAA,QACX;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AClWA;AAAA,+CAAAO,UAAAC,SAAA;AAAA;AAAA,QAAI,SAAS,QAAQ,QAAQ,EAAE;AAE/B,IAAAA,QAAO,UAAU;AAEjB,aAAS,OAAQC,MAAI;AACnB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAEA,eAAS,WAAYC,QAAM,SAAS;AAClC,YAAI,EAAE,gBAAgB,YAAa,QAAO,IAAI,WAAWA,QAAM,OAAO;AAEtE,eAAO,KAAK,IAAI;AAEhB,YAAIC,QAAO;AAEX,aAAK,OAAOD;AACZ,aAAK,KAAK;AACV,aAAK,WAAW;AAChB,aAAK,SAAS;AAEd,aAAK,QAAQ;AACb,aAAK,OAAO;AACZ,aAAK,aAAa,KAAK;AAEvB,kBAAU,WAAW,CAAC;AAGtB,YAAI,OAAO,OAAO,KAAK,OAAO;AAC9B,iBAASE,SAAQ,GAAG,SAAS,KAAK,QAAQA,SAAQ,QAAQA,UAAS;AACjE,cAAI,MAAM,KAAKA,MAAK;AACpB,eAAK,GAAG,IAAI,QAAQ,GAAG;AAAA,QACzB;AAEA,YAAI,KAAK,SAAU,MAAK,YAAY,KAAK,QAAQ;AAEjD,YAAI,KAAK,UAAU,QAAW;AAC5B,cAAI,aAAa,OAAO,KAAK,OAAO;AAClC,kBAAM,UAAU,wBAAwB;AAAA,UAC1C;AACA,cAAI,KAAK,QAAQ,QAAW;AAC1B,iBAAK,MAAM;AAAA,UACb,WAAW,aAAa,OAAO,KAAK,KAAK;AACvC,kBAAM,UAAU,sBAAsB;AAAA,UACxC;AAEA,cAAI,KAAK,QAAQ,KAAK,KAAK;AACzB,kBAAM,IAAI,MAAM,sBAAsB;AAAA,UACxC;AAEA,eAAK,MAAM,KAAK;AAAA,QAClB;AAEA,YAAI,KAAK,OAAO,MAAM;AACpB,kBAAQ,SAAS,WAAW;AAC1B,YAAAD,MAAK,MAAM;AAAA,UACb,CAAC;AACD;AAAA,QACF;AAEA,QAAAF,KAAG,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,SAAU,KAAK,IAAI;AAC3D,cAAI,KAAK;AACP,YAAAE,MAAK,KAAK,SAAS,GAAG;AACtB,YAAAA,MAAK,WAAW;AAChB;AAAA,UACF;AAEA,UAAAA,MAAK,KAAK;AACV,UAAAA,MAAK,KAAK,QAAQ,EAAE;AACpB,UAAAA,MAAK,MAAM;AAAA,QACb,CAAC;AAAA,MACH;AAEA,eAAS,YAAaD,QAAM,SAAS;AACnC,YAAI,EAAE,gBAAgB,aAAc,QAAO,IAAI,YAAYA,QAAM,OAAO;AAExE,eAAO,KAAK,IAAI;AAEhB,aAAK,OAAOA;AACZ,aAAK,KAAK;AACV,aAAK,WAAW;AAEhB,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,OAAO;AACZ,aAAK,eAAe;AAEpB,kBAAU,WAAW,CAAC;AAGtB,YAAI,OAAO,OAAO,KAAK,OAAO;AAC9B,iBAASE,SAAQ,GAAG,SAAS,KAAK,QAAQA,SAAQ,QAAQA,UAAS;AACjE,cAAI,MAAM,KAAKA,MAAK;AACpB,eAAK,GAAG,IAAI,QAAQ,GAAG;AAAA,QACzB;AAEA,YAAI,KAAK,UAAU,QAAW;AAC5B,cAAI,aAAa,OAAO,KAAK,OAAO;AAClC,kBAAM,UAAU,wBAAwB;AAAA,UAC1C;AACA,cAAI,KAAK,QAAQ,GAAG;AAClB,kBAAM,IAAI,MAAM,uBAAuB;AAAA,UACzC;AAEA,eAAK,MAAM,KAAK;AAAA,QAClB;AAEA,aAAK,OAAO;AACZ,aAAK,SAAS,CAAC;AAEf,YAAI,KAAK,OAAO,MAAM;AACpB,eAAK,QAAQH,KAAG;AAChB,eAAK,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,MAAS,CAAC;AAC1E,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrHA;AAAA,sCAAAI,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAEjB,QAAI,iBAAiB,OAAO,kBAAkB,SAAU,KAAK;AAC3D,aAAO,IAAI;AAAA,IACb;AAEA,aAAS,MAAO,KAAK;AACnB,UAAI,QAAQ,QAAQ,OAAO,QAAQ;AACjC,eAAO;AAET,UAAI,eAAe;AACjB,YAAI,OAAO,EAAE,WAAW,eAAe,GAAG,EAAE;AAAA;AAE5C,YAAI,OAAO,uBAAO,OAAO,IAAI;AAE/B,aAAO,oBAAoB,GAAG,EAAE,QAAQ,SAAU,KAAK;AACrD,eAAO,eAAe,MAAM,KAAK,OAAO,yBAAyB,KAAK,GAAG,CAAC;AAAA,MAC5E,CAAC;AAED,aAAO;AAAA,IACT;AAAA;AAAA;;;ACtBA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,OAAK,QAAQ,IAAI;AACrB,QAAI,YAAY;AAChB,QAAI,SAAS;AACb,QAAI,QAAQ;AAEZ,QAAIC,QAAO,QAAQ,MAAM;AAGzB,QAAI;AACJ,QAAI;AAGJ,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,QAAQ,YAAY;AACpE,sBAAgB,uBAAO,IAAI,mBAAmB;AAE9C,uBAAiB,uBAAO,IAAI,sBAAsB;AAAA,IACpD,OAAO;AACL,sBAAgB;AAChB,uBAAiB;AAAA,IACnB;AAEA,aAASC,QAAQ;AAAA,IAAC;AAElB,aAAS,aAAa,SAASC,QAAO;AACpC,aAAO,eAAe,SAAS,eAAe;AAAA,QAC5C,KAAK,WAAW;AACd,iBAAOA;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,QAAQD;AACZ,QAAID,MAAK;AACP,cAAQA,MAAK,SAAS,MAAM;AAAA,aACrB,YAAY,KAAK,QAAQ,IAAI,cAAc,EAAE;AACpD,cAAQ,WAAW;AACjB,YAAI,IAAIA,MAAK,OAAO,MAAMA,OAAM,SAAS;AACzC,YAAI,WAAW,EAAE,MAAM,IAAI,EAAE,KAAK,UAAU;AAC5C,gBAAQ,MAAM,CAAC;AAAA,MACjB;AAGF,QAAI,CAACD,KAAG,aAAa,GAAG;AAElB,MAAAG,SAAQ,OAAO,aAAa,KAAK,CAAC;AACtC,mBAAaH,MAAIG,MAAK;AAMtB,MAAAH,KAAG,SAAS,SAAU,UAAU;AAC9B,iBAAS,MAAO,IAAI,IAAI;AACtB,iBAAO,SAAS,KAAKA,MAAI,IAAI,SAAU,KAAK;AAE1C,gBAAI,CAAC,KAAK;AACR,yBAAW;AAAA,YACb;AAEA,gBAAI,OAAO,OAAO;AAChB,iBAAG,MAAM,MAAM,SAAS;AAAA,UAC5B,CAAC;AAAA,QACH;AAEA,eAAO,eAAe,OAAO,gBAAgB;AAAA,UAC3C,OAAO;AAAA,QACT,CAAC;AACD,eAAO;AAAA,MACT,GAAGA,KAAG,KAAK;AAEX,MAAAA,KAAG,aAAa,SAAU,cAAc;AACtC,iBAAS,UAAW,IAAI;AAEtB,uBAAa,MAAMA,MAAI,SAAS;AAChC,qBAAW;AAAA,QACb;AAEA,eAAO,eAAe,WAAW,gBAAgB;AAAA,UAC/C,OAAO;AAAA,QACT,CAAC;AACD,eAAO;AAAA,MACT,GAAGA,KAAG,SAAS;AAEf,UAAI,YAAY,KAAK,QAAQ,IAAI,cAAc,EAAE,GAAG;AAClD,gBAAQ,GAAG,QAAQ,WAAW;AAC5B,gBAAMA,KAAG,aAAa,CAAC;AACvB,kBAAQ,QAAQ,EAAE,MAAMA,KAAG,aAAa,EAAE,QAAQ,CAAC;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF;AA7CM,QAAAG;AA+CN,QAAI,CAAC,OAAO,aAAa,GAAG;AAC1B,mBAAa,QAAQH,KAAG,aAAa,CAAC;AAAA,IACxC;AAEA,IAAAD,QAAO,UAAU,MAAM,MAAMC,IAAE,CAAC;AAChC,QAAI,QAAQ,IAAI,iCAAiC,CAACA,KAAG,WAAW;AAC5D,MAAAD,QAAO,UAAU,MAAMC,IAAE;AACzB,MAAAA,KAAG,YAAY;AAAA,IACnB;AAEA,aAAS,MAAOA,MAAI;AAElB,gBAAUA,IAAE;AACZ,MAAAA,KAAG,cAAc;AAEjB,MAAAA,KAAG,mBAAmBI;AACtB,MAAAJ,KAAG,oBAAoBK;AACvB,UAAI,cAAcL,KAAG;AACrB,MAAAA,KAAG,WAAW;AACd,eAAS,SAAUM,QAAM,SAAS,IAAI;AACpC,YAAI,OAAO,YAAY;AACrB,eAAK,SAAS,UAAU;AAE1B,eAAO,YAAYA,QAAM,SAAS,EAAE;AAEpC,iBAAS,YAAaA,QAAMC,UAASC,KAAI,WAAW;AAClD,iBAAO,YAAYF,QAAMC,UAAS,SAAU,KAAK;AAC/C,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ,CAAC,aAAa,CAACD,QAAMC,UAASC,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,iBACjF;AACH,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,MAAM,MAAM,SAAS;AAAA,YAC5B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,eAAeR,KAAG;AACtB,MAAAA,KAAG,YAAYS;AACf,eAASA,WAAWH,QAAM,MAAM,SAAS,IAAI;AAC3C,YAAI,OAAO,YAAY;AACrB,eAAK,SAAS,UAAU;AAE1B,eAAO,aAAaA,QAAM,MAAM,SAAS,EAAE;AAE3C,iBAAS,aAAcA,QAAMI,OAAMH,UAASC,KAAI,WAAW;AACzD,iBAAO,aAAaF,QAAMI,OAAMH,UAAS,SAAU,KAAK;AACtD,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ,CAAC,cAAc,CAACD,QAAMI,OAAMH,UAASC,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,iBACxF;AACH,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,MAAM,MAAM,SAAS;AAAA,YAC5B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,gBAAgBR,KAAG;AACvB,UAAI;AACF,QAAAA,KAAG,aAAa;AAClB,eAAS,WAAYM,QAAM,MAAM,SAAS,IAAI;AAC5C,YAAI,OAAO,YAAY;AACrB,eAAK,SAAS,UAAU;AAE1B,eAAO,cAAcA,QAAM,MAAM,SAAS,EAAE;AAE5C,iBAAS,cAAeA,QAAMI,OAAMH,UAASC,KAAI,WAAW;AAC1D,iBAAO,cAAcF,QAAMI,OAAMH,UAAS,SAAU,KAAK;AACvD,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ,CAAC,eAAe,CAACD,QAAMI,OAAMH,UAASC,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,iBACzF;AACH,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,MAAM,MAAM,SAAS;AAAA,YAC5B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,cAAcR,KAAG;AACrB,UAAI;AACF,QAAAA,KAAG,WAAW;AAChB,eAAS,SAAU,KAAK,MAAM,OAAO,IAAI;AACvC,YAAI,OAAO,UAAU,YAAY;AAC/B,eAAK;AACL,kBAAQ;AAAA,QACV;AACA,eAAO,YAAY,KAAK,MAAM,OAAO,EAAE;AAEvC,iBAAS,YAAaW,MAAKC,OAAMC,QAAOL,KAAI,WAAW;AACrD,iBAAO,YAAYG,MAAKC,OAAMC,QAAO,SAAU,KAAK;AAClD,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ,CAAC,aAAa,CAACF,MAAKC,OAAMC,QAAOL,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,iBACpF;AACH,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,MAAM,MAAM,SAAS;AAAA,YAC5B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,aAAaR,KAAG;AACpB,MAAAA,KAAG,UAAU;AACb,UAAI,0BAA0B;AAC9B,eAAS,QAASM,QAAM,SAAS,IAAI;AACnC,YAAI,OAAO,YAAY;AACrB,eAAK,SAAS,UAAU;AAE1B,YAAI,aAAa,wBAAwB,KAAK,QAAQ,OAAO,IACzD,SAASQ,YAAYR,QAAMC,UAASC,KAAI,WAAW;AACnD,iBAAO,WAAWF,QAAM;AAAA,YACtBA;AAAA,YAAMC;AAAA,YAASC;AAAA,YAAI;AAAA,UACrB,CAAC;AAAA,QACH,IACE,SAASM,YAAYR,QAAMC,UAASC,KAAI,WAAW;AACnD,iBAAO,WAAWF,QAAMC,UAAS;AAAA,YAC/BD;AAAA,YAAMC;AAAA,YAASC;AAAA,YAAI;AAAA,UACrB,CAAC;AAAA,QACH;AAEF,eAAO,WAAWF,QAAM,SAAS,EAAE;AAEnC,iBAAS,mBAAoBA,QAAMC,UAASC,KAAI,WAAW;AACzD,iBAAO,SAAU,KAAK,OAAO;AAC3B,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ;AAAA,gBACN;AAAA,gBACA,CAACF,QAAMC,UAASC,GAAE;AAAA,gBAClB;AAAA,gBACA,aAAa,KAAK,IAAI;AAAA,gBACtB,KAAK,IAAI;AAAA,cACX,CAAC;AAAA,iBACE;AACH,kBAAI,SAAS,MAAM;AACjB,sBAAM,KAAK;AAEb,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,KAAK,MAAM,KAAK,KAAK;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,QAAQ,OAAO,GAAG,CAAC,MAAM,QAAQ;AAC3C,YAAI,aAAa,OAAOR,IAAE;AAC1B,qBAAa,WAAW;AACxB,sBAAc,WAAW;AAAA,MAC3B;AAEA,UAAI,gBAAgBA,KAAG;AACvB,UAAI,eAAe;AACjB,mBAAW,YAAY,OAAO,OAAO,cAAc,SAAS;AAC5D,mBAAW,UAAU,OAAO;AAAA,MAC9B;AAEA,UAAI,iBAAiBA,KAAG;AACxB,UAAI,gBAAgB;AAClB,oBAAY,YAAY,OAAO,OAAO,eAAe,SAAS;AAC9D,oBAAY,UAAU,OAAO;AAAA,MAC/B;AAEA,aAAO,eAAeA,MAAI,cAAc;AAAA,QACtC,KAAK,WAAY;AACf,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,SAAU,KAAK;AAClB,uBAAa;AAAA,QACf;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AACD,aAAO,eAAeA,MAAI,eAAe;AAAA,QACvC,KAAK,WAAY;AACf,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,SAAU,KAAK;AAClB,wBAAc;AAAA,QAChB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAGD,UAAI,iBAAiB;AACrB,aAAO,eAAeA,MAAI,kBAAkB;AAAA,QAC1C,KAAK,WAAY;AACf,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,SAAU,KAAK;AAClB,2BAAiB;AAAA,QACnB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AACD,UAAI,kBAAkB;AACtB,aAAO,eAAeA,MAAI,mBAAmB;AAAA,QAC3C,KAAK,WAAY;AACf,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,SAAU,KAAK;AAClB,4BAAkB;AAAA,QACpB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAED,eAAS,WAAYM,QAAM,SAAS;AAClC,YAAI,gBAAgB;AAClB,iBAAO,cAAc,MAAM,MAAM,SAAS,GAAG;AAAA;AAE7C,iBAAO,WAAW,MAAM,OAAO,OAAO,WAAW,SAAS,GAAG,SAAS;AAAA,MAC1E;AAEA,eAAS,kBAAmB;AAC1B,YAAI,OAAO;AACX,aAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,SAAU,KAAK,IAAI;AACxD,cAAI,KAAK;AACP,gBAAI,KAAK;AACP,mBAAK,QAAQ;AAEf,iBAAK,KAAK,SAAS,GAAG;AAAA,UACxB,OAAO;AACL,iBAAK,KAAK;AACV,iBAAK,KAAK,QAAQ,EAAE;AACpB,iBAAK,KAAK;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAAS,YAAaA,QAAM,SAAS;AACnC,YAAI,gBAAgB;AAClB,iBAAO,eAAe,MAAM,MAAM,SAAS,GAAG;AAAA;AAE9C,iBAAO,YAAY,MAAM,OAAO,OAAO,YAAY,SAAS,GAAG,SAAS;AAAA,MAC5E;AAEA,eAAS,mBAAoB;AAC3B,YAAI,OAAO;AACX,aAAK,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,SAAU,KAAK,IAAI;AACxD,cAAI,KAAK;AACP,iBAAK,QAAQ;AACb,iBAAK,KAAK,SAAS,GAAG;AAAA,UACxB,OAAO;AACL,iBAAK,KAAK;AACV,iBAAK,KAAK,QAAQ,EAAE;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH;AAEA,eAASF,kBAAkBE,QAAM,SAAS;AACxC,eAAO,IAAIN,KAAG,WAAWM,QAAM,OAAO;AAAA,MACxC;AAEA,eAASD,mBAAmBC,QAAM,SAAS;AACzC,eAAO,IAAIN,KAAG,YAAYM,QAAM,OAAO;AAAA,MACzC;AAEA,UAAI,UAAUN,KAAG;AACjB,MAAAA,KAAG,OAAO;AACV,eAAS,KAAMM,QAAM,OAAO,MAAM,IAAI;AACpC,YAAI,OAAO,SAAS;AAClB,eAAK,MAAM,OAAO;AAEpB,eAAO,QAAQA,QAAM,OAAO,MAAM,EAAE;AAEpC,iBAAS,QAASA,QAAMO,QAAOE,OAAMP,KAAI,WAAW;AAClD,iBAAO,QAAQF,QAAMO,QAAOE,OAAM,SAAU,KAAK,IAAI;AACnD,gBAAI,QAAQ,IAAI,SAAS,YAAY,IAAI,SAAS;AAChD,sBAAQ,CAAC,SAAS,CAACT,QAAMO,QAAOE,OAAMP,GAAE,GAAG,KAAK,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAAA,iBACjF;AACH,kBAAI,OAAOA,QAAO;AAChB,gBAAAA,IAAG,MAAM,MAAM,SAAS;AAAA,YAC5B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,aAAOR;AAAA,IACT;AAEA,aAAS,QAAS,MAAM;AACtB,YAAM,WAAW,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AACtC,MAAAA,KAAG,aAAa,EAAE,KAAK,IAAI;AAC3B,MAAAgB,OAAM;AAAA,IACR;AAGA,QAAI;AAKJ,aAAS,aAAc;AACrB,UAAI,MAAM,KAAK,IAAI;AACnB,eAASC,KAAI,GAAGA,KAAIjB,KAAG,aAAa,EAAE,QAAQ,EAAEiB,IAAG;AAGjD,YAAIjB,KAAG,aAAa,EAAEiB,EAAC,EAAE,SAAS,GAAG;AACnC,UAAAjB,KAAG,aAAa,EAAEiB,EAAC,EAAE,CAAC,IAAI;AAC1B,UAAAjB,KAAG,aAAa,EAAEiB,EAAC,EAAE,CAAC,IAAI;AAAA,QAC5B;AAAA,MACF;AAEA,MAAAD,OAAM;AAAA,IACR;AAEA,aAASA,SAAS;AAEhB,mBAAa,UAAU;AACvB,mBAAa;AAEb,UAAIhB,KAAG,aAAa,EAAE,WAAW;AAC/B;AAEF,UAAI,OAAOA,KAAG,aAAa,EAAE,MAAM;AACnC,UAAI,KAAK,KAAK,CAAC;AACf,UAAI,OAAO,KAAK,CAAC;AAEjB,UAAI,MAAM,KAAK,CAAC;AAChB,UAAI,YAAY,KAAK,CAAC;AACtB,UAAI,WAAW,KAAK,CAAC;AAIrB,UAAI,cAAc,QAAW;AAC3B,cAAM,SAAS,GAAG,MAAM,IAAI;AAC5B,WAAG,MAAM,MAAM,IAAI;AAAA,MACrB,WAAW,KAAK,IAAI,IAAI,aAAa,KAAO;AAE1C,cAAM,WAAW,GAAG,MAAM,IAAI;AAC9B,YAAI,KAAK,KAAK,IAAI;AAClB,YAAI,OAAO,OAAO;AAChB,aAAG,KAAK,MAAM,GAAG;AAAA,MACrB,OAAO;AAEL,YAAI,eAAe,KAAK,IAAI,IAAI;AAGhC,YAAI,aAAa,KAAK,IAAI,WAAW,WAAW,CAAC;AAGjD,YAAI,eAAe,KAAK,IAAI,aAAa,KAAK,GAAG;AAEjD,YAAI,gBAAgB,cAAc;AAChC,gBAAM,SAAS,GAAG,MAAM,IAAI;AAC5B,aAAG,MAAM,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAAA,QACzC,OAAO;AAGL,UAAAA,KAAG,aAAa,EAAE,KAAK,IAAI;AAAA,QAC7B;AAAA,MACF;AAGA,UAAI,eAAe,QAAW;AAC5B,qBAAa,WAAWgB,QAAO,CAAC;AAAA,MAClC;AAAA,IACF;AAAA;AAAA;;;AC/bA;AAAA,0CAAAE,UAAA;AAAA;AAGA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,OAAK;AAEX,QAAM,MAAM;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,OAAO,SAAO;AAMd,aAAO,OAAOA,KAAG,GAAG,MAAM;AAAA,IAC5B,CAAC;AAGD,WAAO,OAAOF,UAASE,IAAE;AAGzB,QAAI,QAAQ,YAAU;AACpB,MAAAF,SAAQ,MAAM,IAAIC,GAAEC,KAAG,MAAM,CAAC;AAAA,IAChC,CAAC;AAID,IAAAF,SAAQ,SAAS,SAAU,UAAU,UAAU;AAC7C,UAAI,OAAO,aAAa,YAAY;AAClC,eAAOE,KAAG,OAAO,UAAU,QAAQ;AAAA,MACrC;AACA,aAAO,IAAI,QAAQ,aAAW;AAC5B,eAAOA,KAAG,OAAO,UAAU,OAAO;AAAA,MACpC,CAAC;AAAA,IACH;AAIA,IAAAF,SAAQ,OAAO,SAAU,IAAI,QAAQ,QAAQ,QAAQ,UAAU,UAAU;AACvE,UAAI,OAAO,aAAa,YAAY;AAClC,eAAOE,KAAG,KAAK,IAAI,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,MAC/D;AACA,aAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,QAAAD,KAAG,KAAK,IAAI,QAAQ,QAAQ,QAAQ,UAAU,CAAC,KAAK,WAAWE,YAAW;AACxE,cAAI,IAAK,QAAOD,QAAO,GAAG;AAC1B,kBAAQ,EAAE,WAAW,QAAAC,QAAO,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAOA,IAAAJ,SAAQ,QAAQ,SAAU,IAAI,WAAW,MAAM;AAC7C,UAAI,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,YAAY;AAC/C,eAAOE,KAAG,MAAM,IAAI,QAAQ,GAAG,IAAI;AAAA,MACrC;AAEA,aAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,QAAAD,KAAG,MAAM,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,cAAcE,YAAW;AAC3D,cAAI,IAAK,QAAOD,QAAO,GAAG;AAC1B,kBAAQ,EAAE,cAAc,QAAAC,QAAO,CAAC;AAAA,QAClC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAKA,IAAAJ,SAAQ,QAAQ,SAAU,IAAI,YAAY,MAAM;AAC9C,UAAI,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,YAAY;AAC/C,eAAOE,KAAG,MAAM,IAAI,SAAS,GAAG,IAAI;AAAA,MACtC;AAEA,aAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,QAAAD,KAAG,MAAM,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,WAAWG,aAAY;AAC1D,cAAI,IAAK,QAAOF,QAAO,GAAG;AAC1B,kBAAQ,EAAE,WAAW,SAAAE,SAAQ,CAAC;AAAA,QAChC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAKA,IAAAL,SAAQ,SAAS,SAAU,IAAI,YAAY,MAAM;AAC/C,UAAI,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,YAAY;AAC/C,eAAOE,KAAG,OAAO,IAAI,SAAS,GAAG,IAAI;AAAA,MACvC;AAEA,aAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,QAAAD,KAAG,OAAO,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,cAAcG,aAAY;AAC9D,cAAI,IAAK,QAAOF,QAAO,GAAG;AAC1B,kBAAQ,EAAE,cAAc,SAAAE,SAAQ,CAAC;AAAA,QACnC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAGA,QAAI,OAAOH,KAAG,SAAS,WAAW,YAAY;AAC5C,MAAAF,SAAQ,SAAS,SAASC,GAAEC,KAAG,SAAS,MAAM;AAAA,IAChD,OAAO;AACL,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,QAAW;AAAA,MACb;AAAA,IACF;AAAA;AAAA;;;ACjJA;AAAA,8CAAAI,UAAAC,SAAA;AAAA;AAMA,QAAMC,SAAO,QAAQ,MAAM;AAI3B,IAAAD,QAAO,QAAQ,YAAY,SAAS,UAAW,KAAK;AAClD,UAAI,QAAQ,aAAa,SAAS;AAChC,cAAM,8BAA8B,YAAY,KAAK,IAAI,QAAQC,OAAK,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC;AAE1F,YAAI,6BAA6B;AAC/B,gBAAM,QAAQ,IAAI,MAAM,qCAAqC,GAAG,EAAE;AAClE,gBAAM,OAAO;AACb,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpBA;AAAA,iDAAAC,UAAAC,SAAA;AAAA;AACA,QAAMC,OAAK;AACX,QAAM,EAAE,UAAU,IAAI;AAEtB,QAAM,UAAU,aAAW;AACzB,YAAM,WAAW,EAAE,MAAM,IAAM;AAC/B,UAAI,OAAO,YAAY,SAAU,QAAO;AACxC,aAAQ,EAAE,GAAG,UAAU,GAAG,QAAQ,EAAG;AAAA,IACvC;AAEA,IAAAD,QAAO,QAAQ,UAAU,OAAOE,MAAK,YAAY;AAC/C,gBAAUA,IAAG;AAEb,aAAOD,KAAG,MAAMC,MAAK;AAAA,QACnB,MAAM,QAAQ,OAAO;AAAA,QACrB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,IAAAF,QAAO,QAAQ,cAAc,CAACE,MAAK,YAAY;AAC7C,gBAAUA,IAAG;AAEb,aAAOD,KAAG,UAAUC,MAAK;AAAA,QACvB,MAAM,QAAQ,OAAO;AAAA,QACrB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA;AAAA;;;AC1BA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AACA,QAAMC,KAAI,uBAAwB;AAClC,QAAM,EAAE,SAAS,UAAU,YAAY,IAAI;AAC3C,QAAM,UAAUA,GAAE,QAAQ;AAE1B,IAAAD,QAAO,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,YAAY;AAAA;AAAA,MAEZ,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,eAAe;AAAA,IACjB;AAAA;AAAA;;;ACbA;AAAA,mDAAAE,UAAAC,SAAA;AAAA;AACA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,OAAK;AAEX,aAASC,YAAYC,QAAM;AACzB,aAAOF,KAAG,OAAOE,MAAI,EAAE,KAAK,MAAM,IAAI,EAAE,MAAM,MAAM,KAAK;AAAA,IAC3D;AAEA,IAAAJ,QAAO,UAAU;AAAA,MACf,YAAYC,GAAEE,WAAU;AAAA,MACxB,gBAAgBD,KAAG;AAAA,IACrB;AAAA;AAAA;;;ACXA;AAAA,6CAAAG,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,KAAI,uBAAwB;AAElC,mBAAe,aAAcC,QAAM,OAAO,OAAO;AAE/C,YAAM,KAAK,MAAMF,KAAG,KAAKE,QAAM,IAAI;AAEnC,UAAI,WAAW;AAEf,UAAI;AACF,cAAMF,KAAG,QAAQ,IAAI,OAAO,KAAK;AAAA,MACnC,UAAE;AACA,YAAI;AACF,gBAAMA,KAAG,MAAM,EAAE;AAAA,QACnB,SAAS,GAAG;AACV,qBAAW;AAAA,QACb;AAAA,MACF;AAEA,UAAI,UAAU;AACZ,cAAM;AAAA,MACR;AAAA,IACF;AAEA,aAAS,iBAAkBE,QAAM,OAAO,OAAO;AAC7C,YAAM,KAAKF,KAAG,SAASE,QAAM,IAAI;AACjC,MAAAF,KAAG,YAAY,IAAI,OAAO,KAAK;AAC/B,aAAOA,KAAG,UAAU,EAAE;AAAA,IACxB;AAEA,IAAAD,QAAO,UAAU;AAAA,MACf,cAAcE,GAAE,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;ACnCA;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAMC,KAAI,uBAAwB;AAElC,aAAS,SAAU,KAAK,MAAM,MAAM;AAClC,YAAM,WAAW,KAAK,cAClB,CAAC,SAASF,KAAG,KAAK,MAAM,EAAE,QAAQ,KAAK,CAAC,IACxC,CAAC,SAASA,KAAG,MAAM,MAAM,EAAE,QAAQ,KAAK,CAAC;AAC7C,aAAO,QAAQ,IAAI;AAAA,QACjB,SAAS,GAAG;AAAA,QACZ,SAAS,IAAI,EAAE,MAAM,SAAO;AAC1B,cAAI,IAAI,SAAS,SAAU,QAAO;AAClC,gBAAM;AAAA,QACR,CAAC;AAAA,MACH,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,QAAQ,OAAO,EAAE,SAAS,SAAS,EAAE;AAAA,IAC1D;AAEA,aAAS,aAAc,KAAK,MAAM,MAAM;AACtC,UAAI;AACJ,YAAM,WAAW,KAAK,cAClB,CAAC,SAASA,KAAG,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC,IAC5C,CAAC,SAASA,KAAG,UAAU,MAAM,EAAE,QAAQ,KAAK,CAAC;AACjD,YAAM,UAAU,SAAS,GAAG;AAC5B,UAAI;AACF,mBAAW,SAAS,IAAI;AAAA,MAC1B,SAAS,KAAK;AACZ,YAAI,IAAI,SAAS,SAAU,QAAO,EAAE,SAAS,UAAU,KAAK;AAC5D,cAAM;AAAA,MACR;AACA,aAAO,EAAE,SAAS,SAAS;AAAA,IAC7B;AAEA,mBAAe,WAAY,KAAK,MAAM,UAAU,MAAM;AACpD,YAAM,EAAE,SAAS,SAAS,IAAI,MAAM,SAAS,KAAK,MAAM,IAAI;AAC5D,UAAI,UAAU;AACZ,YAAI,aAAa,SAAS,QAAQ,GAAG;AACnC,gBAAM,cAAcC,OAAK,SAAS,GAAG;AACrC,gBAAM,eAAeA,OAAK,SAAS,IAAI;AACvC,cAAI,aAAa,UACf,gBAAgB,gBAChB,YAAY,YAAY,MAAM,aAAa,YAAY,GAAG;AAC1D,mBAAO,EAAE,SAAS,UAAU,gBAAgB,KAAK;AAAA,UACnD;AACA,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAChE;AACA,YAAI,QAAQ,YAAY,KAAK,CAAC,SAAS,YAAY,GAAG;AACpD,gBAAM,IAAI,MAAM,mCAAmC,IAAI,qBAAqB,GAAG,IAAI;AAAA,QACrF;AACA,YAAI,CAAC,QAAQ,YAAY,KAAK,SAAS,YAAY,GAAG;AACpD,gBAAM,IAAI,MAAM,+BAA+B,IAAI,yBAAyB,GAAG,IAAI;AAAA,QACrF;AAAA,MACF;AAEA,UAAI,QAAQ,YAAY,KAAK,YAAY,KAAK,IAAI,GAAG;AACnD,cAAM,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7C;AAEA,aAAO,EAAE,SAAS,SAAS;AAAA,IAC7B;AAEA,aAAS,eAAgB,KAAK,MAAM,UAAU,MAAM;AAClD,YAAM,EAAE,SAAS,SAAS,IAAI,aAAa,KAAK,MAAM,IAAI;AAE1D,UAAI,UAAU;AACZ,YAAI,aAAa,SAAS,QAAQ,GAAG;AACnC,gBAAM,cAAcA,OAAK,SAAS,GAAG;AACrC,gBAAM,eAAeA,OAAK,SAAS,IAAI;AACvC,cAAI,aAAa,UACf,gBAAgB,gBAChB,YAAY,YAAY,MAAM,aAAa,YAAY,GAAG;AAC1D,mBAAO,EAAE,SAAS,UAAU,gBAAgB,KAAK;AAAA,UACnD;AACA,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAChE;AACA,YAAI,QAAQ,YAAY,KAAK,CAAC,SAAS,YAAY,GAAG;AACpD,gBAAM,IAAI,MAAM,mCAAmC,IAAI,qBAAqB,GAAG,IAAI;AAAA,QACrF;AACA,YAAI,CAAC,QAAQ,YAAY,KAAK,SAAS,YAAY,GAAG;AACpD,gBAAM,IAAI,MAAM,+BAA+B,IAAI,yBAAyB,GAAG,IAAI;AAAA,QACrF;AAAA,MACF;AAEA,UAAI,QAAQ,YAAY,KAAK,YAAY,KAAK,IAAI,GAAG;AACnD,cAAM,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7C;AACA,aAAO,EAAE,SAAS,SAAS;AAAA,IAC7B;AAMA,mBAAe,iBAAkB,KAAK,SAAS,MAAM,UAAU;AAC7D,YAAM,YAAYA,OAAK,QAAQA,OAAK,QAAQ,GAAG,CAAC;AAChD,YAAM,aAAaA,OAAK,QAAQA,OAAK,QAAQ,IAAI,CAAC;AAClD,UAAI,eAAe,aAAa,eAAeA,OAAK,MAAM,UAAU,EAAE,KAAM;AAE5E,UAAI;AACJ,UAAI;AACF,mBAAW,MAAMD,KAAG,KAAK,YAAY,EAAE,QAAQ,KAAK,CAAC;AAAA,MACvD,SAAS,KAAK;AACZ,YAAI,IAAI,SAAS,SAAU;AAC3B,cAAM;AAAA,MACR;AAEA,UAAI,aAAa,SAAS,QAAQ,GAAG;AACnC,cAAM,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7C;AAEA,aAAO,iBAAiB,KAAK,SAAS,YAAY,QAAQ;AAAA,IAC5D;AAEA,aAAS,qBAAsB,KAAK,SAAS,MAAM,UAAU;AAC3D,YAAM,YAAYC,OAAK,QAAQA,OAAK,QAAQ,GAAG,CAAC;AAChD,YAAM,aAAaA,OAAK,QAAQA,OAAK,QAAQ,IAAI,CAAC;AAClD,UAAI,eAAe,aAAa,eAAeA,OAAK,MAAM,UAAU,EAAE,KAAM;AAC5E,UAAI;AACJ,UAAI;AACF,mBAAWD,KAAG,SAAS,YAAY,EAAE,QAAQ,KAAK,CAAC;AAAA,MACrD,SAAS,KAAK;AACZ,YAAI,IAAI,SAAS,SAAU;AAC3B,cAAM;AAAA,MACR;AACA,UAAI,aAAa,SAAS,QAAQ,GAAG;AACnC,cAAM,IAAI,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7C;AACA,aAAO,qBAAqB,KAAK,SAAS,YAAY,QAAQ;AAAA,IAChE;AAEA,aAAS,aAAc,SAAS,UAAU;AAExC,aAAO,SAAS,QAAQ,UAAa,SAAS,QAAQ,UAAa,SAAS,QAAQ,QAAQ,OAAO,SAAS,QAAQ,QAAQ;AAAA,IAC9H;AAIA,aAAS,YAAa,KAAK,MAAM;AAC/B,YAAM,SAASC,OAAK,QAAQ,GAAG,EAAE,MAAMA,OAAK,GAAG,EAAE,OAAO,CAAAE,OAAKA,EAAC;AAC9D,YAAM,UAAUF,OAAK,QAAQ,IAAI,EAAE,MAAMA,OAAK,GAAG,EAAE,OAAO,CAAAE,OAAKA,EAAC;AAChE,aAAO,OAAO,MAAM,CAAC,KAAKA,OAAM,QAAQA,EAAC,MAAM,GAAG;AAAA,IACpD;AAEA,aAAS,OAAQ,KAAK,MAAM,UAAU;AACpC,aAAO,UAAU,QAAQ,KAAK,GAAG,mCAAmC,IAAI;AAAA,IAC1E;AAEA,IAAAJ,QAAO,UAAU;AAAA;AAAA,MAEf,YAAYG,GAAE,UAAU;AAAA,MACxB;AAAA;AAAA,MAEA,kBAAkBA,GAAE,gBAAgB;AAAA,MACpC;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC9JA;AAAA,4CAAAE,UAAAC,SAAA;AAAA;AAOA,mBAAe,+BAAgC,UAAU,IAAI;AAC3D,YAAM,WAAW,CAAC;AAClB,uBAAiB,QAAQ,UAAU;AACjC,iBAAS;AAAA,UACP,GAAG,IAAI,EAAE;AAAA,YACP,MAAM;AAAA,YACN,CAAC,QAAQ,OAAO,IAAI,MAAM,eAAe;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ;AAAA,QACZ,SAAS;AAAA,UAAI,CAAC,YACZ,QAAQ,KAAK,CAAC,gBAAgB;AAC5B,gBAAI,gBAAgB,KAAM,OAAM;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf;AAAA,IACF;AAAA;AAAA;;;AC5BA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,EAAE,YAAAC,YAAW,IAAI;AACvB,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,OAAO;AACb,QAAM,EAAE,+BAA+B,IAAI;AAE3C,mBAAe,KAAM,KAAK,MAAM,OAAO,CAAC,GAAG;AACzC,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO,EAAE,QAAQ,KAAK;AAAA,MACxB;AAEA,WAAK,UAAU,aAAa,OAAO,CAAC,CAAC,KAAK,UAAU;AACpD,WAAK,YAAY,eAAe,OAAO,CAAC,CAAC,KAAK,YAAY,KAAK;AAG/D,UAAI,KAAK,sBAAsB,QAAQ,SAAS,QAAQ;AACtD,gBAAQ;AAAA,UACN;AAAA,UAEA;AAAA,UAAW;AAAA,QACb;AAAA,MACF;AAEA,YAAM,EAAE,SAAS,SAAS,IAAI,MAAM,KAAK,WAAW,KAAK,MAAM,QAAQ,IAAI;AAE3E,YAAM,KAAK,iBAAiB,KAAK,SAAS,MAAM,MAAM;AAEtD,YAAM,UAAU,MAAM,UAAU,KAAK,MAAM,IAAI;AAE/C,UAAI,CAAC,QAAS;AAGd,YAAM,aAAaD,OAAK,QAAQ,IAAI;AACpC,YAAM,YAAY,MAAMC,YAAW,UAAU;AAC7C,UAAI,CAAC,WAAW;AACd,cAAM,OAAO,UAAU;AAAA,MACzB;AAEA,YAAM,uBAAuB,UAAU,KAAK,MAAM,IAAI;AAAA,IACxD;AAEA,mBAAe,UAAW,KAAK,MAAM,MAAM;AACzC,UAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,aAAO,KAAK,OAAO,KAAK,IAAI;AAAA,IAC9B;AAEA,mBAAe,uBAAwB,UAAU,KAAK,MAAM,MAAM;AAChE,YAAM,SAAS,KAAK,cAAcF,KAAG,OAAOA,KAAG;AAC/C,YAAM,UAAU,MAAM,OAAO,GAAG;AAEhC,UAAI,QAAQ,YAAY,EAAG,QAAO,MAAM,SAAS,UAAU,KAAK,MAAM,IAAI;AAE1E,UACE,QAAQ,OAAO,KACf,QAAQ,kBAAkB,KAC1B,QAAQ,cAAc,EACtB,QAAO,OAAO,SAAS,UAAU,KAAK,MAAM,IAAI;AAElD,UAAI,QAAQ,eAAe,EAAG,QAAO,OAAO,UAAU,KAAK,MAAM,IAAI;AACrE,UAAI,QAAQ,SAAS,EAAG,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAC3E,UAAI,QAAQ,OAAO,EAAG,OAAM,IAAI,MAAM,4BAA4B,GAAG,EAAE;AACvE,YAAM,IAAI,MAAM,iBAAiB,GAAG,EAAE;AAAA,IACxC;AAEA,mBAAe,OAAQ,SAAS,UAAU,KAAK,MAAM,MAAM;AACzD,UAAI,CAAC,SAAU,QAAO,SAAS,SAAS,KAAK,MAAM,IAAI;AAEvD,UAAI,KAAK,WAAW;AAClB,cAAMA,KAAG,OAAO,IAAI;AACpB,eAAO,SAAS,SAAS,KAAK,MAAM,IAAI;AAAA,MAC1C;AACA,UAAI,KAAK,cAAc;AACrB,cAAM,IAAI,MAAM,IAAI,IAAI,kBAAkB;AAAA,MAC5C;AAAA,IACF;AAEA,mBAAe,SAAU,SAAS,KAAK,MAAM,MAAM;AACjD,YAAMA,KAAG,SAAS,KAAK,IAAI;AAC3B,UAAI,KAAK,oBAAoB;AAI3B,YAAI,kBAAkB,QAAQ,IAAI,GAAG;AACnC,gBAAM,iBAAiB,MAAM,QAAQ,IAAI;AAAA,QAC3C;AAOA,cAAM,iBAAiB,MAAMA,KAAG,KAAK,GAAG;AACxC,cAAM,aAAa,MAAM,eAAe,OAAO,eAAe,KAAK;AAAA,MACrE;AAEA,aAAOA,KAAG,MAAM,MAAM,QAAQ,IAAI;AAAA,IACpC;AAEA,aAAS,kBAAmB,SAAS;AACnC,cAAQ,UAAU,SAAW;AAAA,IAC/B;AAEA,aAAS,iBAAkB,MAAM,SAAS;AACxC,aAAOA,KAAG,MAAM,MAAM,UAAU,GAAK;AAAA,IACvC;AAEA,mBAAe,MAAO,SAAS,UAAU,KAAK,MAAM,MAAM;AAExD,UAAI,CAAC,UAAU;AACb,cAAMA,KAAG,MAAM,IAAI;AAAA,MACrB;AAGA,YAAM,+BAA+B,MAAMA,KAAG,QAAQ,GAAG,GAAG,OAAO,SAAS;AAC1E,cAAM,UAAUC,OAAK,KAAK,KAAK,KAAK,IAAI;AACxC,cAAM,WAAWA,OAAK,KAAK,MAAM,KAAK,IAAI;AAE1C,cAAM,UAAU,MAAM,UAAU,SAAS,UAAU,IAAI;AAEvD,YAAI,SAAS;AACX,gBAAM,EAAE,UAAAE,UAAS,IAAI,MAAM,KAAK,WAAW,SAAS,UAAU,QAAQ,IAAI;AAG1E,gBAAM,uBAAuBA,WAAU,SAAS,UAAU,IAAI;AAAA,QAChE;AAAA,MACF,CAAC;AAED,UAAI,CAAC,UAAU;AACb,cAAMH,KAAG,MAAM,MAAM,QAAQ,IAAI;AAAA,MACnC;AAAA,IACF;AAEA,mBAAe,OAAQ,UAAU,KAAK,MAAM,MAAM;AAChD,UAAI,cAAc,MAAMA,KAAG,SAAS,GAAG;AACvC,UAAI,KAAK,aAAa;AACpB,sBAAcC,OAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW;AAAA,MACvD;AACA,UAAI,CAAC,UAAU;AACb,eAAOD,KAAG,QAAQ,aAAa,IAAI;AAAA,MACrC;AAEA,UAAI,eAAe;AACnB,UAAI;AACF,uBAAe,MAAMA,KAAG,SAAS,IAAI;AAAA,MACvC,SAAS,GAAG;AAIV,YAAI,EAAE,SAAS,YAAY,EAAE,SAAS,UAAW,QAAOA,KAAG,QAAQ,aAAa,IAAI;AACpF,cAAM;AAAA,MACR;AACA,UAAI,KAAK,aAAa;AACpB,uBAAeC,OAAK,QAAQ,QAAQ,IAAI,GAAG,YAAY;AAAA,MACzD;AAIA,UAAI,gBAAgB,cAAc;AAChC,YAAI,KAAK,YAAY,aAAa,YAAY,GAAG;AAC/C,gBAAM,IAAI,MAAM,gBAAgB,WAAW,mCAAmC,YAAY,IAAI;AAAA,QAChG;AAKA,YAAI,KAAK,YAAY,cAAc,WAAW,GAAG;AAC/C,gBAAM,IAAI,MAAM,qBAAqB,YAAY,WAAW,WAAW,IAAI;AAAA,QAC7E;AAAA,MACF;AAGA,YAAMD,KAAG,OAAO,IAAI;AACpB,aAAOA,KAAG,QAAQ,aAAa,IAAI;AAAA,IACrC;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACnLjB;AAAA,gDAAAK,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,aAAa,iBAAqB;AACxC,QAAM,mBAAmB,iBAA0B;AACnD,QAAM,OAAO;AAEb,aAAS,SAAU,KAAK,MAAM,MAAM;AAClC,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO,EAAE,QAAQ,KAAK;AAAA,MACxB;AAEA,aAAO,QAAQ,CAAC;AAChB,WAAK,UAAU,aAAa,OAAO,CAAC,CAAC,KAAK,UAAU;AACpD,WAAK,YAAY,eAAe,OAAO,CAAC,CAAC,KAAK,YAAY,KAAK;AAG/D,UAAI,KAAK,sBAAsB,QAAQ,SAAS,QAAQ;AACtD,gBAAQ;AAAA,UACN;AAAA,UAEA;AAAA,UAAW;AAAA,QACb;AAAA,MACF;AAEA,YAAM,EAAE,SAAS,SAAS,IAAI,KAAK,eAAe,KAAK,MAAM,QAAQ,IAAI;AACzE,WAAK,qBAAqB,KAAK,SAAS,MAAM,MAAM;AACpD,UAAI,KAAK,UAAU,CAAC,KAAK,OAAO,KAAK,IAAI,EAAG;AAC5C,YAAM,aAAaA,OAAK,QAAQ,IAAI;AACpC,UAAI,CAACD,KAAG,WAAW,UAAU,EAAG,YAAW,UAAU;AACrD,aAAO,SAAS,UAAU,KAAK,MAAM,IAAI;AAAA,IAC3C;AAEA,aAAS,SAAU,UAAU,KAAK,MAAM,MAAM;AAC5C,YAAME,YAAW,KAAK,cAAcF,KAAG,WAAWA,KAAG;AACrD,YAAM,UAAUE,UAAS,GAAG;AAE5B,UAAI,QAAQ,YAAY,EAAG,QAAO,MAAM,SAAS,UAAU,KAAK,MAAM,IAAI;AAAA,eACjE,QAAQ,OAAO,KACf,QAAQ,kBAAkB,KAC1B,QAAQ,cAAc,EAAG,QAAO,OAAO,SAAS,UAAU,KAAK,MAAM,IAAI;AAAA,eACzE,QAAQ,eAAe,EAAG,QAAO,OAAO,UAAU,KAAK,MAAM,IAAI;AAAA,eACjE,QAAQ,SAAS,EAAG,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAAA,eACvE,QAAQ,OAAO,EAAG,OAAM,IAAI,MAAM,4BAA4B,GAAG,EAAE;AAC5E,YAAM,IAAI,MAAM,iBAAiB,GAAG,EAAE;AAAA,IACxC;AAEA,aAAS,OAAQ,SAAS,UAAU,KAAK,MAAM,MAAM;AACnD,UAAI,CAAC,SAAU,QAAO,SAAS,SAAS,KAAK,MAAM,IAAI;AACvD,aAAO,YAAY,SAAS,KAAK,MAAM,IAAI;AAAA,IAC7C;AAEA,aAAS,YAAa,SAAS,KAAK,MAAM,MAAM;AAC9C,UAAI,KAAK,WAAW;AAClB,QAAAF,KAAG,WAAW,IAAI;AAClB,eAAO,SAAS,SAAS,KAAK,MAAM,IAAI;AAAA,MAC1C,WAAW,KAAK,cAAc;AAC5B,cAAM,IAAI,MAAM,IAAI,IAAI,kBAAkB;AAAA,MAC5C;AAAA,IACF;AAEA,aAAS,SAAU,SAAS,KAAK,MAAM,MAAM;AAC3C,MAAAA,KAAG,aAAa,KAAK,IAAI;AACzB,UAAI,KAAK,mBAAoB,kBAAiB,QAAQ,MAAM,KAAK,IAAI;AACrE,aAAO,YAAY,MAAM,QAAQ,IAAI;AAAA,IACvC;AAEA,aAAS,iBAAkB,SAAS,KAAK,MAAM;AAI7C,UAAI,kBAAkB,OAAO,EAAG,kBAAiB,MAAM,OAAO;AAC9D,aAAO,kBAAkB,KAAK,IAAI;AAAA,IACpC;AAEA,aAAS,kBAAmB,SAAS;AACnC,cAAQ,UAAU,SAAW;AAAA,IAC/B;AAEA,aAAS,iBAAkB,MAAM,SAAS;AACxC,aAAO,YAAY,MAAM,UAAU,GAAK;AAAA,IAC1C;AAEA,aAAS,YAAa,MAAM,SAAS;AACnC,aAAOA,KAAG,UAAU,MAAM,OAAO;AAAA,IACnC;AAEA,aAAS,kBAAmB,KAAK,MAAM;AAIrC,YAAM,iBAAiBA,KAAG,SAAS,GAAG;AACtC,aAAO,iBAAiB,MAAM,eAAe,OAAO,eAAe,KAAK;AAAA,IAC1E;AAEA,aAAS,MAAO,SAAS,UAAU,KAAK,MAAM,MAAM;AAClD,UAAI,CAAC,SAAU,QAAO,aAAa,QAAQ,MAAM,KAAK,MAAM,IAAI;AAChE,aAAO,QAAQ,KAAK,MAAM,IAAI;AAAA,IAChC;AAEA,aAAS,aAAc,SAAS,KAAK,MAAM,MAAM;AAC/C,MAAAA,KAAG,UAAU,IAAI;AACjB,cAAQ,KAAK,MAAM,IAAI;AACvB,aAAO,YAAY,MAAM,OAAO;AAAA,IAClC;AAEA,aAAS,QAAS,KAAK,MAAM,MAAM;AACjC,YAAMG,OAAMH,KAAG,YAAY,GAAG;AAE9B,UAAI;AACF,YAAI;AAEJ,gBAAQ,SAASG,KAAI,SAAS,OAAO,MAAM;AACzC,sBAAY,OAAO,MAAM,KAAK,MAAM,IAAI;AAAA,QAC1C;AAAA,MACF,UAAE;AACA,QAAAA,KAAI,UAAU;AAAA,MAChB;AAAA,IACF;AAEA,aAAS,YAAa,MAAM,KAAK,MAAM,MAAM;AAC3C,YAAM,UAAUF,OAAK,KAAK,KAAK,IAAI;AACnC,YAAM,WAAWA,OAAK,KAAK,MAAM,IAAI;AACrC,UAAI,KAAK,UAAU,CAAC,KAAK,OAAO,SAAS,QAAQ,EAAG;AACpD,YAAM,EAAE,SAAS,IAAI,KAAK,eAAe,SAAS,UAAU,QAAQ,IAAI;AACxE,aAAO,SAAS,UAAU,SAAS,UAAU,IAAI;AAAA,IACnD;AAEA,aAAS,OAAQ,UAAU,KAAK,MAAM,MAAM;AAC1C,UAAI,cAAcD,KAAG,aAAa,GAAG;AACrC,UAAI,KAAK,aAAa;AACpB,sBAAcC,OAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW;AAAA,MACvD;AAEA,UAAI,CAAC,UAAU;AACb,eAAOD,KAAG,YAAY,aAAa,IAAI;AAAA,MACzC,OAAO;AACL,YAAI;AACJ,YAAI;AACF,yBAAeA,KAAG,aAAa,IAAI;AAAA,QACrC,SAAS,KAAK;AAIZ,cAAI,IAAI,SAAS,YAAY,IAAI,SAAS,UAAW,QAAOA,KAAG,YAAY,aAAa,IAAI;AAC5F,gBAAM;AAAA,QACR;AACA,YAAI,KAAK,aAAa;AACpB,yBAAeC,OAAK,QAAQ,QAAQ,IAAI,GAAG,YAAY;AAAA,QACzD;AAIA,YAAI,gBAAgB,cAAc;AAChC,cAAI,KAAK,YAAY,aAAa,YAAY,GAAG;AAC/C,kBAAM,IAAI,MAAM,gBAAgB,WAAW,mCAAmC,YAAY,IAAI;AAAA,UAChG;AAKA,cAAI,KAAK,YAAY,cAAc,WAAW,GAAG;AAC/C,kBAAM,IAAI,MAAM,qBAAqB,YAAY,WAAW,WAAW,IAAI;AAAA,UAC7E;AAAA,QACF;AACA,eAAO,SAAS,aAAa,IAAI;AAAA,MACnC;AAAA,IACF;AAEA,aAAS,SAAU,aAAa,MAAM;AACpC,MAAAD,KAAG,WAAW,IAAI;AAClB,aAAOA,KAAG,YAAY,aAAa,IAAI;AAAA,IACzC;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/KjB,IAAAK,gBAAA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,IAAAD,QAAO,UAAU;AAAA,MACf,MAAMC,GAAE,cAAiB;AAAA,MACzB,UAAU;AAAA,IACZ;AAAA;AAAA;;;ACNA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,KAAI,uBAAwB;AAElC,aAASC,QAAQC,QAAM,UAAU;AAC/B,MAAAH,KAAG,GAAGG,QAAM,EAAE,WAAW,MAAM,OAAO,KAAK,GAAG,QAAQ;AAAA,IACxD;AAEA,aAAS,WAAYA,QAAM;AACzB,MAAAH,KAAG,OAAOG,QAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAClD;AAEA,IAAAJ,QAAO,UAAU;AAAA,MACf,QAAQE,GAAEC,OAAM;AAAA,MAChB;AAAA,IACF;AAAA;AAAA;;;AChBA;AAAA,6CAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,QAAQ;AACd,QAAMC,UAAS;AAEf,QAAM,WAAWH,GAAE,eAAeI,UAAUC,MAAK;AAC/C,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAMJ,KAAG,QAAQI,IAAG;AAAA,MAC9B,QAAQ;AACN,eAAO,MAAM,OAAOA,IAAG;AAAA,MACzB;AAEA,aAAO,QAAQ,IAAI,MAAM,IAAI,UAAQF,QAAO,OAAOD,OAAK,KAAKG,MAAK,IAAI,CAAC,CAAC,CAAC;AAAA,IAC3E,CAAC;AAED,aAAS,aAAcA,MAAK;AAC1B,UAAI;AACJ,UAAI;AACF,gBAAQJ,KAAG,YAAYI,IAAG;AAAA,MAC5B,QAAQ;AACN,eAAO,MAAM,WAAWA,IAAG;AAAA,MAC7B;AAEA,YAAM,QAAQ,UAAQ;AACpB,eAAOH,OAAK,KAAKG,MAAK,IAAI;AAC1B,QAAAF,QAAO,WAAW,IAAI;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,IAAAJ,QAAO,UAAU;AAAA,MACf;AAAA,MACA,cAAc;AAAA,MACd;AAAA,MACA,UAAU;AAAA,IACZ;AAAA;AAAA;;;ACtCA;AAAA,6CAAAO,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAMC,OAAK;AACX,QAAM,QAAQ;AAEd,mBAAe,WAAY,MAAM;AAC/B,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAMA,KAAG,KAAK,IAAI;AAAA,MAC5B,QAAQ;AAAA,MAAE;AACV,UAAI,SAAS,MAAM,OAAO,EAAG;AAE7B,YAAMC,OAAMF,OAAK,QAAQ,IAAI;AAE7B,UAAI,WAAW;AACf,UAAI;AACF,mBAAW,MAAMC,KAAG,KAAKC,IAAG;AAAA,MAC9B,SAAS,KAAK;AAEZ,YAAI,IAAI,SAAS,UAAU;AACzB,gBAAM,MAAM,OAAOA,IAAG;AACtB,gBAAMD,KAAG,UAAU,MAAM,EAAE;AAC3B;AAAA,QACF,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAEA,UAAI,SAAS,YAAY,GAAG;AAC1B,cAAMA,KAAG,UAAU,MAAM,EAAE;AAAA,MAC7B,OAAO;AAGL,cAAMA,KAAG,QAAQC,IAAG;AAAA,MACtB;AAAA,IACF;AAEA,aAAS,eAAgB,MAAM;AAC7B,UAAI;AACJ,UAAI;AACF,gBAAQD,KAAG,SAAS,IAAI;AAAA,MAC1B,QAAQ;AAAA,MAAE;AACV,UAAI,SAAS,MAAM,OAAO,EAAG;AAE7B,YAAMC,OAAMF,OAAK,QAAQ,IAAI;AAC7B,UAAI;AACF,YAAI,CAACC,KAAG,SAASC,IAAG,EAAE,YAAY,GAAG;AAGnC,UAAAD,KAAG,YAAYC,IAAG;AAAA,QACpB;AAAA,MACF,SAAS,KAAK;AAEZ,YAAI,OAAO,IAAI,SAAS,SAAU,OAAM,WAAWA,IAAG;AAAA,YACjD,OAAM;AAAA,MACb;AAEA,MAAAD,KAAG,cAAc,MAAM,EAAE;AAAA,IAC3B;AAEA,IAAAH,QAAO,UAAU;AAAA,MACf,YAAYC,GAAE,UAAU;AAAA,MACxB;AAAA,IACF;AAAA;AAAA;;;ACjEA;AAAA,6CAAAI,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAMC,OAAK;AACX,QAAM,QAAQ;AACd,QAAM,EAAE,YAAAC,YAAW,IAAI;AACvB,QAAM,EAAE,aAAa,IAAI;AAEzB,mBAAe,WAAY,SAAS,SAAS;AAC3C,UAAI;AACJ,UAAI;AACF,kBAAU,MAAMD,KAAG,MAAM,OAAO;AAAA,MAClC,QAAQ;AAAA,MAER;AAEA,UAAI;AACJ,UAAI;AACF,kBAAU,MAAMA,KAAG,MAAM,OAAO;AAAA,MAClC,SAAS,KAAK;AACZ,YAAI,UAAU,IAAI,QAAQ,QAAQ,SAAS,YAAY;AACvD,cAAM;AAAA,MACR;AAEA,UAAI,WAAW,aAAa,SAAS,OAAO,EAAG;AAE/C,YAAME,OAAMH,OAAK,QAAQ,OAAO;AAEhC,YAAM,YAAY,MAAME,YAAWC,IAAG;AAEtC,UAAI,CAAC,WAAW;AACd,cAAM,MAAM,OAAOA,IAAG;AAAA,MACxB;AAEA,YAAMF,KAAG,KAAK,SAAS,OAAO;AAAA,IAChC;AAEA,aAAS,eAAgB,SAAS,SAAS;AACzC,UAAI;AACJ,UAAI;AACF,kBAAUA,KAAG,UAAU,OAAO;AAAA,MAChC,QAAQ;AAAA,MAAC;AAET,UAAI;AACF,cAAM,UAAUA,KAAG,UAAU,OAAO;AACpC,YAAI,WAAW,aAAa,SAAS,OAAO,EAAG;AAAA,MACjD,SAAS,KAAK;AACZ,YAAI,UAAU,IAAI,QAAQ,QAAQ,SAAS,YAAY;AACvD,cAAM;AAAA,MACR;AAEA,YAAME,OAAMH,OAAK,QAAQ,OAAO;AAChC,YAAM,YAAYC,KAAG,WAAWE,IAAG;AACnC,UAAI,UAAW,QAAOF,KAAG,SAAS,SAAS,OAAO;AAClD,YAAM,WAAWE,IAAG;AAEpB,aAAOF,KAAG,SAAS,SAAS,OAAO;AAAA,IACrC;AAEA,IAAAH,QAAO,UAAU;AAAA,MACf,YAAYC,GAAE,UAAU;AAAA,MACxB;AAAA,IACF;AAAA;AAAA;;;AC/DA;AAAA,sDAAAK,UAAAC,SAAA;AAAA;AAEA,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAMC,OAAK;AACX,QAAM,EAAE,YAAAC,YAAW,IAAI;AAEvB,QAAMC,KAAI,uBAAwB;AAwBlC,mBAAe,aAAc,SAAS,SAAS;AAC7C,UAAIH,OAAK,WAAW,OAAO,GAAG;AAC5B,YAAI;AACF,gBAAMC,KAAG,MAAM,OAAO;AAAA,QACxB,SAAS,KAAK;AACZ,cAAI,UAAU,IAAI,QAAQ,QAAQ,SAAS,eAAe;AAC1D,gBAAM;AAAA,QACR;AAEA,eAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,SAASD,OAAK,QAAQ,OAAO;AACnC,YAAM,gBAAgBA,OAAK,KAAK,QAAQ,OAAO;AAE/C,YAAMI,UAAS,MAAMF,YAAW,aAAa;AAC7C,UAAIE,SAAQ;AACV,eAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI;AACF,cAAMH,KAAG,MAAM,OAAO;AAAA,MACxB,SAAS,KAAK;AACZ,YAAI,UAAU,IAAI,QAAQ,QAAQ,SAAS,eAAe;AAC1D,cAAM;AAAA,MACR;AAEA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAOD,OAAK,SAAS,QAAQ,OAAO;AAAA,MACtC;AAAA,IACF;AAEA,aAAS,iBAAkB,SAAS,SAAS;AAC3C,UAAIA,OAAK,WAAW,OAAO,GAAG;AAC5B,cAAMI,UAASH,KAAG,WAAW,OAAO;AACpC,YAAI,CAACG,QAAQ,OAAM,IAAI,MAAM,iCAAiC;AAC9D,eAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,SAASJ,OAAK,QAAQ,OAAO;AACnC,YAAM,gBAAgBA,OAAK,KAAK,QAAQ,OAAO;AAC/C,YAAMI,UAASH,KAAG,WAAW,aAAa;AAC1C,UAAIG,SAAQ;AACV,eAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,YAAYH,KAAG,WAAW,OAAO;AACvC,UAAI,CAAC,UAAW,OAAM,IAAI,MAAM,iCAAiC;AACjE,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAOD,OAAK,SAAS,QAAQ,OAAO;AAAA,MACtC;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA,MACf,cAAcI,GAAE,YAAY;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;ACpGA;AAAA,qDAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,KAAI,uBAAwB;AAElC,mBAAe,YAAa,SAAS,MAAM;AACzC,UAAI,KAAM,QAAO;AAEjB,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAMD,KAAG,MAAM,OAAO;AAAA,MAChC,QAAQ;AACN,eAAO;AAAA,MACT;AAEA,aAAQ,SAAS,MAAM,YAAY,IAAK,QAAQ;AAAA,IAClD;AAEA,aAAS,gBAAiB,SAAS,MAAM;AACvC,UAAI,KAAM,QAAO;AAEjB,UAAI;AACJ,UAAI;AACF,gBAAQA,KAAG,UAAU,OAAO;AAAA,MAC9B,QAAQ;AACN,eAAO;AAAA,MACT;AACA,aAAQ,SAAS,MAAM,YAAY,IAAK,QAAQ;AAAA,IAClD;AAEA,IAAAD,QAAO,UAAU;AAAA,MACf,aAAaE,GAAE,WAAW;AAAA,MAC1B;AAAA,IACF;AAAA;AAAA;;;ACjCA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAMC,OAAK;AAEX,QAAM,EAAE,QAAQ,WAAW,IAAI;AAE/B,QAAM,EAAE,cAAc,iBAAiB,IAAI;AAC3C,QAAM,EAAE,aAAa,gBAAgB,IAAI;AAEzC,QAAM,EAAE,YAAAC,YAAW,IAAI;AAEvB,QAAM,EAAE,aAAa,IAAI;AAEzB,mBAAe,cAAe,SAAS,SAAS,MAAM;AACpD,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAMD,KAAG,MAAM,OAAO;AAAA,MAChC,QAAQ;AAAA,MAAE;AAEV,UAAI,SAAS,MAAM,eAAe,GAAG;AAGnC,YAAI;AACJ,YAAID,OAAK,WAAW,OAAO,GAAG;AAC5B,oBAAU,MAAMC,KAAG,KAAK,OAAO;AAAA,QACjC,OAAO;AACL,gBAAM,SAASD,OAAK,QAAQ,OAAO;AACnC,gBAAM,gBAAgBA,OAAK,KAAK,QAAQ,OAAO;AAC/C,cAAI;AACF,sBAAU,MAAMC,KAAG,KAAK,aAAa;AAAA,UACvC,QAAQ;AACN,sBAAU,MAAMA,KAAG,KAAK,OAAO;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,UAAU,MAAMA,KAAG,KAAK,OAAO;AACrC,YAAI,aAAa,SAAS,OAAO,EAAG;AAAA,MACtC;AAEA,YAAM,WAAW,MAAM,aAAa,SAAS,OAAO;AACpD,gBAAU,SAAS;AACnB,YAAM,SAAS,MAAM,YAAY,SAAS,OAAO,IAAI;AACrD,YAAME,OAAMH,OAAK,QAAQ,OAAO;AAEhC,UAAI,CAAE,MAAME,YAAWC,IAAG,GAAI;AAC5B,cAAM,OAAOA,IAAG;AAAA,MAClB;AAEA,aAAOF,KAAG,QAAQ,SAAS,SAAS,MAAM;AAAA,IAC5C;AAEA,aAAS,kBAAmB,SAAS,SAAS,MAAM;AAClD,UAAI;AACJ,UAAI;AACF,gBAAQA,KAAG,UAAU,OAAO;AAAA,MAC9B,QAAQ;AAAA,MAAE;AACV,UAAI,SAAS,MAAM,eAAe,GAAG;AAGnC,YAAI;AACJ,YAAID,OAAK,WAAW,OAAO,GAAG;AAC5B,oBAAUC,KAAG,SAAS,OAAO;AAAA,QAC/B,OAAO;AACL,gBAAM,SAASD,OAAK,QAAQ,OAAO;AACnC,gBAAM,gBAAgBA,OAAK,KAAK,QAAQ,OAAO;AAC/C,cAAI;AACF,sBAAUC,KAAG,SAAS,aAAa;AAAA,UACrC,QAAQ;AACN,sBAAUA,KAAG,SAAS,OAAO;AAAA,UAC/B;AAAA,QACF;AAEA,cAAM,UAAUA,KAAG,SAAS,OAAO;AACnC,YAAI,aAAa,SAAS,OAAO,EAAG;AAAA,MACtC;AAEA,YAAM,WAAW,iBAAiB,SAAS,OAAO;AAClD,gBAAU,SAAS;AACnB,aAAO,gBAAgB,SAAS,OAAO,IAAI;AAC3C,YAAME,OAAMH,OAAK,QAAQ,OAAO;AAChC,YAAMI,UAASH,KAAG,WAAWE,IAAG;AAChC,UAAIC,QAAQ,QAAOH,KAAG,YAAY,SAAS,SAAS,IAAI;AACxD,iBAAWE,IAAG;AACd,aAAOF,KAAG,YAAY,SAAS,SAAS,IAAI;AAAA,IAC9C;AAEA,IAAAH,QAAO,UAAU;AAAA,MACf,eAAeC,GAAE,aAAa;AAAA,MAC9B;AAAA,IACF;AAAA;AAAA;;;AC3FA;AAAA,8CAAAM,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,YAAY,eAAe,IAAI;AACvC,QAAM,EAAE,YAAY,eAAe,IAAI;AACvC,QAAM,EAAE,eAAe,kBAAkB,IAAI;AAE7C,IAAAA,QAAO,UAAU;AAAA;AAAA,MAEf;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,gBAAgB;AAAA;AAAA,MAEhB;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,gBAAgB;AAAA;AAAA,MAEhB;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,mBAAmB;AAAA,IACrB;AAAA;AAAA;;;ACtBA,IAAAC,iBAAA;AAAA,mCAAAC,UAAAC,SAAA;AAAA;AAAA,aAAS,UAAW,KAAK,EAAE,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,OAAO,IAAI,CAAC,GAAG;AACtF,YAAM,MAAM,WAAW,MAAM;AAC7B,YAAM,MAAM,KAAK,UAAU,KAAK,UAAU,MAAM;AAEhD,UAAI,QAAQ,QAAW;AACrB,cAAM,IAAI,UAAU,cAAc,OAAO,GAAG,iCAAiC;AAAA,MAC/E;AAEA,aAAO,IAAI,QAAQ,OAAO,GAAG,IAAI;AAAA,IACnC;AAEA,aAAS,SAAU,SAAS;AAE1B,UAAI,OAAO,SAAS,OAAO,EAAG,WAAU,QAAQ,SAAS,MAAM;AAC/D,aAAO,QAAQ,QAAQ,WAAW,EAAE;AAAA,IACtC;AAEA,IAAAA,QAAO,UAAU,EAAE,WAAW,SAAS;AAAA;AAAA;;;ACjBvC;AAAA,mCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI;AACJ,QAAI;AACF,YAAM;AAAA,IACR,SAASC,IAAG;AACV,YAAM,QAAQ,IAAI;AAAA,IACpB;AACA,QAAM,eAAe;AACrB,QAAM,EAAE,WAAW,SAAS,IAAI;AAEhC,mBAAe,UAAW,MAAM,UAAU,CAAC,GAAG;AAC5C,UAAI,OAAO,YAAY,UAAU;AAC/B,kBAAU,EAAE,UAAU,QAAQ;AAAA,MAChC;AAEA,YAAMC,OAAK,QAAQ,MAAM;AAEzB,YAAM,cAAc,YAAY,UAAU,QAAQ,SAAS;AAE3D,UAAI,OAAO,MAAM,aAAa,aAAaA,KAAG,QAAQ,EAAE,MAAM,OAAO;AAErE,aAAO,SAAS,IAAI;AAEpB,UAAI;AACJ,UAAI;AACF,cAAM,KAAK,MAAM,MAAM,UAAU,QAAQ,UAAU,IAAI;AAAA,MACzD,SAAS,KAAK;AACZ,YAAI,aAAa;AACf,cAAI,UAAU,GAAG,IAAI,KAAK,IAAI,OAAO;AACrC,gBAAM;AAAA,QACR,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,QAAM,WAAW,aAAa,YAAY,SAAS;AAEnD,aAASC,cAAc,MAAM,UAAU,CAAC,GAAG;AACzC,UAAI,OAAO,YAAY,UAAU;AAC/B,kBAAU,EAAE,UAAU,QAAQ;AAAA,MAChC;AAEA,YAAMD,OAAK,QAAQ,MAAM;AAEzB,YAAM,cAAc,YAAY,UAAU,QAAQ,SAAS;AAE3D,UAAI;AACF,YAAI,UAAUA,KAAG,aAAa,MAAM,OAAO;AAC3C,kBAAU,SAAS,OAAO;AAC1B,eAAO,KAAK,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC5C,SAAS,KAAK;AACZ,YAAI,aAAa;AACf,cAAI,UAAU,GAAG,IAAI,KAAK,IAAI,OAAO;AACrC,gBAAM;AAAA,QACR,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,mBAAe,WAAY,MAAM,KAAK,UAAU,CAAC,GAAG;AAClD,YAAMA,OAAK,QAAQ,MAAM;AAEzB,YAAM,MAAM,UAAU,KAAK,OAAO;AAElC,YAAM,aAAa,aAAaA,KAAG,SAAS,EAAE,MAAM,KAAK,OAAO;AAAA,IAClE;AAEA,QAAME,aAAY,aAAa,YAAY,UAAU;AAErD,aAASC,eAAe,MAAM,KAAK,UAAU,CAAC,GAAG;AAC/C,YAAMH,OAAK,QAAQ,MAAM;AAEzB,YAAM,MAAM,UAAU,KAAK,OAAO;AAElC,aAAOA,KAAG,cAAc,MAAM,KAAK,OAAO;AAAA,IAC5C;AAIA,IAAAF,QAAO,UAAU;AAAA,MACf;AAAA,MACA,cAAAG;AAAA,MACA,WAAAC;AAAA,MACA,eAAAC;AAAA,IACF;AAAA;AAAA;;;ACvFA,IAAAC,oBAAA;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,IAAAA,QAAO,UAAU;AAAA;AAAA,MAEf,UAAU,SAAS;AAAA,MACnB,cAAc,SAAS;AAAA,MACvB,WAAW,SAAS;AAAA,MACpB,eAAe,SAAS;AAAA,IAC1B;AAAA;AAAA;;;ACVA;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,QAAQ;AACd,QAAMC,cAAa,sBAA0B;AAE7C,mBAAe,WAAY,MAAM,MAAM,WAAW,SAAS;AACzD,YAAMC,OAAMF,OAAK,QAAQ,IAAI;AAE7B,UAAI,CAAE,MAAMC,YAAWC,IAAG,GAAI;AAC5B,cAAM,MAAM,OAAOA,IAAG;AAAA,MACxB;AAEA,aAAOH,KAAG,UAAU,MAAM,MAAM,QAAQ;AAAA,IAC1C;AAEA,aAAS,eAAgB,SAAS,MAAM;AACtC,YAAMG,OAAMF,OAAK,QAAQ,IAAI;AAC7B,UAAI,CAACD,KAAG,WAAWG,IAAG,GAAG;AACvB,cAAM,WAAWA,IAAG;AAAA,MACtB;AAEA,MAAAH,KAAG,cAAc,MAAM,GAAG,IAAI;AAAA,IAChC;AAEA,IAAAF,QAAO,UAAU;AAAA,MACf,YAAYC,GAAE,UAAU;AAAA,MACxB;AAAA,IACF;AAAA;AAAA;;;AC9BA;AAAA,kDAAAK,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,EAAE,WAAW,IAAI;AAEvB,mBAAe,WAAY,MAAM,MAAM,UAAU,CAAC,GAAG;AACnD,YAAM,MAAM,UAAU,MAAM,OAAO;AAEnC,YAAM,WAAW,MAAM,KAAK,OAAO;AAAA,IACrC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACXjB;AAAA,uDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,EAAE,eAAe,IAAI;AAE3B,aAAS,eAAgB,MAAM,MAAM,SAAS;AAC5C,YAAM,MAAM,UAAU,MAAM,OAAO;AAEnC,qBAAe,MAAM,KAAK,OAAO;AAAA,IACnC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACXjB;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,QAAM,WAAW;AAEjB,aAAS,aAAaA,GAAE,qBAAwB;AAChD,aAAS,iBAAiB;AAE1B,aAAS,aAAa,SAAS;AAC/B,aAAS,iBAAiB,SAAS;AACnC,aAAS,YAAY,SAAS;AAC9B,aAAS,gBAAgB,SAAS;AAClC,aAAS,WAAW,SAAS;AAC7B,aAAS,eAAe,SAAS;AAEjC,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,EAAE,QAAAC,QAAO,IAAI;AACnB,QAAM,EAAE,QAAAC,QAAO,IAAI;AACnB,QAAM,EAAE,YAAAC,YAAW,IAAI;AACvB,QAAM,OAAO;AAEb,mBAAe,KAAM,KAAK,MAAM,OAAO,CAAC,GAAG;AACzC,YAAM,YAAY,KAAK,aAAa,KAAK,WAAW;AAEpD,YAAM,EAAE,SAAS,iBAAiB,MAAM,IAAI,MAAM,KAAK,WAAW,KAAK,MAAM,QAAQ,IAAI;AAEzF,YAAM,KAAK,iBAAiB,KAAK,SAAS,MAAM,MAAM;AAGtD,YAAM,aAAaH,OAAK,QAAQ,IAAI;AACpC,YAAM,mBAAmBA,OAAK,MAAM,UAAU;AAC9C,UAAI,iBAAiB,SAAS,YAAY;AACxC,cAAME,QAAO,UAAU;AAAA,MACzB;AAEA,aAAO,SAAS,KAAK,MAAM,WAAW,cAAc;AAAA,IACtD;AAEA,mBAAe,SAAU,KAAK,MAAM,WAAW,gBAAgB;AAC7D,UAAI,CAAC,gBAAgB;AACnB,YAAI,WAAW;AACb,gBAAMD,QAAO,IAAI;AAAA,QACnB,WAAW,MAAME,YAAW,IAAI,GAAG;AACjC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AAAA,MACF;AAEA,UAAI;AAEF,cAAMJ,KAAG,OAAO,KAAK,IAAI;AAAA,MAC3B,SAAS,KAAK;AACZ,YAAI,IAAI,SAAS,SAAS;AACxB,gBAAM;AAAA,QACR;AACA,cAAM,iBAAiB,KAAK,MAAM,SAAS;AAAA,MAC7C;AAAA,IACF;AAEA,mBAAe,iBAAkB,KAAK,MAAM,WAAW;AACrD,YAAM,OAAO;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,oBAAoB;AAAA,MACtB;AAEA,YAAM,KAAK,KAAK,MAAM,IAAI;AAC1B,aAAOE,QAAO,GAAG;AAAA,IACnB;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;AC1DjB;AAAA,gDAAAM,UAAAC,SAAA;AAAA;AAEA,QAAMC,OAAK;AACX,QAAMC,SAAO,QAAQ,MAAM;AAC3B,QAAM,WAAW,gBAAmB;AACpC,QAAM,aAAa,iBAAqB;AACxC,QAAM,aAAa,iBAAqB;AACxC,QAAM,OAAO;AAEb,aAAS,SAAU,KAAK,MAAM,MAAM;AAClC,aAAO,QAAQ,CAAC;AAChB,YAAM,YAAY,KAAK,aAAa,KAAK,WAAW;AAEpD,YAAM,EAAE,SAAS,iBAAiB,MAAM,IAAI,KAAK,eAAe,KAAK,MAAM,QAAQ,IAAI;AACvF,WAAK,qBAAqB,KAAK,SAAS,MAAM,MAAM;AACpD,UAAI,CAAC,aAAa,IAAI,EAAG,YAAWA,OAAK,QAAQ,IAAI,CAAC;AACtD,aAAO,SAAS,KAAK,MAAM,WAAW,cAAc;AAAA,IACtD;AAEA,aAAS,aAAc,MAAM;AAC3B,YAAMC,UAASD,OAAK,QAAQ,IAAI;AAChC,YAAM,aAAaA,OAAK,MAAMC,OAAM;AACpC,aAAO,WAAW,SAASA;AAAA,IAC7B;AAEA,aAAS,SAAU,KAAK,MAAM,WAAW,gBAAgB;AACvD,UAAI,eAAgB,QAAO,OAAO,KAAK,MAAM,SAAS;AACtD,UAAI,WAAW;AACb,mBAAW,IAAI;AACf,eAAO,OAAO,KAAK,MAAM,SAAS;AAAA,MACpC;AACA,UAAIF,KAAG,WAAW,IAAI,EAAG,OAAM,IAAI,MAAM,sBAAsB;AAC/D,aAAO,OAAO,KAAK,MAAM,SAAS;AAAA,IACpC;AAEA,aAAS,OAAQ,KAAK,MAAM,WAAW;AACrC,UAAI;AACF,QAAAA,KAAG,WAAW,KAAK,IAAI;AAAA,MACzB,SAAS,KAAK;AACZ,YAAI,IAAI,SAAS,QAAS,OAAM;AAChC,eAAO,iBAAiB,KAAK,MAAM,SAAS;AAAA,MAC9C;AAAA,IACF;AAEA,aAAS,iBAAkB,KAAK,MAAM,WAAW;AAC/C,YAAM,OAAO;AAAA,QACX;AAAA,QACA,cAAc;AAAA,QACd,oBAAoB;AAAA,MACtB;AACA,eAAS,KAAK,MAAM,IAAI;AACxB,aAAO,WAAW,GAAG;AAAA,IACvB;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACtDjB,IAAAI,gBAAA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI,uBAAwB;AAClC,IAAAD,QAAO,UAAU;AAAA,MACf,MAAMC,GAAE,cAAiB;AAAA,MACzB,UAAU;AAAA,IACZ;AAAA;AAAA;;;ACNA;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA,MAEf,GAAG;AAAA;AAAA,MAEH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA;AAAA;;;ACRA,eAAsB,qBAAqB,cAAuC;AAChF,QAAM,kBAAkB,MAAM,gBAAAC,QAAI,WAAW,YAAY;AACzD,MAAI,CAAC,gBAAiB,QAAO;AAE7B,QAAMC,UAAS,kBAAAC,QAAK,QAAQ,YAAY;AACxC,QAAM,OAAO,kBAAAA,QAAK,SAAS,YAAY;AAGvC,WAASC,KAAI,GAAGA,MAAK,KAAMA,MAAK;AAC9B,UAAM,YAAY,kBAAAD,QAAK,KAAKD,SAAQ,GAAG,IAAI,IAAIE,EAAC,EAAE;AAClD,QAAI,CAAE,MAAM,gBAAAH,QAAI,WAAW,SAAS,EAAI,QAAO;AAAA,EACjD;AAEA,QAAM,IAAI,WAAS,uCAAuC;AAAA,IACxD,UAAU;AAAA,IACV,MAAM,SAAS,IAAI,cAAc,IAAI,eAAeC,OAAM;AAAA,EAC5D,CAAC;AACH;AAEA,eAAsB,eAAeG,MAA4B;AAC/D,QAAMC,UAAS,MAAM,gBAAAL,QAAI,WAAWI,IAAG;AACvC,MAAIC,SAAQ;AACV,UAAM,IAAI,WAAS,oCAAoC;AAAA,MACrD,MAAM,2CAA2CD,IAAG;AAAA,MACpD,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACA,QAAM,gBAAAJ,QAAI,OAAOI,IAAG;AACtB;AAEA,eAAsB,gBAAgB,UAAkB,OAA+B;AACrF,QAAMA,OAAM,kBAAAF,QAAK,QAAQ,QAAQ;AACjC,QAAM,gBAAAF,QAAI,OAAOI,IAAG;AACpB,QAAM,MAAM,GAAG,QAAQ,QAAQ,KAAK,IAAI,CAAC;AACzC,QAAM,kBAAAE,QAAG,UAAU,KAAK,KAAK,UAAU,OAAO,MAAM,CAAC,IAAI,MAAM,MAAM;AACrE,QAAM,kBAAAA,QAAG,OAAO,KAAK,QAAQ;AAC/B;AAEA,eAAsB,gBAAgB,UAAkB,UAAiC;AACvF,QAAMF,OAAM,kBAAAF,QAAK,QAAQ,QAAQ;AACjC,QAAM,gBAAAF,QAAI,OAAOI,IAAG;AACpB,QAAM,MAAM,GAAG,QAAQ,QAAQ,KAAK,IAAI,CAAC;AACzC,QAAM,kBAAAE,QAAG,UAAU,KAAK,UAAU,MAAM;AACxC,QAAM,kBAAAA,QAAG,OAAO,KAAK,QAAQ;AAC/B;AAnDA,IAAAC,mBACAC,mBAEA;AAHA;AAAA;AAAA;AAAA,IAAAD,oBAAe;AACf,IAAAC,oBAAiB;AAEjB,sBAAgB;AAEhB;AAAA;AAAA;;;ACLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA,SAAS,YAAqB;AAC5B,SAAO,QAAQ,IAAI,kBAAkB;AACvC;AAEA,SAASC,iBAAwB;AAC/B,QAAM,IAAI,QAAQ,IAAI;AACtB,MAAI,OAAO,MAAM,YAAY,EAAE,KAAK,EAAE,SAAS,EAAG,QAAO;AACzD,SAAO,kBAAAC,QAAK,KAAK,gBAAAC,QAAG,QAAQ,GAAG,SAAS;AAC1C;AAEA,SAAS,kBAA0B;AACjC,SAAO,kBAAAD,QAAK,KAAKD,eAAc,GAAG,SAAS,cAAc;AAC3D;AAOA,SAAS,+BAAuC;AAC9C,SAAO,kBAAAC,QAAK,KAAKD,eAAc,GAAG,SAAS,sBAAsB;AACnE;AAEA,eAAe,kBAIL;AACR,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI;AACF,UAAM,MAAW,MAAM,OAAO,QAAQ;AACtC,UAAM,aAAa,CAAC,KAAK,SAAS,GAAG,EAAE,OAAO,OAAO;AACrD,eAAWG,MAAK,YAAY;AAC1B,UACEA,MACA,OAAOA,GAAE,gBAAgB,cACzB,OAAOA,GAAE,gBAAgB,cACzB,OAAOA,GAAE,mBAAmB,YAC5B;AACA,eAAOA;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,sBAAsB,UAAiC;AACpE,QAAMC,OAAM,kBAAAH,QAAK,QAAQ,QAAQ;AACjC,QAAM,kBAAAI,QAAG,MAAMD,MAAK,EAAE,WAAW,KAAK,CAAC;AACvC,MAAI;AACF,UAAM,kBAAAC,QAAG,MAAMD,MAAK,GAAK;AAAA,EAC3B,QAAQ;AAAA,EAAC;AACT,MAAI;AACF,UAAM,kBAAAC,QAAG,MAAM,UAAU,GAAK;AAAA,EAChC,QAAQ;AAAA,EAAC;AACX;AAEA,eAAe,yBAAyB,SAAuC;AAC7E,QAAM,KAAK,gBAAgB;AAC3B,QAAM,gBAAgB,IAAI,OAAO;AACjC,QAAM,sBAAsB,EAAE;AAChC;AAaA,eAAe,oBAAmD;AAChE,QAAM,SAAS,MAAM,gBAAgB;AACrC,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,MAAM,MAAM,OAAO,YAAY,gBAAgB,cAAc,EAAE,MAAM,MAAM,IAAI;AACrF,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAM,SAAS,oBAAoB,UAAU,KAAK,MAAM,GAAG,CAAC;AAC5D,WAAO,OAAO,UAAU,OAAO,OAAO;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,oBAAoB,UAAiD;AAClF,QAAM,MAAM,MAAM,kBAAAA,QAAG,SAAS,UAAU,MAAM,EAAE,MAAM,MAAM,IAAI;AAChE,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAM,SAAS,oBAAoB,UAAU,KAAK,MAAM,GAAG,CAAC;AAC5D,QAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,UAAM,sBAAsB,QAAQ;AACpC,WAAO,OAAO;AAAA,EAChB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,kBAAiD;AAQ9D,QAAM,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC1C,oBAAoB,gBAAgB,CAAC;AAAA,IACrC,oBAAoB,6BAA6B,CAAC;AAAA,EACpD,CAAC;AACD,SAAO,oBAAoB,SAAS,MAAM;AAC5C;AAEA,SAAS,oBACPC,IACA,GACsB;AACtB,MAAI,CAACA,GAAG,QAAO;AACf,MAAI,CAAC,EAAG,QAAOA;AAGf,SAAOA,GAAE,cAAc,EAAE,aAAaA,KAAI;AAC5C;AAEA,eAAsB,aAA4C;AAChE,QAAM,CAAC,YAAY,QAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,CAAC;AACzF,SAAO,oBAAoB,YAAY,QAAQ;AACjD;AAEA,eAAsB,WAAW,SAAuC;AACtE,QAAM,SAAS,oBAAoB,UAAU,OAAO;AACpD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,WAAS,+CAA+C,EAAE,UAAU,EAAE,CAAC;AAAA,EACnF;AAUA,QAAM,yBAAyB,OAAO,IAAI;AAO1C,QAAM,kBAAAD,QAAG,GAAG,6BAA6B,GAAG,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAE3E,QAAM,SAAS,MAAM,gBAAgB;AACrC,MAAI,QAAQ;AACV,QAAI;AACF,YAAM,OAAO,YAAY,gBAAgB,gBAAgB,KAAK,UAAU,OAAO,IAAI,CAAC;AAAA,IACtF,QAAQ;AAAA,IAKR;AAAA,EACF;AACF;AAEA,eAAsB,eAA8B;AAClD,QAAM,SAAS,MAAM,gBAAgB;AACrC,MAAI,QAAQ;AACV,UAAM,OAAO,eAAe,gBAAgB,cAAc;AAAA,EAC5D;AAIA,QAAM,kBAAAA,QAAG,GAAG,gBAAgB,GAAG,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAC9D,QAAM,kBAAAA,QAAG,GAAG,6BAA6B,GAAG,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAC7E;AAzMA,IAAAE,mBACAC,iBACAC,mBAOM,gBACA;AAVN;AAAA;AAAA;AAAA,IAAAF,oBAAe;AACf,IAAAC,kBAAe;AACf,IAAAC,oBAAiB;AAEjB;AAEA;AACA;AAEA,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AAAA;AAAA;;;ACahB,SAAS,UAAU,GAAG,GAAG;AAC9B,MAAI,OAAO,MAAM,cAAc,MAAM;AACjC,UAAM,IAAI,UAAU,yBAAyB,OAAO,CAAC,IAAI,+BAA+B;AAC5F,gBAAc,GAAG,CAAC;AAClB,WAAS,KAAK;AAAE,SAAK,cAAc;AAAA,EAAG;AACtC,IAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AACpF;AAaO,SAAS,OAAO,GAAG,GAAG;AAC3B,MAAI,IAAI,CAAC;AACT,WAAS,KAAK,EAAG,KAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI;AAC9E,MAAE,CAAC,IAAI,EAAE,CAAC;AACd,MAAI,KAAK,QAAQ,OAAO,OAAO,0BAA0B;AACrD,aAASC,KAAI,GAAG,IAAI,OAAO,sBAAsB,CAAC,GAAGA,KAAI,EAAE,QAAQA,MAAK;AACpE,UAAI,EAAE,QAAQ,EAAEA,EAAC,CAAC,IAAI,KAAK,OAAO,UAAU,qBAAqB,KAAK,GAAG,EAAEA,EAAC,CAAC;AACzE,UAAE,EAAEA,EAAC,CAAC,IAAI,EAAE,EAAEA,EAAC,CAAC;AAAA,IACxB;AACJ,SAAO;AACT;AA8DO,SAAS,UAAU,SAAS,YAAY,GAAG,WAAW;AAC3D,WAAS,MAAM,OAAO;AAAE,WAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,cAAQ,KAAK;AAAA,IAAG,CAAC;AAAA,EAAG;AAC3G,SAAO,KAAK,MAAM,IAAI,UAAU,SAAU,SAASC,SAAQ;AACvD,aAAS,UAAU,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,KAAK,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,QAAAA,QAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC1F,aAAS,SAAS,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,OAAO,EAAE,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,QAAAA,QAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC7F,aAAS,KAAK,QAAQ;AAAE,aAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ;AAAA,IAAG;AAC7G,UAAM,YAAY,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACxE,CAAC;AACH;AAEO,SAAS,YAAY,SAAS,MAAM;AACzC,MAAIC,KAAI,EAAE,OAAO,GAAG,MAAM,WAAW;AAAE,QAAI,EAAE,CAAC,IAAI,EAAG,OAAM,EAAE,CAAC;AAAG,WAAO,EAAE,CAAC;AAAA,EAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO,QAAQ,OAAO,aAAa,aAAa,WAAW,QAAQ,SAAS;AAC/L,SAAO,EAAE,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,GAAG,OAAO,WAAW,eAAe,EAAE,OAAO,QAAQ,IAAI,WAAW;AAAE,WAAO;AAAA,EAAM,IAAI;AAC1J,WAAS,KAAKC,IAAG;AAAE,WAAO,SAAU,GAAG;AAAE,aAAO,KAAK,CAACA,IAAG,CAAC,CAAC;AAAA,IAAG;AAAA,EAAG;AACjE,WAAS,KAAK,IAAI;AACd,QAAI,EAAG,OAAM,IAAI,UAAU,iCAAiC;AAC5D,WAAO,MAAM,IAAI,GAAG,GAAG,CAAC,MAAMD,KAAI,KAAKA,GAAG,KAAI;AAC1C,UAAI,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,OAAO,IAAI,EAAE,QAAQ,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAM,QAAO;AAC3J,UAAI,IAAI,GAAG,EAAG,MAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK;AACtC,cAAQ,GAAG,CAAC,GAAG;AAAA,QACX,KAAK;AAAA,QAAG,KAAK;AAAG,cAAI;AAAI;AAAA,QACxB,KAAK;AAAG,UAAAA,GAAE;AAAS,iBAAO,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,MAAM;AAAA,QACtD,KAAK;AAAG,UAAAA,GAAE;AAAS,cAAI,GAAG,CAAC;AAAG,eAAK,CAAC,CAAC;AAAG;AAAA,QACxC,KAAK;AAAG,eAAKA,GAAE,IAAI,IAAI;AAAG,UAAAA,GAAE,KAAK,IAAI;AAAG;AAAA,QACxC;AACI,cAAI,EAAE,IAAIA,GAAE,MAAM,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI;AAAE,YAAAA,KAAI;AAAG;AAAA,UAAU;AAC3G,cAAI,GAAG,CAAC,MAAM,MAAM,CAAC,KAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,IAAK;AAAE,YAAAA,GAAE,QAAQ,GAAG,CAAC;AAAG;AAAA,UAAO;AACrF,cAAI,GAAG,CAAC,MAAM,KAAKA,GAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,YAAAA,GAAE,QAAQ,EAAE,CAAC;AAAG,gBAAI;AAAI;AAAA,UAAO;AACpE,cAAI,KAAKA,GAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,YAAAA,GAAE,QAAQ,EAAE,CAAC;AAAG,YAAAA,GAAE,IAAI,KAAK,EAAE;AAAG;AAAA,UAAO;AAClE,cAAI,EAAE,CAAC,EAAG,CAAAA,GAAE,IAAI,IAAI;AACpB,UAAAA,GAAE,KAAK,IAAI;AAAG;AAAA,MACtB;AACA,WAAK,KAAK,KAAK,SAASA,EAAC;AAAA,IAC7B,SAAS,GAAG;AAAE,WAAK,CAAC,GAAG,CAAC;AAAG,UAAI;AAAA,IAAG,UAAE;AAAU,UAAI,IAAI;AAAA,IAAG;AACzD,QAAI,GAAG,CAAC,IAAI,EAAG,OAAM,GAAG,CAAC;AAAG,WAAO,EAAE,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,KAAK;AAAA,EACnF;AACF;AAkBO,SAAS,SAASE,IAAG;AAC1B,MAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAU,IAAI,KAAKA,GAAE,CAAC,GAAGJ,KAAI;AAC5E,MAAI,EAAG,QAAO,EAAE,KAAKI,EAAC;AACtB,MAAIA,MAAK,OAAOA,GAAE,WAAW,SAAU,QAAO;AAAA,IAC1C,MAAM,WAAY;AACd,UAAIA,MAAKJ,MAAKI,GAAE,OAAQ,CAAAA,KAAI;AAC5B,aAAO,EAAE,OAAOA,MAAKA,GAAEJ,IAAG,GAAG,MAAM,CAACI,GAAE;AAAA,IAC1C;AAAA,EACJ;AACA,QAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AACvF;AAEO,SAAS,OAAOA,IAAGD,IAAG;AAC3B,MAAI,IAAI,OAAO,WAAW,cAAcC,GAAE,OAAO,QAAQ;AACzD,MAAI,CAAC,EAAG,QAAOA;AACf,MAAIJ,KAAI,EAAE,KAAKI,EAAC,GAAG,GAAG,KAAK,CAAC,GAAG;AAC/B,MAAI;AACA,YAAQD,OAAM,UAAUA,OAAM,MAAM,EAAE,IAAIH,GAAE,KAAK,GAAG,KAAM,IAAG,KAAK,EAAE,KAAK;AAAA,EAC7E,SACO,OAAO;AAAE,QAAI,EAAE,MAAa;AAAA,EAAG,UACtC;AACI,QAAI;AACA,UAAI,KAAK,CAAC,EAAE,SAAS,IAAIA,GAAE,QAAQ,GAAI,GAAE,KAAKA,EAAC;AAAA,IACnD,UACA;AAAU,UAAI,EAAG,OAAM,EAAE;AAAA,IAAO;AAAA,EACpC;AACA,SAAO;AACT;AAkBO,SAAS,cAAc,IAAI,MAAM,MAAM;AAC5C,MAAI,QAAQ,UAAU,WAAW,EAAG,UAASA,KAAI,GAAG,IAAI,KAAK,QAAQ,IAAIA,KAAI,GAAGA,MAAK;AACjF,QAAI,MAAM,EAAEA,MAAK,OAAO;AACpB,UAAI,CAAC,GAAI,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAGA,EAAC;AACnD,SAAGA,EAAC,IAAI,KAAKA,EAAC;AAAA,IAClB;AAAA,EACJ;AACA,SAAO,GAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AACzD;AA7NA,IAgBI,eAeO;AA/BX;AAAA;AAAA;AAgBA,IAAI,gBAAgB,SAAS,GAAG,GAAG;AACjC,sBAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUK,IAAGC,IAAG;AAAE,QAAAD,GAAE,YAAYC;AAAA,MAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,iBAAS,KAAKA,GAAG,KAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC,EAAG,CAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,MAAG;AACpG,aAAO,cAAc,GAAG,CAAC;AAAA,IAC3B;AAUO,IAAI,WAAW,WAAW;AAC/B,iBAAW,OAAO,UAAU,SAASC,UAAS,GAAG;AAC7C,iBAAS,GAAGP,KAAI,GAAGG,KAAI,UAAU,QAAQH,KAAIG,IAAGH,MAAK;AACjD,cAAI,UAAUA,EAAC;AACf,mBAAS,KAAK,EAAG,KAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC,EAAG,GAAE,CAAC,IAAI,EAAE,CAAC;AAAA,QAC/E;AACA,eAAO;AAAA,MACX;AACA,aAAO,SAAS,MAAM,MAAM,SAAS;AAAA,IACvC;AAAA;AAAA;;;ACrCA,IAAY,mBA8FA;AA9FZ;;;AAAA,KAAA,SAAYQ,oBAAiB;AAE3B,MAAAA,mBAAA,KAAA,IAAA;AACA,MAAAA,mBAAA,UAAA,IAAA;AAGA,MAAAA,mBAAA,KAAA,IAAA;AACA,MAAAA,mBAAA,QAAA,IAAA;AACA,MAAAA,mBAAA,SAAA,IAAA;AACA,MAAAA,mBAAA,QAAA,IAAA;AAGA,MAAAA,mBAAA,WAAA,IAAA;AACA,MAAAA,mBAAA,YAAA,IAAA;AAGA,MAAAA,mBAAA,OAAA,IAAA;AACA,MAAAA,mBAAA,WAAA,IAAA;IACF,GAlBY,sBAAA,oBAAiB,CAAA,EAAA;AA8F7B,KAAA,SAAYC,mBAAgB;AAC1B,MAAAA,kBAAA,UAAA,IAAA;AACA,MAAAA,kBAAA,gBAAA,IAAA;AACA,MAAAA,kBAAA,SAAA,IAAA;IACF,GAJY,qBAAA,mBAAgB,CAAA,EAAA;;;;;AC/F5B,IAAa,aACA,kBACA,gBACA,uBACA,sBACA,yBACA,4BACA;AAPb;;;AAAO,IAAM,cAAc;AACpB,IAAM,mBAAmB;AACzB,IAAM,iBAAiB,GAAA,OAAG,kBAAgB,SAAA;AAC1C,IAAM,wBAAwB;AAC9B,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAChC,IAAM,6BAA6B;AACnC,IAAM,gCAAgC;;;;;ICTvC,mBAEO,eAYA;;;;;AAdb,IAAM,oBAAoB;AAEnB,IAAM,gBAAgB,SAAC,YAAkC;AAC9D,UAAI,OAAO,KAAK,UAAU,EAAE,SAAS,mBAAmB;AACtD,eAAO;;AAET,eAAW,OAAO,YAAY;AAE5B,YAAM,QAAQ,WAAW,GAAG;AAC5B,YAAI,CAAC,kBAAkB,KAAK,KAAK;AAAG,iBAAO;;AAE7C,aAAO;IACT;AAEO,IAAM,oBAAoB,SAAC,UAAkB,OAAU;;AAC5D,UAAI,OAAO,aAAa;AAAU,eAAO;AACzC,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAIC,WAAU;;AACd,mBAA2B,UAAA,SAAA,KAAK,GAAA,YAAA,QAAA,KAAA,GAAA,CAAA,UAAA,MAAA,YAAA,QAAA,KAAA,GAAE;AAA7B,gBAAM,eAAY,UAAA;AACrB,gBAAI,MAAM,QAAQ,YAAY,GAAG;AAC/B,qBAAO;uBACE,OAAO,iBAAiB,UAAU;AAC3C,cAAAA,WAAUA,YAAW,cAAc,YAAsB;uBAChD,CAAC,CAAC,UAAU,QAAQ,EAAE,SAAS,OAAO,YAAY,GAAG;AAC9D,qBAAO;;AAET,gBAAI,CAACA,UAAS;AACZ,qBAAO;;;;;;;;;;;;iBAGF,UAAU,QAAQ,UAAU,QAAW;AAChD,eAAO;iBACE,OAAO,UAAU,UAAU;AAEpC,eAAO,cAAc,KAAK;iBACjB,CAAC,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,GAAG;AAClE,eAAO;;AAET,aAAO;IACT;;;;;ICtBA,UAsIYC,oBAuBC;;;;;AA9Kb;AACA;AAgBA,IAAA;KAAA,WAAA;AAAA,eAAAC,YAAA;AACqB,aAAA,eAA4B,oBAAI,IAAG;AAC5C,aAAA,cAAsC,CAAA;MAmGlD;AAjGS,MAAAA,UAAA,UAAA,oBAAP,WAAA;AACE,eAAA,SAAA,CAAA,GAAY,KAAK,WAAW;MAC9B;AAEO,MAAAA,UAAA,UAAA,MAAP,SAAW,UAAkB,OAAwB;AACnD,aAAK,SAASD,mBAAkB,KAAK,UAAU,KAAK;AACpD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,UAAP,SAAe,UAAkB,OAAwB;AACvD,aAAK,SAASD,mBAAkB,UAAU,UAAU,KAAK;AACzD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,SAAP,SAAc,UAAkB,OAAwB;AACtD,aAAK,SAASD,mBAAkB,QAAQ,UAAU,KAAK;AACvD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,UAAP,SAAe,UAAkB,OAAwB;AACvD,aAAK,SAASD,mBAAkB,SAAS,UAAU,KAAK;AACxD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,aAAP,SAAkB,UAAkB,OAAwB;AAC1D,aAAK,SAASD,mBAAkB,YAAY,UAAU,KAAK;AAC3D,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,YAAP,SAAiB,UAAkB,OAAwB;AACzD,aAAK,SAASD,mBAAkB,WAAW,UAAU,KAAK;AAC1D,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,SAAP,SAAc,UAAkB,OAAwB;AACtD,aAAK,SAASD,mBAAkB,QAAQ,UAAU,KAAK;AACvD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,MAAP,SAAW,UAAkB,OAAa;AACxC,aAAK,SAASD,mBAAkB,KAAK,UAAU,KAAK;AACpD,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,QAAP,SAAa,UAAgB;AAC3B,aAAK,SAASD,mBAAkB,OAAO,UAAU,WAAW;AAC5D,eAAO;MACT;AAEO,MAAAC,UAAA,UAAA,WAAP,WAAA;AAEE,aAAK,cAAc,CAAA;AACnB,aAAK,YAAYD,mBAAkB,SAAS,IAAI;AAEhD,eAAO;MACT;AAGQ,MAAAC,UAAA,UAAA,WAAR,SAAiB,WAA8B,UAAkB,OAAwB;AACvF,YAAI,KAAK,UAAU,WAAW,UAAU,KAAK,GAAG;AAE9C,cAAI,kBAAuB,KAAK,YAAY,SAAS;AACrD,cAAI,oBAAoB,QAAW;AACjC,8BAAkB,CAAA;AAElB,iBAAK,YAAY,SAAS,IAAI;;AAIhC,0BAAgB,QAAQ,IAAI;AAC5B,eAAK,aAAa,IAAI,QAAQ;AAC9B,iBAAO;;AAGT,eAAO;MACT;AAEQ,MAAAA,UAAA,UAAA,YAAR,SAAkB,WAA8B,UAAkB,OAAwB;AACxF,YAAI,KAAK,YAAYD,mBAAkB,SAAS,MAAM,QAAW;AAE/D,iBAAO;;AAGT,YAAI,KAAK,aAAa,IAAI,QAAQ,GAAG;AAEnC,iBAAO;;AAGT,YAAI,cAAcA,mBAAkB,KAAK;AACvC,iBAAO,OAAO,UAAU;;AAG1B,YAAI,cAAcA,mBAAkB,SAAS,cAAcA,mBAAkB,QAAQ;AACnF,iBAAO,kBAAkB,UAAU,KAAK;;AAE1C,eAAO;MACT;AACF,aAAAC;IAAA,GArGA;AAsIA,KAAA,SAAYD,oBAAiB;AAE3B,MAAAA,mBAAA,KAAA,IAAA;AACA,MAAAA,mBAAA,UAAA,IAAA;AAGA,MAAAA,mBAAA,KAAA,IAAA;AACA,MAAAA,mBAAA,QAAA,IAAA;AACA,MAAAA,mBAAA,SAAA,IAAA;AACA,MAAAA,mBAAA,QAAA,IAAA;AAGA,MAAAA,mBAAA,WAAA,IAAA;AACA,MAAAA,mBAAA,YAAA,IAAA;AAGA,MAAAA,mBAAA,OAAA,IAAA;AACA,MAAAA,mBAAA,WAAA,IAAA;IACF,GAlBYA,uBAAAA,qBAAiB,CAAA,EAAA;AAuBtB,IAAM,4BAA4B;MACvCA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;MAClBA,mBAAkB;;;;;;ACxLpB,IAAa,iBACA,0BACA,8BACA,iBACA,yBACA,iBACA;AANb;;;AAAO,IAAM,kBAAkB;AACxB,IAAM,2BAA2B;AACjC,IAAM,+BAA+B;AACrC,IAAM,kBAAkB;AACxB,IAAM,0BAA0B;AAChC,IAAM,kBAAkB;AACxB,IAAM,yBAAyB;;;;;ACNtC,IACY;AADZ;;;AACA,KAAA,SAAYE,SAAM;AAEhB,MAAAA,QAAA,SAAA,IAAA;AAEA,MAAAA,QAAA,SAAA,IAAA;AAEA,MAAAA,QAAA,SAAA,IAAA;AAEA,MAAAA,QAAA,WAAA,IAAA;AAEA,MAAAA,QAAA,iBAAA,IAAA;AAEA,MAAAA,QAAA,SAAA,IAAA;AAEA,MAAAA,QAAA,QAAA,IAAA;AAEA,MAAAA,QAAA,SAAA,IAAA;AAEA,MAAAA,QAAA,aAAA,IAAA;IACF,GAnBY,WAAA,SAAM,CAAA,EAAA;;;;;ACClB,IAEa;AAFb;;;;AAEO,IAAM,cAAc,SAAC,OAAc,MAAU,SAAgC;AAA1C,UAAA,SAAA,QAAA;AAAA,eAAA;MAAQ;AAAE,UAAA,YAAA,QAAA;AAAA,kBAAkB,OAAO;MAAO;AAClF,aAAO,EAAE,OAAO,MAAM,QAAO;IAC/B;;;;;ACNA,IAGa;AAHb;;;AAGO,IAAM,iBAAiB,WAAA;AAG5B,UAAM,4BAA4B;AAClC,UAAI,OAAO,eAAe,eAAe,OAAO,WAAW,yBAAyB,MAAM,aAAa;AACrG,eAAO,WAAW,yBAAyB;;AAE7C,UAAI,OAAO,eAAe,aAAa;AACrC,eAAO;;AAET,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO;;AAET,UAAI,OAAO,SAAS,aAAa;AAC/B,eAAO;;AAET,UAAI,OAAO,WAAW,aAAa;AACjC,eAAO;;AAET,aAAO;IACT;;;;;ACvBA,IAWM,YAyBA,KAEO;AAtCb;;;;AASA;AAEA,IAAM,aAAa,SAAUC,IAAO;AAClC,aAAOA;;SAGDA;QACE,KAAK,OAAM;QACX;QACCA,KAAI,GAEN,SAAS,EAAE;;;SAGZ,OAAO,GAAG;QACV,OAAO,IAAI;QACX,OAAO,IAAI;QACX,OAAO,IAAI;QACX,OAAO,KAAK,GAEX;;UAEC;;UACA;QAAI;;IAEd;AAEA,IAAM,MAAgB,cAAA,CAAA,GAAA,OAAI,MAAM,GAAG,EAAE,KAAI,CAAE,GAAA,KAAA,EAAE,IAAI,SAACC,QAAK;AAAK,aAAAA,OAAM,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;IAAlC,CAAmC;AAExF,IAAM,OAAO,SAACD,IAAO;;AAC1B,UAAM,cAAc,eAAc;AAGlC,UAAI,GAAC,KAAA,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,YAAM,QAAA,OAAA,SAAA,SAAA,GAAE,kBAAiB;AAEzC,eAAO,WAAWA,EAAC;;AAGrB,UAAM,IAAI,YAAY,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAE/D,QAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAQ;AACvB,QAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAQ;AAEvB,aAAO,cAAA,CAAA,GAAA,OAAI,EAAE,QAAO,CAAE,GAAA,KAAA,EAAE,IAAI,SAACE,KAAY;YAAZ,KAAA,OAAAA,KAAA,CAAA,GAACD,SAAK,GAAA,CAAA,GAAE,MAAG,GAAA,CAAA;AAAM,eAAC,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,SAASA,MAAK,IAAI,IAAA,OAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG;MAAzD,CAA2D,EAAE,KAAK,EAAE;IACpH;;;;;ICzCA;;;;;AALA;AACA;AAIA,IAAA;KAAA,WAAA;AAgBE,eAAAE,UAAoB,QAAkB;AAAlB,aAAA,SAAA;AAfpB,aAAA,QAAkC,CAAA;AAElC,aAAA,WAAW;AACX,aAAA,UAAoB,CAAA;AAKpB,aAAA,eAA0C,oBAAI,IAAG;AAKjD,aAAA,mBAA2D,CAAA;MAElB;AAEnC,MAAAA,UAAA,UAAA,WAAN,SAAe,QAAgB,QAAe;;;;;;;AAC5C,oBAAI,OAAO,SAAS,QAAW;AAC7B,yBAAO,OAAO,KAAI;AAClB,uBAAK,eAAe,KAAK,8EAAA,OACmB,OAAO,MAAI,mFAAA,CACkB;;AAErE,uBAAO,OAAO;AAEpB,oBAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,uBAAK,eAAe,KAAK,oBAAA,OAAoB,MAAI,wCAAA,CAAwC;AACzF,yBAAA;oBAAA;;kBAAA;;AAGF,uBAAO,QAAO,KAAA,OAAO,UAAI,QAAA,OAAA,SAAA,KAAI;AAI7B,qBAAK,aAAa,IAAI,MAAM,QAAQ;AACpC,uBAAA,CAAA,IAAM,KAAA,OAAO,WAAK,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,QAAG,QAAQ,KAAK,MAAM,CAAC;;AAAzC,mBAAA,KAAA;AAEA,oBAAI,KAAK,aAAa,IAAI,IAAI,MAAM,UAAU;AAC5C,yBAAA;oBAAA;;kBAAA;;AAEF,qBAAK,QAAQ,KAAK,MAAM;AACxB,qBAAK,aAAa,IAAI,MAAM,WAAW;;;;;;;;;AAGnC,MAAAA,UAAA,UAAA,aAAN,SAAiBC,aAAoB,QAAe;;;;;;;AAGlD,qBAAK,aAAa,OAAOA,WAAU;AAC7B,gBAAAC,SAAQ,KAAK,QAAQ,UAAU,SAACC,SAAM;AAAK,yBAAAA,QAAO,SAASF;gBAAhB,CAA0B;AAC3E,oBAAIC,WAAU,IAAI;AAChB,yBAAO,eAAe,KAAK,oBAAA,OAAoBD,aAAU,0CAAA,CAA0C;AACnG,yBAAA;oBAAA;;kBAAA;;AAEI,yBAAS,KAAK,QAAQC,MAAK;AACjC,qBAAK,QAAQ,OAAOA,QAAO,CAAC;AAC5B,uBAAA,CAAA,IAAM,KAAA,OAAO,cAAQ,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,MAAA,CAAI;;AAAzB,mBAAA,KAAA;;;;;;;;;AAGF,MAAAF,UAAA,UAAA,QAAA,SAAM,QAAkB;AACtB,aAAK,sBAAqB;AAC1B,aAAK,WAAW;AAChB,YAAM,UAAU,KAAK;AACrB,gBAAQ,IAAI,SAAC,QAAM;AAAA,cAAA;AAAK,kBAAA,KAAA,OAAO,cAAQ,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,MAAA;QAAI,CAAA;AAC3C,aAAK,UAAU,CAAA;AACf,aAAK,aAAa,MAAK;AACvB,aAAK,SAAS;MAChB;AAEA,MAAAA,UAAA,UAAA,OAAA,SAAK,OAAY;AAAjB,YAAA,QAAA;AACE,eAAO,IAAI,QAAgB,SAAC,SAAO;AACjC,gBAAK,MAAM,KAAK,CAAC,OAAO,OAAO,CAAC;AAChC,gBAAK,cAAc,CAAC;QACtB,CAAC;MACH;AAEA,MAAAA,UAAA,UAAA,gBAAA,SAAcI,UAAe;AAA7B,YAAA,QAAA;AACE,YAAI,KAAK;AAAU;AACnB,aAAK,WAAW;AAChB,mBAAW,WAAA;AACT,eAAK,MAAK,MAAM,MAAK,MAAM,MAAK,CAAE,EAAE,KAAK,WAAA;AACvC,kBAAK,WAAW;AAChB,gBAAI,MAAK,MAAM,SAAS,GAAG;AACzB,oBAAK,cAAc,CAAC;;UAExB,CAAC;QACH,GAAGA,QAAO;MACZ;AAEM,MAAAJ,UAAA,UAAA,QAAN,SAAY,MAAwC;;;;;;;AAClD,oBAAI,CAAC,MAAM;AACT,yBAAA;oBAAA;;kBAAA;;AAGE,qBAAA,OAAU,MAAI,CAAA,GAAb,QAAK,GAAA,CAAA;AACJ,qBAAA,OAAc,MAAI,CAAA,GAAf,UAAO,GAAA,CAAA;AAGhB,qBAAK,eAAe,IAAI,iCAAiC,KAAK;AAExD,yBAAS,KAAK,QAAQ,OAC1B,SAACG,SAAc;AAA6B,yBAAAA,QAAO,SAAS;gBAAhB,CAAwB;;;;AAGjD,2BAAA,SAAA,MAAM,GAAA,aAAA,SAAA,KAAA;;;;AAAhB,yBAAM,WAAA;AAEf,oBAAI,CAAC,OAAO,SAAS;AAEnB,yBAAA,CAAA,GAAA,CAAA;;AAEQ,uBAAA,CAAA,GAAM,OAAO,QAAO,SAAA,CAAA,GAAM,KAAK,CAAA,CAAG;;AAAtC,oBAAI,GAAA,KAAA;AACV,oBAAI,MAAM,MAAM;AACd,uBAAK,eAAe,IAClB,wDAAA,OAAwD,OAAO,OAAO,IAAI,GAAC,YAAA,EAAA,OAAa,KAAK,UAC3F,KAAK,CACN,CAAE;AAEL,0BAAQ,EAAE,OAAO,MAAM,GAAG,SAAS,GAAE,CAAE;AACvC,yBAAA;oBAAA;;kBAAA;uBACK;AACL,0BAAQ;AACR,uBAAK,eAAe,IAClB,8CAAA,OAA8C,OAAO,OAAO,IAAI,GAAC,YAAA,EAAA,OAAa,KAAK,UAAU,KAAK,CAAC,CAAE;;;;;;;;;;;;;;;;;;;;;;;AAKrG,6BAAa,KAAK,QAAQ,OAC9B,SAACA,SAAc;AAAiC,yBAAAA,QAAO,SAAS,gBAAgBA,QAAO,SAAS;gBAAhD,CAAyD;;;;AAGtF,+BAAA,SAAA,UAAU,GAAA,iBAAA,aAAA,KAAA;;;;AAApB,yBAAM,eAAA;AAEf,oBAAI,CAAC,OAAO,SAAS;AAEnB,yBAAA,CAAA,GAAA,EAAA;;AAEQ,uBAAA,CAAA,GAAM,OAAO,QAAO,SAAA,CAAA,GAAM,KAAK,CAAA,CAAG;;AAAtC,oBAAI,GAAA,KAAA;AACV,oBAAI,MAAM,MAAM;AACd,uBAAK,eAAe,IAClB,4DAAA,OAA4D,OAAO,OAAO,IAAI,GAAC,YAAA,EAAA,OAAa,KAAK,UAC/F,KAAK,CACN,CAAE;AAEL,0BAAQ,EAAE,OAAO,MAAM,GAAG,SAAS,GAAE,CAAE;AACvC,yBAAA;oBAAA;;kBAAA;uBACK;AACL,0BAAQ;AACR,uBAAK,eAAe,IAClB,kDAAA,OAAkD,OAAO,OAAO,IAAI,GAAC,YAAA,EAAA,OAAa,KAAK,UAAU,KAAK,CAAC,CAAE;;;;;;;;;;;;;;;;;;;;;;;AAKzG,8BAAc,KAAK,QAAQ,OAC/B,SAACA,SAAc;AAAkC,yBAAAA,QAAO,SAAS;gBAAhB,CAA6B;AAIhF,qBAAK,eAAe,IAAI,2DAAA,OAA2D,KAAK,UAAU,KAAK,CAAC,CAAE;AAEpG,sCAAsB,YAAY,IAAI,SAACA,SAAM;AACjD,sBAAM,aAAU,SAAA,CAAA,GAAQ,KAAK;AAC7B,yBAAOA,QAAO,QAAQ,UAAU,EAAE,MAAM,SAACE,IAAC;AAAK,2BAAA,YAAY,YAAY,GAAG,OAAOA,EAAC,CAAC;kBAApC,CAAqC;gBACtF,CAAC;AAED,qBAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,SAACC,KAAQ;sBAARC,MAAA,OAAAD,KAAA,CAAA,GAAC,SAAMC,IAAA,CAAA;AACjD,sBAAM,gBACJ,UAAU,YAAY,OAAO,KAAK,2DAA2D;AAC/F,0BAAQ,aAAa;gBACvB,CAAC;AAED,uBAAA;kBAAA;;gBAAA;;;;;AAGI,MAAAP,UAAA,UAAA,QAAN,WAAA;;;;;;;AACQ,gBAAAQ,SAAQ,KAAK;AACnB,qBAAK,QAAQ,CAAA;AAEb,uBAAA,CAAA,GAAM,QAAQ,IAAIA,OAAM,IAAI,SAAC,MAAI;AAAK,yBAAA,MAAK,MAAM,IAAI;gBAAf,CAAgB,CAAC,CAAC;;AAAxD,mBAAA,KAAA;AAEM,8BAAc,KAAK,QAAQ,OAC/B,SAAC,QAAc;AAAkC,yBAAA,OAAO,SAAS;gBAAhB,CAA6B;AAG1E,sCAAsB,YAAY,IAAI,SAAC,QAAM;AACjD,yBAAO,OAAO,SAAS,OAAO,MAAK;gBACrC,CAAC;AAED,uBAAA,CAAA,GAAM,QAAQ,IAAI,mBAAmB,CAAC;;AAAtC,mBAAA,KAAA;;;;;;;;;AAGF,MAAAR,UAAA,UAAA,oBAAA,SAAkB,IAAsC;AACtD,aAAK,iBAAiB,KAAK,EAAE;MAC/B;AAEA,MAAAA,UAAA,UAAA,wBAAA,WAAA;AACE,aAAK,mBAAmB,CAAA;MAC1B;AAEA,MAAAA,UAAA,UAAA,oBAAA,SAAkBS,WAA2B;AAC3C,aAAK,QAAQ,QAAQ,SAAC,QAAM;;AAK1B,iBAAK,KAAA,OAAO,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,QAAGA,SAAQ;QAC1C,CAAC;MACH;AAEA,MAAAT,UAAA,UAAA,qBAAA,SAAmB,WAAiB;AAClC,aAAK,QAAQ,QAAQ,SAAC,QAAM;;AAK1B,iBAAK,KAAA,OAAO,wBAAkB,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,QAAG,SAAS;QAC5C,CAAC;MACH;AAEA,MAAAA,UAAA,UAAA,kBAAA,SAAgB,QAAe;AAC7B,aAAK,QAAQ,QAAQ,SAAC,QAAM;;AAK1B,iBAAK,KAAA,OAAO,qBAAe,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,QAAG,MAAM;QACtC,CAAC;AACD,aAAK,KAAK,qBAAqB,MAAM;MACvC;AAEM,MAAAA,UAAA,UAAA,uBAAN,SAA2B,QAAe;;;;;;;;AACjB,qBAAA,SAAA,KAAK,gBAAgB,GAAA,KAAA,GAAA,KAAA;;;;AAAjC,2BAAQ,GAAA;;;;AAEf,uBAAA,CAAA,GAAM,SAAS,MAAM,CAAC;;AAAtB,mBAAA,KAAA;;;;AAGA,qBAAK,eAAe,MAAM,iCAAiC,GAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKlE,MAAAA,UAAA,UAAA,UAAA,WAAA;AACE,aAAK,QAAQ,QAAQ,SAAC,QAAM;;AAK1B,iBAAK,KAAA,OAAO,aAAO,QAAA,OAAA,SAAA,SAAA,GAAA,KAAA,MAAA;QACrB,CAAC;MACH;AACF,aAAAA;IAAA,GA5PA;;;;;ICPa,kBAaA,qBAUA,0BAkBA,kBAeA;;;;;AA7Db;AAGA;AAEO,IAAM,mBAAmB,SAC9B,YACA,iBACA,cAA2B;AAE3B,UAAM,YAAuB,OAAO,eAAe,WAAW,EAAE,YAAY,WAAU,IAAK;AAC3F,aAAA,SAAA,SAAA,SAAA,CAAA,GACK,SAAS,GACT,YAAY,GACX,mBAAmB,EAAE,kBAAkB,gBAAe,CAAG;IAEjE;AAEO,IAAM,sBAAsB,SAACU,WAAqB,cAA2B;AAClF,UAAM,gBAAa,SAAA,SAAA,CAAA,GACd,YAAY,GAAA,EACf,YAAY,iBAAiB,UAC7B,iBAAiBA,UAAS,kBAAiB,EAAE,CAAA;AAG/C,aAAO;IACT;AAEO,IAAM,2BAA2B,SACtC,WACA,WACAA,WACA,cAA2B;;AAE3B,UAAMC,iBAAa,SAAA,SAAA,CAAA,GACd,YAAY,GAAA,EACf,YAAY,iBAAiB,gBAC7B,kBAAkBD,UAAS,kBAAiB,GAC5C,SAAM,KAAA,CAAA,GACJ,GAAC,SAAS,IAAG;AAIjB,aAAOC;IACT;AAEO,IAAM,mBAAmB,SAAC,WAAmB,WAA8B,cAA2B;;AAC3G,UAAMD,YAAW,IAAI,SAAQ;AAC7B,MAAAA,UAAS,IAAI,WAAW,SAAS;AAEjC,UAAM,aAAU,SAAA,SAAA,CAAA,GACX,YAAY,GAAA,EACf,YAAY,iBAAiB,UAC7B,iBAAiBA,UAAS,kBAAiB,GAC3C,SAAM,KAAA,CAAA,GACJ,GAAC,SAAS,IAAG;AAGjB,aAAO;IACT;AAEO,IAAM,qBAAqB,SAACE,UAAmB,cAA2B;AAC/E,aAAA,SAAA,SAAA,CAAA,GACK,YAAY,GAAA,EACf,YAAY,iBAAiB,SAC7B,kBAAkBA,SAAQ,mBAAkB,EAAE,CAAA;IAElD;;;;;AC/DA,IAAa;AAAb;;;AAAO,IAAM,gBAGT,SAAI,WAAsB;AAAK,aAAC;QAClC,SAAS,aAAa,QAAQ,QAAO;;IADJ;;;;;ICkBnC;;;;;AArBA;AAOA;AAEA;AACA;AACA;AAOA;AACA;AAEA,IAAA;KAAA,WAAA;AAmBE,eAAAC,eAAY,MAAiB;AAAjB,YAAA,SAAA,QAAA;AAAA,iBAAA;QAAiB;AAlBnB,aAAA,eAAe;AAQzB,aAAA,UAAU;AACA,aAAA,IAAoD,CAAA;AACpD,aAAA,YAAqC,CAAA;AAgD/C,aAAA,WAAW,KAAK,MAAM,KAAK,IAAI;AAvC7B,aAAK,WAAW,IAAI,SAAS,IAAI;AACjC,aAAK,OAAO;MACd;AAEgB,MAAAA,eAAA,UAAA,QAAhB,SAAsB,QAAe;;;;;AACnC,qBAAK,SAAS;AACd,qBAAK,SAAS,MAAM,IAAI;AACxB,qBAAK,SAAS,iBAAiB,KAAK,OAAO;AAC3C,uBAAA,CAAA,GAAM,KAAK,mBAAmB,GAAG,CAAC;;AAAlC,mBAAA,KAAA;AACA,qBAAK,UAAU;;;;;;;;;AAGX,MAAAA,eAAA,UAAA,qBAAN,SAAyB,WAA4B;;;;;;;AAC7C,kCAAkB,KAAK,SAAS;AACtC,qBAAK,SAAS,IAAI,CAAA;;;;AACW,oCAAA,SAAA,eAAe,GAAA,sBAAA,kBAAA,KAAA;;;;AAAjC,iCAAc,oBAAA;AAIjB,sBAAuD,eAAc;sBACvE,OAAO,aAAa,KAApB,QAAA,CAAA,GAAA,CAAA;AACF,uBAAA,CAAA,GAAM,IAAI,OAAO;;AAAjB,mBAAA,KAAA;;;AAEA,uBAAA,CAAA,GAAM,GAAG;;AAAT,mBAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;qBAIA,KAAK,SAAS,EAAE,OAAhB,QAAA,CAAA,GAAA,EAAA;AACF,uBAAA,CAAA,GAAM,KAAK,mBAAmB,SAAS,CAAC;;AAAxC,mBAAA,KAAA;;;;;;;;;;;AAIJ,MAAAA,eAAA,UAAA,QAAA,SAAM,YAAgC,iBAAuC,cAA2B;AACtG,YAAM,QAAQ,iBAAiB,YAAY,iBAAiB,YAAY;AAExE,aAAK,iBAAiB,KAAK,kCAAkC,MAAM,eAAe;AAClF,eAAO,cAAc,KAAK,SAAS,KAAK,CAAC;MAC3C;AAIA,MAAAA,eAAA,UAAA,WAAA,SAASC,WAAqB,cAA2B;AACvD,YAAM,QAAQ,oBAAoBA,WAAU,YAAY;AAExD,aAAK,iBAAiB,KAAK,kCAAkC,MAAM,eAAe;AAClF,eAAO,cAAc,KAAK,SAAS,KAAK,CAAC;MAC3C;AAEA,MAAAD,eAAA,UAAA,gBAAA,SAAc,WAAmB,WAA8BC,WAAqB,cAA2B;AAC7G,YAAM,QAAQ,yBAAyB,WAAW,WAAWA,WAAU,YAAY;AACnF,eAAO,cAAc,KAAK,SAAS,KAAK,CAAC;MAC3C;AAEA,MAAAD,eAAA,UAAA,WAAA,SAAS,WAAmB,WAA8B,cAA2B;AACnF,YAAM,QAAQ,iBAAiB,WAAW,WAAW,YAAY;AAEjE,aAAK,iBAAiB,KAAK,kCAAkC,MAAM,eAAe;AAClF,eAAO,cAAc,KAAK,SAAS,KAAK,CAAC;MAC3C;AAEA,MAAAA,eAAA,UAAA,UAAA,SAAQE,UAAmB,cAA2B;AACpD,YAAM,QAAQ,mBAAmBA,UAAS,YAAY;AACtD,eAAO,cAAc,KAAK,SAAS,KAAK,CAAC;MAC3C;AAEA,MAAAF,eAAA,UAAA,MAAA,SAAI,QAAc;AAChB,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,EAAE,KAAK,KAAK,WAAW,KAAK,MAAM,MAAM,CAAC;AAC9C,iBAAO,cAAa;;AAEtB,eAAO,KAAK,WAAW,MAAM;MAC/B;AAEA,MAAAA,eAAA,UAAA,aAAA,SAAW,QAAc;AACvB,eAAO,cAAc,KAAK,SAAS,SAAS,QAAQ,KAAK,MAAM,CAAC;MAClE;AAEA,MAAAA,eAAA,UAAA,SAAA,SAAOG,aAAkB;AACvB,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,EAAE,KAAK,KAAK,cAAc,KAAK,MAAMA,WAAU,CAAC;AACrD,iBAAO,cAAa;;AAEtB,eAAO,KAAK,cAAcA,WAAU;MACtC;AAEA,MAAAH,eAAA,UAAA,gBAAA,SAAcG,aAAkB;AAC9B,eAAO,cAAc,KAAK,SAAS,WAAWA,aAAY,KAAK,MAAM,CAAC;MACxE;AAEA,MAAAH,eAAA,UAAA,uBAAA,SAAqB,OAAc,UAAkC;AACnE,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO,SAAS,YAAY,OAAO,GAAG,sBAAsB,CAAC;;AAE/D,aAAK,KAAK,QAAQ,KAAK,EAAE,KAAK,QAAQ;MACxC;AAEM,MAAAA,eAAA,UAAA,WAAN,SAAe,OAAY;;;;AACzB,gBAAI,CAAC,KAAK,SAAS;AACjB,qBAAA,CAAA,GAAO,IAAI,QAAgB,SAAC,SAAO;AACjC,sBAAK,UAAU,KAAK,MAAK,qBAAqB,KAAK,OAAM,OAAO,OAAO,CAAC;cAC1E,CAAC,CAAC;;AAGJ,mBAAA,CAAA,GAAO,KAAK,QAAQ,KAAK,CAAC;;;;AA6B5B,MAAAA,eAAA,UAAA,oCAAA,SAAkC,gBAA0C;;AAC1E,YAAM,QAAO,KAAA,KAAK,oBAAc,QAAA,OAAA,SAAA,KAAI,CAAA;AACpC,YAAM,oBAAiB,SAAA,CAAA,GAAgC,IAAI;AAE3D,YAAI,mBAAmB,QAAW;AAChC,iBAAO;;AAIT,YAAM,kBAEF,CAAA;AACJ,eAAO,KAAK,cAAc,EAAE,QAAQ,SAAC,KAAG;AACtC,cAAI,CAAC,OAAO,OAAO,iBAAiB,EAAE,SAAS,GAAwB,GAAG;AAIxE,4BAAgB,GAAG,IAAI,eAAe,GAAG;;QAE7C,CAAC;AAED,kCAA0B,QAAQ,SAAC,WAAS;AAE1C,cAAI,CAAC,OAAO,KAAK,cAAc,EAAE,SAAS,SAAS;AAAG;AAGtD,cAAM,eAAuC,eAAe,SAAS;AAErE,kBAAQ,WAAW;YACjB,KAAK,kBAAkB;AAGrB,qBAAO,KAAK,iBAAiB,EAAE,QAAQ,SAAC,MAAI;AAC1C,uBAAO,kBAAkB,IAAI;cAC/B,CAAC;AACD;YACF,KAAK,kBAAkB;AACrB,qBAAO,KAAK,YAAY,EAAE,QAAQ,SAAC,MAAI;AACrC,uBAAO,kBAAkB,IAAI;cAC/B,CAAC;AACD;YACF,KAAK,kBAAkB;AACrB,qBAAO,OAAO,mBAAmB,YAAY;AAC7C;;QAEN,CAAC;AAKD,eAAO,OAAO,mBAAmB,eAAe;AAEhD,eAAO;MACT;AAEM,MAAAA,eAAA,UAAA,UAAN,SAAc,OAAY;;;;;;;AAGtB,oBAAI,KAAK,OAAO,QAAQ;AACtB,yBAAA,CAAA,GAAO,YAAY,OAAO,GAAG,eAAe,CAAC;;AAG/C,oBAAI,MAAM,eAAe,iBAAiB,UAAU;AAGlD,uBAAK,SAAS,kBAAkB,EAAE,gBAAgB,KAAK,eAAc,CAAE;;AAG1D,uBAAA,CAAA,GAAM,KAAK,SAAS,KAAK,KAAK,CAAC;;AAAxC,yBAAS,GAAA,KAAA;AAEf,uBAAO,SAAS,MACZ,KAAK,OAAO,eAAe,IAAI,OAAO,OAAO,IAC7C,OAAO,SAAS,MAChB,KAAK,OAAO,eAAe,KAAK,OAAO,OAAO,IAC9C,KAAK,OAAO,eAAe,MAAM,OAAO,OAAO;AAEnD,uBAAA,CAAA,GAAO,MAAM;;;AAEP,0BAAU,OAAO,GAAC;AACxB,qBAAK,OAAO,eAAe,MAAM,OAAO;AAClC,yBAAS,YAAY,OAAO,GAAG,OAAO;AAE5C,uBAAA,CAAA,GAAO,MAAM;;;;;;;;;;AAIjB,MAAAA,eAAA,UAAA,YAAA,SAAU,QAAe;AACvB,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,EAAE,KAAK,KAAK,WAAW,KAAK,MAAM,QAAQ,MAAM,CAAC,CAAC;AACvD;;AAEF,aAAK,WAAW,MAAM;MACxB;AAEA,MAAAA,eAAA,UAAA,aAAA,SAAW,QAAe;AACxB,YAAI,KAAK,OAAO,WAAW,QAAQ;AACjC,eAAK,OAAO,SAAS,QAAQ,MAAM;AACnC,eAAK,SAAS,gBAAgB,MAAM;;MAExC;AAEA,MAAAA,eAAA,UAAA,QAAA,WAAA;AACE,eAAO,cAAc,KAAK,SAAS,MAAK,CAAE;MAC5C;AAEA,MAAAA,eAAA,UAAA,SAAA,SAAO,MAAY;AACjB,YAAM,SAAS,KAAK,SAAS,QAAQ,KAAK,SAACI,SAAM;AAAK,iBAAAA,QAAO,SAAS;QAAhB,CAAoB;AAC1E,YAAI,WAAW,QAAW;AACxB,eAAK,OAAO,eAAe,MAAM,gCAAA,OAAgC,IAAI,CAAE;AACvE,iBAAO;;AAGT,eAAO;MACT;AAEA,MAAAJ,eAAA,UAAA,UAAA,SAA0B,aAAwC;AAChE,eAAO,KAAK,SAAS,QAAQ,OAAO,SAAC,QAAM;AAAK,iBAAA,kBAAkB;QAAlB,CAA6B;MAC/E;AACF,aAAAA;IAAA,GA9QA;;;;;ICVA,SAkGY;;;;;AAjHZ;AAeA,IAAA;KAAA,WAAA;AAWE,eAAAK,WAAA;AACE,aAAK,YAAY;AACjB,aAAK,WAAW;AAChB,aAAK,QAAQ;MACf;AAEA,MAAAA,SAAA,UAAA,eAAA,SAAa,WAAiB;AAC5B,aAAK,YAAY;AACjB,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,cAAA,SAAY,UAAgB;AAC1B,YAAI,WAAW,GAAG;AAChB,eAAK,WAAW;;AAElB,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,WAAA,SAAS,OAAa;AACpB,aAAK,QAAQ;AACb,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,iBAAA,SAAe,aAAmB;AAChC,aAAK,cAAc;AACnB,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,cAAA,SAAY,UAAgB;AAC1B,aAAK,WAAW;AAChB,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,aAAA,SAAWC,UAAe;AACxB,aAAK,UAAUA;AACf,eAAO;MACT;AAEA,MAAAD,SAAA,UAAA,aAAA,SAAW,SAAe;AACxB,aAAK,UAAU;AACf,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,gBAAA,SAAc,YAAkB;AAC9B,aAAK,aAAa;AAClB,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,qBAAA,SAAmB,YAAgD;AACjE,YAAI;AAGF,cAAM,WAAW,KAAK,MAAM,KAAK,UAAU,UAAU,CAAC;AACtD,cAAI,cAAc,QAAQ,GAAG;AAC3B,iBAAK,aAAa;;iBAEpB,IAAM;;AAGR,eAAO;MACT;AAEA,MAAAA,SAAA,UAAA,qBAAA,WAAA;AACE,YAAM,kBAA0C,KAAK,aAAY,SAAA,CAAA,GAAM,KAAK,UAAU,IAAK,CAAA;AAC3F,wBAAgB,gBAAgB,kBAAkB,IAAI,KAAK;AAC3D,wBAAgB,gBAAgB,gBAAgB,IAAI,KAAK;AACzD,wBAAgB,gBAAgB,aAAa,IAAI,KAAK;AACtD,wBAAgB,gBAAgB,YAAY,IAAI,KAAK;AACrD,wBAAgB,gBAAgB,gBAAgB,IAAI,KAAK;AACzD,wBAAgB,gBAAgB,OAAO,IAAI,KAAK;AAChD,wBAAgB,gBAAgB,OAAO,IAAI,KAAK;AAChD,wBAAgB,gBAAgB,WAAW,IAAI,KAAK;AACpD,eAAO;MACT;AACF,aAAAA;IAAA,GArFA;AAkGA,KAAA,SAAYE,kBAAe;AACzB,MAAAA,iBAAA,oBAAA,IAAA;AACA,MAAAA,iBAAA,kBAAA,IAAA;AACA,MAAAA,iBAAA,eAAA,IAAA;AACA,MAAAA,iBAAA,cAAA,IAAA;AACA,MAAAA,iBAAA,kBAAA,IAAA;AACA,MAAAA,iBAAA,SAAA,IAAA;AACA,MAAAA,iBAAA,SAAA,IAAA;AACA,MAAAA,iBAAA,aAAA,IAAA;IACF,GATY,oBAAA,kBAAe,CAAA,EAAA;;;;;ACjH3B,IAIa;AAJb;;;AAIO,IAAM,QAAQ,SAAI,KAAU,MAAY;AAC7C,UAAM,YAAY,KAAK,IAAI,MAAM,CAAC;AAClC,aAAO,IAAI,OAAc,SAAC,QAAQ,SAASC,QAAK;AAC9C,YAAM,aAAa,KAAK,MAAMA,SAAQ,SAAS;AAC/C,YAAI,CAAC,OAAO,UAAU,GAAG;AACvB,iBAAO,UAAU,IAAI,CAAA;;AAEvB,eAAO,UAAU,EAAE,KAAK,OAAO;AAC/B,eAAO;MACT,GAAG,CAAA,CAAE;IACP;;;;;ACdA,IAAY;AAAZ;;;AAAA,KAAA,SAAYC,WAAQ;AAClB,MAAAA,UAAAA,UAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACA,MAAAA,UAAAA,UAAA,OAAA,IAAA,CAAA,IAAA;IACF,GANY,aAAA,WAAQ,CAAA,EAAA;;;;;ACApB,IAEM,QA2BN;AA7BA;;;;AAEA,IAAM,SAAS;AA2Bf,IAAA;KAAA,WAAA;AAGE,eAAAC,UAAA;AACE,aAAK,WAAW,SAAS;MAC3B;AAEA,MAAAA,QAAA,UAAA,UAAA,WAAA;AACE,aAAK,WAAW,SAAS;MAC3B;AAEA,MAAAA,QAAA,UAAA,SAAA,SAAO,UAAkC;AAAlC,YAAA,aAAA,QAAA;AAAA,qBAAqB,SAAS;QAAI;AACvC,aAAK,WAAW;MAClB;AAEA,MAAAA,QAAA,UAAA,MAAA,WAAA;AAAI,YAAA,OAAA,CAAA;iBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAc;AAAd,eAAA,EAAA,IAAA,UAAA,EAAA;;AACF,YAAI,KAAK,WAAW,SAAS,SAAS;AACpC;;AAEF,gBAAQ,IAAI,GAAA,OAAG,QAAM,SAAA,EAAA,OAAU,KAAK,KAAK,GAAG,CAAC,CAAE;MACjD;AAEA,MAAAA,QAAA,UAAA,OAAA,WAAA;AAAK,YAAA,OAAA,CAAA;iBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAc;AAAd,eAAA,EAAA,IAAA,UAAA,EAAA;;AACH,YAAI,KAAK,WAAW,SAAS,MAAM;AACjC;;AAEF,gBAAQ,KAAK,GAAA,OAAG,QAAM,UAAA,EAAA,OAAW,KAAK,KAAK,GAAG,CAAC,CAAE;MACnD;AAEA,MAAAA,QAAA,UAAA,QAAA,WAAA;AAAM,YAAA,OAAA,CAAA;iBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAc;AAAd,eAAA,EAAA,IAAA,UAAA,EAAA;;AACJ,YAAI,KAAK,WAAW,SAAS,OAAO;AAClC;;AAEF,gBAAQ,MAAM,GAAA,OAAG,QAAM,WAAA,EAAA,OAAY,KAAK,KAAK,GAAG,CAAC,CAAE;MACrD;AAEA,MAAAA,QAAA,UAAA,QAAA,WAAA;AAAM,YAAA,OAAA,CAAA;iBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAc;AAAd,eAAA,EAAA,IAAA,UAAA,EAAA;;AACJ,YAAI,KAAK,WAAW,SAAS,OAAO;AAClC;;AAGF,gBAAQ,IAAI,GAAA,OAAG,QAAM,WAAA,EAAA,OAAY,KAAK,KAAK,GAAG,CAAC,CAAE;MACnD;AACF,aAAAA;IAAA,GA3CA;;;;;ACtBA,IAYa,kBAab,QAsDa,cAOA,oBAeb;AArGA;;;;AAQA;AACA;AAGO,IAAM,mBAAmB,WAAA;AAAM,aAAC;QACrC,iBAAiB;QACjB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;QACd,UAAU,SAAS;QACnB,gBAAgB,IAAI,OAAM;QAC1B,SAAS;QACT,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,UAAU;;IAX0B;AAatC,IAAA;KAAA,WAAA;AA2BE,eAAAC,QAAY,SAAsB;;AARxB,aAAA,UAAU;AASlB,YAAM,gBAAgB,iBAAgB;AACtC,aAAK,SAAS,QAAQ;AACtB,aAAK,uBAAsB,KAAA,QAAQ,yBAAmB,QAAA,OAAA,SAAA,KAAI,cAAc;AACxE,aAAK,kBAAkB,QAAQ,mBAAmB,cAAc;AAChE,aAAK,iBAAiB,QAAQ,kBAAkB,cAAc;AAC9D,aAAK,eAAe,QAAQ,gBAAgB,cAAc;AAC1D,aAAK,iBAAiB,QAAQ,kBAAkB,cAAc;AAC9D,aAAK,YAAW,KAAA,QAAQ,cAAQ,QAAA,OAAA,SAAA,KAAI,cAAc;AAClD,aAAK,cAAc,QAAQ;AAC3B,aAAK,OAAO,QAAQ;AACpB,aAAK,oBAAoB,QAAQ;AACjC,aAAK,UAAU,QAAQ,YAAY,SAAY,QAAQ,UAAU,cAAc;AAC/E,aAAK,UAAS,KAAA,QAAQ,YAAM,QAAA,OAAA,SAAA,KAAI,cAAc;AAC9C,aAAK,YAAY,QAAQ;AACzB,aAAK,aAAa,QAAQ,cAAc,cAAc;AACtD,aAAK,kBAAkB,QAAQ;AAC/B,aAAK,oBAAoB,QAAQ;AACjC,aAAK,YAAW,KAAA,QAAQ,cAAQ,QAAA,OAAA,SAAA,KAAI,cAAc;AAClD,aAAK,eAAe,OAAO,KAAK,QAAQ;AAExC,YAAM,eAAe,mBAAmB,QAAQ,WAAW,QAAQ,YAAY,QAAQ,QAAQ;AAC/F,aAAK,aAAa,aAAa;AAC/B,aAAK,YAAY,aAAa;MAChC;AA/BA,aAAA,eAAIA,QAAA,WAAA,UAAM;aAAV,WAAA;AACE,iBAAO,KAAK;QACd;aACA,SAAW,QAAe;AACxB,eAAK,UAAU;QACjB;;;;AA2BF,aAAAA;IAAA,GApDA;AAsDO,IAAM,eAAe,SAAC,YAA4B,UAAiB;AACxE,UAAI,eAAe,MAAM;AACvB,eAAO,WAAW,gCAAgC;;AAEpD,aAAO,WAAW,6BAA6B;IACjD;AAEO,IAAM,qBAAqB,SAChC,WACA,YACA,UAA+C;AAF/C,UAAA,cAAA,QAAA;AAAA,oBAAA;MAAc;AACd,UAAA,eAAA,QAAA;AAAA,qBAA6B,iBAAgB,EAAG;MAAU;AAC1D,UAAA,aAAA,QAAA;AAAA,mBAAoB,iBAAgB,EAAG;MAAQ;AAE/C,UAAI,WAAW;AACb,eAAO,EAAE,WAAW,YAAY,OAAS;;AAE3C,UAAM,cAAc,CAAC,MAAM,IAAI,EAAE,SAAS,UAAU,IAAI,aAAa,iBAAgB,EAAG;AACxF,aAAO;QACL,YAAY;QACZ,WAAW,aAAa,aAAa,QAAQ;;IAEjD;AAEA,IAAA;KAAA,WAAA;AAOE,eAAAC,mBAAA;AACE,aAAK,MAAM;UACT,SAAS;YACP,WAAW,CAAA;;;MAGjB;AAEA,MAAAA,iBAAA,UAAA,kBAAA,SAAwC,KAAQ,OAA0B;AACxE,aAAK,IAAI,QAAQ,UAAU,GAAG,IAAI;MACpC;AACF,aAAAA;IAAA,GAlBA;;;;;ACvGM,SAAU,oBAAoB,MAAY;AAC9C,SAAO,QAAQ,OAAO,OAAO;AAC/B;AAPA;;;;;;;ICQa,eASA,oBASA,sBAaA,iBAQA;;;;;AAzCb;AAEO,IAAM,gBAAgB,SAAC,aAAe;AAAf,UAAA,gBAAA,QAAA;AAAA,sBAAA;MAAe;AAC3C,UAAM,QAAQ,IAAI,MAAK,EAAG,SAAS;AACnC,aAAO,MACJ,MAAM,IAAI,EACV,MAAM,IAAI,WAAW,EACrB,IAAI,SAAC,MAAI;AAAK,eAAA,KAAK,KAAI;MAAT,CAAW;IAC9B;AAGO,IAAM,qBAAqB,SAAC,QAAqB;AAAK,aAAA,WAAA;AACrD,YAAA,KAAA,SAAA,CAAA,GAA4C,OAAO,MAAM,GAAvC,SAAM,GAAA,gBAAE,WAAQ,GAAA;AACxC,eAAO;UACL;UACA;;MAEJ;IAN6D;AAStD,IAAM,uBAAuB,SAAC,KAAUC,QAAY;;AACzD,MAAAA,SAAOA,OAAK,QAAQ,cAAc,KAAK;AACvC,MAAAA,SAAOA,OAAK,QAAQ,OAAO,EAAE;;AAC7B,iBAAmB,KAAA,SAAAA,OAAK,MAAM,GAAG,CAAC,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,GAAA,MAAA,KAAA,GAAA,KAAA,GAAE;AAA/B,cAAM,OAAI,GAAA;AACb,cAAI,QAAQ,KAAK;AACf,kBAAM,IAAI,IAAI;iBACT;AACL;;;;;;;;;;;;AAGJ,aAAO;IACT;AAEO,IAAM,kBAAkB,SAAC,QAAuB,OAAoB;AAAK,aAAA,WAAA;;AAC9E,YAAM,MAA8B,CAAA;;AACpC,mBAAmB,UAAA,SAAA,KAAK,GAAA,YAAA,QAAA,KAAA,GAAA,CAAA,UAAA,MAAA,YAAA,QAAA,KAAA,GAAE;AAArB,gBAAMA,SAAI,UAAA;AACb,gBAAIA,MAAI,IAAI,qBAAqB,QAAQA,MAAI;;;;;;;;;;;AAE/C,eAAO;MACT;IANgF;AAQzE,IAAM,eACX,SACE,IACA,QACA,cACA,WACA,WAAqB;AAArB,UAAA,cAAA,QAAA;AAAA,oBAAA;MAAqB;AAEvB,aAAA,WAAA;AAAC,YAAA,OAAA,CAAA;iBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAU;AAAV,eAAA,EAAA,IAAA,UAAA,EAAA;;AACO,YAAA,KAAuB,aAAY,GAAjC,SAAM,GAAA,QAAE,WAAQ,GAAA;AAExB,YAAK,YAAY,WAAW,SAAS,SAAU,CAAC,YAAY,CAAC,QAAQ;AACnE,iBAAO,GAAG,MAAM,WAAW,IAAI;;AAEjC,YAAM,eAA6B;UACjC,MAAM;UACN,MAAM;UACN;UACA,YAAY,cAAc,CAAC;UAC3B,MAAM;YACJ,QAAO,oBAAI,KAAI,GAAG,YAAW;;UAE/B,QAAQ,CAAA;;AAEV,YAAI,aAAa,aAAa,QAAQ;AACpC,uBAAa,OAAO,SAAS,UAAS;;AAExC,YAAM,SAAS,GAAG,MAAM,WAAW,IAAI;AACvC,YAAI,UAAW,OAAe,SAAS;AAEpC,iBAAe,QAAQ,KAAK,WAAA;AAC3B,gBAAI,aAAa,aAAa,QAAQ;AACpC,2BAAa,OAAO,QAAQ,UAAS;;AAEvC,gBAAI,aAAa,MAAM;AACrB,2BAAa,KAAK,OAAM,oBAAI,KAAI,GAAG,YAAW;;AAEhD,mBAAO,MAAM,KAAK,UAAU,cAAc,MAAM,CAAC,CAAC;UACpD,CAAC;eACI;AACL,cAAI,aAAa,aAAa,QAAQ;AACpC,yBAAa,OAAO,QAAQ,UAAS;;AAEvC,cAAI,aAAa,MAAM;AACrB,yBAAa,KAAK,OAAM,oBAAI,KAAI,GAAG,YAAW;;AAEhD,iBAAO,MAAM,KAAK,UAAU,cAAc,MAAM,CAAC,CAAC;;AAEpD,eAAO;MACT;IAzCA;;;;;ACEF,SAAS,gBAAgB,OAAc;AACrC,MAAI,iBAAiB;AAAO,WAAO,MAAM;AACzC,SAAO,OAAO,KAAK;AACrB;AAEM,SAAU,sBAAsB,KAAa;AACjD,MAAI,qBAAqB;AACzB,MAAI;AACF,QAAI,UAAU,KAAK;AACjB,2BAAqB,KAAK,UAAU,IAAI,MAAM,MAAM,CAAC;;WAEvD,IAAM;;AAGR,SAAO;AACT;IA9BM,+BAOA,oCAyBN;;;;;AAvEA;AAQA;AAOA;AAOA;AACA;AACA;AACA;AAIA;AACA;AASA,IAAM,gCAAgC,oBAAI,IAAI;MAC5C;MACA;MACA;MACA;KACD;AAED,IAAM,qCAAqC,SAAC,WAAmB,8BAAoC;AAApC,UAAA,iCAAA,QAAA;AAAA,uCAAA;MAAoC;AACjG,UAAI,8BAA8B,IAAI,SAAS,GAAG;AAChD,eAAO;;AAGT,aAAO;IACT;AAmBA,IAAA;KAAA,WAAA;AAwBE,eAAAC,aAAY,SAAmD;AAvB/D,aAAA,OAAO;AACP,aAAA,OAAO;AAEP,aAAA,eAAe;AACf,aAAA,kBAAkB;AAClB,aAAA,aAAa;AASb,aAAA,aAAmD;AAEnD,aAAA,mBAAmB;AAGnB,aAAA,UAAgD;AAChD,aAAA,QAAmB,CAAA;AAIjB,aAAK,oBAAoB,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS;MACpC;AAEM,MAAAA,aAAA,UAAA,QAAN,SAAY,QAAe;;;;;;;;AACzB,qBAAK,SAAS;AAEd,qBAAK,aAAa,GAAA,OAAG,gBAAc,GAAA,EAAA,OAAI,KAAK,OAAO,OAAO,UAAU,GAAG,EAAE,CAAC;AAC3D,uBAAA,CAAA,IAAM,KAAA,KAAK,OAAO,qBAAe,QAAA,OAAA,SAAA,SAAA,GAAE,IAAI,KAAK,UAAU,CAAC;;AAAhE,yBAAS,GAAA,KAAA;AACf,oBAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,uBAAK,QAAQ,IAAI,OAAO,IAAI,SAAC,OAAY;AAAK,2BAAA,MAAK,QAAQ,KAAK;kBAAlB,CAAmB,CAAC,EAAE,MAAK;;AAG3E,uBAAA,CAAA,GAAO,QAAQ,QAAQ,MAAS,CAAC;;;;;AAGnC,MAAAA,aAAA,UAAA,UAAA,SAAQ,OAAY;AAApB,YAAA,QAAA;AAEE,YAAI,CAAC,MAAM,WAAW;AACpB,gBAAM,YAAY,KAAI;;AAGxB,eAAO,IAAI,QAAQ,SAAC,SAAO;AACzB,cAAM,UAAU;YACd;YACA,UAAU;YACV,UAAU,SAAC,QAAc;AAAK,qBAAA,QAAQ,MAAM;YAAd;YAC9B,SAAS;;AAEX,gBAAK,MAAM,KAAK,OAAO;AACvB,gBAAK,SAAS,MAAK,OAAO,mBAAmB;AAC7C,gBAAK,WAAU;QACjB,CAAC;MACH;AAEA,MAAAA,aAAA,UAAA,oCAAA,SAAkC,MAAe;AAAjD,YAAA,QAAA;AACE,eAAO,KAAK,OAAO,SAAC,SAAO;AACzB,kBAAQ,YAAY;AACpB,cAAI,QAAQ,WAAW,MAAK,OAAO,iBAAiB;AAClD,mBAAO;;AAET,eAAK,MAAK,eAAe,CAAC,OAAO,GAAG,KAAK,4BAA4B;AACrE,iBAAO;QACT,CAAC;MACH;AAEA,MAAAA,aAAA,UAAA,iBAAA,SAAe,MAAe;AAA9B,YAAA,QAAA;AACE,aAAK,QAAQ,SAAC,SAAO;AACnB,gBAAK,SAAS,QAAQ,YAAY,IAAI,MAAK,OAAO,sBAAsB,QAAQ,OAAO;QACzF,CAAC;MACH;AAMA,MAAAA,aAAA,UAAA,WAAA,SAASC,UAAe;AAAxB,YAAA,QAAA;AACE,YAAI,KAAK,OAAO,SAAS;AACvB;;AAGF,YAAI,KAAK,eAAe,QAAS,KAAK,cAAcA,WAAU,KAAK,kBAAmB;AACpF,cAAI,KAAK,YAAY;AACnB,yBAAa,KAAK,UAAU;;AAE9B,eAAK,mBAAmBA;AACxB,eAAK,aAAa,WAAW,WAAA;AAC3B,kBAAK,QAAQ,MAAK,MAAM,IAAI,SAAC,SAAO;AAClC,sBAAQ,UAAU;AAClB,qBAAO;YACT,CAAC;AACD,iBAAK,MAAK,MAAM,IAAI;UACtB,GAAGA,QAAO;AACV;;MAEJ;AAGA,MAAAD,aAAA,UAAA,gBAAA,WAAA;AACE,aAAK,aAAa;AAClB,aAAK,mBAAmB;MAC1B;AAGM,MAAAA,aAAA,UAAA,QAAN,SAAY,UAAgB;AAAhB,YAAA,aAAA,QAAA;AAAA,qBAAA;QAAgB;;;;;;;AAE1B,oBAAI,KAAK,OAAO,SAAS;AACvB,uBAAK,cAAa;AAClB,uBAAK,OAAO,eAAe,MAAM,+BAA+B;AAChE,yBAAA;oBAAA;;kBAAA;;AAGF,oBAAI,KAAK,SAAS;AAChB,uBAAK,cAAa;AAClB,uBAAK,OAAO,eAAe,MAAM,yDAAyD;AAC1F,yBAAA;oBAAA;;kBAAA;;AAGF,qBAAK,UAAU,KAAK;AACpB,qBAAK,cAAa;AAEZ,uBAAkB,CAAA;AAClB,wBAAmB,CAAA;AACzB,qBAAK,MAAM,QAAQ,SAAC,SAAO;AAAK,yBAAC,QAAQ,YAAY,IAAI,KAAK,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO;gBAAhE,CAAkE;AAE5F,0BAAU,MAAM,MAAM,KAAK,OAAO,cAAc;AAItD,uBAAA,CAAA,GAAM,QAAQ,OAAO,SAAO,SAAS,OAAK;AAAA,yBAAA,UAAA,OAAA,QAAA,QAAA,WAAA;;;;AACxC,iCAAA,CAAA,GAAM,OAAO;;AAAb,0BAAAE,IAAA,KAAA;AACO,iCAAA,CAAA,GAAM,KAAK,KAAK,OAAO,QAAQ,CAAC;;AAAvC,iCAAA,CAAA,GAAOA,IAAA,KAAA,CAAgC;;;;mBACtC,QAAQ,QAAO,CAAE,CAAC;;AAHrB,mBAAA,KAAA;AAMA,qBAAK,UAAU;AAEf,qBAAK,eAAe,KAAK,KAAK;;;;;;;;;AAG1B,MAAAF,aAAA,UAAA,OAAN,SAAW,MAAiB,UAAe;;AAAf,YAAA,aAAA,QAAA;AAAA,qBAAA;QAAe;;;;;;AACzC,oBAAI,CAAC,KAAK,OAAO,QAAQ;AACvB,yBAAA,CAAA,GAAO,KAAK,eAAe,MAAM,KAAK,uBAAuB,CAAC;;AAG1D,0BAAU;kBACd,SAAS,KAAK,OAAO;kBACrB,QAAQ,KAAK,IAAI,SAAC,SAAO;AAEvB,wBAAME,MAAkC,QAAQ,OAAxC,QAAKA,IAAA,OAAK,oBAAiB,OAAAA,KAA7B,CAAA,OAAA,CAA+B;AACrC,2BAAO;kBACT,CAAC;kBACD,SAAS;oBACP,eAAe,KAAK,OAAO;;kBAE7B,qBAAoB,oBAAI,KAAI,GAAG,YAAW;kBAC1C,kBAAkB,KAAK,OAAO;;AAEhC,qBAAK,OAAO,kBAAkB,IAAI,gBAAe;;;;AAGvC,4BAAc,mBAAmB,KAAK,OAAO,WAAW,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,EAAC;AACvG,2CAA2B,mCAC/B,WACA,KAAK,OAAO,4BAA4B;AAE9B,uBAAA,CAAA,GAAM,KAAK,OAAO,kBAAkB,KAAK,WAAW,SAAS,wBAAwB,CAAC;;AAA5F,sBAAM,GAAA,KAAA;AACZ,oBAAI,QAAQ,MAAM;AAChB,uBAAK,eAAe,MAAM,GAAG,wBAAwB;AACrD,yBAAA;oBAAA;;kBAAA;;AAEF,oBAAI,CAAC,UAAU;AACb,sBAAI,UAAU,KAAK;AACjB,yBAAK,eAAe,MAAM,IAAI,YAAY,GAAA,OAAG,IAAI,QAAM,IAAA,EAAA,OAAK,sBAAsB,GAAG,CAAC,CAAE;yBACnF;AACL,yBAAK,eAAe,MAAM,IAAI,YAAY,IAAI,MAAM;;AAEtD,yBAAA;oBAAA;;kBAAA;;AAEF,qBAAK,eAAe,KAAK,IAAI;;;;AAEvB,+BAAe,gBAAgB,GAAC;AACtC,qBAAK,OAAO,eAAe,MAAM,YAAY;AAE7C,iBAAA,KAAA,KAAK,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAE,YAAY,kDAAkD;kBACpF,QAAQ,KAAK,IAAI,SAAC,SAAO;AAAK,2BAAA,QAAQ,MAAM;kBAAd,CAAwB;kBACtD,SAAS;kBACT,aAAa,cAAa;iBAC3B;AAED,qBAAK,eAAe,EAAE,QAAQ,OAAO,QAAQ,YAAY,EAAC,GAAI,IAAI;;;;;;;;;;;AAItE,MAAAF,aAAA,UAAA,iBAAA,SAAe,KAAe,MAAe;;AAC3C,YAAI,CAAC,oBAAoB,IAAI,UAAU,GAAG;AACxC,WAAA,KAAA,KAAK,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAE,YAAY,iCAAiC;YACnE,QAAQ,KAAK,IAAI,SAAC,SAAO;AAAK,qBAAA,QAAQ,MAAM;YAAd,CAAwB;YACtD,MAAM,IAAI;YACV,QAAQ,IAAI;YACZ,MAAM,sBAAsB,GAAG;YAC/B,aAAa,cAAa;WAC3B;;AAGK,YAAA,SAAW,IAAG;AAEtB,gBAAQ,QAAQ;UACd,KAAK,OAAO,SAAS;AACnB,iBAAK,sBAAsB,KAAK,IAAI;AACpC;;UAEF,KAAK,OAAO,SAAS;AACnB,iBAAK,sBAAsB,KAAK,IAAI;AACpC;;UAEF,KAAK,OAAO,iBAAiB;AAC3B,iBAAK,8BAA8B,KAAK,IAAI;AAC5C;;UAEF,KAAK,OAAO,WAAW;AACrB,iBAAK,wBAAwB,KAAK,IAAI;AACtC;;UAEF,SAAS;AAEP,iBAAK,OAAO,eAAe,KAAK,6BAAA,OAA6B,QAAM,iBAAA,EAAA,OAAkB,KAAK,QAAM,WAAA,CAAW;AAC3G,iBAAK,oBAAoB,IAAI;AAC7B;;;MAGN;AAEA,MAAAA,aAAA,UAAA,wBAAA,SAAsB,KAAsB,MAAe;AACzD,aAAK,eAAe,MAAM,IAAI,YAAY,eAAe;MAC3D;AAEA,MAAAA,aAAA,UAAA,wBAAA,SAAsB,KAAsB,MAAe;AAA3D,YAAA,QAAA;AACE,YAAI,IAAI,KAAK,gBAAgB,IAAI,KAAK,MAAM,WAAW,eAAe,GAAG;AACvE,eAAK,eAAe,MAAM,IAAI,YAAY,IAAI,KAAK,KAAK;AACxD;;AAGF,YAAM,YAAY,cAAA,cAAA,cAAA,cAAA,CAAA,GAAA,OACb,OAAO,OAAO,IAAI,KAAK,uBAAuB,CAAC,GAAA,KAAA,GAAA,OAC/C,OAAO,OAAO,IAAI,KAAK,uBAAuB,CAAC,GAAA,KAAA,GAAA,OAC/C,OAAO,OAAO,IAAI,KAAK,0BAA0B,CAAC,GAAA,KAAA,GAAA,OAClD,IAAI,KAAK,cAAc,GAAA,KAAA,EAC1B,KAAI;AACN,YAAM,eAAe,IAAI,IAAI,SAAS;AAEtC,YAAMG,SAAQ,KAAK,OAAO,SAAC,SAASC,QAAK;AACvC,cAAI,aAAa,IAAIA,MAAK,GAAG;AAC3B,kBAAK,eAAe,CAAC,OAAO,GAAG,IAAI,YAAY,IAAI,KAAK,KAAK;AAC7D;;AAEF,iBAAO;QACT,CAAC;AAED,YAAID,OAAM,SAAS,GAAG;AAEpB,eAAK,OAAO,eAAe,KAAK,sBAAsB,GAAG,CAAC;;AAG5D,YAAM,UAAU,KAAK,kCAAkCA,MAAK;AAC5D,aAAK,eAAe,OAAO;MAC7B;AAEA,MAAAH,aAAA,UAAA,gCAAA,SAA8B,KAA8B,MAAe;AACzE,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,eAAe,MAAM,IAAI,YAAY,IAAI,KAAK,KAAK;AACxD;;AAIF,aAAK,OAAO,eAAe,KAAK,sBAAsB,GAAG,CAAC;AAE1D,aAAK,OAAO,kBAAkB;AAE9B,YAAM,UAAU,KAAK,kCAAkC,IAAI;AAC3D,aAAK,eAAe,OAAO;MAC7B;AAEA,MAAAA,aAAA,UAAA,0BAAA,SAAwB,KAAwB,MAAe;AAA/D,YAAA,QAAA;AACE,YAAM,cAAc,OAAO,KAAK,IAAI,KAAK,uBAAuB;AAChE,YAAM,gBAAgB,OAAO,KAAK,IAAI,KAAK,yBAAyB;AACpE,YAAM,iBAAiB,IAAI,KAAK;AAChC,YAAM,iBAAiB,IAAI,IAAI,WAAW;AAC1C,YAAM,mBAAmB,IAAI,IAAI,aAAa;AAC9C,YAAM,oBAAoB,IAAI,IAAI,cAAc;AAEhD,YAAMG,SAAQ,KAAK,OAAO,SAAC,SAASC,QAAK;AACvC,cACG,QAAQ,MAAM,WAAW,eAAe,IAAI,QAAQ,MAAM,OAAO,KACjE,QAAQ,MAAM,aAAa,iBAAiB,IAAI,QAAQ,MAAM,SAAS,GACxE;AACA,kBAAK,eAAe,CAAC,OAAO,GAAG,IAAI,YAAY,IAAI,KAAK,KAAK;AAC7D;;AAEF,cAAI,kBAAkB,IAAIA,MAAK,GAAG;AAChC,oBAAQ,UAAU,MAAK;;AAEzB,iBAAO;QACT,CAAC;AAED,YAAID,OAAM,SAAS,GAAG;AAEpB,eAAK,OAAO,eAAe,KAAK,sBAAsB,GAAG,CAAC;;AAG5D,YAAM,UAAU,KAAK,kCAAkCA,MAAK;AAC5D,aAAK,eAAe,OAAO;MAC7B;AAEA,MAAAH,aAAA,UAAA,sBAAA,SAAoB,MAAe;AAAnC,YAAA,QAAA;AACE,YAAM,QAAQ,KAAK,IAAI,SAAC,SAAO;AAC7B,kBAAQ,UAAU,QAAQ,WAAW,MAAK;AAC1C,iBAAO;QACT,CAAC;AAED,YAAM,UAAU,KAAK,kCAAkC,KAAK;AAC5D,aAAK,eAAe,OAAO;MAC7B;AAEA,MAAAA,aAAA,UAAA,iBAAA,SAAe,MAAiB,MAAc,SAAe;;AAE3D,YAAI,CAAC,oBAAoB,IAAI,GAAG;AAC9B,WAAA,KAAA,KAAK,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAE,UAAU,4BAA4B,KAAK,MAAM;AACzE,WAAA,KAAA,KAAK,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAE,YAAY,4BAA4B;YAC9D,QAAQ,KAAK,IAAI,SAAC,SAAO;AAAK,qBAAA,QAAQ,MAAM;YAAd,CAAwB;YACtD;YACA;YACA,aAAa,cAAa;WAC3B;eACI;AACL,WAAA,KAAA,KAAK,uBAAiB,QAAA,OAAA,SAAA,SAAA,GAAE,UAAU,yBAAyB,KAAK,MAAM;;AAExE,aAAK,aAAa,IAAI;AACtB,aAAK,QAAQ,SAAC,SAAO;AAAK,iBAAA,QAAQ,SAAS,YAAY,QAAQ,OAAO,MAAM,OAAO,CAAC;QAA1D,CAA2D;MACvF;AASA,MAAAA,aAAA,UAAA,aAAA,WAAA;AACE,YAAI,CAAC,KAAK,OAAO,iBAAiB;AAChC;;AAGF,YAAM,gBAAgB,KAAK,MAAM,IAAI,SAAC,SAAO;AAAK,iBAAA,QAAQ;QAAR,CAAa;AAC/D,aAAK,KAAK,OAAO,gBAAgB,IAAI,KAAK,YAAY,aAAa;MACrE;AAKA,MAAAA,aAAA,UAAA,eAAA,SAAa,gBAAyB;AACpC,aAAK,QAAQ,KAAK,MAAM,OACtB,SAAC,eAAa;AAAK,iBAAA,CAAC,eAAe,KAAK,SAAC,SAAO;AAAK,mBAAA,QAAQ,MAAM,cAAc,cAAc,MAAM;UAAhD,CAAyD;QAA3F,CAA4F;AAGjH,aAAK,WAAU;MACjB;AACF,aAAAA;IAAA,GAnXA;;;;;ACtEA,IAKA;AALA;;;;AAGA;AAEA,IAAA;KAAA,WAAA;AAAA,eAAAK,iBAAA;MAqGA;AApGE,MAAAA,eAAA,UAAA,OAAA,SAAK,YAAoB,UAAmB,+BAAuC;AACjF,eAAO,QAAQ,QAAQ,IAAI;MAC7B;AAEA,MAAAA,eAAA,UAAA,gBAAA,SAAc,cAAiC;;AAC7C,YAAI,OAAO,iBAAiB,UAAU;AACpC,iBAAO;;AAGT,YAAM,aAAa,aAAa,QAAQ;AACxC,YAAM,SAAS,KAAK,YAAY,UAAU;AAE1C,gBAAQ,QAAQ;UACd,KAAK,OAAO;AACV,mBAAO;cACL;cACA;cACA,MAAM;gBACJ,iBAAgB,KAAA,aAAa,qBAAe,QAAA,OAAA,SAAA,KAAI;gBAChD,mBAAkB,KAAA,aAAa,wBAAkB,QAAA,OAAA,SAAA,KAAI;gBACrD,mBAAkB,KAAA,aAAa,wBAAkB,QAAA,OAAA,SAAA,KAAI;;;UAI3D,KAAK,OAAO;AACV,mBAAO;cACL;cACA;cACA,MAAM;gBACJ,QAAO,KAAA,aAAa,WAAK,QAAA,OAAA,SAAA,KAAI;gBAC7B,eAAc,KAAA,aAAa,mBAAa,QAAA,OAAA,SAAA,KAAI;gBAC5C,0BAAyB,KAAA,aAAa,gCAA0B,QAAA,OAAA,SAAA,KAAI,CAAA;gBACpE,0BAAyB,KAAA,aAAa,gCAA0B,QAAA,OAAA,SAAA,KAAI,CAAA;gBACpE,6BAA4B,KAAA,aAAa,oCAA8B,QAAA,OAAA,SAAA,KAAI,CAAA;gBAC3E,eAAc,KAAA,aAAa,mBAAa,QAAA,OAAA,SAAA,KAAI;gBAC5C,4BAA2B,KAAA,aAAa,kCAA4B,QAAA,OAAA,SAAA,KAAI,CAAA;gBACxE,kBAAiB,KAAA,aAAa,sBAAgB,QAAA,OAAA,SAAA,KAAI,CAAA;gBAClD,iBAAgB,KAAA,aAAa,qBAAe,QAAA,OAAA,SAAA,KAAI,CAAA;gBAChD,mBAAkB,KAAA,aAAa,uBAAiB,QAAA,OAAA,SAAA,KAAI,CAAA;gBACpD,kBAAiB,KAAA,aAAa,sBAAgB,QAAA,OAAA,SAAA,KAAI,CAAA;;;UAGxD,KAAK,OAAO;AACV,mBAAO;cACL;cACA;cACA,MAAM;gBACJ,QAAO,KAAA,aAAa,WAAK,QAAA,OAAA,SAAA,KAAI;;;UAGnC,KAAK,OAAO;AACV,mBAAO;cACL;cACA;cACA,MAAM;gBACJ,QAAO,KAAA,aAAa,WAAK,QAAA,OAAA,SAAA,KAAI;gBAC7B,eAAc,KAAA,aAAa,mBAAa,QAAA,OAAA,SAAA,KAAI;gBAC5C,mBAAkB,KAAA,aAAa,uBAAiB,QAAA,OAAA,SAAA,KAAI,CAAA;gBACpD,iBAAgB,KAAA,aAAa,qBAAe,QAAA,OAAA,SAAA,KAAI,CAAA;gBAChD,4BAA2B,KAAA,aAAa,kCAA4B,QAAA,OAAA,SAAA,KAAI,CAAA;gBACxE,0BAAyB,KAAA,aAAa,gCAA0B,QAAA,OAAA,SAAA,KAAI,CAAA;gBACpE,kBAAiB,KAAA,aAAa,sBAAgB,QAAA,OAAA,SAAA,KAAI,CAAA;;;UAGxD,KAAK,OAAO;UACZ;AACE,mBAAO;cACL;cACA;;;MAGR;AAEA,MAAAA,eAAA,UAAA,cAAA,SAAY,MAAY;AACtB,YAAI,oBAAoB,IAAI,GAAG;AAC7B,iBAAO,OAAO;;AAGhB,YAAI,SAAS,KAAK;AAChB,iBAAO,OAAO;;AAGhB,YAAI,SAAS,KAAK;AAChB,iBAAO,OAAO;;AAGhB,YAAI,SAAS,KAAK;AAChB,iBAAO,OAAO;;AAGhB,YAAI,QAAQ,OAAO,OAAO,KAAK;AAC7B,iBAAO,OAAO;;AAGhB,YAAI,QAAQ,KAAK;AACf,iBAAO,OAAO;;AAGhB,eAAO,OAAO;MAChB;AACF,aAAAA;IAAA,GArGA;;;;;ACTA,IAGY;AAHZ;;;AAGA,KAAA,SAAYC,aAAU;AACpB,MAAAA,YAAA,IAAA,IAAA;AACA,MAAAA,YAAA,IAAA,IAAA;AAIA,MAAAA,YAAA,SAAA,IAAA;IACF,GAPY,eAAA,aAAU,CAAA,EAAA;;;;;ACHtB,IAAa;AAAb;;;AAAO,IAAM,kBAAkB;;;;;ACA/B;;;;AAIA;AACA;AACA;AAEA;AAUA;AACA;AACA;AAeA;AAUA;AAIA;AAUA;AACA;;;;;AC5DA,IAAa;AAAb;;;AAAO,IAAM,UAAU;;;;;ICGvB;;;;;AAHA;AACA;AAEA,IAAA;KAAA,WAAA;AAAA,eAAAC,WAAA;AACE,aAAA,OAAO;AACP,aAAA,OAAO;AAMP,aAAA,UAAU;AACV,aAAA,UAAU,qBAAA,OAAqB,OAAO;MA4BxC;AA1BE,MAAAA,SAAA,UAAA,QAAA,SAAM,QAAkB;AACtB,aAAK,SAAS;AACd,eAAO,QAAQ,QAAQ,MAAS;MAClC;AAEA,MAAAA,SAAA,UAAA,UAAA,SAAQ,SAAc;AAAtB,YAAA,QAAA;AACE,eAAO,IAAI,QAAQ,SAAC,SAAO;AACzB,cAAM,QAAO,oBAAI,KAAI,GAAG,QAAO;AAE/B,cAAM,eAAY,SAAA,SAAA,SAAA,EAChB,MACA,WAAW,KAAI,GACf,MAAM,MAAK,OAAO,KAAI,GAClB,MAAK,OAAO,qBAAqB;YACnC,oBAAoB;cAClB,aAAa,MAAK,OAAO,kBAAkB;cAC3C,gBAAgB,MAAK,OAAO,kBAAkB;;WAEhD,GACC,OAAO,GAAA,EACV,UAAU,MAAK,WACf,SAAS,MAAK,QAAO,CAAA;AAEvB,iBAAO,QAAQ,YAAY;QAC7B,CAAC;MACH;AACF,aAAAA;IAAA,GArCA;;;;;ICFAC,OACA,OAEA;;;;;AAJA;AACA,IAAAA,QAAsB;AACtB,YAAuB;AAEvB,IAAA;KAAA,SAAA,QAAA;AAA0B,gBAAAC,OAAA,MAAA;AAA1B,eAAAA,QAAA;;MAiDA;AAhDE,MAAAA,MAAA,UAAA,OAAA,SAAK,WAAmB,SAAgB;AAAxC,YAAA,QAAA;AACE,YAAI;AACJ,YAAI,UAAU,WAAW,SAAS,GAAG;AACnC,qBAAWD;mBACF,UAAU,WAAW,UAAU,GAAG;AAC3C,qBAAW;eACN;AACL,gBAAM,IAAI,MAAM,oBAAoB;;AAGtC,YAAM,MAAM,IAAI,IAAI,SAAS;AAC7B,YAAM,iBAAiB,KAAK,UAAU,OAAO;AAC7C,YAAM,UAAU;UACd,SAAS;YACP,gBAAgB;YAChB,kBAAkB,OAAO,WAAW,cAAc;;UAEpD,UAAU,IAAI;UACd,QAAQ;UACR,MAAM,IAAI;UACV,MAAM,IAAI;UACV,UAAU,IAAI;;AAEhB,eAAO,IAAI,QAAQ,SAAC,SAAO;AACzB,cAAM,MAAM,SAAS,QAAQ,SAAS,SAAC,KAAG;AACxC,gBAAI,YAAY,MAAM;AACtB,gBAAI,kBAAkB;AACtB,gBAAI,GAAG,QAAQ,SAACE,QAAa;AAC3B,iCAAmBA;YACrB,CAAC;AAED,gBAAI,GAAG,OAAO,WAAA;AACZ,kBAAI,IAAI,YAAY,gBAAgB,SAAS,GAAG;AAC9C,oBAAI;AAEF,sBAAM,wBAA6C,KAAK,MAAM,eAAe;AAC7E,sBAAM,SAAS,MAAK,cAAc,qBAAqB;AACvD,0BAAQ,MAAM;yBACd,IAAM;AACN,0BAAQ,MAAK,cAAc,EAAE,MAAM,IAAI,WAAU,CAAE,CAAC;;;YAG1D,CAAC;UACH,CAAC;AACD,cAAI,GAAG,SAAS,WAAA;AAAM,mBAAA,QAAQ,IAAI;UAAZ,CAAa;AACnC,cAAI,IAAI,cAAc;QACxB,CAAC;MACH;AACF,aAAAD;IAAA,GAjD0B,aAAa;;;;;ICDvC,YAUa;;;;;AAbb;AACA;AAEA,IAAA;KAAA,SAAA,QAAA;AAAgC,gBAAAE,aAAA,MAAA;AAC9B,eAAAA,YAAY,QAAgB,SAAqB;eAC/C,OAAA,KAAA,MAAA,SAAA,SAAA,EACE,mBAAmB,IAAI,KAAI,EAAE,GAC1B,OAAO,GAAA,EACV,OAAM,CAAA,CAAA,KACN;MACJ;AACF,aAAAA;IAAA,GARgC,MAAM;AAU/B,IAAM,gBAAgB,SAAC,QAAgB,WAAuB;AACnE,aAAO,IAAI,WAAW,QAAQ,SAAS;IACzC;;;;;ICDA,eA8Ba,gBAwEb;;;;;AApHA;AAWA;AACA,IAAAC;AAEA,IAAA;KAAA,SAAA,QAAA;AAAmC,gBAAAC,gBAAA,MAAA;AAAnC,eAAAA,iBAAA;;MA4BA;AAvBE,MAAAA,eAAA,UAAA,OAAA,SAAK,QAAa,SAAqB;AAAlC,YAAA,WAAA,QAAA;AAAA,mBAAA;QAAW;AACd,eAAO,cAAc,KAAK,MAAK,SAAA,SAAA,CAAA,GAAM,OAAO,GAAA,EAAE,OAAM,CAAA,CAAA,CAAG;MACzD;AACgB,MAAAA,eAAA,UAAA,QAAhB,SAAsB,SAAyC;;;;;;AAE7D,oBAAI,KAAK,cAAc;AACrB,yBAAA;oBAAA;;kBAAA;;AAEF,qBAAK,eAAe;AAEd,8BAAc,cAAc,QAAQ,QAAM,SAAA,CAAA,GAC3C,OAAO,CAAA;AAGZ,uBAAA,CAAA,GAAM,OAAA,UAAM,MAAK,KAAA,MAAC,WAAW,CAAC;;AAA9B,mBAAA,KAAA;AAEA,uBAAA,CAAA,GAAM,KAAK,IAAI,IAAI,YAAW,CAAE,EAAE,OAAO;;AAAzC,mBAAA,KAAA;AACA,uBAAA,CAAA,GAAM,KAAK,IAAI,IAAI,QAAO,CAAE,EAAE,OAAO;;AAArC,mBAAA,KAAA;AAEA,qBAAK,eAAe;AAEpB,uBAAA,CAAA,GAAM,KAAK,mBAAmB,WAAW,CAAC;;AAA1C,mBAAA,KAAA;;;;;;;;;AAEJ,aAAAA;IAAA,GA5BmC,aAAa;AA8BzC,IAAM,iBAAiB,WAAA;AAC5B,UAAM,SAAS,IAAI,cAAa;AAChC,aAAO;QACL,MAAM,aACJ,OAAO,KAAK,KAAK,MAAM,GACvB,QACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,KAAK,aACH,OAAO,IAAI,KAAK,MAAM,GACtB,OACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,kBAAkB,CAAC,CAAC;QAEhE,QAAQ,aACN,OAAO,OAAO,KAAK,MAAM,GACzB,UACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,kBAAkB,CAAC,CAAC;QAEhE,OAAO,aACL,OAAO,MAAM,KAAK,MAAM,GACxB,SACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,UAAU,aACR,OAAO,SAAS,KAAK,MAAM,GAC3B,YACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,UAAU,aACR,OAAO,SAAS,KAAK,MAAM,GAC3B,YACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,eAAe,aACb,OAAO,cAAc,KAAK,MAAM,GAChC,iBACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,UAAU,aACR,OAAO,SAAS,KAAK,MAAM,GAC3B,YACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,SAAS,aACP,OAAO,QAAQ,KAAK,MAAM,GAC1B,WACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,OAAO,aACL,OAAO,MAAM,KAAK,MAAM,GACxB,SACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;QAErE,WAAW,aACT,OAAO,UAAU,KAAK,MAAM,GAC5B,aACA,mBAAmB,MAAM,GACzB,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,CAAC;;IAGzC;AAEA,IAAA,sBAAe,eAAc;;;;;ACpH7B;;;;;;;;;IAAAC,cAAA;;;AACA;;;;;ACDA;;;;;;;;;;;;;;;;;;IAIe,KAAK,eAAe,UAAU,MAAM,UAAU,QAAQ,SAAS,UAAU,WAAW,OAAO;AAJ1G,IAAAC,YAAA;;;AAEA;AACA;AAGA;;AAFe,IAAA,MACb,oBAAM;AADO,IAAK,gBAClB,oBAAM;AADO,IAAoB,WACjC,oBAAM;AADO,IAA8B,OAC3C,oBAAM;AADO,IAAoC,WACjD,oBAAM;AADO,IAA8C,SAC3D,oBAAM;AADO,IAAsD,UACnE,oBAAM;AADO,IAA+D,WAC5E,oBAAM;AADO,IAAyE,YACtF,oBAAM;AADO,IAAoF,QACjG,oBAAM;AADO,IAA2F,QACxG,oBAAM;;;;;ACLR;AAAA,gCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,aAAa,qBAAqB,KAAK,IAAI,QAAQ;AAE3D,QAAMC,KAAI;AAAA,MACT,SAAS,CAAC,uBAAuB,SAAS,UAAU,gBAAgB;AAAA;AAAA,MAGpE,OAAOC,MAAK,GAAG,CAAC;AAAA,MAChB,MAAMA,MAAK,GAAG,EAAE;AAAA,MAChB,KAAKA,MAAK,GAAG,EAAE;AAAA,MACf,QAAQA,MAAK,GAAG,EAAE;AAAA,MAClB,WAAWA,MAAK,GAAG,EAAE;AAAA,MACrB,SAASA,MAAK,GAAG,EAAE;AAAA,MACnB,QAAQA,MAAK,GAAG,EAAE;AAAA,MAClB,eAAeA,MAAK,GAAG,EAAE;AAAA;AAAA,MAGzB,OAAOA,MAAK,IAAI,EAAE;AAAA,MAClB,KAAKA,MAAK,IAAI,EAAE;AAAA,MAChB,OAAOA,MAAK,IAAI,EAAE;AAAA,MAClB,QAAQA,MAAK,IAAI,EAAE;AAAA,MACnB,MAAMA,MAAK,IAAI,EAAE;AAAA,MACjB,SAASA,MAAK,IAAI,EAAE;AAAA,MACpB,MAAMA,MAAK,IAAI,EAAE;AAAA,MACjB,OAAOA,MAAK,IAAI,EAAE;AAAA,MAClB,MAAMA,MAAK,IAAI,EAAE;AAAA,MACjB,MAAMA,MAAK,IAAI,EAAE;AAAA;AAAA,MAGjB,SAASA,MAAK,IAAI,EAAE;AAAA,MACpB,OAAOA,MAAK,IAAI,EAAE;AAAA,MAClB,SAASA,MAAK,IAAI,EAAE;AAAA,MACpB,UAAUA,MAAK,IAAI,EAAE;AAAA,MACrB,QAAQA,MAAK,IAAI,EAAE;AAAA,MACnB,WAAWA,MAAK,IAAI,EAAE;AAAA,MACtB,QAAQA,MAAK,IAAI,EAAE;AAAA,MACnB,SAASA,MAAK,IAAI,EAAE;AAAA,IACrB;AAEA,aAAS,IAAI,KAAK,KAAK;AACtB,UAAIC,KAAE,GAAG,KAAK,MAAI,IAAI,MAAI;AAC1B,aAAOA,KAAI,IAAI,QAAQA,MAAK;AAC3B,cAAM,IAAIA,EAAC;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,IAAI,SAAS,IAAI,KAAK,GAAG;AAC5B,gBAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,IAAI;AAAA,QAChD;AAAA,MACD;AACA,aAAO,MAAM,MAAM;AAAA,IACpB;AAEA,aAAS,MAAM,KAAK,MAAM;AACzB,UAAI,MAAM,EAAE,KAAK,KAAK;AAEtB,UAAI,QAAQF,GAAE,MAAM,KAAK,GAAG;AAC5B,UAAI,OAAOA,GAAE,KAAK,KAAK,GAAG;AAC1B,UAAI,MAAMA,GAAE,IAAI,KAAK,GAAG;AACxB,UAAI,SAASA,GAAE,OAAO,KAAK,GAAG;AAC9B,UAAI,YAAYA,GAAE,UAAU,KAAK,GAAG;AACpC,UAAI,UAAUA,GAAE,QAAQ,KAAK,GAAG;AAChC,UAAI,SAASA,GAAE,OAAO,KAAK,GAAG;AAC9B,UAAI,gBAAgBA,GAAE,cAAc,KAAK,GAAG;AAE5C,UAAI,QAAQA,GAAE,MAAM,KAAK,GAAG;AAC5B,UAAI,MAAMA,GAAE,IAAI,KAAK,GAAG;AACxB,UAAI,QAAQA,GAAE,MAAM,KAAK,GAAG;AAC5B,UAAI,SAASA,GAAE,OAAO,KAAK,GAAG;AAC9B,UAAI,OAAOA,GAAE,KAAK,KAAK,GAAG;AAC1B,UAAI,UAAUA,GAAE,QAAQ,KAAK,GAAG;AAChC,UAAI,OAAOA,GAAE,KAAK,KAAK,GAAG;AAC1B,UAAI,QAAQA,GAAE,MAAM,KAAK,GAAG;AAC5B,UAAI,OAAOA,GAAE,KAAK,KAAK,GAAG;AAC1B,UAAI,OAAOA,GAAE,KAAK,KAAK,GAAG;AAE1B,UAAI,UAAUA,GAAE,QAAQ,KAAK,GAAG;AAChC,UAAI,QAAQA,GAAE,MAAM,KAAK,GAAG;AAC5B,UAAI,UAAUA,GAAE,QAAQ,KAAK,GAAG;AAChC,UAAI,WAAWA,GAAE,SAAS,KAAK,GAAG;AAClC,UAAI,SAASA,GAAE,OAAO,KAAK,GAAG;AAC9B,UAAI,YAAYA,GAAE,UAAU,KAAK,GAAG;AACpC,UAAI,SAASA,GAAE,OAAO,KAAK,GAAG;AAC9B,UAAI,UAAUA,GAAE,QAAQ,KAAK,GAAG;AAEhC,aAAO;AAAA,IACR;AAEA,aAASC,MAAK,MAAM,OAAO;AAC1B,UAAI,MAAM;AAAA,QACT,MAAM,QAAQ,IAAI;AAAA,QAClB,OAAO,QAAQ,KAAK;AAAA,QACpB,KAAK,IAAI,OAAO,WAAW,KAAK,KAAK,GAAG;AAAA,MACzC;AACA,aAAO,SAAU,KAAK;AACrB,YAAI,SAAS,UAAU,KAAK,QAAQ,QAAQ;AAC3C,eAAK,IAAI,SAAS,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,GAAE,KAAK,KAAK,KAAK,GAAG;AAClE,iBAAO,QAAQ,SAAS,OAAOD,GAAE,UAAU,IAAI,KAAK,MAAM,MAAI,EAAE,IAAI,MAAI;AAAA,QACzE;AACA,eAAO,QAAQ,SAAS,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAIA,GAAE,UAAU,IAAI,CAAC,GAAG,GAAG,MAAI,EAAE,IAAI,MAAI;AAAA,MACrF;AAAA,IACD;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACvGjB;AAAA,6CAAAG,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU,CAAC,KAAK,aAAa;AAClC,UAAI,IAAI,QAAQ,IAAI,SAAS,SAAU;AAEvC,UAAI,IAAI,MAAM;AACZ,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAAA,MAC/B;AAEA,UAAI,UAAU;AACZ,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAAA,MAC/B;AAEA,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,QAAS,QAAO;AAEjC,UAAI,IAAI,SAAS,YAAa,QAAO;AACrC,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,QAAS,QAAO;AACjC,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,MAAO,QAAO;AAC/B,UAAI,IAAI,SAAS,WAAY,QAAO;AACpC,UAAI,IAAI,SAAS,SAAU,QAAO;AAElC,UAAI,IAAI,SAAS,OAAQ,QAAO;AAEhC,UAAI,IAAI,SAAS,MAAO,QAAO;AAC/B,UAAI,IAAI,SAAS,KAAM,QAAO;AAC9B,UAAI,IAAI,SAAS,OAAQ,QAAO;AAChC,UAAI,IAAI,SAAS,QAAS,QAAO;AACjC,UAAI,IAAI,SAAS,OAAQ,QAAO;AAChC,aAAO;AAAA,IACT;AAAA;AAAA;;;ACrCA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU,SAAO;AACtB,YAAM,UAAU,CAAC,gIAAgI,wDAAwD,EAAE,KAAK,GAAG;AACnN,YAAM,MAAM,IAAI,OAAO,SAAS,GAAG;AACnC,aAAO,OAAO,QAAQ,WAAW,IAAI,QAAQ,KAAK,EAAE,IAAI;AAAA,IAC1D;AAAA;AAAA;;;ACNA;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,MAAM;AACZ,QAAM,MAAM,GAAG,GAAG;AAClB,QAAM,OAAO;AAEb,QAAM,SAAS;AAAA,MACb,GAAG,GAAG,GAAG;AACP,YAAI,CAAC,EAAG,QAAO,GAAG,GAAG,GAAG,IAAI,CAAC;AAC7B,eAAO,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,MAChC;AAAA,MACA,KAAK,GAAG,GAAG;AACT,YAAI,MAAM;AAEV,YAAI,IAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,iBACpB,IAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAAC;AAEjC,YAAI,IAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,iBACpB,IAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAAC;AAEjC,eAAO;AAAA,MACT;AAAA,MACA,IAAI,CAACC,SAAQ,MAAM,GAAG,GAAG,GAAGA,MAAK;AAAA,MACjC,MAAM,CAACA,SAAQ,MAAM,GAAG,GAAG,GAAGA,MAAK;AAAA,MACnC,SAAS,CAACA,SAAQ,MAAM,GAAG,GAAG,GAAGA,MAAK;AAAA,MACtC,UAAU,CAACA,SAAQ,MAAM,GAAG,GAAG,GAAGA,MAAK;AAAA,MACvC,UAAU,CAACA,SAAQ,MAAM,GAAG,GAAG,IAAI,OAAOA,MAAK;AAAA,MAC/C,UAAU,CAACA,SAAQ,MAAM,GAAG,GAAG,IAAI,OAAOA,MAAK;AAAA,MAC/C,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,SAAS,GAAG,GAAG;AAAA,IACjB;AAEA,QAAM,SAAS;AAAA,MACb,IAAI,CAACA,SAAQ,MAAM,GAAG,GAAG,IAAI,OAAOA,MAAK;AAAA,MACzC,MAAM,CAACA,SAAQ,MAAM,GAAG,GAAG,IAAI,OAAOA,MAAK;AAAA,IAC7C;AAEA,QAAM,QAAQ;AAAA,MACZ,QAAQ,GAAG,GAAG;AAAA,MACd,IAAI,CAACA,SAAQ,MAAM,GAAG,GAAG,KAAK,OAAOA,MAAK;AAAA,MAC1C,MAAM,CAACA,SAAQ,MAAM,GAAG,GAAG,IAAI,OAAOA,MAAK;AAAA,MAC3C,MAAM,GAAG,GAAG;AAAA,MACZ,SAAS,GAAG,GAAG;AAAA,MACf,WAAW,GAAG,GAAG;AAAA,MACjB,MAAMA,QAAO;AACX,YAAI,QAAQ;AACZ,iBAASC,KAAI,GAAGA,KAAID,QAAOC;AACzB,mBAAS,KAAK,QAAQA,KAAID,SAAQ,IAAI,OAAO,GAAG,IAAI;AACtD,YAAIA;AACF,mBAAS,OAAO;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU,EAAE,QAAQ,QAAQ,OAAO,KAAK;AAAA;AAAA;;;ACzD/C;AAAA,4CAAAG,UAAAC,SAAA;AAAA;AAEA,aAAS,2BAA2BC,IAAG,gBAAgB;AAAE,UAAI,KAAK,OAAO,WAAW,eAAeA,GAAE,OAAO,QAAQ,KAAKA,GAAE,YAAY;AAAG,UAAI,CAAC,IAAI;AAAE,YAAI,MAAM,QAAQA,EAAC,MAAM,KAAK,4BAA4BA,EAAC,MAAM,kBAAkBA,MAAK,OAAOA,GAAE,WAAW,UAAU;AAAE,cAAI,GAAI,CAAAA,KAAI;AAAI,cAAIC,KAAI;AAAG,cAAI,IAAI,SAASC,KAAI;AAAA,UAAC;AAAG,iBAAO,EAAE,GAAG,GAAG,GAAG,SAASC,KAAI;AAAE,gBAAIF,MAAKD,GAAE,OAAQ,QAAO,EAAE,MAAM,KAAK;AAAG,mBAAO,EAAE,MAAM,OAAO,OAAOA,GAAEC,IAAG,EAAE;AAAA,UAAG,GAAG,GAAG,SAAS,EAAE,IAAI;AAAE,kBAAM;AAAA,UAAI,GAAG,GAAG,EAAE;AAAA,QAAG;AAAE,cAAM,IAAI,UAAU,uIAAuI;AAAA,MAAG;AAAE,UAAI,mBAAmB,MAAM,SAAS,OAAO;AAAK,aAAO,EAAE,GAAG,SAAS,IAAI;AAAE,aAAK,GAAG,KAAKD,EAAC;AAAA,MAAG,GAAG,GAAG,SAASG,KAAI;AAAE,YAAI,OAAO,GAAG,KAAK;AAAG,2BAAmB,KAAK;AAAM,eAAO;AAAA,MAAM,GAAG,GAAG,SAAS,EAAE,KAAK;AAAE,iBAAS;AAAM,cAAM;AAAA,MAAK,GAAG,GAAG,SAAS,IAAI;AAAE,YAAI;AAAE,cAAI,CAAC,oBAAoB,GAAG,UAAU,KAAM,IAAG,OAAO;AAAA,QAAG,UAAE;AAAU,cAAI,OAAQ,OAAM;AAAA,QAAK;AAAA,MAAE,EAAE;AAAA,IAAG;AAEr+B,aAAS,4BAA4BH,IAAG,QAAQ;AAAE,UAAI,CAACA,GAAG;AAAQ,UAAI,OAAOA,OAAM,SAAU,QAAO,kBAAkBA,IAAG,MAAM;AAAG,UAAIG,KAAI,OAAO,UAAU,SAAS,KAAKH,EAAC,EAAE,MAAM,GAAG,EAAE;AAAG,UAAIG,OAAM,YAAYH,GAAE,YAAa,CAAAG,KAAIH,GAAE,YAAY;AAAM,UAAIG,OAAM,SAASA,OAAM,MAAO,QAAO,MAAM,KAAKH,EAAC;AAAG,UAAIG,OAAM,eAAe,2CAA2C,KAAKA,EAAC,EAAG,QAAO,kBAAkBH,IAAG,MAAM;AAAA,IAAG;AAE/Z,aAAS,kBAAkB,KAAK,KAAK;AAAE,UAAI,OAAO,QAAQ,MAAM,IAAI,OAAQ,OAAM,IAAI;AAAQ,eAASC,KAAI,GAAG,OAAO,IAAI,MAAM,GAAG,GAAGA,KAAI,KAAKA,KAAK,MAAKA,EAAC,IAAI,IAAIA,EAAC;AAAG,aAAO;AAAA,IAAM;AAElL,QAAM,QAAQ;AAEd,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,SAAS,SAAS;AAExB,QAAM,QAAQ,SAAO,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;AAOrC,IAAAF,QAAO,UAAU,SAAU,QAAQ,SAAS;AAC1C,UAAI,CAAC,QAAS,QAAO,MAAM,OAAO,OAAO,GAAG,CAAC;AAC7C,UAAI,OAAO;AACX,YAAM,QAAQ,OAAO,MAAM,OAAO;AAElC,UAAI,YAAY,2BAA2B,KAAK,GAC5C;AAEJ,UAAI;AACF,aAAK,UAAU,EAAE,GAAG,EAAE,QAAQ,UAAU,EAAE,GAAG,QAAO;AAClD,cAAI,OAAO,MAAM;AACjB,kBAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO;AAAA,QAC/D;AAAA,MACF,SAAS,KAAK;AACZ,kBAAU,EAAE,GAAG;AAAA,MACjB,UAAE;AACA,kBAAU,EAAE;AAAA,MACd;AAEA,aAAO,MAAM,MAAM,IAAI;AAAA,IACzB;AAAA;AAAA;;;ACzCA;AAAA,8CAAAK,UAAAC,SAAA;AAAA;AAEA,QAAMC,QAAO;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,cAAc;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AACA,QAAM,MAAM;AAAA,MACV,SAASA,MAAK;AAAA,MACd,WAAWA,MAAK;AAAA,MAChB,WAAWA,MAAK;AAAA,MAChB,YAAYA,MAAK;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,cAAc;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AACA,QAAMC,WAAU,QAAQ,aAAa,UAAU,MAAMD;AACrD,IAAAD,QAAO,UAAUE;AAAA;AAAA;;;AC/BjB;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI;AAEV,QAAMC,WAAU;AAGhB,QAAM,SAAS,OAAO,OAAO;AAAA,MAC3B,UAAU;AAAA,QACR,OAAO;AAAA,QACP,QAAQ,WAAS,IAAI,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,WAAS,YAAK,OAAO,MAAM,MAAM;AAAA,MAC3C;AAAA,MACA,WAAW;AAAA,QACT,OAAO;AAAA,QACP,QAAQ,WAAS;AAAA,MACnB;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,QACP,QAAQ,WAAS,GAAG,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,QAAM,SAAS,UAAQ,OAAO,IAAI,KAAK,OAAO;AAG9C,QAAM,UAAU,OAAO,OAAO;AAAA,MAC5B,SAASD,GAAE,IAAIC,SAAQ,KAAK;AAAA,MAC5B,MAAMD,GAAE,MAAMC,SAAQ,IAAI;AAAA,MAC1B,QAAQD,GAAE,OAAOC,SAAQ,KAAK;AAAA,MAC9B,SAASD,GAAE,KAAK,GAAG;AAAA,IACrB,CAAC;AAED,QAAM,SAAS,CAAC,MAAME,UAAS,WAAWA,WAAU,QAAQ,UAAU,SAAS,QAAQ,SAAS,OAAO,QAAQ,OAAO,QAAQ;AAG9H,QAAM,YAAY,gBAAcF,GAAE,KAAK,aAAaC,SAAQ,WAAWA,SAAQ,YAAY;AAE3F,QAAM,OAAO,CAAC,YAAY,aAAaD,GAAE,KAAK,aAAa,WAAWC,SAAQ,eAAe,MAAMA,SAAQ,IAAI;AAE/G,IAAAF,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AClDA;AAAA,4CAAAI,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAOd,IAAAA,QAAO,UAAU,SAAU,KAAK,SAAS;AACvC,UAAI,QAAQ,OAAO,MAAM,GAAG,KAAK,EAAE,EAAE,MAAM,OAAO;AAClD,UAAI,CAAC,QAAS,QAAO,MAAM;AAC3B,aAAO,MAAM,IAAI,OAAK,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC,EAAE,OAAO,CAACC,IAAG,MAAMA,KAAI,CAAC;AAAA,IAC7E;AAAA;AAAA;;;ACbA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAQA,IAAAA,QAAO,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM;AACnC,YAAM,MAAM,OAAO,cAAc,SAAS,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,SAAS,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,UAAU;AAC/H,YAAM,QAAQ,KAAK;AACnB,cAAQ,OAAO,IAAI,MAAM,QAAQ,EAAE,IAAI,UAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM;AACnF,YAAI,EAAE,SAAS,IAAI,UAAU,SAAS,IAAI,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,IAAI,MAAO,KAAI,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC;AAAA,YAAQ,KAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE;AAClJ,eAAO;AAAA,MACT,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA,IACjC;AAAA;AAAA;;;ACfA;AAAA,uDAAAC,UAAAC,SAAA;AAAA;AAWA,IAAAA,QAAO,UAAU,CAAC,QAAQ,OAAO,eAAe;AAC9C,mBAAa,cAAc;AAC3B,UAAI,aAAa,KAAK,IAAI,QAAQ,YAAY,SAAS,KAAK,MAAM,aAAa,CAAC,CAAC;AACjF,UAAI,aAAa,EAAG,cAAa;AACjC,UAAI,WAAW,KAAK,IAAI,aAAa,YAAY,KAAK;AACtD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpBA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,kBAAkB;AAAA,IACpB;AAAA;AAAA;;;ACXA;AAAA,iDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAW,QAAQ,UAAU;AAEnC,QAAM,WAAW;AAAjB,QACM,SAAS,SAAS;AAExB,QAAMC,gBAAe,QAAQ,QAAQ;AAErC,QAAM,YAAY;AAAlB,QACM,OAAO,UAAU;AADvB,QAEM,SAAS,UAAU;AAEzB,QAAM,QAAQ;AAQd,QAAM,SAAN,cAAqBA,cAAa;AAAA,MAChC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM;AACN,aAAK,cAAc;AACnB,aAAK,KAAK,KAAK,SAAS,QAAQ;AAChC,aAAK,MAAM,KAAK,UAAU,QAAQ;AAElC,aAAK,YAAY,KAAK,aAAa,MAAM,SAAS,KAAK,IAAI;AAE3D,cAAM,KAAKD,UAAS,gBAAgB;AAAA,UAClC,OAAO,KAAK;AAAA,UACZ,mBAAmB;AAAA,QACrB,CAAC;AACD,QAAAA,UAAS,mBAAmB,KAAK,IAAI,EAAE;AACvC,YAAI,KAAK,GAAG,MAAO,MAAK,GAAG,WAAW,IAAI;AAC1C,cAAM,WAAW,CAAC,gBAAgB,mBAAmB,EAAE,QAAQ,KAAK,YAAY,IAAI,IAAI;AAExF,cAAM,WAAW,CAAC,KAAK,QAAQ;AAC7B,cAAIE,KAAI,OAAO,KAAK,QAAQ;AAE5B,cAAIA,OAAM,OAAO;AACf,iBAAK,KAAK,KAAK,EAAE,KAAK,GAAG;AAAA,UAC3B,WAAW,OAAO,KAAKA,EAAC,MAAM,YAAY;AACxC,iBAAKA,EAAC,EAAE,GAAG;AAAA,UACb,OAAO;AACL,iBAAK,KAAK;AAAA,UACZ;AAAA,QACF;AAEA,aAAK,QAAQ,MAAM;AACjB,eAAK,IAAI,MAAM,OAAO,IAAI;AAC1B,eAAK,GAAG,eAAe,YAAY,QAAQ;AAC3C,cAAI,KAAK,GAAG,MAAO,MAAK,GAAG,WAAW,KAAK;AAC3C,aAAG,MAAM;AACT,eAAK,KAAK,KAAK,UAAU,UAAU,KAAK,SAAS,SAAS,UAAU,KAAK,KAAK;AAC9E,eAAK,SAAS;AAAA,QAChB;AAEA,aAAK,GAAG,GAAG,YAAY,QAAQ;AAAA,MACjC;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS;AAAA,UACjB,OAAO,KAAK;AAAA,UACZ,SAAS,CAAC,CAAC,KAAK;AAAA,UAChB,QAAQ,CAAC,CAAC,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,MAEA,OAAO;AACL,aAAK,IAAI,MAAM,IAAI;AAAA,MACrB;AAAA,MAEA,SAAS;AACP,aAAK,SAAS,KAAK;AACnB,YAAI,KAAK,YAAa,MAAK,cAAc;AAAA,MAC3C;AAAA,IAEF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACjFjB;AAAA,+CAAAI,UAAAC,SAAA;AAAA;AAEA,aAAS,mBAAmB,KAAK,SAASC,SAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG;AAAG,YAAI,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,QAAAA,QAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,UAAI,KAAK,MAAM;AAAE,gBAAQ,KAAK;AAAA,MAAG,OAAO;AAAE,gBAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,MAAG;AAAA,IAAE;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAIC,QAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAASD,SAAQ;AAAE,cAAI,MAAM,GAAG,MAAMC,OAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAASD,SAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAO,KAAK;AAAE,+BAAmB,KAAK,SAASA,SAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,SAAS,SAAS;AAExB,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEM,QAAQ,UAAU;AAFxB,QAGM,QAAQ,UAAU;AAHxB,QAIME,WAAU,UAAU;AAc1B,QAAM,aAAN,cAAyB,OAAO;AAAA,MAC9B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK,UAAU;AAC5B,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,KAAK,WAAW;AAE/B,aAAK,YAAY,KAAK,aAAa,MAAM;AAEzC,aAAK,QAAQ;AACb,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO;AACnC,aAAK,eAAe;AACpB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,MAAM,GAAG;AACX,YAAI,CAAC,KAAK,KAAK,SAAS;AACtB,eAAK,cAAc;AACnB,eAAK,WAAW,MAAM,KAAK,KAAK,UAAU,OAAO,KAAK,OAAO,CAAC;AAAA,QAChE,OAAO;AACL,eAAK,cAAc;AACnB,eAAK,WAAW,KAAK,UAAU,OAAO,CAAC;AAAA,QACzC;AAEA,aAAK,SAAS;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO;AACnC,aAAK,eAAe;AACpB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK,SAAS,KAAK;AAChC,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,MAAM;AACX,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ;AAEZ,eAAO,kBAAkB,aAAa;AACpC,cAAI,QAAQ,MAAM,MAAM,UAAU,MAAM,KAAK;AAE7C,cAAI,OAAO,UAAU,UAAU;AAC7B,kBAAM,WAAW;AACjB,oBAAQ;AAAA,UACV;AAEA,gBAAM,QAAQ,CAAC;AAAA,QACjB,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS;AACP,YAAI,SAAS;AAEb,eAAO,kBAAkB,aAAa;AACpC,iBAAO,QAAQ,OAAO,SAAS,OAAO;AACtC,iBAAO,eAAe;AACtB,iBAAO,SAAS,OAAO,SAAS;AAChC,gBAAM,OAAO,SAAS;AAEtB,cAAI,OAAO,OAAO;AAChB,mBAAO,MAAM;AAEb,mBAAO,KAAK;AAEZ,mBAAO,OAAO;AAEd;AAAA,UACF;AAEA,iBAAO,OAAO;AACd,iBAAO,UAAU;AAEjB,iBAAO,KAAK;AAEZ,iBAAO,OAAO;AAEd,iBAAO,IAAI,MAAM,IAAI;AAErB,iBAAO,MAAM;AAAA,QACf,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,OAAO;AACL,YAAI,CAAC,KAAK,YAAa,QAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK;AAClB,aAAK,SAAS,KAAK,SAAS;AAC5B,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAWC,IAAG;AACZ,YAAI,KAAK,YAAa;AACtB,aAAK,SAAS,KAAK,SAASA;AAC5B,aAAK,gBAAgBA;AAAA,MACvB;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAGA,EAAC,GAAG,EAAE;AAC3B,aAAK,MAAM;AACX,aAAK,SAAS,KAAK,cAAc,IAAI,GAAG,SAAS;AACjD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,gBAAgB,EAAG,QAAO,KAAK,KAAK;AAC7C,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,SAAS,CAAC;AAC5C,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,MAAM;AAEX,YAAI,KAAK,gBAAgB,GAAG;AAC1B,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK;AACL,eAAK,WAAW,EAAE;AAAA,QACpB;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,gBAAgB;AACd,YAAI,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,UAAU,KAAK,YAAa,QAAO,KAAK,KAAK;AAC3F,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,SAAS,CAAC;AACzC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,MAAM;AAEX,YAAI,KAAK,cAAc,GAAG;AACxB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK;AAAA,QACP;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AACd,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,UAAU,KAAK,KAAK,YAAa,QAAO,KAAK,KAAK;AAC3D,aAAK,WAAW,EAAE;AAClB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,UAAU,KAAK,YAAa,QAAO,KAAK,KAAK;AAC3F,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,kBAAkB;AAChB,eAAO,KAAK,WAAW,KAAK,KAAK,eAAe,KAAK,WAAW;AAAA,MAClE;AAAA,MAEA,gBAAgB;AACd,eAAO,KAAK,WAAW,KAAK,SAAS,UAAU,KAAK,eAAe,KAAK,WAAW,KAAK,SAAS,SAAS;AAAA,MAC5G;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AAEjB,YAAI,CAAC,KAAK,aAAa;AACrB,cAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,CAAC;AAC3I,eAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAAA,QACzD;AAEA,cAAM,OAAO;AACb,aAAK,cAAc;AACnB,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,IAAI,KAAK,QAAQ,IAAI,KAAK,QAAQ,EAAE,KAAK,GAAG;AAEzK,YAAI,KAAK,OAAO;AACd,eAAK,eAAe,KAAK,SAAS,MAAM;AAAA,CAAI,EAAE,OAAO,CAACC,IAAG,GAAGC,OAAMD,KAAI;AAAA,EAAKC,KAAI,MAAMJ,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAAA,QAC1I;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,OAAO,OAAO,KAAK,cAAc,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,CAAC,CAAC;AAAA,MAClJ;AAAA,IAEF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACpPjB;AAAA,iDAAAQ,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,QAAQ,SAAS;AAFvB,QAGMC,WAAU,SAAS;AAHzB,QAIMC,QAAO,SAAS;AAJtB,QAKM,mBAAmB,SAAS;AAElC,QAAM,YAAY;AAAlB,QACM,SAAS,UAAU;AAczB,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,SAAS,KAAK,WAAW;AAC9B,aAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ;AAC3C,cAAI,OAAO,OAAO,SAAU,MAAK;AAAA,YAC/B,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AACA,iBAAO;AAAA,YACL,OAAO,OAAO,GAAG,SAAS,GAAG,SAAS;AAAA,YACtC,OAAO,OAAO,GAAG,UAAU,SAAY,MAAM,GAAG;AAAA,YAChD,aAAa,MAAM,GAAG;AAAA,YACtB,UAAU,MAAM,GAAG;AAAA,YACnB,UAAU,MAAM,GAAG;AAAA,UACrB;AAAA,QACF,CAAC;AACD,aAAK,iBAAiB,KAAK,kBAAkB;AAC7C,aAAK,SAAS,KAAK,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC/C,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAWC,IAAG;AACZ,aAAK,SAASA;AACd,aAAK,QAAQ,KAAK,QAAQA,EAAC,EAAE;AAC7B,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,YAAI,CAAC,KAAK,UAAU,UAAU;AAC5B,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb,MAAO,MAAK,KAAK;AAAA,MACnB;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,WAAW,KAAK,QAAQ,SAAS,CAAC;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,WAAW,KAAK,QAAQ,SAAS,CAAC;AAAA,QACzC,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,eAAK,WAAW,CAAC;AAAA,QACnB,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,YAAY,KAAK,SAAS,KAAK,KAAK,QAAQ,MAAM;AACvD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,IAAK,QAAO,KAAK,OAAO;AAAA,MACpC;AAAA,MAEA,IAAI,YAAY;AACd,eAAO,KAAK,QAAQ,KAAK,MAAM;AAAA,MACjC;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAAO,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC9G,cAAM,OAAO;AAEb,YAAI,oBAAoB,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,cAAc,GAC1F,aAAa,kBAAkB,YAC/B,WAAW,kBAAkB;AAGjC,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK,OAAO,KAAK,UAAU,QAAQ,KAAK,UAAU,WAAW,MAAM,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG;AAE9N,YAAI,CAAC,KAAK,MAAM;AACd,eAAK,cAAc;AAEnB,mBAASC,KAAI,YAAYA,KAAI,UAAUA,MAAK;AAC1C,gBAAI,OACA,QACA,OAAO,IACP,IAAI,KAAK,QAAQA,EAAC;AAEtB,gBAAIA,OAAM,cAAc,aAAa,GAAG;AACtC,uBAASJ,SAAQ;AAAA,YACnB,WAAWI,OAAM,WAAW,KAAK,WAAW,KAAK,QAAQ,QAAQ;AAC/D,uBAASJ,SAAQ;AAAA,YACnB,OAAO;AACL,uBAAS;AAAA,YACX;AAEA,gBAAI,EAAE,UAAU;AACd,sBAAQ,KAAK,WAAWI,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAChG,wBAAU,KAAK,WAAWA,KAAI,MAAM,KAAK,EAAE,KAAKJ,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAAA,YACnF,OAAO;AACL,sBAAQ,KAAK,WAAWI,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAChE,wBAAU,KAAK,WAAWA,KAAI,MAAM,KAAKJ,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAE1E,kBAAI,EAAE,eAAe,KAAK,WAAWI,IAAG;AACtC,uBAAO,MAAM,EAAE,WAAW;AAE1B,oBAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WAAW,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC7G,yBAAO,OAAOH,MAAK,EAAE,aAAa;AAAA,oBAChC,QAAQ;AAAA,oBACR,OAAO,KAAK,IAAI;AAAA,kBAClB,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAEA,iBAAK,cAAc,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA,UAC1D;AAAA,QACF;AAEA,aAAK,IAAI,MAAM,KAAK,UAAU;AAAA,MAChC;AAAA,IAEF;AAEA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC7LjB;AAAA,iDAAAM,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,QAAQ,SAAS;AAEvB,QAAM,YAAY;AAAlB,QACM,SAAS,UAAU;AADzB,QAEM,QAAQ,UAAU;AAaxB,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,SAAS,KAAK,UAAU;AAC7B,aAAK,WAAW,KAAK,YAAY;AACjC,aAAK,eAAe,KAAK;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,aAAa;AACX,YAAI,KAAK,UAAU,MAAO,QAAO,KAAK,KAAK;AAC3C,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,YAAI,KAAK,UAAU,KAAM,QAAO,KAAK,KAAK;AAC1C,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,OAAO;AACL,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,OAAO;AACL,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,KAAK;AACH,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ,CAAC,KAAK;AACnB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,QAAQ,CAAC,KAAK;AAAA,QACrB,WAAWA,OAAM,KAAK;AACpB,eAAK,QAAQ;AAAA,QACf,WAAWA,OAAM,KAAK;AACpB,eAAK,QAAQ;AAAA,QACf,MAAO,QAAO,KAAK,KAAK;AAExB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAAO,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC9G,cAAM,OAAO;AACb,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,QAAQ,KAAK,WAAW,MAAM,KAAK,EAAE,UAAU,KAAK,QAAQ,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,QAAQ,MAAM,KAAK,EAAE,UAAU,KAAK,MAAM,IAAI,KAAK,MAAM,EAAE,KAAK,GAAG;AACzQ,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IAEF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC3HjB;AAAA,oDAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAN,MAAM,UAAS;AAAA,MACb,YAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,aAAK,QAAQ;AACb,aAAK,OAAO,QAAQ,oBAAI,KAAK;AAC7B,aAAK,QAAQ,SAAS,CAAC,IAAI;AAC3B,aAAK,UAAU,WAAW,CAAC;AAAA,MAC7B;AAAA,MAEA,KAAK;AAAA,MAAC;AAAA,MAEN,OAAO;AAAA,MAAC;AAAA,MAER,OAAO;AACL,cAAM,aAAa,KAAK,MAAM,QAAQ,IAAI;AAC1C,eAAO,KAAK,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,cAAc,gBAAgB,SAAQ;AAAA,MACpF;AAAA,MAEA,MAAM,KAAK;AAAA,MAAC;AAAA,MAEZ,OAAO;AACL,YAAI,QAAQ,CAAC,EAAE,OAAO,KAAK,KAAK,EAAE,QAAQ;AAC1C,cAAM,aAAa,MAAM,QAAQ,IAAI;AACrC,eAAO,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,cAAc,gBAAgB,SAAQ;AAAA,MAC/E;AAAA,MAEA,WAAW;AACT,eAAO,OAAO,KAAK,IAAI;AAAA,MACzB;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACtCjB;AAAA,oDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,WAAN,cAAuB,SAAS;AAAA,MAC9B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,UAAU,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,MACrD;AAAA,MAEA,OAAO;AACL,aAAK,GAAG;AAAA,MACV;AAAA,MAEA,WAAW;AACT,YAAI,WAAW,KAAK,KAAK,SAAS,IAAI,KAAK,OAAO;AAClD,eAAO,KAAK,KAAK,KAAK,KAAK,IAAI,SAAS,YAAY,IAAI;AAAA,MAC1D;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,MAAM,CAAAC,OAAK;AACf,MAAAA,KAAIA,KAAI;AACR,aAAOA,OAAM,IAAI,OAAOA,OAAM,IAAI,OAAOA,OAAM,IAAI,OAAO;AAAA,IAC5D;AAEA,QAAM,MAAN,cAAkB,SAAS;AAAA,MACzB,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC3C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC3C;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,QAAQ,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC5C;AAAA,MAEA,WAAW;AACT,YAAI,OAAO,KAAK,KAAK,QAAQ;AAC7B,YAAI,MAAM,KAAK,KAAK,OAAO;AAC3B,eAAO,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,IAAI,KAAK,UAAU,OAAO,OAAO,IAAI,IAAI,IAAI,KAAK,UAAU,MAAM,MAAM,IAAI,KAAK,UAAU,QAAQ,KAAK,QAAQ,cAAc,GAAG,IAAI,KAAK,UAAU,SAAS,KAAK,QAAQ,SAAS,GAAG,IAAI;AAAA,MACrP;AAAA,IAEF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA,iDAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,QAAN,cAAoB,SAAS;AAAA,MAC3B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,SAAS,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC7C;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ,KAAK,KAAK,SAAS;AAC/B,YAAI,IAAI,KAAK,KAAK,KAAK,EAAG,SAAQ,QAAQ,MAAM;AAChD,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAClE;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,wDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,eAAN,cAA2B,SAAS;AAAA,MAClC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,IAAI,CAAC;AAAA,MAC3D;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,IAAI,CAAC;AAAA,MAC3D;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,gBAAgB,SAAS,IAAI,OAAO,CAAC,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,MACpE;AAAA,MAEA,WAAW;AACT,eAAO,OAAO,KAAK,KAAK,gBAAgB,CAAC,EAAE,SAAS,GAAG,GAAG,EAAE,OAAO,GAAG,KAAK,MAAM,MAAM;AAAA,MACzF;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,UAAN,cAAsB,SAAS;AAAA,MAC7B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,WAAW,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC/C;AAAA,MAEA,WAAW;AACT,YAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC9D;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA,iDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,QAAN,cAAoB,SAAS;AAAA,MAC3B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,MAAM,KAAK;AACT,cAAM,SAAS,IAAI,OAAO,EAAE,CAAC,IAAI;AACjC,aAAK,KAAK,SAAS,MAAM,IAAI,IAAI,GAAG;AAAA,MACtC;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ,KAAK,KAAK,SAAS;AAC/B,YAAI,KAAK,KAAK,MAAM;AACpB,eAAO,OAAO,IAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ,YAAY,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,OAAO,KAAK,IAAI,OAAO,QAAQ,CAAC;AAAA,MAC9J;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC9BjB;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,UAAN,cAAsB,SAAS;AAAA,MAC7B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,WAAW,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC/C;AAAA,MAEA,WAAW;AACT,YAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC9D;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,OAAN,cAAmB,SAAS;AAAA,MAC1B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,YAAY,KAAK,KAAK,YAAY,IAAI,CAAC;AAAA,MACnD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,YAAY,KAAK,KAAK,YAAY,IAAI,CAAC;AAAA,MACnD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC;AAAA,MACtC;AAAA,MAEA,WAAW;AACT,YAAI,OAAO,OAAO,KAAK,KAAK,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG;AAC1D,eAAO,KAAK,MAAM,WAAW,IAAI,KAAK,OAAO,EAAE,IAAI;AAAA,MACrD;AAAA,IAEF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA,iDAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,UAAU;AAAA,MACV,UAAU;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA;AAAA;;;ACZA;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,aAAS,mBAAmB,KAAK,SAASC,SAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG;AAAG,YAAI,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,QAAAA,QAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,UAAI,KAAK,MAAM;AAAE,gBAAQ,KAAK;AAAA,MAAG,OAAO;AAAE,gBAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,MAAG;AAAA,IAAE;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAIC,QAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAASD,SAAQ;AAAE,cAAI,MAAM,GAAG,MAAMC,OAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAASD,SAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAO,KAAK;AAAE,+BAAmB,KAAK,SAASA,SAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,QAAQ,SAAS;AAFvB,QAGME,WAAU,SAAS;AAEzB,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEM,SAAS,UAAU;AAEzB,QAAM,YAAY;AAAlB,QACM,WAAW,UAAU;AAD3B,QAEM,WAAW,UAAU;AAF3B,QAGM,MAAM,UAAU;AAHtB,QAIM,QAAQ,UAAU;AAJxB,QAKM,eAAe,UAAU;AAL/B,QAMM,UAAU,UAAU;AAN1B,QAOM,QAAQ,UAAU;AAPxB,QAQM,UAAU,UAAU;AAR1B,QASM,OAAO,UAAU;AAEvB,QAAM,QAAQ;AACd,QAAM,cAAc;AAAA,MAClB,GAAG,CAAC;AAAA,QACF;AAAA,MACF,MAAM,MAAM,QAAQ,UAAU,IAAI;AAAA,MAClC,GAAG,UAAQ,IAAI,IAAI,IAAI;AAAA;AAAA,MAEvB,GAAG,UAAQ,IAAI,MAAM,IAAI;AAAA;AAAA,MAEzB,GAAG,UAAQ,IAAI,KAAK,IAAI;AAAA;AAAA,MAExB,GAAG,UAAQ,IAAI,SAAS,IAAI;AAAA;AAAA,MAE5B,GAAG,UAAQ,IAAI,MAAM,IAAI;AAAA;AAAA,MAEzB,GAAG,UAAQ,IAAI,QAAQ,IAAI;AAAA;AAAA,MAE3B,GAAG,UAAQ,IAAI,QAAQ,IAAI;AAAA;AAAA,MAE3B,GAAG,UAAQ,IAAI,aAAa,IAAI;AAAA;AAAA,IAElC;AACA,QAAM,cAAc;AAAA,MAClB,QAAQ,wFAAwF,MAAM,GAAG;AAAA,MACzG,aAAa,kDAAkD,MAAM,GAAG;AAAA,MACxE,UAAU,2DAA2D,MAAM,GAAG;AAAA,MAC9E,eAAe,8BAA8B,MAAM,GAAG;AAAA,IACxD;AAcA,QAAM,aAAN,cAAyB,OAAO;AAAA,MAC9B,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,UAAU,OAAO,OAAO,aAAa,KAAK,OAAO;AACtD,aAAK,QAAQ,KAAK,WAAW,oBAAI,KAAK;AACtC,aAAK,WAAW,KAAK,SAAS;AAE9B,aAAK,YAAY,KAAK,aAAa,MAAM;AAEzC,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,KAAK,MAAM;AACb,YAAI,KAAM,MAAK,MAAM,QAAQ,KAAK,QAAQ,CAAC;AAAA,MAC7C;AAAA,MAEA,IAAI,KAAK,MAAM;AACb,YAAI;AACJ,aAAK,QAAQ,CAAC;AAEd,eAAO,SAAS,MAAM,KAAK,IAAI,GAAG;AAChC,cAAI,QAAQ,OAAO,MAAM;AACzB,cAAI,MAAM,OAAO,UAAU,QAAM,MAAM,IAAI;AAC3C,eAAK,MAAM,KAAK,OAAO,cAAc,YAAY,GAAG,EAAE;AAAA,YACpD,OAAO,OAAO,GAAG,KAAK;AAAA,YACtB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA,UAChB,CAAC,IAAI,OAAO,GAAG,KAAK,KAAK;AAAA,QAC3B;AAEA,YAAI,QAAQ,KAAK,MAAM,OAAO,CAAC,KAAKC,OAAM;AACxC,cAAI,OAAOA,OAAM,YAAY,OAAO,IAAI,IAAI,SAAS,CAAC,MAAM,SAAU,KAAI,IAAI,SAAS,CAAC,KAAKA;AAAA,cAAO,KAAI,KAAKA,EAAC;AAC9G,iBAAO;AAAA,QACT,GAAG,CAAC,CAAC;AACL,aAAK,MAAM,OAAO,CAAC;AACnB,aAAK,MAAM,KAAK,GAAG,KAAK;AACxB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,WAAWC,IAAG;AACZ,aAAK,QAAQ;AACb,aAAK,SAASA;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,KAAK,MAAM,UAAU,OAAK,aAAa,QAAQ,CAAC;AAChE,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ;AAEZ,eAAO,kBAAkB,aAAa;AACpC,cAAI,QAAQ,MAAM,MAAM,UAAU,MAAM,KAAK;AAE7C,cAAI,OAAO,UAAU,UAAU;AAC7B,kBAAM,WAAW;AACjB,oBAAQ;AAAA,UACV;AAEA,gBAAM,QAAQ,CAAC;AAAA,QACjB,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS;AACP,YAAI,SAAS;AAEb,eAAO,kBAAkB,aAAa;AACpC,gBAAM,OAAO,SAAS;AAEtB,cAAI,OAAO,OAAO;AAChB,mBAAO,QAAQ;AAEf,mBAAO,KAAK;AAEZ,mBAAO,OAAO;AAEd;AAAA,UACF;AAEA,iBAAO,OAAO;AACd,iBAAO,UAAU;AAEjB,iBAAO,KAAK;AAEZ,iBAAO,OAAO;AAEd,iBAAO,IAAI,MAAM,IAAI;AAErB,iBAAO,MAAM;AAAA,QACf,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,KAAK;AACH,aAAK,QAAQ;AACb,aAAK,MAAM,KAAK,MAAM,EAAE,GAAG;AAC3B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ;AACb,aAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AAC7B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,YAAI,QAAQ,KAAM,QAAO,KAAK,KAAK;AACnC,aAAK,WAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AACxC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,YAAI,QAAQ,KAAM,QAAO,KAAK,KAAK;AACnC,aAAK,WAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AACxC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,aAAK,WAAW,OAAO,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,UAAU,UAAQ,gBAAgB,QAAQ,CAAC;AACxG,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG;AACH,YAAI,KAAK,KAAKA,EAAC,GAAG;AAChB,eAAK,SAASA;AACd,eAAK,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK;AACxC,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAAO,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC9G,cAAM,OAAO;AAEb,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK,MAAM,OAAO,CAAC,KAAK,GAAG,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,CAAC,KAAK,OAAO,MAAM,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG;AAE3P,YAAI,KAAK,OAAO;AACd,eAAK,cAAc,KAAK,SAAS,MAAM,IAAI,EAAE,OAAO,CAACC,IAAG,GAAGH,OAAMG,KAAI;AAAA,EAAKH,KAAI,MAAMD,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAAA,QACzI;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IAEF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACzPjB;AAAA,iDAAAQ,UAAAC,SAAA;AAAA;AAEA,aAAS,mBAAmB,KAAK,SAASC,SAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG;AAAG,YAAI,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,QAAAA,QAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,UAAI,KAAK,MAAM;AAAE,gBAAQ,KAAK;AAAA,MAAG,OAAO;AAAE,gBAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,MAAG;AAAA,IAAE;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAIC,QAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAASD,SAAQ;AAAE,cAAI,MAAM,GAAG,MAAMC,OAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAASD,SAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAO,KAAK;AAAE,+BAAmB,KAAK,SAASA,SAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,SAAS,SAAS;AADxB,QAEM,QAAQ,SAAS;AAEvB,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEME,WAAU,UAAU;AAF1B,QAGM,QAAQ,UAAU;AAHxB,QAIM,QAAQ,UAAU;AAExB,QAAM,WAAW;AAEjB,QAAM,QAAQ,SAAO,QAAQ;AAE7B,QAAM,QAAQ,CAAC,QAAQ,cAAc;AACnC,UAAI,SAAS,KAAK,IAAI,IAAI,SAAS;AACnC,aAAO,KAAK,MAAM,SAAS,MAAM,IAAI;AAAA,IACvC;AAmBA,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,MAAM,KAAK,OAAO,IAAI,KAAK,UAAU;AACpD,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,MAAM,KAAK,aAAa;AAC7B,aAAK,MAAM,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM;AACxC,aAAK,MAAM,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM;AACxC,aAAK,WAAW,KAAK,SAAS;AAE9B,aAAK,YAAY,KAAK,aAAa,MAAM;AAEzC,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,UAAU;AACf,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,MAAM,GAAG;AACX,YAAI,CAAC,KAAK,MAAM,GAAG;AACjB,eAAK,cAAc;AACnB,eAAK,WAAW,MAAM,KAAK,KAAK,UAAU,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;AACnE,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK,cAAc;AACnB,eAAK,WAAW,KAAK,UAAU,OAAO,GAAG,MAAM,GAAG,KAAK,KAAK,CAAC,EAAE;AAC/D,eAAK,SAAS,MAAM,GAAG,KAAK,KAAK;AAAA,QACnC;AAEA,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,GAAG;AACP,eAAO,KAAK,QAAQ,WAAW,CAAC,IAAI,SAAS,CAAC;AAAA,MAChD;AAAA,MAEA,MAAMC,IAAG;AACP,eAAOA,OAAM,OAAOA,OAAM,OAAO,KAAK,SAAS,SAAS,KAAKA,EAAC;AAAA,MAChE;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,YAAI,IAAI,KAAK;AACb,aAAK,QAAQ,MAAM,KAAK,IAAI,KAAK;AACjC,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM;AAAA,CAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ;AAEZ,eAAO,kBAAkB,aAAa;AACpC,cAAI,QAAQ,MAAM,MAAM,UAAU,MAAM,KAAK;AAE7C,cAAI,OAAO,UAAU,UAAU;AAC7B,kBAAM,WAAW;AACjB,oBAAQ;AAAA,UACV;AAEA,gBAAM,QAAQ,CAAC;AAAA,QACjB,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS;AACP,YAAI,SAAS;AAEb,eAAO,kBAAkB,aAAa;AACpC,gBAAM,OAAO,SAAS;AAEtB,cAAI,OAAO,OAAO;AAChB,mBAAO,QAAQ;AAEf,mBAAO,KAAK;AAEZ,mBAAO,OAAO;AAEd;AAAA,UACF;AAEA,cAAI,IAAI,OAAO;AACf,iBAAO,QAAQ,MAAM,KAAK,IAAI,OAAO;AACrC,iBAAO,OAAO;AACd,iBAAO,UAAU;AACjB,iBAAO,QAAQ;AAEf,iBAAO,KAAK;AAEZ,iBAAO,OAAO;AAEd,iBAAO,IAAI,MAAM;AAAA,CAAI;AAErB,iBAAO,MAAM;AAAA,QACf,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,KAAK;AACH,aAAK,QAAQ;AAEb,YAAI,KAAK,UAAU,IAAI;AACrB,eAAK,QAAQ,KAAK,MAAM,KAAK;AAAA,QAC/B;AAEA,YAAI,KAAK,SAAS,KAAK,IAAK,QAAO,KAAK,KAAK;AAC7C,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ;AAEb,YAAI,KAAK,UAAU,IAAI;AACrB,eAAK,QAAQ,KAAK,MAAM,KAAK;AAAA,QAC/B;AAEA,YAAI,KAAK,SAAS,KAAK,IAAK,QAAO,KAAK,KAAK;AAC7C,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,MAAM,KAAK,MAAM,SAAS;AAC9B,YAAI,IAAI,WAAW,EAAG,QAAO,KAAK,KAAK;AACvC,aAAK,QAAQ,KAAK,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK;AAEnD,YAAI,KAAK,UAAU,MAAM,KAAK,QAAQ,KAAK,KAAK;AAC9C,eAAK,QAAQ,KAAK;AAAA,QACpB;AAEA,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEA,IAAG,KAAK;AACR,YAAI,CAAC,KAAK,MAAMA,EAAC,EAAG,QAAO,KAAK,KAAK;AACrC,cAAM,MAAM,KAAK,IAAI;AACrB,YAAI,MAAM,KAAK,UAAU,IAAM,MAAK,QAAQ;AAE5C,aAAK,SAASA;AACd,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,YAAIA,OAAM,IAAK,QAAO,KAAK,KAAK;AAChC,aAAK,QAAQ,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG;AACtD,YAAI,KAAK,QAAQ,KAAK,IAAK,MAAK,QAAQ,KAAK;AAC7C,YAAI,KAAK,QAAQ,KAAK,IAAK,MAAK,QAAQ,KAAK;AAC7C,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AAEjB,YAAI,CAAC,KAAK,aAAa;AACrB,cAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,CAAC;AAC3I,eAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAAA,QACzD;AAEA,cAAM,OAAO;AACb,aAAK,cAAc;AAEnB,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,IAAI,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,KAAK,cAAc,MAAM,KAAK,KAAK,EAAE,EAAE,UAAU,KAAK,QAAQ,IAAI,KAAK,QAAQ,EAAE,KAAK,GAAG;AAElO,YAAI,KAAK,OAAO;AACd,eAAK,eAAe,KAAK,SAAS,MAAM;AAAA,CAAI,EAAE,OAAO,CAACC,IAAG,GAAGC,OAAMD,KAAI;AAAA,EAAKC,KAAI,MAAMH,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAAA,QAC1I;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,OAAO,OAAO,KAAK,cAAc,OAAO,OAAO;AAAA,MAC9G;AAAA,IAEF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACzPjB;AAAA,sDAAAO,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,WAAW;AAAjB,QACM,SAAS,SAAS;AAExB,QAAM,SAAS;AAEf,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEMC,WAAU,UAAU;AAF1B,QAGM,QAAQ,UAAU;AAHxB,QAIMC,QAAO,UAAU;AAJvB,QAKM,mBAAmB,UAAU;AAgBnC,QAAM,oBAAN,cAAgC,OAAO;AAAA,MACrC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,SAAS,KAAK,UAAU;AAC7B,aAAK,cAAc,KAAK,UAAU;AAClC,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,cAAc,KAAK;AACxB,aAAK,eAAe;AACpB,aAAK,aAAa,KAAK;AACvB,aAAK,eAAe,KAAK;AACzB,aAAK,iBAAiB,KAAK,kBAAkB;AAC7C,aAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ;AACzC,cAAI,OAAO,OAAO,SAAU,MAAK;AAAA,YAC/B,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AACA,iBAAO;AAAA,YACL,OAAO,OAAO,GAAG,SAAS,GAAG,SAAS;AAAA,YACtC,aAAa,MAAM,GAAG;AAAA,YACtB,OAAO,OAAO,GAAG,UAAU,SAAY,MAAM,GAAG;AAAA,YAChD,UAAU,MAAM,GAAG;AAAA,YACnB,UAAU,MAAM,GAAG;AAAA,UACrB;AAAA,QACF,CAAC;AACD,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AAEvC,YAAI,CAAC,KAAK,gBAAgB;AACxB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,MAAM,IAAI,OAAK,CAAC,EAAE,QAAQ;AAC/B,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ;AAAA,MAC1C;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,cAAM,WAAW,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ;AAElD,YAAI,KAAK,eAAe,SAAS,SAAS,KAAK,aAAa;AAC1D,eAAK,eAAe;AACpB,eAAK,OAAO;AAAA,QACd,OAAO;AACL,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AACd,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,MAAM,SAAS;AAClC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,UAAU,KAAK,SAAS,KAAK,KAAK,MAAM;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,SAAS,KAAK,MAAM,SAAS;AAAA,QACpC,OAAO;AACL,eAAK;AAAA,QACP;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,MAAM,SAAS,GAAG;AACzC,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK;AAAA,QACP;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM,KAAK,MAAM,EAAE,WAAW;AACnC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,WAAY,QAAO,KAAK,KAAK;AACnF,aAAK,MAAM,KAAK,MAAM,EAAE,WAAW;AACnC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,oBAAoB;AAClB,cAAM,IAAI,KAAK,MAAM,KAAK,MAAM;AAEhC,YAAI,EAAE,UAAU;AACd,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd,WAAW,EAAE,YAAY,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,YAAY;AACrF,iBAAO,KAAK,KAAK;AAAA,QACnB,OAAO;AACL,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,YAAY;AACV,YAAI,KAAK,eAAe,UAAa,KAAK,MAAM,KAAK,MAAM,EAAE,UAAU;AACrE,iBAAO,KAAK,KAAK;AAAA,QACnB;AAEA,cAAM,cAAc,CAAC,KAAK,MAAM,KAAK,MAAM,EAAE;AAC7C,aAAK,MAAM,OAAO,OAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,OAAK,EAAE,WAAW,WAAW;AACzE,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,kBAAkB;AAAA,QACzB,WAAWA,OAAM,KAAK;AACpB,eAAK,UAAU;AAAA,QACjB,OAAO;AACL,iBAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,MAEA,qBAAqB;AACnB,YAAI,KAAK,iBAAiB,UAAa,KAAK,cAAc;AACxD,cAAI,OAAO,KAAK,iBAAiB,UAAU;AACzC,mBAAO,KAAK;AAAA,UACd;AAEA,iBAAO;AAAA;AAAA,MAA6BF,SAAQ,OAAO,IAAIA,SAAQ,SAAS;AAAA,MAAgCA,SAAQ,SAAS,IAAIA,SAAQ,UAAU;AAAA,KAAkC,KAAK,eAAe,SAAY;AAAA,IAAwB,MAAM;AAAA,QACjP;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAaG,SAAQ,GAAGC,IAAG,gBAAgB;AACzC,cAAM,UAAU,EAAE,WAAW,MAAM,MAAMJ,SAAQ,OAAO,IAAIA,SAAQ,YAAY,MAAM,iBAAiB;AACvG,YAAI,OAAO;AAEX,YAAI,EAAE,UAAU;AACd,kBAAQG,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAAA,QAC7F,OAAO;AACL,kBAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAE3D,cAAID,YAAWC,MAAK,EAAE,aAAa;AACjC,mBAAO,MAAM,EAAE,WAAW;AAE1B,gBAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WAAW,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC7G,qBAAO,OAAOH,MAAK,EAAE,aAAa;AAAA,gBAChC,QAAQ,OAAO;AAAA,gBACf,OAAO,KAAK,IAAI;AAAA,cAClB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAEA,eAAO,SAAS,QAAQ,MAAM,KAAK,QAAQ,EAAE;AAAA,MAC/C;AAAA;AAAA,MAGA,gBAAgB,SAAS;AACvB,YAAI,QAAQ,WAAW,GAAG;AACxB,iBAAO,MAAM,IAAI,4BAA4B;AAAA,QAC/C;AAEA,YAAI,oBAAoB,iBAAiB,KAAK,QAAQ,QAAQ,QAAQ,KAAK,cAAc,GACrF,aAAa,kBAAkB,YAC/B,WAAW,kBAAkB;AAEjC,YAAI,QACA,gBAAgB,CAAC;AAErB,iBAASG,KAAI,YAAYA,KAAI,UAAUA,MAAK;AAC1C,cAAIA,OAAM,cAAc,aAAa,GAAG;AACtC,qBAASJ,SAAQ;AAAA,UACnB,WAAWI,OAAM,WAAW,KAAK,WAAW,QAAQ,QAAQ;AAC1D,qBAASJ,SAAQ;AAAA,UACnB,OAAO;AACL,qBAAS;AAAA,UACX;AAEA,wBAAc,KAAK,KAAK,aAAa,KAAK,QAAQ,QAAQI,EAAC,GAAGA,IAAG,MAAM,CAAC;AAAA,QAC1E;AAEA,eAAO,OAAO,cAAc,KAAK,IAAI;AAAA,MACvC;AAAA;AAAA,MAGA,cAAc,SAAS;AACrB,YAAI,CAAC,KAAK,MAAM;AACd,iBAAO,KAAK,gBAAgB,OAAO;AAAA,QACrC;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,2BAA2B;AACzB,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,QACvE;AAEA,cAAM,SAAS,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,mBAAmB,CAAC;AAEhE,YAAI,KAAK,MAAM,KAAK,MAAM,EAAE,UAAU;AACpC,iBAAO,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,QACrC;AAEA,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAChD,cAAM,OAAO;AAEb,YAAI,SAAS,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK,yBAAyB,CAAC,EAAE,KAAK,GAAG;AAE5I,YAAI,KAAK,cAAc;AACrB,oBAAU,MAAM,IAAI,gCAAgC,KAAK,WAAW,WAAW;AAC/E,eAAK,eAAe;AAAA,QACtB;AAEA,kBAAU,KAAK,cAAc,KAAK,KAAK;AACvC,aAAK,IAAI,MAAM,KAAK,QAAQ,MAAM;AAClC,aAAK,QAAQ,MAAM,QAAQ,KAAK,IAAI,OAAO;AAAA,MAC7C;AAAA,IAEF;AAEA,IAAAL,QAAO,UAAU;AAAA;AAAA;;;AChSjB;AAAA,uDAAAM,UAAAC,SAAA;AAAA;AAEA,aAAS,mBAAmB,KAAK,SAASC,SAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG;AAAG,YAAI,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,QAAAA,QAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,UAAI,KAAK,MAAM;AAAE,gBAAQ,KAAK;AAAA,MAAG,OAAO;AAAE,gBAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,MAAG;AAAA,IAAE;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAIC,QAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAASD,SAAQ;AAAE,cAAI,MAAM,GAAG,MAAMC,OAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAASD,SAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAO,KAAK;AAAE,+BAAmB,KAAK,SAASA,SAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,SAAS,SAAS;AAExB,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEM,QAAQ,UAAU;AAFxB,QAGME,WAAU,UAAU;AAH1B,QAIMC,QAAO,UAAU;AAJvB,QAKM,mBAAmB,UAAU;AAEnC,QAAM,SAAS,CAAC,KAAKC,OAAM,IAAIA,EAAC,MAAM,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC;AAE3E,QAAM,WAAW,CAAC,KAAKA,OAAM,IAAIA,EAAC,MAAM,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC;AAE7E,QAAM,WAAW,CAAC,KAAK,eAAe;AACpC,YAAMC,SAAQ,IAAI,UAAU,QAAM,GAAG,UAAU,cAAc,GAAG,UAAU,UAAU;AACpF,aAAOA,SAAQ,KAAKA,SAAQ;AAAA,IAC9B;AAmBA,QAAM,qBAAN,cAAiC,OAAO;AAAA,MACtC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,SAAS,KAAK,SAAS,KAAK,OAAO;AACpG,aAAK,SAAS,KAAK,WAAW,KAAK,UAAU;AAC7C,aAAK,OAAO;AAAA,UACV,WAAW,KAAK,aAAa;AAAA,QAC/B;AACA,aAAK,WAAW,KAAK,YAAY,KAAK;AACtC,aAAK,aAAa,KAAK,cAAc;AACrC,aAAK,cAAc,CAAC;AACpB,aAAK,QAAQ;AACb,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,SAAS;AACd,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK,UAAU;AAC5B,aAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,SAAS,IAAI;AACf,aAAK,MAAM,OAAO,cAAc,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,IAAI;AAAA,MACjE;AAAA,MAEA,IAAI,WAAW;AACb,YAAI;AACJ,YAAI,OAAO,KAAK,QAAQ,SAAU,UAAS,KAAK,QAAQ,KAAK,GAAG;AAAA,iBAAW,OAAO,KAAK,QAAQ,SAAU,UAAS;AAAA,UAChH,OAAO,KAAK;AAAA,QACd;AACA,eAAO,UAAU,KAAK,OAAO;AAAA,UAC3B,OAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,MAEA,WAAWD,IAAG;AACZ,aAAK,SAASA;AACd,YAAI,KAAK,YAAY,SAAS,EAAG,MAAK,QAAQ,OAAO,KAAK,aAAaA,EAAC;AAAA,YAAO,MAAK,QAAQ,KAAK,SAAS;AAC1G,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,SAAS,IAAI;AACX,YAAI,QAAQ;AAEZ,eAAO,kBAAkB,aAAa;AACpC,gBAAM,IAAI,MAAM,aAAa,MAAM,QAAQ,MAAM,OAAO,MAAM,OAAO;AAErE,gBAAM,cAAc,MAAM;AAC1B,cAAI,MAAM,eAAe,EAAG;AAC5B,gBAAM,cAAc,YAAY,IAAI,CAAC,GAAGA,IAAG,SAAS;AAAA,YAClD,OAAO,SAAS,KAAKA,EAAC;AAAA,YACtB,OAAO,OAAO,KAAKA,EAAC;AAAA,YACpB,aAAa,EAAE;AAAA,UACjB,EAAE;AACF,gBAAM,aAAa;AACnB,gBAAM,IAAI,KAAK,IAAI,YAAY,SAAS,GAAG,CAAC;AAE5C,gBAAM,WAAW,KAAK,IAAI,GAAG,MAAM,MAAM,CAAC;AAE1C,gBAAM,GAAG;AAAA,QACX,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,SAAS,MAAM;AAClB,eAAK,WAAW,KAAK,YAAY,SAAS,KAAK,UAAU,CAAC;AAC1D,eAAK,OAAO;AAAA,QACd,CAAC;AACD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,cAAc,KAAK,MAAM,SAAS,GAAG;AAC5C,eAAK,MAAM;AAAA,QACb,OAAO;AACL,eAAK,OAAO,KAAK,SAAS;AAC1B,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,OAAO;AACZ,aAAK,UAAU,KAAK,SAAS;AAC7B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,EAAEE,IAAG,KAAK;AACR,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAGA,EAAC,GAAG,EAAE;AAC3B,aAAK,SAAS,GAAG,SAAS;AAC1B,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,WAAW,EAAG,QAAO,KAAK,KAAK;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,SAAS,CAAC;AAC5C,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,SAAS,KAAK,SAAS;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,gBAAgB;AACd,YAAI,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,OAAQ,QAAO,KAAK,KAAK;AACvE,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,SAAS,CAAC;AACzC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,WAAW,KAAK,YAAY,SAAS,CAAC;AAC3C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,WAAW,KAAK,YAAY,SAAS,CAAC;AAAA,QAC7C,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,YAAY,SAAS,GAAG;AAC/C,eAAK,WAAW,CAAC;AAAA,QACnB,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,YAAY,SAAS,GAAG;AAC/C,eAAK,WAAW,CAAC;AAAA,QACnB,MAAO,MAAK,WAAW,KAAK,SAAS,CAAC;AAEtC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,aAAK,WAAW,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,KAAK,YAAY,SAAS,CAAC,CAAC;AAC/E,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,aAAK,WAAW,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC;AACrD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,UAAU,EAAG,QAAO,KAAK,KAAK;AACvC,aAAK,SAAS,KAAK,SAAS;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,OAAQ,QAAO,KAAK,KAAK;AACvE,aAAK,SAAS,KAAK,SAAS;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,aAAa,GAAG,SAAS,SAAS,OAAO;AACvC,YAAI;AACJ,YAAI,SAAS,UAAUJ,SAAQ,UAAU,QAAQA,SAAQ,YAAY;AACrE,YAAI,QAAQ,UAAU,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAC1D,kBAAU,UAAU,MAAM,KAAKA,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAEhE,YAAI,EAAE,aAAa;AACjB,iBAAO,MAAM,EAAE,WAAW;AAE1B,cAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WAAW,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC7G,mBAAO,OAAOC,MAAK,EAAE,aAAa;AAAA,cAChC,QAAQ;AAAA,cACR,OAAO,KAAK,IAAI;AAAA,YAClB,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,SAAS,MAAM,QAAQ,MAAM,KAAK,QAAQ,EAAE;AAAA,MACrD;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAAO,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC9G,cAAM,OAAO;AAEb,YAAI,oBAAoB,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,KAAK,GACjF,aAAa,kBAAkB,YAC/B,WAAW,kBAAkB;AAEjC,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,SAAS,KAAK,MAAM,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,UAAU,GAAG,KAAK,QAAQ,KAAK,YAAY,KAAK,MAAM,IAAI,KAAK,YAAY,KAAK,MAAM,EAAE,QAAQ,KAAK,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,CAAC,EAAE,KAAK,GAAG;AAE7Q,YAAI,CAAC,KAAK,MAAM;AACd,gBAAM,cAAc,KAAK,YAAY,MAAM,YAAY,QAAQ,EAAE,IAAI,CAAC,MAAMC,OAAM,KAAK,aAAa,MAAM,KAAK,WAAWA,KAAI,YAAYA,OAAM,KAAK,aAAa,GAAGA,KAAI,eAAe,WAAW,KAAK,WAAW,KAAK,QAAQ,MAAM,CAAC,EAAE,KAAK,IAAI;AAClP,eAAK,cAAc;AAAA,KAAQ,eAAe,MAAM,KAAK,KAAK,SAAS,KAAK;AAAA,QAC1E;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IAEF;AAEA,IAAAL,QAAO,UAAU;AAAA;AAAA;;;AC5RjB;AAAA,kEAAAQ,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,WAAW;AAAjB,QACM,SAAS,SAAS;AAExB,QAAM,oBAAoB;AAE1B,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEM,QAAQ,UAAU;AAFxB,QAGMC,WAAU,UAAU;AAe1B,QAAM,gCAAN,cAA4C,kBAAkB;AAAA,MAC5D,YAAY,OAAO,CAAC,GAAG;AACrB,aAAK,iBAAiB;AACtB,cAAM,IAAI;AACV,aAAK,aAAa;AAClB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,kBAAkB,KAAK;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,gBAAgB,SAAS;AAC5C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,UAAU,KAAK,SAAS,KAAK,KAAK,gBAAgB;AACvD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,SAAS,KAAK,gBAAgB,SAAS;AAAA,QAC9C,OAAO;AACL,eAAK;AAAA,QACP;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,gBAAgB,SAAS,GAAG;AACnD,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK;AAAA,QACP;AAEA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,gBAAgB,KAAK,MAAM,EAAE,WAAW;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,WAAY,QAAO,KAAK,KAAK;AACnF,aAAK,gBAAgB,KAAK,MAAM,EAAE,WAAW;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,WAAW,QAAQ;AAC1B,eAAK,aAAa,KAAK,WAAW,OAAO,GAAG,KAAK,WAAW,SAAS,CAAC;AACtE,eAAK,sBAAsB;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,wBAAwB;AACtB,cAAM,mBAAmB,KAAK,gBAAgB,KAAK,MAAM;AACzD,aAAK,kBAAkB,KAAK,MAAM,OAAO,OAAK;AAC5C,cAAI,KAAK,YAAY;AACnB,gBAAI,OAAO,EAAE,UAAU,UAAU;AAC/B,kBAAI,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,WAAW,YAAY,CAAC,GAAG;AACjE,uBAAO;AAAA,cACT;AAAA,YACF;AAEA,gBAAI,OAAO,EAAE,UAAU,UAAU;AAC/B,kBAAI,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,WAAW,YAAY,CAAC,GAAG;AACjE,uBAAO;AAAA,cACT;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,QACT,CAAC;AACD,cAAM,oBAAoB,KAAK,gBAAgB,UAAU,OAAK,MAAM,gBAAgB;AACpF,aAAK,SAAS,oBAAoB,IAAI,IAAI;AAC1C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,oBAAoB;AAClB,cAAM,IAAI,KAAK,gBAAgB,KAAK,MAAM;AAE1C,YAAI,EAAE,UAAU;AACd,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd,WAAW,EAAE,YAAY,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,YAAY;AACrF,iBAAO,KAAK,KAAK;AAAA,QACnB,OAAO;AACL,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,kBAAkBC,IAAG;AACnB,aAAK,aAAa,KAAK,aAAaA;AACpC,aAAK,sBAAsB;AAAA,MAC7B;AAAA,MAEA,EAAEA,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,kBAAkB;AAAA,QACzB,OAAO;AACL,eAAK,kBAAkBA,EAAC;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,qBAAqB;AACnB,YAAI,KAAK,iBAAiB,UAAa,KAAK,cAAc;AACxD,cAAI,OAAO,KAAK,iBAAiB,UAAU;AACzC,mBAAO,KAAK;AAAA,UACd;AAEA,iBAAO;AAAA;AAAA,MAEPD,SAAQ,OAAO,IAAIA,SAAQ,SAAS;AAAA,MACpCA,SAAQ,SAAS,IAAIA,SAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,QAIzC;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,qBAAqB;AACnB,eAAO;AAAA,wBACa,KAAK,aAAa,KAAK,aAAa,MAAM,KAAK,2BAA2B,CAAC;AAAA;AAAA,MACjG;AAAA,MAEA,aAAaE,SAAQ,GAAGC,IAAG;AACzB,YAAI;AACJ,YAAI,EAAE,SAAU,SAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAAA,YAAO,SAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAC7K,gBAAQ,EAAE,WAAW,MAAM,MAAMH,SAAQ,OAAO,IAAIA,SAAQ,YAAY,OAAO;AAAA,MACjF;AAAA,MAEA,2BAA2B;AACzB,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA,QACvE;AAEA,cAAM,SAAS,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,mBAAmB,GAAG,KAAK,mBAAmB,CAAC;AAE3F,YAAI,KAAK,gBAAgB,UAAU,KAAK,gBAAgB,KAAK,MAAM,EAAE,UAAU;AAC7E,iBAAO,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,QACrC;AAEA,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAChD,cAAM,OAAO;AAEb,YAAI,SAAS,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,GAAG,KAAK,yBAAyB,CAAC,EAAE,KAAK,GAAG;AAE5I,YAAI,KAAK,cAAc;AACrB,oBAAU,MAAM,IAAI,gCAAgC,KAAK,WAAW,WAAW;AAC/E,eAAK,eAAe;AAAA,QACtB;AAEA,kBAAU,KAAK,cAAc,KAAK,eAAe;AACjD,aAAK,IAAI,MAAM,KAAK,QAAQ,MAAM;AAClC,aAAK,QAAQ,MAAM,QAAQ,KAAK,IAAI,OAAO;AAAA,MAC7C;AAAA,IAEF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACxMjB;AAAA,kDAAAK,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,SAAS;AAEf,QAAM,WAAW;AAAjB,QACM,QAAQ,SAAS;AADvB,QAEM,QAAQ,SAAS;AAEvB,QAAM,YAAY;AAAlB,QACM,QAAQ,UAAU;AADxB,QAEM,SAAS,UAAU;AAezB,QAAM,gBAAN,cAA4B,OAAO;AAAA,MACjC,YAAY,OAAO,CAAC,GAAG;AACrB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,QAAQ,KAAK;AAClB,aAAK,eAAe,CAAC,CAAC,KAAK;AAC3B,aAAK,SAAS,KAAK,OAAO;AAC1B,aAAK,YAAY,KAAK,aAAa;AACnC,aAAK,QAAQ,KAAK,MAAM;AACxB,aAAK,WAAW,KAAK,YAAY;AACjC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,GAAE,YAAY,MAAM,KAAK;AAC3B,eAAK,QAAQ;AACb,iBAAO,KAAK,OAAO;AAAA,QACrB;AAEA,YAAIA,GAAE,YAAY,MAAM,KAAK;AAC3B,eAAK,QAAQ;AACb,iBAAO,KAAK,OAAO;AAAA,QACrB;AAEA,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAAO,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC9G,cAAM,OAAO;AACb,aAAK,aAAa,CAAC,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,MAAM,KAAK,KAAK,eAAe,KAAK,YAAY,KAAK,QAAQ,CAAC,EAAE,KAAK,GAAG;AACxO,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IAEF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC5FjB;AAAA,gDAAAE,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,+BAA+B;AAAA,MAC/B,eAAe;AAAA,IACjB;AAAA;AAAA;;;ACZA;AAAA,yCAAAC,UAAA;AAAA;AAEA,QAAMC,KAAID;AAEV,QAAM,KAAK;AAEX,QAAME,QAAO,OAAK;AAElB,aAAS,SAAS,MAAM,MAAM,OAAO,CAAC,GAAG;AACvC,aAAO,IAAI,QAAQ,CAAC,KAAK,QAAQ;AAC/B,cAAM,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI;AAC3B,cAAM,UAAU,KAAK,WAAWA;AAChC,cAAM,WAAW,KAAK,YAAYA;AAClC,cAAMC,UAAS,KAAK,UAAUD;AAC9B,UAAE,GAAG,SAAS,KAAK,WAAWA,KAAI;AAClC,UAAE,GAAG,UAAU,OAAK,IAAI,SAAS,CAAC,CAAC,CAAC;AACpC,UAAE,GAAG,QAAQ,OAAK,IAAIC,QAAO,CAAC,CAAC,CAAC;AAChC,UAAE,GAAG,SAAS,OAAK,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAA,MACpC,CAAC;AAAA,IACH;AAcA,IAAAF,GAAE,OAAO,UAAQ,SAAS,cAAc,IAAI;AAa5C,IAAAA,GAAE,WAAW,UAAQ;AACnB,WAAK,QAAQ;AACb,aAAOA,GAAE,KAAK,IAAI;AAAA,IACpB;AAaA,IAAAA,GAAE,YAAY,UAAQ;AACpB,WAAK,QAAQ;AACb,aAAOA,GAAE,KAAK,IAAI;AAAA,IACpB;AAmBA,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAmBhD,IAAAA,GAAE,OAAO,UAAQ,SAAS,cAAc,IAAI;AAY5C,IAAAA,GAAE,UAAU,UAAQ,SAAS,iBAAiB,IAAI;AAclD,IAAAA,GAAE,OAAO,UAAQ;AACf,YAAM,MAAM,KAAK,aAAa;AAC9B,aAAO,SAAS,cAAc,MAAM;AAAA,QAClC,UAAU,SAAO,IAAI,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAcA,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAchD,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAehD,IAAAA,GAAE,cAAc,UAAQ;AACtB,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAE3C,YAAM,aAAa,WAAS,MAAM,OAAO,UAAQ,KAAK,QAAQ,EAAE,IAAI,UAAQ,KAAK,KAAK;AAEtF,aAAO,SAAS,qBAAqB,MAAM;AAAA,QACzC,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,IAAAA,GAAE,0BAA0B,UAAQ;AAClC,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAE3C,YAAM,aAAa,WAAS,MAAM,OAAO,UAAQ,KAAK,QAAQ,EAAE,IAAI,UAAQ,KAAK,KAAK;AAEtF,aAAO,SAAS,iCAAiC,MAAM;AAAA,QACrD,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,QAAM,UAAU,CAAC,OAAO,YAAY,QAAQ,QAAQ,QAAQ,OAAO,UAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,YAAY,MAAM,MAAM,YAAY,CAAC,CAAC;AAkBnJ,IAAAA,GAAE,eAAe,UAAQ;AACvB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAC3C,aAAO,SAAS,sBAAsB,IAAI;AAAA,IAC5C;AAAA;AAAA;;;AC7NA;AAAA,uCAAAG,UAAAC,SAAA;AAAA;AAEA,aAAS,QAAQ,QAAQ,gBAAgB;AAAE,UAAI,OAAO,OAAO,KAAK,MAAM;AAAG,UAAI,OAAO,uBAAuB;AAAE,YAAI,UAAU,OAAO,sBAAsB,MAAM;AAAG,YAAI,gBAAgB;AAAE,oBAAU,QAAQ,OAAO,SAAU,KAAK;AAAE,mBAAO,OAAO,yBAAyB,QAAQ,GAAG,EAAE;AAAA,UAAY,CAAC;AAAA,QAAG;AAAE,aAAK,KAAK,MAAM,MAAM,OAAO;AAAA,MAAG;AAAE,aAAO;AAAA,IAAM;AAExV,aAAS,cAAc,QAAQ;AAAE,eAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AAAE,YAAI,SAAS,UAAUA,EAAC,KAAK,OAAO,UAAUA,EAAC,IAAI,CAAC;AAAG,YAAIA,KAAI,GAAG;AAAE,kBAAQ,OAAO,MAAM,GAAG,IAAI,EAAE,QAAQ,SAAU,KAAK;AAAE,4BAAgB,QAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,UAAG,CAAC;AAAA,QAAG,WAAW,OAAO,2BAA2B;AAAE,iBAAO,iBAAiB,QAAQ,OAAO,0BAA0B,MAAM,CAAC;AAAA,QAAG,OAAO;AAAE,kBAAQ,OAAO,MAAM,CAAC,EAAE,QAAQ,SAAU,KAAK;AAAE,mBAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ,GAAG,CAAC;AAAA,UAAG,CAAC;AAAA,QAAG;AAAA,MAAE;AAAE,aAAO;AAAA,IAAQ;AAErhB,aAAS,gBAAgB,KAAK,KAAK,OAAO;AAAE,UAAI,OAAO,KAAK;AAAE,eAAO,eAAe,KAAK,KAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC;AAAA,MAAG,OAAO;AAAE,YAAI,GAAG,IAAI;AAAA,MAAO;AAAE,aAAO;AAAA,IAAK;AAEhN,aAAS,2BAA2BC,IAAG,gBAAgB;AAAE,UAAI,KAAK,OAAO,WAAW,eAAeA,GAAE,OAAO,QAAQ,KAAKA,GAAE,YAAY;AAAG,UAAI,CAAC,IAAI;AAAE,YAAI,MAAM,QAAQA,EAAC,MAAM,KAAK,4BAA4BA,EAAC,MAAM,kBAAkBA,MAAK,OAAOA,GAAE,WAAW,UAAU;AAAE,cAAI,GAAI,CAAAA,KAAI;AAAI,cAAID,KAAI;AAAG,cAAI,IAAI,SAASE,KAAI;AAAA,UAAC;AAAG,iBAAO,EAAE,GAAG,GAAG,GAAG,SAASC,KAAI;AAAE,gBAAIH,MAAKC,GAAE,OAAQ,QAAO,EAAE,MAAM,KAAK;AAAG,mBAAO,EAAE,MAAM,OAAO,OAAOA,GAAED,IAAG,EAAE;AAAA,UAAG,GAAG,GAAG,SAAS,EAAE,IAAI;AAAE,kBAAM;AAAA,UAAI,GAAG,GAAG,EAAE;AAAA,QAAG;AAAE,cAAM,IAAI,UAAU,uIAAuI;AAAA,MAAG;AAAE,UAAI,mBAAmB,MAAM,SAAS,OAAO;AAAK,aAAO,EAAE,GAAG,SAAS,IAAI;AAAE,aAAK,GAAG,KAAKC,EAAC;AAAA,MAAG,GAAG,GAAG,SAASE,KAAI;AAAE,YAAI,OAAO,GAAG,KAAK;AAAG,2BAAmB,KAAK;AAAM,eAAO;AAAA,MAAM,GAAG,GAAG,SAAS,EAAE,KAAK;AAAE,iBAAS;AAAM,cAAM;AAAA,MAAK,GAAG,GAAG,SAAS,IAAI;AAAE,YAAI;AAAE,cAAI,CAAC,oBAAoB,GAAG,UAAU,KAAM,IAAG,OAAO;AAAA,QAAG,UAAE;AAAU,cAAI,OAAQ,OAAM;AAAA,QAAK;AAAA,MAAE,EAAE;AAAA,IAAG;AAEr+B,aAAS,4BAA4BF,IAAG,QAAQ;AAAE,UAAI,CAACA,GAAG;AAAQ,UAAI,OAAOA,OAAM,SAAU,QAAO,kBAAkBA,IAAG,MAAM;AAAG,UAAIE,KAAI,OAAO,UAAU,SAAS,KAAKF,EAAC,EAAE,MAAM,GAAG,EAAE;AAAG,UAAIE,OAAM,YAAYF,GAAE,YAAa,CAAAE,KAAIF,GAAE,YAAY;AAAM,UAAIE,OAAM,SAASA,OAAM,MAAO,QAAO,MAAM,KAAKF,EAAC;AAAG,UAAIE,OAAM,eAAe,2CAA2C,KAAKA,EAAC,EAAG,QAAO,kBAAkBF,IAAG,MAAM;AAAA,IAAG;AAE/Z,aAAS,kBAAkB,KAAK,KAAK;AAAE,UAAI,OAAO,QAAQ,MAAM,IAAI,OAAQ,OAAM,IAAI;AAAQ,eAASD,KAAI,GAAG,OAAO,IAAI,MAAM,GAAG,GAAGA,KAAI,KAAKA,KAAK,MAAKA,EAAC,IAAI,IAAIA,EAAC;AAAG,aAAO;AAAA,IAAM;AAElL,aAAS,mBAAmB,KAAK,SAASI,SAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG;AAAG,YAAI,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,QAAAA,QAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,UAAI,KAAK,MAAM;AAAE,gBAAQ,KAAK;AAAA,MAAG,OAAO;AAAE,gBAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,MAAG;AAAA,IAAE;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAIC,QAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAASD,SAAQ;AAAE,cAAI,MAAM,GAAG,MAAMC,OAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAASD,SAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAO,KAAK;AAAE,+BAAmB,KAAK,SAASA,SAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAME,YAAU;AAEhB,QAAM,SAAS,CAAC,WAAW,UAAU,WAAW,YAAY,YAAY,MAAM;AAE9E,QAAMC,QAAO,MAAM;AAAA,IAAC;AAUpB,aAAS,SAAS;AAChB,aAAO,QAAQ,MAAM,MAAM,SAAS;AAAA,IACtC;AAEA,aAAS,UAAU;AACjB,gBAAU,kBAAkB,WAAW,YAAY,CAAC,GAAG;AAAA,QACrD,WAAWA;AAAA,QACX,WAAWA;AAAA,MACb,IAAI,CAAC,GAAG;AACN,cAAM,UAAU,CAAC;AACjB,cAAMC,YAAW,OAAO,aAAa,CAAC;AACtC,oBAAY,CAAC,EAAE,OAAO,SAAS;AAC/B,YAAI,QAAQ,UAAU,MAAM,MAAM,MAAM;AAExC,cAAM,qBAAkC,4BAAY;AAClD,cAAI,OAAO,kBAAkB,WAAWC,WAAUC,SAAQ,iBAAiB,OAAO;AAChF,gBAAI,CAAC,kBAAkBD,UAAS,YAAYA,UAAS,SAASC,OAAM,MAAM,MAAM;AAC9E;AAAA,YACF;AAEA,mBAAOD,UAAS,SAAS,MAAMA,UAAS,OAAOC,SAAQ,OAAO,IAAIA;AAAA,UACpE,CAAC;AAED,iBAAO,SAASC,oBAAmB,IAAI,KAAK;AAC1C,mBAAO,KAAK,MAAM,MAAM,SAAS;AAAA,UACnC;AAAA,QACF,GAAE;AAEF,YAAI,YAAY,2BAA2B,SAAS,GAChD;AAEJ,YAAI;AACF,eAAK,UAAU,EAAE,GAAG,EAAE,QAAQ,UAAU,EAAE,GAAG,QAAO;AAClD,uBAAW,MAAM;AACjB,gBAAI,YAAY;AAChB,mBAAO,UAAU;AACjB,mBAAO,UAAU;AAGjB,gBAAI,OAAO,SAAS,YAAY;AAC9B,qBAAO,MAAM,KAAK,QAAQ,cAAc,CAAC,GAAG,OAAO,GAAG,QAAQ;AAC9D,uBAAS,MAAM,IAAI;AAAA,YACrB;AAEA,gBAAI,CAAC,KAAM;AAEX,qBAAS,OAAO,UAAU;AACxB,kBAAI,OAAO,SAAS,GAAG,EAAG;AAC1B,kBAAI,QAAQ,SAAS,GAAG;AACxB,uBAAS,GAAG,IAAI,OAAO,UAAU,aAAa,MAAM,MAAM,QAAQ,cAAc,CAAC,GAAG,OAAO,GAAG,UAAU,IAAI;AAAA,YAC9G;AAEA,yBAAa;AAEb,gBAAI,OAAO,SAAS,YAAY,UAAU;AACxC,oBAAM,IAAI,MAAM,4BAA4B;AAAA,YAC9C;AAGA,gBAAI,aAAa;AACjB,mBAAO,WAAW;AAClB,mBAAO,WAAW;AAElB,gBAAIL,UAAQ,IAAI,MAAM,QAAQ;AAC5B,oBAAM,IAAI,MAAM,gBAAgB,IAAI,kBAAkB;AAAA,YACxD;AAEA,gBAAIE,UAAS,SAAS,IAAI,MAAM,QAAW;AACzC,uBAAS,MAAM,mBAAmB,UAAUA,UAAS,SAAS,IAAI,CAAC;AAEnE,kBAAI,WAAW,QAAW;AACxB,wBAAQ,IAAI,IAAI;AAChB;AAAA,cACF;AAAA,YACF;AAEA,gBAAI;AAEF,uBAAS,OAAO,YAAY,kBAAkB,OAAO,WAAW,SAAS,OAAO,IAAI,MAAMF,UAAQ,IAAI,EAAE,QAAQ;AAChH,sBAAQ,IAAI,IAAI,SAAS,MAAM,mBAAmB,UAAU,QAAQ,IAAI;AACxE,qBAAO,MAAM,SAAS,UAAU,QAAQ,OAAO;AAAA,YACjD,SAAS,KAAK;AACZ,qBAAO,EAAE,MAAM,SAAS,UAAU,OAAO;AAAA,YAC3C;AAEA,gBAAI,KAAM,QAAO;AAAA,UACnB;AAAA,QACF,SAAS,KAAK;AACZ,oBAAU,EAAE,GAAG;AAAA,QACjB,UAAE;AACA,oBAAU,EAAE;AAAA,QACd;AAEA,eAAO;AAAA,MACT,CAAC;AACD,aAAO,QAAQ,MAAM,MAAM,SAAS;AAAA,IACtC;AAEA,aAAS,kBAAkB,UAAU,cAAc;AACjD,YAAM,SAAS,SAAS,MAAM;AAE9B,UAAI,kBAAkB,OAAO;AAC3B,cAAM;AAAA,MACR;AAEA,aAAO,WAAW,SAAY,eAAe;AAAA,IAC/C;AAEA,aAAS,OAAO,SAAS;AACvB,aAAO,aAAa,OAAO,aAAa,CAAC,GAAG,OAAO,OAAO;AAAA,IAC5D;AAEA,aAASE,UAAS,SAAS;AACzB,aAAO,YAAY,OAAO,OAAO,CAAC,GAAG,OAAO;AAAA,IAC9C;AAEA,IAAAT,QAAO,UAAU,OAAO,OAAO,QAAQ;AAAA,MACrC;AAAA,MACA,SAAAO;AAAA,MACA;AAAA,MACA,UAAAE;AAAA,IACF,CAAC;AAAA;AAAA;;;ACzJD,IAAAI,kBAAA;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU,CAAC,KAAK,aAAa;AAClC,UAAI,IAAI,QAAQ,IAAI,SAAS,SAAU;AAEvC,UAAI,IAAI,MAAM;AACZ,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAAA,MAC/B;AAEA,UAAI,UAAU;AACZ,YAAI,IAAI,SAAS,IAAK,QAAO;AAC7B,YAAI,IAAI,SAAS,IAAK,QAAO;AAAA,MAC/B;AAEA,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,QAAS,QAAO;AACjC,UAAI,IAAI,SAAS,YAAa,QAAO;AACrC,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,QAAS,QAAO;AACjC,UAAI,IAAI,SAAS,SAAU,QAAO;AAClC,UAAI,IAAI,SAAS,MAAO,QAAO;AAC/B,UAAI,IAAI,SAAS,WAAY,QAAO;AACpC,UAAI,IAAI,SAAS,SAAU,QAAO;AAElC,UAAI,IAAI,SAAS,OAAQ,QAAO;AAEhC,UAAI,IAAI,SAAS,MAAO,QAAO;AAE/B,UAAI,IAAI,SAAS,KAAM,QAAO;AAC9B,UAAI,IAAI,SAAS,OAAQ,QAAO;AAChC,UAAI,IAAI,SAAS,QAAS,QAAO;AACjC,UAAI,IAAI,SAAS,OAAQ,QAAO;AAEhC,aAAO;AAAA,IACT;AAAA;AAAA;;;ACtCA,IAAAC,iBAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU,SAAO;AACtB,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,MACF,EAAE,KAAK,GAAG;AAEV,YAAM,MAAM,IAAI,OAAO,SAAS,GAAG;AACnC,aAAO,OAAO,QAAQ,WAAW,IAAI,QAAQ,KAAK,EAAE,IAAI;AAAA,IAC1D;AAAA;AAAA;;;ACVA,IAAAC,iBAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,EAAE,OAAO,OAAO,IAAI;AAE1B,QAAM,QAAQ,SAAO,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;AAMrC,IAAAA,QAAO,UAAU,SAAS,QAAQ,SAAS;AACzC,UAAI,CAAC,QAAS,QAAO,MAAM,OAAO,OAAO,GAAG,CAAC;AAE7C,UAAI,OAAO;AACX,YAAM,QAAQ,OAAO,MAAM,OAAO;AAClC,eAAS,QAAQ,OAAO;AACtB,gBAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO;AAAA,MAC/D;AAEA,aAAO,MAAM,MAAM,IAAI;AAAA,IACzB;AAAA;AAAA;;;ACrBA,IAAAC,mBAAA;AAAA,6CAAAC,UAAAC,SAAA;AAAA;AAEC,QAAMC,QAAO;AAAA,MACZ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,cAAc;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AACA,QAAM,MAAM;AAAA,MACV,SAASA,MAAK;AAAA,MACd,WAAWA,MAAK;AAAA,MAChB,WAAWA,MAAK;AAAA,MAChB,YAAYA,MAAK;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,cAAc;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AACA,QAAMC,WAAU,QAAQ,aAAa,UAAU,MAAMD;AAEpD,IAAAD,QAAO,UAAUE;AAAA;AAAA;;;AChClB,IAAAC,iBAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,KAAI;AACV,QAAMC,WAAU;AAGhB,QAAM,SAAS,OAAO,OAAO;AAAA,MAC3B,UAAU,EAAE,OAAO,GAAG,QAAQ,WAAS,IAAI,OAAO,MAAM,MAAM,EAAE;AAAA,MAChE,OAAO,EAAE,OAAO,GAAG,QAAQ,WAAS,YAAK,OAAO,MAAM,MAAM,EAAE;AAAA,MAC9D,WAAW,EAAE,OAAO,GAAG,QAAQ,WAAS,GAAG;AAAA,MAC3C,SAAS,EAAE,OAAO,GAAG,QAAQ,WAAS,GAAG,KAAK,GAAG;AAAA,IACnD,CAAC;AACD,QAAM,SAAS,UAAQ,OAAO,IAAI,KAAK,OAAO;AAG9C,QAAM,UAAU,OAAO,OAAO;AAAA,MAC5B,SAASD,GAAE,IAAIC,SAAQ,KAAK;AAAA,MAC5B,MAAMD,GAAE,MAAMC,SAAQ,IAAI;AAAA,MAC1B,QAAQD,GAAE,OAAOC,SAAQ,KAAK;AAAA,MAC9B,SAASD,GAAE,KAAK,GAAG;AAAA,IACrB,CAAC;AAED,QAAM,SAAS,CAAC,MAAME,UAAS,WAC7BA,WAAU,QAAQ,UAAU,SAAS,QAAQ,SAAS,OAAO,QAAQ,OAAO,QAAQ;AAGtF,QAAM,YAAY,gBAChBF,GAAE,KAAK,aAAaC,SAAQ,WAAWA,SAAQ,YAAY;AAE7D,QAAM,OAAO,CAAC,YAAY,aACxBD,GAAE,KAAK,aAAc,WAAWC,SAAQ,eAAe,MAAOA,SAAQ,IAAI;AAE5E,IAAAF,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACvCA,IAAAI,iBAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AAMd,IAAAA,QAAO,UAAU,SAAU,KAAK,SAAS;AACvC,UAAI,QAAQ,OAAO,MAAM,GAAG,KAAK,EAAE,EAAE,MAAM,OAAO;AAElD,UAAI,CAAC,QAAS,QAAO,MAAM;AAC3B,aAAO,MAAM,IAAI,OAAK,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC,EAC9C,OAAO,CAACC,IAAG,MAAMA,KAAI,CAAC;AAAA,IAC7B;AAAA;AAAA;;;ACdA,IAAAC,gBAAA;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAQA,IAAAA,QAAO,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM;AACnC,YAAM,MAAM,OAAO,cAAc,SAAS,KAAK,MAAM,CAAC,IAClD,IAAI,MAAM,SAAS,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,IACjD,KAAK,UAAU;AAEpB,YAAM,QAAQ,KAAK;AAEnB,cAAQ,OAAO,IAAI,MAAM,QAAQ,EAC9B,IAAI,UAAQ,KACV,MAAM,MAAM,EACZ,OAAO,CAAC,KAAK,MAAM;AAClB,YAAI,EAAE,SAAS,IAAI,UAAU,SAAS,IAAI,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,IAAI;AAChF,cAAI,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC;AAAA,YACzB,KAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE;AAC1B,eAAO;AAAA,MACT,GAAG,CAAE,GAAI,CAAC,EACT,KAAK,IAAI,CAAC,EACZ,KAAK,IAAI;AAAA,IACd;AAAA;AAAA;;;AC1BA,IAAAC,4BAAA;AAAA,sDAAAC,UAAAC,SAAA;AAAA;AAWA,IAAAA,QAAO,UAAU,CAAC,QAAQ,OAAO,eAAgB;AAC/C,mBAAa,cAAc;AAE3B,UAAI,aAAa,KAAK,IAAI,QAAO,YAAY,SAAS,KAAK,MAAM,aAAa,CAAC,CAAC;AAChF,UAAI,aAAa,EAAG,cAAa;AAEjC,UAAI,WAAW,KAAK,IAAI,aAAa,YAAY,KAAK;AAEtD,aAAO,EAAE,YAAY,SAAS;AAAA,IAChC;AAAA;AAAA;;;ACpBA,IAAAC,gBAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,kBAAkB;AAAA,IACpB;AAAA;AAAA;;;ACXA,IAAAC,kBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAW,QAAQ,UAAU;AACnC,QAAM,EAAE,OAAO,IAAI;AACnB,QAAMC,gBAAe,QAAQ,QAAQ;AACrC,QAAM,EAAE,MAAM,OAAO,IAAI;AACzB,QAAM,QAAQ;AAOd,QAAM,SAAN,cAAqBA,cAAa;AAAA,MAChC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM;AAEN,aAAK,cAAc;AACnB,aAAK,KAAK,KAAK,SAAS,QAAQ;AAChC,aAAK,MAAM,KAAK,UAAU,QAAQ;AAClC,aAAK,YAAY,KAAK,aAAa,MAAM,SAAS,KAAK,IAAI;AAC3D,cAAM,KAAKD,UAAS,gBAAgB,EAAE,OAAM,KAAK,IAAI,mBAAkB,GAAG,CAAC;AAC3E,QAAAA,UAAS,mBAAmB,KAAK,IAAI,EAAE;AAEvC,YAAI,KAAK,GAAG,MAAO,MAAK,GAAG,WAAW,IAAI;AAC1C,cAAM,WAAW,CAAE,gBAAgB,mBAAoB,EAAE,QAAQ,KAAK,YAAY,IAAI,IAAI;AAC1F,cAAM,WAAW,CAAC,KAAK,QAAQ;AAC7B,cAAIE,KAAI,OAAO,KAAK,QAAQ;AAC5B,cAAIA,OAAM,OAAO;AACf,iBAAK,KAAK,KAAK,EAAE,KAAK,GAAG;AAAA,UAC3B,WAAW,OAAO,KAAKA,EAAC,MAAM,YAAY;AACxC,iBAAKA,EAAC,EAAE,GAAG;AAAA,UACb,OAAO;AACL,iBAAK,KAAK;AAAA,UACZ;AAAA,QACF;AAEA,aAAK,QAAQ,MAAM;AACjB,eAAK,IAAI,MAAM,OAAO,IAAI;AAC1B,eAAK,GAAG,eAAe,YAAY,QAAQ;AAC3C,cAAI,KAAK,GAAG,MAAO,MAAK,GAAG,WAAW,KAAK;AAC3C,aAAG,MAAM;AACT,eAAK,KAAK,KAAK,UAAU,UAAU,KAAK,SAAS,SAAS,UAAU,KAAK,KAAK;AAC9E,eAAK,SAAS;AAAA,QAChB;AAEA,aAAK,GAAG,GAAG,YAAY,QAAQ;AAAA,MACjC;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS;AAAA,UACjB,OAAO,KAAK;AAAA,UACZ,SAAS,CAAC,CAAC,KAAK;AAAA,UAChB,QAAQ,CAAC,CAAC,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,MAEA,OAAO;AACL,aAAK,IAAI,MAAM,IAAI;AAAA,MACrB;AAAA,MAEA,SAAS;AACP,aAAK,SAAS,KAAK;AACnB,YAAI,KAAK,YAAa,MAAK,cAAc;AAAA,MAC3C;AAAA,IACF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACnEjB,IAAAI,gBAAA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,QAAM,EAAE,OAAO,OAAO,OAAO,SAAAC,SAAQ,IAAI;AAazC,QAAM,aAAN,cAAyB,OAAO;AAAA,MAC9B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK,UAAU;AAC5B,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,KAAK,WAAW;AAC/B,aAAK,YAAY,KAAK,aAAa,MAAM;AACzC,aAAK,QAAQ;AACb,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO;AACnC,aAAK,eAAe;AACpB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,MAAM,GAAG;AACX,YAAI,CAAC,KAAK,KAAK,SAAS;AACtB,eAAK,cAAc;AACnB,eAAK,WAAW,MAAM,KAAK,KAAK,UAAU,OAAO,KAAK,OAAO,CAAC;AAAA,QAChE,OAAO;AACL,eAAK,cAAc;AACnB,eAAK,WAAW,KAAK,UAAU,OAAO,CAAC;AAAA,QACzC;AACA,aAAK,SAAS;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO;AACnC,aAAK,eAAe;AACpB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK,SAAS,KAAK;AAChC,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,MAAM;AACX,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,MAAM,WAAW;AACf,YAAI,QAAQ,MAAM,KAAK,UAAU,KAAK,KAAK;AAC3C,YAAI,OAAO,UAAU,UAAU;AAC7B,eAAK,WAAW;AAChB,kBAAQ;AAAA,QACV;AACA,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,SAAS;AACb,aAAK,QAAQ,KAAK,SAAS,KAAK;AAChC,aAAK,eAAe;AACpB,aAAK,SAAS,KAAK,SAAS;AAC5B,cAAM,KAAK,SAAS;AACpB,YAAI,KAAK,OAAO;AACd,eAAK,MAAM;AACX,eAAK,KAAK;AACV,eAAK,OAAO;AACZ;AAAA,QACF;AACA,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,OAAO;AACL,YAAI,CAAC,KAAK,YAAa,QAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK;AAClB,aAAK,SAAS,KAAK,SAAS;AAC5B,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAWC,IAAG;AACZ,YAAI,KAAK,YAAa;AACtB,aAAK,SAAS,KAAK,SAAOA;AAC1B,aAAK,gBAAgBA;AAAA,MACvB;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAGA,EAAC,GAAG,EAAE;AAC3B,aAAK,MAAM;AACX,aAAK,SAAS,KAAK,cAAc,IAAI,GAAG,SAAO;AAC/C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,gBAAgB,EAAG,QAAO,KAAK,KAAK;AAC7C,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,SAAO,CAAC;AAC1C,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,MAAM;AACX,YAAI,KAAK,gBAAgB,GAAG;AAC1B,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK;AACL,eAAK,WAAW,EAAE;AAAA,QACpB;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,gBAAgB;AACd,YAAG,KAAK,SAAO,KAAK,SAAS,KAAK,SAAS,UAAU,KAAK,YAAa,QAAO,KAAK,KAAK;AACxF,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,SAAO,CAAC;AACvC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,MAAM;AACX,YAAI,KAAK,cAAc,GAAG;AACxB,eAAK,eAAe;AAAA,QACtB,OAAO;AACL,eAAK;AAAA,QACP;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AACd,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,UAAU,KAAK,KAAK,YAAa,QAAO,KAAK,KAAK;AAC3D,aAAK,WAAW,EAAE;AAClB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,SAAO,KAAK,SAAS,KAAK,SAAS,UAAU,KAAK,YAAa,QAAO,KAAK,KAAK;AACzF,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,kBAAkB;AAChB,eAAO,KAAK,WAAW,KAAM,KAAK,eAAe,KAAK,WAAW;AAAA,MACnE;AAAA,MAEA,gBAAgB;AACd,eAAO,KAAK,WAAW,KAAK,SAAS,UAAW,KAAK,eAAe,KAAK,WAAW,KAAK,SAAS,SAAS;AAAA,MAC7G;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,CAAC,KAAK,aAAa;AACrB,cAAI,KAAK;AACP,iBAAK,IAAI,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,CAAC;AACvH,eAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAAA,QACzD;AACA,cAAM,OAAO;AACb,aAAK,cAAc;AAEnB,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK,IAAI;AAAA,UACzB,KAAK,MAAM,MAAM,IAAI,KAAK,QAAQ,IAAI,KAAK;AAAA,QAC7C,EAAE,KAAK,GAAG;AAEV,YAAI,KAAK,OAAO;AACd,eAAK,eAAe,KAAK,SAAS,MAAM;AAAA,CAAI,EACvC,OAAO,CAACC,IAAG,GAAGC,OAAMD,KAAI;AAAA,EAAKC,KAAI,MAAMJ,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAAA,QACjG;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,OAAO,OAAO,KAAK,cAAc,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,CAAC,CAAC;AAAA,MAClJ;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/MjB,IAAAM,kBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,OAAO,SAAAC,UAAS,MAAAC,OAAM,iBAAiB,IAAI;AAC1D,QAAM,EAAE,OAAO,IAAI;AAanB,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,SAAS,KAAK,WAAW;AAC9B,aAAK,UAAU,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ;AAC3C,cAAI,OAAO,OAAO;AAChB,iBAAK,EAAC,OAAO,IAAI,OAAO,IAAG;AAC7B,iBAAO;AAAA,YACL,OAAO,OAAO,GAAG,SAAS,GAAG,SAAS;AAAA,YACtC,OAAO,OAAO,GAAG,UAAU,SAAY,MAAM,GAAG;AAAA,YAChD,aAAa,MAAM,GAAG;AAAA,YACtB,UAAU,MAAM,GAAG;AAAA,YACnB,UAAU,MAAM,GAAG;AAAA,UACrB;AAAA,QACF,CAAC;AACD,aAAK,iBAAiB,KAAK,kBAAkB;AAC7C,aAAK,SAAS,KAAK,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC/C,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAWC,IAAG;AACZ,aAAK,SAASA;AACd,aAAK,QAAQ,KAAK,QAAQA,EAAC,EAAE;AAC7B,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,YAAI,CAAC,KAAK,UAAU,UAAU;AAC5B,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb;AACE,eAAK,KAAK;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,WAAW,KAAK,QAAQ,SAAS,CAAC;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,WAAW,KAAK,QAAQ,SAAS,CAAC;AAAA,QACzC,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,eAAK,WAAW,CAAC;AAAA,QACnB,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,YAAY,KAAK,SAAS,KAAK,KAAK,QAAQ,MAAM;AACvD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,IAAK,QAAO,KAAK,OAAO;AAAA,MACpC;AAAA,MAEA,IAAI,YAAY;AACd,eAAO,KAAK,QAAQ,KAAK,MAAM;AAAA,MACjC;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAC3C,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC5D,cAAM,OAAO;AAEb,YAAI,EAAE,YAAY,SAAS,IAAI,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,cAAc;AAGrG,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK;AAAA,UACrB,KAAK,OAAO,KAAK,UAAU,QAAQ,KAAK,UAAU,WAC5C,MAAM,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,IAAI;AAAA,QACtD,EAAE,KAAK,GAAG;AAGV,YAAI,CAAC,KAAK,MAAM;AACd,eAAK,cAAc;AACnB,mBAASC,KAAI,YAAYA,KAAI,UAAUA,MAAK;AAC1C,gBAAI,OAAO,QAAQ,OAAO,IAAI,IAAI,KAAK,QAAQA,EAAC;AAGhD,gBAAIA,OAAM,cAAc,aAAa,GAAG;AACtC,uBAASJ,SAAQ;AAAA,YACnB,WAAWI,OAAM,WAAW,KAAK,WAAW,KAAK,QAAQ,QAAQ;AAC/D,uBAASJ,SAAQ;AAAA,YACnB,OAAO;AACL,uBAAS;AAAA,YACX;AAEA,gBAAI,EAAE,UAAU;AACd,sBAAQ,KAAK,WAAWI,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAChG,wBAAU,KAAK,WAAWA,KAAI,MAAM,KAAK,EAAE,KAAKJ,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAAA,YACnF,OAAO;AACL,sBAAQ,KAAK,WAAWI,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAChE,wBAAU,KAAK,WAAWA,KAAI,MAAM,KAAKJ,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAC1E,kBAAI,EAAE,eAAe,KAAK,WAAWI,IAAG;AACtC,uBAAO,MAAM,EAAE,WAAW;AAC1B,oBAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WACpD,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC9C,yBAAO,OAAOH,MAAK,EAAE,aAAa,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,QAAQ,CAAC;AAAA,gBAC1E;AAAA,cACF;AAAA,YACF;AAEA,iBAAK,cAAc,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA,UAC1D;AAAA,QACF;AAEA,aAAK,IAAI,MAAM,KAAK,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC9KjB,IAAAM,kBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,MAAM,IAAI;AACzB,QAAM,EAAE,QAAQ,MAAM,IAAI;AAY1B,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,SAAS,KAAK,UAAU;AAC7B,aAAK,WAAW,KAAK,YAAY;AACjC,aAAK,eAAe,KAAK;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,aAAa;AACX,YAAI,KAAK,UAAU,MAAO,QAAO,KAAK,KAAK;AAC3C,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,YAAI,KAAK,UAAU,KAAM,QAAO,KAAK,KAAK;AAC1C,aAAK,QAAQ;AACb,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,OAAO;AACL,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,QAAQ;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,OAAO;AACL,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,KAAK;AACH,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ,CAAC,KAAK;AACnB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,QAAQ,CAAC,KAAK;AAAA,QACrB,WAAWA,OAAM,KAAK;AACpB,eAAK,QAAQ;AAAA,QACf,WAAWA,OAAM,KAAK;AACpB,eAAK,QAAQ;AAAA,QACf,MAAO,QAAO,KAAK,KAAK;AACxB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAC3C,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC5D,cAAM,OAAO;AAEb,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK,IAAI;AAAA,UACzB,KAAK,QAAQ,KAAK,WAAW,MAAM,KAAK,EAAE,UAAU,KAAK,QAAQ;AAAA,UACjE,MAAM,KAAK,GAAG;AAAA,UACd,KAAK,QAAQ,MAAM,KAAK,EAAE,UAAU,KAAK,MAAM,IAAI,KAAK;AAAA,QAC1D,EAAE,KAAK,GAAG;AAEV,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACrHjB,IAAAE,oBAAA;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAN,MAAM,UAAS;AAAA,MACb,YAAY,EAAC,OAAO,MAAM,OAAO,QAAO,GAAG;AACzC,aAAK,QAAQ;AACb,aAAK,OAAO,QAAQ,oBAAI,KAAK;AAC7B,aAAK,QAAQ,SAAS,CAAC,IAAI;AAC3B,aAAK,UAAU,WAAW,CAAC;AAAA,MAC7B;AAAA,MAEA,KAAK;AAAA,MAAC;AAAA,MAEN,OAAO;AAAA,MAAC;AAAA,MAER,OAAO;AACL,cAAM,aAAa,KAAK,MAAM,QAAQ,IAAI;AAC1C,eAAO,KAAK,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,cAAc,gBAAgB,SAAQ;AAAA,MACpF;AAAA,MAEA,MAAM,KAAK;AAAA,MAAC;AAAA,MAEZ,OAAO;AACL,YAAI,QAAQ,CAAC,EAAE,OAAO,KAAK,KAAK,EAAE,QAAQ;AAC1C,cAAM,aAAa,MAAM,QAAQ,IAAI;AACrC,eAAO,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,cAAc,gBAAgB,SAAQ;AAAA,MAC/E;AAAA,MAEA,WAAW;AACT,eAAO,OAAO,KAAK,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChCjB,IAAAC,oBAAA;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,WAAN,cAAuB,SAAS;AAAA,MAC9B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,UAAU,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,MACrD;AAAA,MAEA,OAAO;AACL,aAAK,GAAG;AAAA,MACV;AAAA,MAEA,WAAW;AACT,YAAI,WAAW,KAAK,KAAK,SAAS,IAAI,KAAK,OAAO;AAClD,eAAO,KAAK,KAAK,KAAK,KAAK,IAAI,SAAS,YAAY,IAAI;AAAA,MAC1D;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACvBjB,IAAAC,eAAA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,MAAM,CAAAC,OAAK;AACf,MAAAA,KAAIA,KAAI;AACR,aAAOA,OAAM,IAAI,OACVA,OAAM,IAAI,OACVA,OAAM,IAAI,OACV;AAAA,IACT;AAEA,QAAM,MAAN,cAAkB,SAAS;AAAA,MACzB,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC3C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC3C;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,QAAQ,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC5C;AAAA,MAEA,WAAW;AACT,YAAI,OAAO,KAAK,KAAK,QAAQ;AAC7B,YAAI,MAAM,KAAK,KAAK,OAAO;AAC3B,eAAO,KAAK,UAAU,OAAO,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,IAClD,KAAK,UAAU,OAAO,OAAO,IAAI,IAAI,IACrC,KAAK,UAAU,MAAM,MAAM,IAC3B,KAAK,UAAU,QAAQ,KAAK,QAAQ,cAAc,GAAG,IACrD,KAAK,UAAU,SAAS,KAAK,QAAQ,SAAS,GAAG,IACjD;AAAA,MACT;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACzCjB,IAAAE,iBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,QAAN,cAAoB,SAAS;AAAA,MAC3B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,SAAS,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC7C;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ,KAAK,KAAK,SAAS;AAC/B,YAAI,IAAI,KAAK,KAAK,KAAK;AACrB,kBAAS,QAAQ,MAAO;AAC1B,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAClE;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB,IAAAC,wBAAA;AAAA,uDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,eAAN,cAA2B,SAAS;AAAA,MAClC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,IAAI,CAAC;AAAA,MAC3D;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,IAAI,CAAC;AAAA,MAC3D;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,gBAAgB,SAAS,IAAI,OAAO,CAAE,KAAK,MAAM,MAAO,CAAC,CAAC;AAAA,MACtE;AAAA,MAEA,WAAW;AACT,eAAO,OAAO,KAAK,KAAK,gBAAgB,CAAC,EAAE,SAAS,GAAG,GAAG,EACf,OAAO,GAAG,KAAK,MAAM,MAAM;AAAA,MACxE;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB,IAAAC,mBAAA;AAAA,kDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,UAAN,cAAsB,SAAS;AAAA,MAC7B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,WAAW,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC/C;AAAA,MAEA,WAAW;AACT,YAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC9D;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB,IAAAC,iBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,QAAN,cAAoB,SAAS;AAAA,MAC3B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,MAEA,MAAM,KAAK;AACT,cAAM,SAAS,IAAI,OAAO,EAAE,CAAC,IAAI;AACjC,aAAK,KAAK,SAAS,MAAM,IAAI,IAAI,GAAG;AAAA,MACtC;AAAA,MAEA,WAAW;AACT,YAAI,QAAQ,KAAK,KAAK,SAAS;AAC/B,YAAI,KAAK,KAAK,MAAM;AACpB,eAAO,OAAO,IAAI,OAAO,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,IAC1C,OAAO,IAAI,KAAK,QAAQ,YAAY,KAAK,IACvC,OAAO,IAAI,KAAK,QAAQ,OAAO,KAAK,IAClC,OAAO,QAAQ,CAAC;AAAA,MAC/B;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChCjB,IAAAC,mBAAA;AAAA,kDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,UAAN,cAAsB,SAAS;AAAA,MAC7B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,WAAW,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACjD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,WAAW,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC/C;AAAA,MAEA,WAAW;AACT,YAAI,IAAI,KAAK,KAAK,WAAW;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC9D;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB,IAAAC,gBAAA;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,WAAW;AAEjB,QAAM,OAAN,cAAmB,SAAS;AAAA,MAC1B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AAAA,MACZ;AAAA,MAEA,KAAK;AACH,aAAK,KAAK,YAAY,KAAK,KAAK,YAAY,IAAI,CAAC;AAAA,MACnD;AAAA,MAEA,OAAO;AACL,aAAK,KAAK,YAAY,KAAK,KAAK,YAAY,IAAI,CAAC;AAAA,MACnD;AAAA,MAEA,MAAM,KAAK;AACT,aAAK,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC;AAAA,MACtC;AAAA,MAEA,WAAW;AACT,YAAI,OAAO,OAAO,KAAK,KAAK,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG;AAC1D,eAAO,KAAK,MAAM,WAAW,IAAI,KAAK,OAAO,EAAE,IAAI;AAAA,MACrD;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB,IAAAC,qBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,UAAU;AAAA,MACV,UAAU;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA;AAAA;;;ACZA,IAAAC,gBAAA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,OAAO,SAAAC,SAAQ,IAAI;AAClC,QAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,QAAM,EAAE,UAAU,UAAU,KAAK,OAAO,cAAc,SAAS,OAAO,SAAS,KAAK,IAAI;AAExF,QAAM,QAAQ;AACd,QAAM,cAAc;AAAA,MAClB,GAAG,CAAC,EAAC,MAAK,MAAM,MAAM,QAAQ,UAAU,IAAI;AAAA,MAC5C,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI;AAAA;AAAA,MACzB,GAAG,CAAC,SAAS,IAAI,MAAM,IAAI;AAAA;AAAA,MAC3B,GAAG,CAAC,SAAS,IAAI,KAAK,IAAI;AAAA;AAAA,MAC1B,GAAG,CAAC,SAAS,IAAI,SAAS,IAAI;AAAA;AAAA,MAC9B,GAAG,CAAC,SAAS,IAAI,MAAM,IAAI;AAAA;AAAA,MAC3B,GAAG,CAAC,SAAS,IAAI,QAAQ,IAAI;AAAA;AAAA,MAC7B,GAAG,CAAC,SAAS,IAAI,QAAQ,IAAI;AAAA;AAAA,MAC7B,GAAG,CAAC,SAAS,IAAI,aAAa,IAAI;AAAA;AAAA,IACpC;AAEA,QAAM,cAAc;AAAA,MAClB,QAAQ,wFAAwF,MAAM,GAAG;AAAA,MACzG,aAAa,kDAAkD,MAAM,GAAG;AAAA,MACxE,UAAU,2DAA2D,MAAM,GAAG;AAAA,MAC9E,eAAe,8BAA8B,MAAM,GAAG;AAAA,IACxD;AAeA,QAAM,aAAN,cAAyB,OAAO;AAAA,MAC9B,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,UAAU,OAAO,OAAO,aAAa,KAAK,OAAO;AACtD,aAAK,QAAQ,KAAK,WAAW,oBAAI,KAAK;AACtC,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,YAAY,KAAK,aAAa,MAAM;AACzC,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,KAAK,MAAM;AACb,YAAI,KAAM,MAAK,MAAM,QAAQ,KAAK,QAAQ,CAAC;AAAA,MAC7C;AAAA,MAEA,IAAI,KAAK,MAAM;AACb,YAAI;AACJ,aAAK,QAAQ,CAAC;AACd,eAAM,SAAS,MAAM,KAAK,IAAI,GAAG;AAC/B,cAAI,QAAQ,OAAO,MAAM;AACzB,cAAI,MAAM,OAAO,UAAU,QAAM,MAAM,IAAI;AAC3C,eAAK,MAAM,KAAK,OAAO,cACnB,YAAY,GAAG,EAAE,EAAE,OAAO,OAAO,GAAG,KAAK,OAAO,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,CAAC,IAC3G,OAAO,GAAG,KAAK,KAAK;AAAA,QAC1B;AAEA,YAAI,QAAQ,KAAK,MAAM,OAAO,CAAC,KAAKC,OAAM;AACxC,cAAI,OAAOA,OAAM,YAAY,OAAO,IAAI,IAAI,SAAS,CAAC,MAAM;AAC1D,gBAAI,IAAI,SAAS,CAAC,KAAKA;AAAA,cACpB,KAAI,KAAKA,EAAC;AACf,iBAAO;AAAA,QACT,GAAG,CAAC,CAAC;AAEL,aAAK,MAAM,OAAO,CAAC;AACnB,aAAK,MAAM,KAAK,GAAG,KAAK;AACxB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,WAAWC,IAAG;AACZ,aAAK,QAAQ;AACb,aAAK,SAASA;AACd,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,KAAK,MAAM,UAAU,OAAK,aAAa,QAAQ,CAAC;AAChE,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,MAAM,WAAW;AACf,YAAI,QAAQ,MAAM,KAAK,UAAU,KAAK,KAAK;AAC3C,YAAI,OAAO,UAAU,UAAU;AAC7B,eAAK,WAAW;AAChB,kBAAQ;AAAA,QACV;AACA,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,SAAS;AACb,cAAM,KAAK,SAAS;AACpB,YAAI,KAAK,OAAO;AACd,eAAK,QAAQ;AACb,eAAK,KAAK;AACV,eAAK,OAAO;AACZ;AAAA,QACF;AACA,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,KAAK;AACH,aAAK,QAAQ;AACb,aAAK,MAAM,KAAK,MAAM,EAAE,GAAG;AAC3B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ;AACb,aAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AAC7B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,YAAI,QAAQ,KAAM,QAAO,KAAK,KAAK;AACnC,aAAK,WAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AACxC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,YAAI,QAAQ,KAAM,QAAO,KAAK,KAAK;AACnC,aAAK,WAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AACxC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK;AACxC,aAAK,WAAW,OACZ,KAAK,MAAM,QAAQ,IAAI,IACvB,KAAK,MAAM,UAAU,CAAC,SAAS,gBAAgB,QAAQ,CAAC;AAC5D,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG;AACH,YAAI,KAAK,KAAKA,EAAC,GAAG;AAChB,eAAK,SAASA;AACd,eAAK,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK;AACxC,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAC3C,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC5D,cAAM,OAAO;AAGb,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK;AAAA,UACrB,KAAK,MAAM,OAAO,CAAC,KAAK,GAAG,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,CAAC,KAAK,OAAO,MAAM,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC1H,KAAK,EAAE;AAAA,QACd,EAAE,KAAK,GAAG;AAGV,YAAI,KAAK,OAAO;AACd,eAAK,cAAc,KAAK,SAAS,MAAM,IAAI,EAAE;AAAA,YACzC,CAACC,IAAG,GAAGH,OAAMG,KAAI;AAAA,EAAKH,KAAI,MAAMD,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC;AAAA,YAAI;AAAA,UAAE;AAAA,QACzF;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AChNjB,IAAAM,kBAAA;AAAA,gDAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,QAAM,EAAE,OAAO,SAAAC,UAAS,OAAO,MAAM,IAAI;AAEzC,QAAM,WAAW;AACjB,QAAM,QAAQ,SAAO,QAAQ;AAC7B,QAAM,QAAQ,CAAC,QAAQ,cAAc;AACnC,UAAI,SAAS,KAAK,IAAI,IAAI,SAAS;AACnC,aAAO,KAAK,MAAM,SAAS,MAAM,IAAI;AAAA,IACvC;AAkBA,QAAM,eAAN,cAA2B,OAAO;AAAA,MAChC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,MAAM,KAAK,OAAO,IAAI,KAAK,UAAU;AACpD,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,MAAM,KAAK,aAAa;AAC7B,aAAK,MAAM,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM;AACxC,aAAK,MAAM,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM;AACxC,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,YAAY,KAAK,aAAa,MAAM;AACzC,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,UAAU;AACf,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,MAAM,GAAG;AACX,YAAI,CAAC,KAAK,MAAM,GAAG;AACjB,eAAK,cAAc;AACnB,eAAK,WAAW,MAAM,KAAK,KAAK,UAAU,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;AACnE,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK,cAAc;AACnB,eAAK,WAAW,KAAK,UAAU,OAAO,GAAG,MAAM,GAAG,KAAK,KAAK,CAAC,EAAE;AAC/D,eAAK,SAAS,MAAM,GAAG,KAAK,KAAK;AAAA,QACnC;AACA,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,IAAI,QAAQ;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,GAAG;AACP,eAAO,KAAK,QAAQ,WAAW,CAAC,IAAI,SAAS,CAAC;AAAA,MAChD;AAAA,MAEA,MAAMC,IAAG;AACP,eAAOA,OAAM,OAAOA,OAAM,OAAO,KAAK,SAAS,SAAS,KAAKA,EAAC;AAAA,MAChE;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,YAAI,IAAI,KAAK;AACb,aAAK,QAAQ,MAAM,KAAK,IAAI,KAAK;AACjC,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM;AAAA,CAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,MAAM,WAAW;AACf,YAAI,QAAQ,MAAM,KAAK,UAAU,KAAK,KAAK;AAC3C,YAAI,OAAO,UAAU,UAAU;AAC7B,eAAK,WAAW;AAChB,kBAAQ;AAAA,QACV;AACA,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,SAAS;AACb,cAAM,KAAK,SAAS;AACpB,YAAI,KAAK,OAAO;AACd,eAAK,QAAQ;AACb,eAAK,KAAK;AACV,eAAK,OAAO;AACZ;AAAA,QACF;AACA,YAAI,IAAI,KAAK;AACb,aAAK,QAAQ,MAAM,KAAK,IAAI,KAAK;AACjC,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM;AAAA,CAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,KAAK;AACH,aAAK,QAAQ;AACb,YAAG,KAAK,UAAU,IAAI;AACpB,eAAK,QAAQ,KAAK,MAAM,KAAK;AAAA,QAC/B;AACA,YAAI,KAAK,SAAS,KAAK,IAAK,QAAO,KAAK,KAAK;AAC7C,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ;AACb,YAAG,KAAK,UAAU,IAAI;AACpB,eAAK,QAAQ,KAAK,MAAM,KAAK;AAAA,QAC/B;AACA,YAAI,KAAK,SAAS,KAAK,IAAK,QAAO,KAAK,KAAK;AAC7C,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,MAAM,KAAK,MAAM,SAAS;AAC9B,YAAI,IAAI,WAAW,EAAG,QAAO,KAAK,KAAK;AACvC,aAAK,QAAQ,KAAK,MAAO,MAAM,IAAI,MAAM,GAAG,EAAE,CAAE,KAAK;AACrD,YAAI,KAAK,UAAU,MAAM,KAAK,QAAQ,KAAK,KAAK;AAC9C,eAAK,QAAQ,KAAK;AAAA,QACpB;AACA,aAAK,QAAQ;AACb,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEA,IAAG,KAAK;AACR,YAAI,CAAC,KAAK,MAAMA,EAAC,EAAG,QAAO,KAAK,KAAK;AAErC,cAAM,MAAM,KAAK,IAAI;AACrB,YAAI,MAAM,KAAK,UAAU,IAAM,MAAK,QAAQ;AAC5C,aAAK,SAASA;AACd,aAAK,UAAU;AACf,aAAK,QAAQ;AAEb,YAAIA,OAAM,IAAK,QAAO,KAAK,KAAK;AAEhC,aAAK,QAAQ,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG;AACtD,YAAI,KAAK,QAAQ,KAAK,IAAK,MAAK,QAAQ,KAAK;AAC7C,YAAI,KAAK,QAAQ,KAAK,IAAK,MAAK,QAAQ,KAAK;AAC7C,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,CAAC,KAAK,aAAa;AACrB,cAAI,KAAK;AACP,iBAAK,IAAI,MAAM,OAAO,KAAK,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,KAAK,aAAa,KAAK,IAAI,OAAO,CAAC;AACvH,eAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAAA,QACzD;AACA,cAAM,OAAO;AACb,aAAK,cAAc;AAGnB,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK,IAAI;AAAA,UACzB,CAAC,KAAK,QAAS,CAAC,KAAK,QAAQ,CAAC,KAAK,cAC7B,MAAM,KAAK,KAAK,EAAE,EAAE,UAAU,KAAK,QAAQ,IAAI,KAAK;AAAA,QAC5D,EAAE,KAAK,GAAG;AAGV,YAAI,KAAK,OAAO;AACd,eAAK,eAAe,KAAK,SAAS,MAAM;AAAA,CAAI,EACvC,OAAO,CAACC,IAAG,GAAGC,OAAMD,KAAI;AAAA,EAAKC,KAAI,MAAMH,SAAQ,YAAY,IAAI,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAAA,QACjG;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,OAAO,OAAO,KAAK,cAAc,OAAO,OAAO;AAAA,MAC9G;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpNjB,IAAAK,uBAAA;AAAA,qDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,SAAAC,UAAS,OAAO,MAAAC,OAAM,iBAAiB,IAAI;AAe1D,QAAM,oBAAN,cAAgC,OAAO;AAAA,MACrC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,SAAS,KAAK,UAAU;AAC7B,aAAK,cAAc,KAAK,UAAU;AAClC,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,OAAO,KAAK,QAAQ;AACzB,aAAK,cAAc,KAAK;AACxB,aAAK,eAAe;AACpB,aAAK,aAAa,KAAK;AACvB,aAAK,eAAe,KAAK;AACzB,aAAK,iBAAiB,KAAK,kBAAkB;AAC7C,aAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ;AACzC,cAAI,OAAO,OAAO;AAChB,iBAAK,EAAC,OAAO,IAAI,OAAO,IAAG;AAC7B,iBAAO;AAAA,YACL,OAAO,OAAO,GAAG,SAAS,GAAG,SAAS;AAAA,YACtC,aAAa,MAAM,GAAG;AAAA,YACtB,OAAO,OAAO,GAAG,UAAU,SAAY,MAAM,GAAG;AAAA,YAChD,UAAU,MAAM,GAAG;AAAA,YACnB,UAAU,MAAM,GAAG;AAAA,UACrB;AAAA,QACF,CAAC;AACD,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,YAAI,CAAC,KAAK,gBAAgB;AACxB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,MAAM,IAAI,OAAK,CAAC,EAAE,QAAQ;AAC/B,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ;AAAA,MAC1C;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,cAAM,WAAW,KAAK,MACnB,OAAO,OAAK,EAAE,QAAQ;AACzB,YAAI,KAAK,eAAe,SAAS,SAAS,KAAK,aAAa;AAC1D,eAAK,eAAe;AACpB,eAAK,OAAO;AAAA,QACd,OAAO;AACL,eAAK,OAAO;AACZ,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AACd,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,MAAM,SAAS;AAClC,aAAK,OAAO;AAAA,MACd;AAAA,MACA,OAAO;AACL,aAAK,UAAU,KAAK,SAAS,KAAK,KAAK,MAAM;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,SAAS,KAAK,MAAM,SAAS;AAAA,QACpC,OAAO;AACL,eAAK;AAAA,QACP;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,MAAM,SAAS,GAAG;AACzC,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK;AAAA,QACP;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM,KAAK,MAAM,EAAE,WAAW;AACnC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,WAAY,QAAO,KAAK,KAAK;AACnF,aAAK,MAAM,KAAK,MAAM,EAAE,WAAW;AACnC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,oBAAoB;AAClB,cAAM,IAAI,KAAK,MAAM,KAAK,MAAM;AAEhC,YAAI,EAAE,UAAU;AACd,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd,WAAW,EAAE,YAAY,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,YAAY;AACrF,iBAAO,KAAK,KAAK;AAAA,QACnB,OAAO;AACL,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,YAAY;AACV,YAAI,KAAK,eAAe,UAAa,KAAK,MAAM,KAAK,MAAM,EAAE,UAAU;AACrE,iBAAO,KAAK,KAAK;AAAA,QACnB;AAEA,cAAM,cAAc,CAAC,KAAK,MAAM,KAAK,MAAM,EAAE;AAC7C,aAAK,MAAM,OAAO,OAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,OAAK,EAAE,WAAW,WAAW;AACzE,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,kBAAkB;AAAA,QACzB,WAAWA,OAAM,KAAK;AACpB,eAAK,UAAU;AAAA,QACjB,OAAO;AACL,iBAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,MAEA,qBAAqB;AACnB,YAAI,KAAK,iBAAiB,UAAa,KAAK,cAAc;AACxD,cAAI,OAAO,KAAK,iBAAiB,UAAU;AACzC,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA;AAAA,MACIF,SAAQ,OAAO,IAAIA,SAAQ,SAAS;AAAA,MACpCA,SAAQ,SAAS,IAAIA,SAAQ,UAAU;AAAA,KAC7C,KAAK,eAAe,SAAY;AAAA,IAAwB,MACzD;AAAA,QACN;AACA,eAAO;AAAA,MACT;AAAA,MAEA,aAAaG,SAAQ,GAAGC,IAAG,gBAAgB;AACzC,cAAM,UAAU,EAAE,WAAW,MAAM,MAAMJ,SAAQ,OAAO,IAAIA,SAAQ,YAAY,MAAM,iBAAiB;AACvG,YAAI,OAAO;AAEX,YAAI,EAAE,UAAU;AACd,kBAAQG,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAAA,QAC7F,OAAO;AACL,kBAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAC3D,cAAID,YAAWC,MAAK,EAAE,aAAa;AACjC,mBAAO,MAAM,EAAE,WAAW;AAC1B,gBAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WACtD,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC5C,qBAAO,OAAOH,MAAK,EAAE,aAAa,EAAE,QAAQ,OAAO,QAAQ,OAAO,KAAK,IAAI,QAAQ,CAAC;AAAA,YACtF;AAAA,UACF;AAAA,QACF;AAEA,eAAO,SAAS,QAAQ,MAAM,KAAK,QAAQ,EAAE;AAAA,MAC/C;AAAA;AAAA,MAGA,gBAAgB,SAAS;AACvB,YAAI,QAAQ,WAAW,GAAG;AACxB,iBAAO,MAAM,IAAI,4BAA4B;AAAA,QAC/C;AAEA,YAAI,EAAE,YAAY,SAAS,IAAI,iBAAiB,KAAK,QAAQ,QAAQ,QAAQ,KAAK,cAAc;AAChG,YAAI,QAAQ,gBAAgB,CAAC;AAE7B,iBAASG,KAAI,YAAYA,KAAI,UAAUA,MAAK;AAC1C,cAAIA,OAAM,cAAc,aAAa,GAAG;AACtC,qBAASJ,SAAQ;AAAA,UACnB,WAAWI,OAAM,WAAW,KAAK,WAAW,QAAQ,QAAQ;AAC1D,qBAASJ,SAAQ;AAAA,UACnB,OAAO;AACL,qBAAS;AAAA,UACX;AACA,wBAAc,KAAK,KAAK,aAAa,KAAK,QAAQ,QAAQI,EAAC,GAAGA,IAAG,MAAM,CAAC;AAAA,QAC1E;AAEA,eAAO,OAAO,cAAc,KAAK,IAAI;AAAA,MACvC;AAAA;AAAA,MAGA,cAAc,SAAS;AACrB,YAAI,CAAC,KAAK,MAAM;AACd,iBAAO,KAAK,gBAAgB,OAAO;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AAAA,MAEA,2BAA2B;AACzB,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,MACT,OAAO,OAAK,EAAE,QAAQ,EACtB,IAAI,OAAK,EAAE,KAAK,EAChB,KAAK,IAAI;AAAA,QACd;AAEA,cAAM,SAAS,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,mBAAmB,CAAC;AAEhE,YAAI,KAAK,MAAM,KAAK,MAAM,EAAE,UAAU;AACpC,iBAAO,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,QACrC;AACA,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAChD,cAAM,OAAO;AAGb,YAAI,SAAS;AAAA,UACX,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK;AAAA,UACrB,KAAK,yBAAyB;AAAA,QAChC,EAAE,KAAK,GAAG;AACV,YAAI,KAAK,cAAc;AACrB,oBAAU,MAAM,IAAI,gCAAgC,KAAK,WAAW,WAAW;AAC/E,eAAK,eAAe;AAAA,QACtB;AACA,kBAAU,KAAK,cAAc,KAAK,KAAK;AAEvC,aAAK,IAAI,MAAM,KAAK,QAAQ,MAAM;AAClC,aAAK,QAAQ,MAAM,QAAQ,KAAK,IAAI,OAAO;AAAA,MAC7C;AAAA,IACF;AAEA,IAAAL,QAAO,UAAU;AAAA;AAAA;;;AC9QjB,IAAAM,wBAAA;AAAA,sDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,QAAM,EAAE,OAAO,OAAO,SAAAC,UAAS,MAAAC,OAAM,iBAAiB,IAAI;AAE1D,QAAM,SAAS,CAAC,KAAKC,OAAM,IAAIA,EAAC,MAAM,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC;AAC3E,QAAM,WAAW,CAAC,KAAKA,OAAM,IAAIA,EAAC,MAAM,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC,EAAE,SAAS,IAAIA,EAAC;AAC7E,QAAM,WAAW,CAAC,KAAK,eAAe;AACpC,YAAMC,SAAQ,IAAI,UAAU,QAAM,GAAG,UAAU,cAAc,GAAG,UAAU,UAAU;AACpF,aAAOA,SAAQ,KAAKA,SAAQ;AAAA,IAC9B;AAkBA,QAAM,qBAAN,cAAiC,OAAO;AAAA,MACtC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,OAAO,KAAK,YAAY,WACnC,KAAK,UACL,SAAS,KAAK,SAAS,KAAK,OAAO;AACvC,aAAK,SAAS,KAAK,WAAW,KAAK,UAAU;AAC7C,aAAK,OAAO,EAAE,WAAW,KAAK,aAAa,mBAAmB;AAC9D,aAAK,WAAW,KAAK,YAAY,KAAK;AACtC,aAAK,aAAa,KAAK,cAAc;AACrC,aAAK,cAAc,CAAC;AACpB,aAAK,QAAQ;AACb,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,SAAS;AACd,aAAK,YAAY,MAAM,OAAO,KAAK,KAAK;AACxC,aAAK,QAAQ,KAAK,UAAU;AAC5B,aAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,SAAS,IAAI;AACf,aAAK,MAAM,OAAO,cAAc,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,IAAI;AAAA,MACjE;AAAA,MAEA,IAAI,WAAW;AACb,YAAI;AACJ,YAAI,OAAO,KAAK,QAAQ;AACtB,mBAAS,KAAK,QAAQ,KAAK,GAAG;AAAA,iBACvB,OAAO,KAAK,QAAQ;AAC3B,mBAAS,EAAE,OAAO,KAAK,IAAI;AAC7B,eAAO,UAAU,KAAK,OAAO,EAAE,OAAO,KAAK,KAAK,UAAU;AAAA,MAC5D;AAAA,MAEA,WAAWD,IAAG;AACZ,aAAK,SAASA;AACd,YAAI,KAAK,YAAY,SAAS;AAC5B,eAAK,QAAQ,OAAO,KAAK,aAAaA,EAAC;AAAA,YACpC,MAAK,QAAQ,KAAK,SAAS;AAChC,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,MAAM,SAAS,IAAI;AACjB,cAAM,IAAK,KAAK,aAAa,KAAK,QAAQ,KAAK,OAAO,KAAK,OAAO;AAClE,cAAM,cAAc,MAAM;AAE1B,YAAI,KAAK,eAAe,EAAG;AAC3B,aAAK,cAAc,YAChB,IAAI,CAAC,GAAGA,IAAG,SAAS,EAAE,OAAO,SAAS,KAAKA,EAAC,GAAG,OAAO,OAAO,KAAKA,EAAC,GAAG,aAAa,EAAE,YAAY,EAAE;AACtG,aAAK,aAAa;AAClB,cAAM,IAAI,KAAK,IAAI,YAAY,SAAS,GAAG,CAAC;AAC5C,aAAK,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC;AAExC,cAAM,GAAG;AAAA,MACX;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ;AACb,aAAK,SAAS,MAAM;AAClB,eAAK,WAAW,KAAK,YAAY,SAAS,KAAK,UAAU,CAAC;AAC1D,eAAK,OAAO;AAAA,QACd,CAAC;AACD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,cAAc,KAAK,MAAM,SAAS,GAAG;AAC5C,eAAK,MAAM;AAAA,QACb,OAAO;AACL,eAAK,OAAO,KAAK,SAAS;AAC1B,eAAK,UAAU;AACf,eAAK,KAAK;AACV,eAAK,OAAO;AACZ,eAAK,IAAI,MAAM,IAAI;AACnB,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,OAAO;AACZ,aAAK,UAAU,KAAK,SAAS;AAC7B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,EAAEE,IAAG,KAAK;AACR,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAGA,EAAC,GAAG,EAAE;AAC3B,aAAK,SAAS,GAAG,SAAO;AACxB,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,WAAW,EAAG,QAAO,KAAK,KAAK;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,SAAO,CAAC;AAC1C,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AACrC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,SAAS,KAAK,SAAO;AAC1B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,gBAAgB;AACd,YAAG,KAAK,SAAO,KAAK,SAAS,KAAK,SAAS,OAAQ,QAAO,KAAK,KAAK;AACpE,YAAI,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,MAAM;AACxC,YAAI,KAAK,KAAK,MAAM,MAAM,KAAK,SAAO,CAAC;AACvC,aAAK,QAAQ,GAAG,EAAE,GAAG,EAAE;AACvB,aAAK,SAAS,KAAK,MAAM;AACzB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,WAAW,CAAC;AACjB,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,WAAW,KAAK,YAAY,SAAS,CAAC;AAC3C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,WAAW,KAAK,YAAY,SAAS,CAAC;AAAA,QAC7C,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,YAAY,SAAS,GAAG;AAC/C,eAAK,WAAW,CAAC;AAAA,QACnB,OAAO;AACL,eAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QACjC;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,YAAY,SAAS,GAAG;AAC/C,eAAK,WAAW,CAAC;AAAA,QACnB,MAAO,MAAK,WAAW,KAAK,SAAS,CAAC;AACtC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,aAAK,WAAW,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,KAAK,YAAY,SAAS,CAAC,CAAC;AAC/E,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,WAAW;AACT,aAAK,WAAW,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC;AACrD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,UAAU,EAAG,QAAO,KAAK,KAAK;AACvC,aAAK,SAAS,KAAK,SAAO;AAC1B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,SAAO,KAAK,SAAS,KAAK,SAAS,OAAQ,QAAO,KAAK,KAAK;AACrE,aAAK,SAAS,KAAK,SAAO;AAC1B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,aAAa,GAAG,SAAS,SAAS,OAAO;AACvC,YAAI;AACJ,YAAI,SAAS,UAAUJ,SAAQ,UAAU,QAAQA,SAAQ,YAAY;AACrE,YAAI,QAAQ,UAAU,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAC1D,kBAAU,UAAU,MAAM,KAAKA,SAAQ,OAAO,IAAI,MAAM,QAAQ;AAChE,YAAI,EAAE,aAAa;AACjB,iBAAO,MAAM,EAAE,WAAW;AAC1B,cAAI,OAAO,SAAS,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI,WACtD,EAAE,YAAY,MAAM,OAAO,EAAE,SAAS,GAAG;AAC5C,mBAAO,OAAOC,MAAK,EAAE,aAAa,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,QAAQ,CAAC;AAAA,UAC1E;AAAA,QACF;AACA,eAAO,SAAS,MAAM,QAAQ,MAAM,KAAK,QAAQ,EAAE;AAAA,MACrD;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAC3C,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC5D,cAAM,OAAO;AAEb,YAAI,EAAE,YAAY,SAAS,IAAI,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,KAAK;AAE5F,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,SAAS,KAAK,MAAM;AAAA,UACjD,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK,UAAU;AAAA,UAC/B,KAAK,QAAQ,KAAK,YAAY,KAAK,MAAM,IACrC,KAAK,YAAY,KAAK,MAAM,EAAE,QAC9B,KAAK,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK;AAAA,QACtD,EAAE,KAAK,GAAG;AAEV,YAAI,CAAC,KAAK,MAAM;AACd,gBAAM,cAAc,KAAK,YACtB,MAAM,YAAY,QAAQ,EAC1B,IAAI,CAAC,MAAMC,OAAO,KAAK;AAAA,YAAa;AAAA,YACnC,KAAK,WAAWA,KAAI;AAAA,YACpBA,OAAM,KAAK,aAAa;AAAA,YACxBA,KAAI,eAAe,WAAW,KAAK,WAAW,KAAK,QAAQ;AAAA,UAAM,CAAC,EACnE,KAAK,IAAI;AACZ,eAAK,cAAc;AAAA,KAAQ,eAAe,MAAM,KAAK,KAAK,SAAS,KAAK;AAAA,QAC1E;AAEA,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IACF;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACvQjB,IAAAM,mCAAA;AAAA,iEAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,oBAAoB;AAC1B,QAAM,EAAE,OAAO,OAAO,SAAAC,SAAQ,IAAI;AAalC,QAAM,gCAAN,cAA4C,kBAAkB;AAAA,MAC5D,YAAY,OAAK,CAAC,GAAG;AACnB,aAAK,iBAAiB;AACtB,cAAM,IAAI;AACV,aAAK,aAAa;AAClB,aAAK,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO;AACvC,aAAK,kBAAkB,KAAK;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,SAAS,KAAK,gBAAgB,SAAS;AAC5C,aAAK,OAAO;AAAA,MACd;AAAA,MACA,OAAO;AACL,aAAK,UAAU,KAAK,SAAS,KAAK,KAAK,gBAAgB;AACvD,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,KAAK;AACH,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,SAAS,KAAK,gBAAgB,SAAS;AAAA,QAC9C,OAAO;AACL,eAAK;AAAA,QACP;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,WAAW,KAAK,gBAAgB,SAAS,GAAG;AACnD,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK;AAAA,QACP;AACA,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,gBAAgB,KAAK,MAAM,EAAE,WAAW;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,WAAY,QAAO,KAAK,KAAK;AACnF,aAAK,gBAAgB,KAAK,MAAM,EAAE,WAAW;AAC7C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,WAAW,QAAQ;AAC1B,eAAK,aAAa,KAAK,WAAW,OAAO,GAAG,KAAK,WAAW,SAAS,CAAC;AACtE,eAAK,sBAAsB;AAAA,QAC7B;AAAA,MACF;AAAA,MAEA,wBAAwB;AACtB,cAAM,mBAAmB,KAAK,gBAAgB,KAAK,MAAM;AACzD,aAAK,kBAAkB,KAAK,MACzB,OAAO,OAAK;AACX,cAAI,KAAK,YAAY;AACnB,gBAAI,OAAO,EAAE,UAAU,UAAU;AAC/B,kBAAI,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,WAAW,YAAY,CAAC,GAAG;AACjE,uBAAO;AAAA,cACT;AAAA,YACF;AACA,gBAAI,OAAO,EAAE,UAAU,UAAU;AAC/B,kBAAI,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,WAAW,YAAY,CAAC,GAAG;AACjE,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,CAAC;AACH,cAAM,oBAAoB,KAAK,gBAAgB,UAAU,OAAK,MAAM,gBAAgB;AACpF,aAAK,SAAS,oBAAoB,IAAI,IAAI;AAC1C,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,oBAAoB;AAClB,cAAM,IAAI,KAAK,gBAAgB,KAAK,MAAM;AAE1C,YAAI,EAAE,UAAU;AACd,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd,WAAW,EAAE,YAAY,KAAK,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,UAAU,KAAK,YAAY;AACrF,iBAAO,KAAK,KAAK;AAAA,QACnB,OAAO;AACL,YAAE,WAAW;AACb,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,kBAAkBC,IAAG;AACnB,aAAK,aAAa,KAAK,aAAaA;AACpC,aAAK,sBAAsB;AAAA,MAC7B;AAAA,MAEA,EAAEA,IAAG,KAAK;AACR,YAAIA,OAAM,KAAK;AACb,eAAK,kBAAkB;AAAA,QACzB,OAAO;AACL,eAAK,kBAAkBA,EAAC;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,qBAAqB;AACnB,YAAI,KAAK,iBAAiB,UAAa,KAAK,cAAc;AACxD,cAAI,OAAO,KAAK,iBAAiB,UAAU;AACzC,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA;AAAA,MAEPD,SAAQ,OAAO,IAAIA,SAAQ,SAAS;AAAA,MACpCA,SAAQ,SAAS,IAAIA,SAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,QAIzC;AACA,eAAO;AAAA,MACT;AAAA,MAEA,qBAAqB;AACnB,eAAO;AAAA,wBACa,KAAK,aAAa,KAAK,aAAa,MAAM,KAAK,2BAA2B,CAAC;AAAA;AAAA,MACjG;AAAA,MAEA,aAAaE,SAAQ,GAAGC,IAAG;AACzB,YAAI;AACJ,YAAI,EAAE,SAAU,SAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,MAAM,cAAc,EAAE,KAAK,EAAE,KAAK;AAAA,YACtG,SAAQD,YAAWC,KAAI,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AAChE,gBAAQ,EAAE,WAAW,MAAM,MAAMH,SAAQ,OAAO,IAAIA,SAAQ,YAAY,OAAO;AAAA,MACjF;AAAA,MAEA,2BAA2B;AACzB,YAAI,KAAK,MAAM;AACb,iBAAO,KAAK,MACT,OAAO,OAAK,EAAE,QAAQ,EACtB,IAAI,OAAK,EAAE,KAAK,EAChB,KAAK,IAAI;AAAA,QACd;AAEA,cAAM,SAAS,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,mBAAmB,GAAG,KAAK,mBAAmB,CAAC;AAE3F,YAAI,KAAK,gBAAgB,UAAU,KAAK,gBAAgB,KAAK,MAAM,EAAE,UAAU;AAC7E,iBAAO,KAAK,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,QACrC;AACA,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAChD,cAAM,OAAO;AAIb,YAAI,SAAS;AAAA,UACX,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK;AAAA,UACrB,KAAK,yBAAyB;AAAA,QAChC,EAAE,KAAK,GAAG;AAEV,YAAI,KAAK,cAAc;AACrB,oBAAU,MAAM,IAAI,gCAAgC,KAAK,WAAW,WAAW;AAC/E,eAAK,eAAe;AAAA,QACtB;AACA,kBAAU,KAAK,cAAc,KAAK,eAAe;AAEjD,aAAK,IAAI,MAAM,KAAK,QAAQ,MAAM;AAClC,aAAK,QAAQ,MAAM,QAAQ,KAAK,IAAI,OAAO;AAAA,MAC7C;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACjMjB,IAAAK,mBAAA;AAAA,iDAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,EAAE,OAAO,MAAM,IAAI;AACzB,QAAM,EAAE,OAAO,OAAO,IAAI;AAc1B,QAAM,gBAAN,cAA4B,OAAO;AAAA,MACjC,YAAY,OAAK,CAAC,GAAG;AACnB,cAAM,IAAI;AACV,aAAK,MAAM,KAAK;AAChB,aAAK,QAAQ,KAAK;AAClB,aAAK,eAAe,CAAC,CAAC,KAAK;AAC3B,aAAK,SAAS,KAAK,OAAO;AAC1B,aAAK,YAAY,KAAK,aAAa;AACnC,aAAK,QAAQ,KAAK,MAAM;AACxB,aAAK,WAAW,KAAK,YAAY;AACjC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAQ;AACN,aAAK,QAAQ,KAAK;AAClB,aAAK,KAAK;AACV,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,OAAO;AACL,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,QAAQ;AACN,aAAK,OAAO,KAAK,UAAU;AAC3B,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,SAAS;AACP,aAAK,QAAQ,KAAK,SAAS;AAC3B,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,KAAK;AACV,aAAK,OAAO;AACZ,aAAK,IAAI,MAAM,IAAI;AACnB,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,EAAEC,IAAG,KAAK;AACR,YAAIA,GAAE,YAAY,MAAM,KAAK;AAC3B,eAAK,QAAQ;AACb,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,YAAIA,GAAE,YAAY,MAAM,KAAK;AAC3B,eAAK,QAAQ;AACb,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,MAEA,SAAS;AACP,YAAI,KAAK,OAAQ;AACjB,YAAI,KAAK,YAAa,MAAK,IAAI,MAAM,OAAO,IAAI;AAAA,YAC3C,MAAK,IAAI,MAAM,MAAM,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC;AAC5D,cAAM,OAAO;AAEb,aAAK,aAAa;AAAA,UAChB,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO;AAAA,UACpC,MAAM,KAAK,KAAK,GAAG;AAAA,UACnB,MAAM,UAAU,KAAK,IAAI;AAAA,UACzB,KAAK,OAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,QACvC,MAAM,KAAK,KAAK,eAAe,KAAK,YAAY,KAAK,QAAQ;AAAA,QACrE,EAAE,KAAK,GAAG;AAEV,aAAK,IAAI,MAAM,MAAM,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU;AAAA,MAC5D;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACxFjB,IAAAE,oBAAA;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,+BAA+B;AAAA,MAC/B,eAAe;AAAA,IACjB;AAAA;AAAA;;;ACZA,IAAAC,mBAAA;AAAA,wCAAAC,UAAA;AAAA;AACA,QAAMC,KAAID;AACV,QAAM,KAAK;AACX,QAAME,QAAO,OAAK;AAElB,aAAS,SAAS,MAAM,MAAM,OAAK,CAAC,GAAG;AACrC,aAAO,IAAI,QAAQ,CAAC,KAAK,QAAQ;AAC/B,cAAM,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI;AAC3B,cAAM,UAAU,KAAK,WAAWA;AAChC,cAAM,WAAW,KAAK,YAAYA;AAClC,cAAMC,UAAS,KAAK,UAAUD;AAC9B,UAAE,GAAG,SAAS,KAAK,WAAWA,KAAI;AAClC,UAAE,GAAG,UAAU,OAAK,IAAI,SAAS,CAAC,CAAC,CAAC;AACpC,UAAE,GAAG,QAAQ,OAAK,IAAIC,QAAO,CAAC,CAAC,CAAC;AAChC,UAAE,GAAG,SAAS,OAAK,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAA,MACpC,CAAC;AAAA,IACH;AAaA,IAAAF,GAAE,OAAO,UAAQ,SAAS,cAAc,IAAI;AAY5C,IAAAA,GAAE,WAAW,UAAQ;AACnB,WAAK,QAAQ;AACb,aAAOA,GAAE,KAAK,IAAI;AAAA,IACpB;AAYA,IAAAA,GAAE,YAAY,UAAQ;AACpB,WAAK,QAAQ;AACb,aAAOA,GAAE,KAAK,IAAI;AAAA,IACpB;AAkBA,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAkBhD,IAAAA,GAAE,OAAO,UAAQ,SAAS,cAAc,IAAI;AAW5C,IAAAA,GAAE,UAAU,UAAQ,SAAS,iBAAiB,IAAI;AAalD,IAAAA,GAAE,OAAO,UAAQ;AACf,YAAM,MAAM,KAAK,aAAa;AAC9B,aAAO,SAAS,cAAc,MAAM;AAAA,QAClC,UAAU,SAAO,IAAI,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAaA,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAahD,IAAAA,GAAE,SAAS,UAAQ,SAAS,gBAAgB,IAAI;AAchD,IAAAA,GAAE,cAAc,UAAQ;AACtB,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAC3C,YAAM,aAAa,WAAS,MAAM,OAAO,UAAQ,KAAK,QAAQ,EAAE,IAAI,UAAQ,KAAK,KAAK;AACtF,aAAO,SAAS,qBAAqB,MAAM;AAAA,QACzC,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,IAAAA,GAAE,0BAA0B,UAAQ;AAClC,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAC3C,YAAM,aAAa,WAAS,MAAM,OAAO,UAAQ,KAAK,QAAQ,EAAE,IAAI,UAAQ,KAAK,KAAK;AACtF,aAAO,SAAS,iCAAiC,MAAM;AAAA,QACrD,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,QAAM,UAAU,CAAC,OAAO,YAAY,QAAQ;AAAA,MAC1C,QAAQ,OAAO,UAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,YAAY,MAAM,MAAM,YAAY,CAAC;AAAA,IAChG;AAiBA,IAAAA,GAAE,eAAe,UAAQ;AACvB,WAAK,UAAU,KAAK,WAAW;AAC/B,WAAK,UAAU,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;AAC3C,aAAO,SAAS,sBAAsB,IAAI;AAAA,IAC5C;AAAA;AAAA;;;AC7MA,IAAAG,eAAA;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAU;AAEhB,QAAM,SAAS,CAAC,WAAW,UAAU,WAAW,YAAY,YAAY,MAAM;AAC9E,QAAMC,QAAO,MAAM;AAAA,IAAC;AASpB,mBAAe,OAAO,YAAU,CAAC,GAAG,EAAE,WAASA,OAAM,WAASA,MAAK,IAAE,CAAC,GAAG;AACvE,YAAM,UAAU,CAAC;AACjB,YAAMC,YAAW,OAAO,aAAa,CAAC;AACtC,kBAAY,CAAC,EAAE,OAAO,SAAS;AAC/B,UAAI,QAAQ,UAAU,MAAM,MAAM,MAAM;AAExC,YAAM,qBAAqB,OAAOC,WAAUC,SAAQ,iBAAiB,UAAU;AAC7E,YAAI,CAAC,kBAAkBD,UAAS,YAAYA,UAAS,SAASC,OAAM,MAAM,MAAM;AAC9E;AAAA,QACF;AACA,eAAOD,UAAS,SAAS,MAAMA,UAAS,OAAOC,SAAQ,OAAO,IAAIA;AAAA,MACpE;AAEA,WAAK,YAAY,WAAW;AAC1B,SAAC,EAAE,MAAM,KAAK,IAAI;AAGlB,YAAI,OAAO,SAAS,YAAY;AAC9B,iBAAO,MAAM,KAAK,QAAQ,EAAE,GAAG,QAAQ,GAAG,QAAQ;AAClD,mBAAS,MAAM,IAAI;AAAA,QACrB;AACA,YAAI,CAAC,KAAM;AAGX,iBAAS,OAAO,UAAU;AACxB,cAAI,OAAO,SAAS,GAAG,EAAG;AAC1B,cAAI,QAAQ,SAAS,GAAG;AACxB,mBAAS,GAAG,IAAI,OAAO,UAAU,aAAa,MAAM,MAAM,QAAQ,EAAE,GAAG,QAAQ,GAAG,UAAU,IAAI;AAAA,QAClG;AAEA,qBAAa;AAEb,YAAI,OAAO,SAAS,YAAY,UAAU;AACxC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAGA,SAAC,EAAE,MAAM,KAAK,IAAI;AAElB,YAAIJ,UAAQ,IAAI,MAAM,QAAQ;AAC5B,gBAAM,IAAI,MAAM,gBAAgB,IAAI,kBAAkB;AAAA,QACxD;AAEA,YAAIE,UAAS,SAAS,IAAI,MAAM,QAAW;AACzC,mBAAS,MAAM,mBAAmB,UAAUA,UAAS,SAAS,IAAI,CAAC;AACnE,cAAI,WAAW,QAAW;AACxB,oBAAQ,IAAI,IAAI;AAChB;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AAEF,mBAAS,OAAO,YAAY,kBAAkB,OAAO,WAAW,SAAS,OAAO,IAAI,MAAMF,UAAQ,IAAI,EAAE,QAAQ;AAChH,kBAAQ,IAAI,IAAI,SAAS,MAAM,mBAAmB,UAAU,QAAQ,IAAI;AACxE,iBAAO,MAAM,SAAS,UAAU,QAAQ,OAAO;AAAA,QACjD,SAAS,KAAK;AACZ,iBAAO,CAAE,MAAM,SAAS,UAAU,OAAO;AAAA,QAC3C;AAEA,YAAI,KAAM,QAAO;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,kBAAkB,UAAU,cAAc;AACjD,YAAM,SAAS,SAAS,MAAM;AAC5B,UAAI,kBAAkB,OAAO;AAC3B,cAAM;AAAA,MACR;AAEA,aAAQ,WAAW,SAAa,eAAe;AAAA,IACnD;AAEA,aAAS,OAAO,SAAS;AACvB,aAAO,aAAa,OAAO,aAAa,CAAC,GAAG,OAAO,OAAO;AAAA,IAC5D;AAEA,aAASE,UAAS,SAAS;AACzB,aAAO,YAAY,OAAO,OAAO,CAAC,GAAG,OAAO;AAAA,IAC9C;AAEA,IAAAH,QAAO,UAAU,OAAO,OAAO,QAAQ,EAAE,QAAQ,SAAAC,WAAS,QAAQ,UAAAE,UAAS,CAAC;AAAA;AAAA;;;ACjG5E,IAAAG,mBAAA;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AAAA,aAAS,SAAS,KAAK;AACrB,aAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM;AAC5D,UAAIC,KAAE,GAAG,MAAI,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AACxD,aAAOA,KAAI,IAAI,QAAQA,MAAK;AAC1B,YAAI,IAAIA,EAAC,IAAI,IAAIA,EAAC,EAAG,QAAO;AAC5B,YAAI,IAAIA,EAAC,IAAI,IAAIA,EAAC,EAAG,QAAO;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UACL,SAAS,OAAO,IACZ,iBACA;AAAA;AAAA;;;ACbN;AAAA,iEAAAE,UAAAC,SAAA;AAAA;AAAA,QAAM,YAAY,OAAO,YAAY,YACnC,WACA,QAAQ,aAAa;AACvB,IAAAA,QAAO,UAAU,YAAY,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI;AAAA;AAAA;;;ACHxD;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AACA,IAAAA,QAAO,UAAU;AACjB,aAAS,SAASC,IAAG,GAAG,KAAK;AAC3B,UAAIA,cAAa,OAAQ,CAAAA,KAAI,WAAWA,IAAG,GAAG;AAC9C,UAAI,aAAa,OAAQ,KAAI,WAAW,GAAG,GAAG;AAE9C,UAAI,IAAIC,OAAMD,IAAG,GAAG,GAAG;AAEvB,aAAO,KAAK;AAAA,QACV,OAAO,EAAE,CAAC;AAAA,QACV,KAAK,EAAE,CAAC;AAAA,QACR,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,QACtB,MAAM,IAAI,MAAM,EAAE,CAAC,IAAIA,GAAE,QAAQ,EAAE,CAAC,CAAC;AAAA,QACrC,MAAM,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM;AAAA,MACjC;AAAA,IACF;AAEA,aAAS,WAAW,KAAK,KAAK;AAC5B,UAAI,IAAI,IAAI,MAAM,GAAG;AACrB,aAAO,IAAI,EAAE,CAAC,IAAI;AAAA,IACpB;AAEA,aAAS,QAAQC;AACjB,aAASA,OAAMD,IAAG,GAAG,KAAK;AACxB,UAAI,MAAM,KAAK,MAAM,OAAO;AAC5B,UAAI,KAAK,IAAI,QAAQA,EAAC;AACtB,UAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC9B,UAAIE,KAAI;AAER,UAAI,MAAM,KAAK,KAAK,GAAG;AACrB,YAAGF,OAAI,GAAG;AACR,iBAAO,CAAC,IAAI,EAAE;AAAA,QAChB;AACA,eAAO,CAAC;AACR,eAAO,IAAI;AAEX,eAAOE,MAAK,KAAK,CAAC,QAAQ;AACxB,cAAIA,MAAK,IAAI;AACX,iBAAK,KAAKA,EAAC;AACX,iBAAK,IAAI,QAAQF,IAAGE,KAAI,CAAC;AAAA,UAC3B,WAAW,KAAK,UAAU,GAAG;AAC3B,qBAAS,CAAE,KAAK,IAAI,GAAG,EAAG;AAAA,UAC5B,OAAO;AACL,kBAAM,KAAK,IAAI;AACf,gBAAI,MAAM,MAAM;AACd,qBAAO;AACP,sBAAQ;AAAA,YACV;AAEA,iBAAK,IAAI,QAAQ,GAAGA,KAAI,CAAC;AAAA,UAC3B;AAEA,UAAAA,KAAI,KAAK,MAAM,MAAM,IAAI,KAAK;AAAA,QAChC;AAEA,YAAI,KAAK,QAAQ;AACf,mBAAS,CAAE,MAAM,KAAM;AAAA,QACzB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC7DA;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAEf,IAAAA,QAAO,UAAU;AAEjB,QAAI,WAAW,YAAU,KAAK,OAAO,IAAE;AACvC,QAAI,UAAU,WAAS,KAAK,OAAO,IAAE;AACrC,QAAI,WAAW,YAAU,KAAK,OAAO,IAAE;AACvC,QAAI,WAAW,YAAU,KAAK,OAAO,IAAE;AACvC,QAAI,YAAY,aAAW,KAAK,OAAO,IAAE;AAEzC,aAAS,QAAQ,KAAK;AACpB,aAAO,SAAS,KAAK,EAAE,KAAK,MACxB,SAAS,KAAK,EAAE,IAChB,IAAI,WAAW,CAAC;AAAA,IACtB;AAEA,aAAS,aAAa,KAAK;AACzB,aAAO,IAAI,MAAM,MAAM,EAAE,KAAK,QAAQ,EAC3B,MAAM,KAAK,EAAE,KAAK,OAAO,EACzB,MAAM,KAAK,EAAE,KAAK,QAAQ,EAC1B,MAAM,KAAK,EAAE,KAAK,QAAQ,EAC1B,MAAM,KAAK,EAAE,KAAK,SAAS;AAAA,IACxC;AAEA,aAAS,eAAe,KAAK;AAC3B,aAAO,IAAI,MAAM,QAAQ,EAAE,KAAK,IAAI,EACzB,MAAM,OAAO,EAAE,KAAK,GAAG,EACvB,MAAM,QAAQ,EAAE,KAAK,GAAG,EACxB,MAAM,QAAQ,EAAE,KAAK,GAAG,EACxB,MAAM,SAAS,EAAE,KAAK,GAAG;AAAA,IACtC;AAMA,aAAS,gBAAgB,KAAK;AAC5B,UAAI,CAAC;AACH,eAAO,CAAC,EAAE;AAEZ,UAAI,QAAQ,CAAC;AACb,UAAI,IAAI,SAAS,KAAK,KAAK,GAAG;AAE9B,UAAI,CAAC;AACH,eAAO,IAAI,MAAM,GAAG;AAEtB,UAAI,MAAM,EAAE;AACZ,UAAI,OAAO,EAAE;AACb,UAAI,OAAO,EAAE;AACb,UAAI,IAAI,IAAI,MAAM,GAAG;AAErB,QAAE,EAAE,SAAO,CAAC,KAAK,MAAM,OAAO;AAC9B,UAAI,YAAY,gBAAgB,IAAI;AACpC,UAAI,KAAK,QAAQ;AACf,UAAE,EAAE,SAAO,CAAC,KAAK,UAAU,MAAM;AACjC,UAAE,KAAK,MAAM,GAAG,SAAS;AAAA,MAC3B;AAEA,YAAM,KAAK,MAAM,OAAO,CAAC;AAEzB,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,KAAK,SAAS;AAC/B,UAAI,CAAC;AACH,eAAO,CAAC;AAEV,gBAAU,WAAW,CAAC;AACtB,UAAI,MAAM,QAAQ,OAAO,OAAO,WAAW,QAAQ;AAQnD,UAAI,IAAI,OAAO,GAAG,CAAC,MAAM,MAAM;AAC7B,cAAM,WAAW,IAAI,OAAO,CAAC;AAAA,MAC/B;AAEA,aAAO,OAAO,aAAa,GAAG,GAAG,KAAK,IAAI,EAAE,IAAI,cAAc;AAAA,IAChE;AAEA,aAAS,QAAQ,KAAK;AACpB,aAAO,MAAM,MAAM;AAAA,IACrB;AACA,aAAS,SAAS,IAAI;AACpB,aAAO,SAAS,KAAK,EAAE;AAAA,IACzB;AAEA,aAAS,IAAIC,IAAG,GAAG;AACjB,aAAOA,MAAK;AAAA,IACd;AACA,aAAS,IAAIA,IAAG,GAAG;AACjB,aAAOA,MAAK;AAAA,IACd;AAEA,aAAS,OAAO,KAAK,KAAK,OAAO;AAC/B,UAAI,aAAa,CAAC;AAElB,UAAI,IAAI,SAAS,KAAK,KAAK,GAAG;AAC9B,UAAI,CAAC,EAAG,QAAO,CAAC,GAAG;AAGnB,UAAI,MAAM,EAAE;AACZ,UAAI,OAAO,EAAE,KAAK,SACd,OAAO,EAAE,MAAM,KAAK,KAAK,IACzB,CAAC,EAAE;AAEP,UAAI,MAAM,KAAK,EAAE,GAAG,GAAG;AACrB,iBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK;AAC/C,cAAI,YAAY,MAAK,MAAM,EAAE,OAAO,MAAM,KAAK,CAAC;AAChD,qBAAW,KAAK,SAAS;AAAA,QAC3B;AAAA,MACF,OAAO;AACL,YAAI,oBAAoB,iCAAiC,KAAK,EAAE,IAAI;AACpE,YAAI,kBAAkB,uCAAuC,KAAK,EAAE,IAAI;AACxE,YAAI,aAAa,qBAAqB;AACtC,YAAI,YAAY,EAAE,KAAK,QAAQ,GAAG,KAAK;AACvC,YAAI,CAAC,cAAc,CAAC,WAAW;AAE7B,cAAI,EAAE,KAAK,MAAM,YAAY,GAAG;AAC9B,kBAAM,EAAE,MAAM,MAAM,EAAE,OAAO,WAAW,EAAE;AAC1C,mBAAO,OAAO,KAAK,KAAK,IAAI;AAAA,UAC9B;AACA,iBAAO,CAAC,GAAG;AAAA,QACb;AAEA,YAAIC;AACJ,YAAI,YAAY;AACd,UAAAA,KAAI,EAAE,KAAK,MAAM,MAAM;AAAA,QACzB,OAAO;AACL,UAAAA,KAAI,gBAAgB,EAAE,IAAI;AAC1B,cAAIA,GAAE,WAAW,GAAG;AAElB,YAAAA,KAAI,OAAOA,GAAE,CAAC,GAAG,KAAK,KAAK,EAAE,IAAI,OAAO;AACxC,gBAAIA,GAAE,WAAW,GAAG;AAClB,qBAAO,KAAK,IAAI,SAAS,GAAG;AAC1B,uBAAO,EAAE,MAAMA,GAAE,CAAC,IAAI;AAAA,cACxB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAIA,YAAI;AAEJ,YAAI,YAAY;AACd,cAAI,IAAI,QAAQA,GAAE,CAAC,CAAC;AACpB,cAAI,IAAI,QAAQA,GAAE,CAAC,CAAC;AACpB,cAAI,QAAQ,KAAK,IAAIA,GAAE,CAAC,EAAE,QAAQA,GAAE,CAAC,EAAE,MAAM;AAC7C,cAAI,OAAOA,GAAE,UAAU,IACnB,KAAK,IAAI,KAAK,IAAI,QAAQA,GAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IACnC;AACJ,cAAI,OAAO;AACX,cAAI,UAAU,IAAI;AAClB,cAAI,SAAS;AACX,oBAAQ;AACR,mBAAO;AAAA,UACT;AACA,cAAI,MAAMA,GAAE,KAAK,QAAQ;AAEzB,cAAI,CAAC;AAEL,mBAASD,KAAI,GAAG,KAAKA,IAAG,CAAC,GAAGA,MAAK,MAAM;AACrC,gBAAIE;AACJ,gBAAI,iBAAiB;AACnB,cAAAA,KAAI,OAAO,aAAaF,EAAC;AACzB,kBAAIE,OAAM;AACR,gBAAAA,KAAI;AAAA,YACR,OAAO;AACL,cAAAA,KAAI,OAAOF,EAAC;AACZ,kBAAI,KAAK;AACP,oBAAI,OAAO,QAAQE,GAAE;AACrB,oBAAI,OAAO,GAAG;AACZ,sBAAI,IAAI,IAAI,MAAM,OAAO,CAAC,EAAE,KAAK,GAAG;AACpC,sBAAIF,KAAI;AACN,oBAAAE,KAAI,MAAM,IAAIA,GAAE,MAAM,CAAC;AAAA;AAEvB,oBAAAA,KAAI,IAAIA;AAAA,gBACZ;AAAA,cACF;AAAA,YACF;AACA,cAAE,KAAKA,EAAC;AAAA,UACV;AAAA,QACF,OAAO;AACL,cAAI,CAAC;AAEL,mBAAS,IAAI,GAAG,IAAID,GAAE,QAAQ,KAAK;AACjC,cAAE,KAAK,MAAM,GAAG,OAAOA,GAAE,CAAC,GAAG,KAAK,KAAK,CAAC;AAAA,UAC1C;AAAA,QACF;AAEA,iBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,mBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,WAAW,SAAS,KAAK,KAAK;AAC/D,gBAAI,YAAY,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC;AACnC,gBAAI,CAAC,SAAS,cAAc;AAC1B,yBAAW,KAAK,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC5MA;AAAA,kEAAAE,UAAAC,SAAA;AAAA;AAAA,QAAM,YAAYA,QAAO,UAAU,CAAC,GAAG,SAAS,UAAU,CAAC,MAAM;AAC/D,yBAAmB,OAAO;AAG1B,UAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK;AACnD,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,UAAU,SAAS,OAAO,EAAE,MAAM,CAAC;AAAA,IAChD;AAEA,IAAAA,QAAO,UAAU;AAEjB,QAAMC,SAAO;AACb,cAAU,MAAMA,OAAK;AAErB,QAAM,WAAW,uBAAO,aAAa;AACrC,cAAU,WAAW;AACrB,QAAM,SAAS;AAEf,QAAM,UAAU;AAAA,MACd,KAAK,EAAE,MAAM,aAAa,OAAO,YAAW;AAAA,MAC5C,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,MAChC,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,MAChC,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,MAChC,KAAK,EAAE,MAAM,OAAO,OAAO,IAAI;AAAA,IACjC;AAIA,QAAM,QAAQ;AAGd,QAAM,OAAO,QAAQ;AAKrB,QAAM,aAAa;AAInB,QAAM,eAAe;AAGrB,QAAM,UAAU,OAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,KAAKC,OAAM;AAClD,UAAIA,EAAC,IAAI;AACT,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAGL,QAAM,aAAa,QAAQ,iBAAiB;AAG5C,QAAM,qBAAqB,QAAQ,KAAK;AAGxC,QAAM,aAAa;AAEnB,cAAU,SAAS,CAAC,SAAS,UAAU,CAAC,MACtC,CAAC,GAAGC,IAAG,SAAS,UAAU,GAAG,SAAS,OAAO;AAE/C,QAAM,MAAM,CAACC,IAAG,IAAI,CAAC,MAAM;AACzB,YAAM,IAAI,CAAC;AACX,aAAO,KAAKA,EAAC,EAAE,QAAQ,OAAK,EAAE,CAAC,IAAIA,GAAE,CAAC,CAAC;AACvC,aAAO,KAAK,CAAC,EAAE,QAAQ,OAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,aAAO;AAAA,IACT;AAEA,cAAU,WAAW,SAAO;AAC1B,UAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,KAAK,GAAG,EAAE,QAAQ;AAC/D,eAAO;AAAA,MACT;AAEA,YAAM,OAAO;AAEb,YAAM,IAAI,CAAC,GAAG,SAAS,YAAY,KAAK,GAAG,SAAS,IAAI,KAAK,OAAO,CAAC;AACrE,QAAE,YAAY,MAAM,kBAAkB,KAAK,UAAU;AAAA,QACnD,YAAa,SAAS,SAAS;AAC7B,gBAAM,SAAS,IAAI,KAAK,OAAO,CAAC;AAAA,QAClC;AAAA,MACF;AACA,QAAE,UAAU,WAAW,aAAW,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,EAAE;AACnE,QAAE,SAAS,CAAC,SAAS,YAAY,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;AACvE,QAAE,WAAW,aAAW,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC;AACvD,QAAE,SAAS,CAAC,SAAS,YAAY,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;AACvE,QAAE,cAAc,CAAC,SAAS,YAAY,KAAK,YAAY,SAAS,IAAI,KAAK,OAAO,CAAC;AACjF,QAAE,QAAQ,CAAC,MAAM,SAAS,YAAY,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,OAAO,CAAC;AAEjF,aAAO;AAAA,IACT;AAgBA,cAAU,cAAc,CAAC,SAAS,YAAY,YAAY,SAAS,OAAO;AAE1E,QAAM,cAAc,CAAC,SAAS,UAAU,CAAC,MAAM;AAC7C,yBAAmB,OAAO;AAI1B,UAAI,QAAQ,WAAW,CAAC,mBAAmB,KAAK,OAAO,GAAG;AAExD,eAAO,CAAC,OAAO;AAAA,MACjB;AAEA,aAAO,OAAO,OAAO;AAAA,IACvB;AAEA,QAAM,qBAAqB,OAAO;AAClC,QAAM,qBAAqB,aAAW;AACpC,UAAI,OAAO,YAAY,UAAU;AAC/B,cAAM,IAAI,UAAU,iBAAiB;AAAA,MACvC;AAEA,UAAI,QAAQ,SAAS,oBAAoB;AACvC,cAAM,IAAI,UAAU,qBAAqB;AAAA,MAC3C;AAAA,IACF;AAaA,QAAM,WAAW,uBAAO,UAAU;AAElC,cAAU,SAAS,CAAC,SAAS,YAC3B,IAAI,UAAU,SAAS,WAAW,CAAC,CAAC,EAAE,OAAO;AAE/C,cAAU,QAAQ,CAAC,MAAM,SAAS,UAAU,CAAC,MAAM;AACjD,YAAM,KAAK,IAAI,UAAU,SAAS,OAAO;AACzC,aAAO,KAAK,OAAO,OAAK,GAAG,MAAM,CAAC,CAAC;AACnC,UAAI,GAAG,QAAQ,UAAU,CAAC,KAAK,QAAQ;AACrC,aAAK,KAAK,OAAO;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAGA,QAAM,eAAe,OAAK,EAAE,QAAQ,UAAU,IAAI;AAClD,QAAM,eAAe,OAAK,EAAE,QAAQ,eAAe,IAAI;AACvD,QAAM,eAAe,OAAK,EAAE,QAAQ,4BAA4B,MAAM;AACtE,QAAM,eAAe,OAAK,EAAE,QAAQ,YAAY,MAAM;AAEtD,QAAM,YAAN,MAAgB;AAAA,MACd,YAAa,SAAS,SAAS;AAC7B,2BAAmB,OAAO;AAE1B,YAAI,CAAC,QAAS,WAAU,CAAC;AAEzB,aAAK,UAAU;AACf,aAAK,uBAAuB,QAAQ,yBAAyB,SACzD,QAAQ,uBAAuB;AACnC,aAAK,MAAM,CAAC;AACZ,aAAK,UAAU;AACf,aAAK,uBAAuB,CAAC,CAAC,QAAQ,wBACpC,QAAQ,uBAAuB;AACjC,YAAI,KAAK,sBAAsB;AAC7B,eAAK,UAAU,KAAK,QAAQ,QAAQ,OAAO,GAAG;AAAA,QAChD;AACA,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,UAAU,CAAC,CAAC,QAAQ;AAGzB,aAAK,KAAK;AAAA,MACZ;AAAA,MAEA,QAAS;AAAA,MAAC;AAAA,MAEV,OAAQ;AACN,cAAM,UAAU,KAAK;AACrB,cAAM,UAAU,KAAK;AAGrB,YAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK;AACnD,eAAK,UAAU;AACf;AAAA,QACF;AACA,YAAI,CAAC,SAAS;AACZ,eAAK,QAAQ;AACb;AAAA,QACF;AAGA,aAAK,YAAY;AAGjB,YAAI,MAAM,KAAK,UAAU,KAAK,YAAY;AAE1C,YAAI,QAAQ,MAAO,MAAK,QAAQ,IAAI,SAAS,QAAQ,MAAM,GAAG,IAAI;AAElE,aAAK,MAAM,KAAK,SAAS,GAAG;AAO5B,cAAM,KAAK,YAAY,IAAI,IAAI,OAAK,EAAE,MAAM,UAAU,CAAC;AAEvD,aAAK,MAAM,KAAK,SAAS,GAAG;AAG5B,cAAM,IAAI,IAAI,CAAC,GAAG,IAAIC,SAAQ,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC;AAErD,aAAK,MAAM,KAAK,SAAS,GAAG;AAG5B,cAAM,IAAI,OAAO,OAAK,EAAE,QAAQ,KAAK,MAAM,EAAE;AAE7C,aAAK,MAAM,KAAK,SAAS,GAAG;AAE5B,aAAK,MAAM;AAAA,MACb;AAAA,MAEA,cAAe;AACb,YAAI,KAAK,QAAQ,SAAU;AAE3B,cAAM,UAAU,KAAK;AACrB,YAAI,SAAS;AACb,YAAI,eAAe;AAEnB,iBAASF,KAAI,GAAGA,KAAI,QAAQ,UAAU,QAAQ,OAAOA,EAAC,MAAM,KAAKA,MAAK;AACpE,mBAAS,CAAC;AACV;AAAA,QACF;AAEA,YAAI,aAAc,MAAK,UAAU,QAAQ,MAAM,YAAY;AAC3D,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,SAAU,MAAM,SAAS,SAAS;AAChC,YAAI,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AACpC,iBAAO,KAAK,eAAe,MAAM,SAAS,SAAS,GAAG,CAAC;AAAA,QACzD;AACA,eAAO,KAAK,UAAU,MAAM,SAAS,SAAS,GAAG,CAAC;AAAA,MACpD;AAAA,MAEA,eAAgB,MAAM,SAAS,SAAS,WAAW,cAAc;AAE/D,YAAI,UAAU;AACd,iBAASA,KAAI,cAAcA,KAAI,QAAQ,QAAQA,MAAK;AAClD,cAAI,QAAQA,EAAC,MAAM,UAAU;AAAE,sBAAUA;AAAG;AAAA,UAAM;AAAA,QACpD;AAGA,YAAI,SAAS;AACb,iBAASA,KAAI,QAAQ,SAAS,GAAGA,MAAK,GAAGA,MAAK;AAC5C,cAAI,QAAQA,EAAC,MAAM,UAAU;AAAE,qBAASA;AAAG;AAAA,UAAM;AAAA,QACnD;AAEA,cAAM,OAAO,QAAQ,MAAM,cAAc,OAAO;AAChD,cAAM,OAAO,UAAU,QAAQ,MAAM,UAAU,CAAC,IAAI,QAAQ,MAAM,UAAU,GAAG,MAAM;AACrF,cAAM,OAAO,UAAU,CAAC,IAAI,QAAQ,MAAM,SAAS,CAAC;AAGpD,YAAI,KAAK,QAAQ;AACf,gBAAM,WAAW,KAAK,MAAM,WAAW,YAAY,KAAK,MAAM;AAC9D,cAAI,CAAC,KAAK,UAAU,UAAU,MAAM,SAAS,GAAG,CAAC,GAAG;AAClD,mBAAO;AAAA,UACT;AACA,uBAAa,KAAK;AAAA,QACpB;AAGA,YAAI,gBAAgB;AACpB,YAAI,KAAK,QAAQ;AACf,cAAI,KAAK,SAAS,YAAY,KAAK,OAAQ,QAAO;AAElD,gBAAM,YAAY,KAAK,SAAS,KAAK;AACrC,cAAI,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,CAAC,GAAG;AACrD,4BAAgB,KAAK;AAAA,UACvB,OAAO;AAEL,gBAAI,KAAK,KAAK,SAAS,CAAC,MAAM,MAC1B,YAAY,KAAK,WAAW,KAAK,QAAQ;AAC3C,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,KAAK,UAAU,MAAM,MAAM,SAAS,YAAY,GAAG,CAAC,GAAG;AAC1D,qBAAO;AAAA,YACT;AACA,4BAAgB,KAAK,SAAS;AAAA,UAChC;AAAA,QACF;AAGA,YAAI,CAAC,KAAK,QAAQ;AAChB,cAAI,UAAU,CAAC,CAAC;AAChB,mBAASA,KAAI,WAAWA,KAAI,KAAK,SAAS,eAAeA,MAAK;AAC5D,kBAAM,IAAI,OAAO,KAAKA,EAAC,CAAC;AACxB,sBAAU;AACV,gBAAI,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,MAAM,KAAM;AAC9C,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO,WAAW;AAAA,QACpB;AAGA,cAAM,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAI,cAAc,aAAa,CAAC;AAChC,YAAI,aAAa;AACjB,cAAM,iBAAiB,CAAC,CAAC;AACzB,mBAAW,KAAK,MAAM;AACpB,cAAI,MAAM,UAAU;AAClB,2BAAe,KAAK,UAAU;AAC9B,0BAAc,CAAC,CAAC,GAAG,CAAC;AACpB,yBAAa,KAAK,WAAW;AAAA,UAC/B,OAAO;AACL,wBAAY,CAAC,EAAE,KAAK,CAAC;AACrB;AAAA,UACF;AAAA,QACF;AAEA,YAAI,MAAM,aAAa,SAAS;AAChC,cAAM,aAAa,KAAK,SAAS;AACjC,mBAAW,KAAK,cAAc;AAC5B,YAAE,CAAC,IAAI,cAAc,eAAe,KAAK,IAAI,EAAE,CAAC,EAAE;AAAA,QACpD;AAEA,eAAO,CAAC,CAAC,KAAK;AAAA,UACZ;AAAA,UAAM;AAAA,UAAc;AAAA,UAAW;AAAA,UAAG;AAAA,UAAS;AAAA,UAAG,CAAC,CAAC;AAAA,QAClD;AAAA,MACF;AAAA;AAAA;AAAA,MAIA,2BACE,MAAM,cAAc,WAAW,WAAW,SAAS,eAAe,SAClE;AACA,cAAM,KAAK,aAAa,SAAS;AACjC,YAAI,CAAC,IAAI;AAEP,mBAASA,KAAI,WAAWA,KAAI,KAAK,QAAQA,MAAK;AAC5C,sBAAU;AACV,kBAAM,IAAI,KAAKA,EAAC;AAChB,gBAAI,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,MAAM,KAAM;AAC9C,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,cAAM,CAAC,MAAM,KAAK,IAAI;AACtB,eAAO,aAAa,OAAO;AACzB,gBAAM,IAAI,KAAK;AAAA,YACb,KAAK,MAAM,GAAG,YAAY,KAAK,MAAM;AAAA,YACrC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAGA,cAAI,KAAK,gBAAgB,KAAK,sBAAsB;AAClD,kBAAM,MAAM,KAAK;AAAA,cACf;AAAA,cAAM;AAAA,cACN,YAAY,KAAK;AAAA,cAAQ,YAAY;AAAA,cACrC;AAAA,cAAS,gBAAgB;AAAA,cAAG;AAAA,YAC9B;AACA,gBAAI,QAAQ,OAAO;AACjB,qBAAO;AAAA,YACT;AAAA,UACF;AACA,gBAAM,IAAI,KAAK,SAAS;AACxB,cAAI,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,OAAO,CAAC,MAAM,KAAM;AAC9C,mBAAO;AAAA,UACT;AACA;AAAA,QACF;AACA,eAAO,WAAW;AAAA,MACpB;AAAA,MAEA,UAAW,MAAM,SAAS,SAAS,WAAW,cAAc;AAC1D,YAAI,IAAI,IAAI,IAAI;AAChB,aACE,KAAK,WAAW,KAAK,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,QAC/D,KAAK,MAAQ,KAAK,IACnB,MAAM,MACR;AACA,eAAK,MAAM,eAAe;AAC1B,gBAAM,IAAI,QAAQ,EAAE;AACpB,gBAAM,IAAI,KAAK,EAAE;AAEjB,eAAK,MAAM,SAAS,GAAG,CAAC;AAKxB,cAAI,MAAM,SAAS,MAAM,SAAU,QAAO;AAK1C,cAAI;AACJ,cAAI,OAAO,MAAM,UAAU;AACzB,kBAAM,MAAM;AACZ,iBAAK,MAAM,gBAAgB,GAAG,GAAG,GAAG;AAAA,UACtC,OAAO;AACL,kBAAM,EAAE,MAAM,CAAC;AACf,iBAAK,MAAM,iBAAiB,GAAG,GAAG,GAAG;AAAA,UACvC;AAEA,cAAI,CAAC,IAAK,QAAO;AAAA,QACnB;AAGA,YAAI,OAAO,MAAM,OAAO,IAAI;AAG1B,iBAAO;AAAA,QACT,WAAW,OAAO,IAAI;AAIpB,iBAAO;AAAA,QACT,WAAsC,OAAO,IAAI;AAK/C,iBAAQ,OAAO,KAAK,KAAO,KAAK,EAAE,MAAM;AAAA,QAC1C;AAIA,cAAM,IAAI,MAAM,MAAM;AAAA,MACxB;AAAA,MAEA,cAAe;AACb,eAAO,YAAY,KAAK,SAAS,KAAK,OAAO;AAAA,MAC/C;AAAA,MAEA,MAAO,SAAS,OAAO;AACrB,2BAAmB,OAAO;AAE1B,cAAM,UAAU,KAAK;AAGrB,YAAI,YAAY,MAAM;AACpB,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA;AAEP,sBAAU;AAAA,QACd;AACA,YAAI,YAAY,GAAI,QAAO;AAE3B,YAAI,KAAK;AACT,YAAI,WAAW;AACf,YAAI,WAAW;AAEf,cAAM,mBAAmB,CAAC;AAC1B,cAAM,gBAAgB,CAAC;AACvB,YAAI;AACJ,YAAI,UAAU;AACd,YAAI,eAAe;AACnB,YAAI,aAAa;AACjB,YAAI;AACJ,YAAI;AACJ,YAAI;AAIJ,YAAI,iBAAiB,QAAQ,OAAO,CAAC,MAAM;AAC3C,YAAI,iBAAiB,QAAQ,OAAO;AACpC,cAAM,eAAe,MACnB,iBACI,KACA,iBACA,mCACA;AACN,cAAM,kBAAkB,CAAC,MACvB,EAAE,OAAO,CAAC,MAAM,MACZ,KACA,QAAQ,MACR,mCACA;AAGN,cAAM,iBAAiB,MAAM;AAC3B,cAAI,WAAW;AAGb,oBAAQ,WAAW;AAAA,cACjB,KAAK;AACH,sBAAM;AACN,2BAAW;AACb;AAAA,cACA,KAAK;AACH,sBAAM;AACN,2BAAW;AACb;AAAA,cACA;AACE,sBAAM,OAAO;AACf;AAAA,YACF;AACA,iBAAK,MAAM,wBAAwB,WAAW,EAAE;AAChD,wBAAY;AAAA,UACd;AAAA,QACF;AAEA,iBAASA,KAAI,GAAGD,IAAIC,KAAI,QAAQ,WAAYD,KAAI,QAAQ,OAAOC,EAAC,IAAIA,MAAK;AACvE,eAAK,MAAM,eAAgB,SAASA,IAAG,IAAID,EAAC;AAG5C,cAAI,UAAU;AAEZ,gBAAIA,OAAM,KAAK;AACb,qBAAO;AAAA,YACT;AAEA,gBAAI,WAAWA,EAAC,GAAG;AACjB,oBAAM;AAAA,YACR;AACA,kBAAMA;AACN,uBAAW;AACX;AAAA,UACF;AAEA,kBAAQA,IAAG;AAAA;AAAA,YAET,KAAK,KAAK;AAER,qBAAO;AAAA,YACT;AAAA,YAEA,KAAK;AACH,kBAAI,WAAW,QAAQ,OAAOC,KAAI,CAAC,MAAM,KAAK;AAC5C,sBAAMD;AACN;AAAA,cACF;AAEA,6BAAe;AACf,yBAAW;AACb;AAAA;AAAA;AAAA,YAIA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,mBAAK,MAAM,6BAA8B,SAASC,IAAG,IAAID,EAAC;AAI1D,kBAAI,SAAS;AACX,qBAAK,MAAM,YAAY;AACvB,oBAAIA,OAAM,OAAOC,OAAM,aAAa,EAAG,CAAAD,KAAI;AAC3C,sBAAMA;AACN;AAAA,cACF;AAGA,kBAAIA,OAAM,OAAO,cAAc,IAAK;AAKpC,mBAAK,MAAM,0BAA0B,SAAS;AAC9C,6BAAe;AACf,0BAAYA;AAIZ,kBAAI,QAAQ,MAAO,gBAAe;AACpC;AAAA,YAEA,KAAK,KAAK;AACR,kBAAI,SAAS;AACX,sBAAM;AACN;AAAA,cACF;AAEA,kBAAI,CAAC,WAAW;AACd,sBAAM;AACN;AAAA,cACF;AAEA,oBAAM,UAAU;AAAA,gBACd,MAAM;AAAA,gBACN,OAAOC,KAAI;AAAA,gBACX,SAAS,GAAG;AAAA,gBACZ,MAAM,QAAQ,SAAS,EAAE;AAAA,gBACzB,OAAO,QAAQ,SAAS,EAAE;AAAA,cAC5B;AACA,mBAAK,MAAM,KAAK,SAAS,KAAM,OAAO;AACtC,+BAAiB,KAAK,OAAO;AAE7B,oBAAM,QAAQ;AAEd,kBAAI,QAAQ,UAAU,KAAK,QAAQ,SAAS,KAAK;AAC/C,iCAAiB;AACjB,sBAAM,gBAAgB,QAAQ,MAAMA,KAAI,CAAC,CAAC;AAAA,cAC5C;AACA,mBAAK,MAAM,gBAAgB,WAAW,EAAE;AACxC,0BAAY;AACZ;AAAA,YACF;AAAA,YAEA,KAAK,KAAK;AACR,oBAAM,UAAU,iBAAiB,iBAAiB,SAAS,CAAC;AAC5D,kBAAI,WAAW,CAAC,SAAS;AACvB,sBAAM;AACN;AAAA,cACF;AACA,+BAAiB,IAAI;AAGrB,6BAAe;AACf,yBAAW;AACX,mBAAK;AAGL,oBAAM,GAAG;AACT,kBAAI,GAAG,SAAS,KAAK;AACnB,8BAAc,KAAK,OAAO,OAAO,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,cAC5D;AACA;AAAA,YACF;AAAA,YAEA,KAAK,KAAK;AACR,oBAAM,UAAU,iBAAiB,iBAAiB,SAAS,CAAC;AAC5D,kBAAI,WAAW,CAAC,SAAS;AACvB,sBAAM;AACN;AAAA,cACF;AAEA,6BAAe;AACf,oBAAM;AAEN,kBAAI,QAAQ,UAAU,KAAK,QAAQ,SAAS,KAAK;AAC/C,iCAAiB;AACjB,sBAAM,gBAAgB,QAAQ,MAAMA,KAAI,CAAC,CAAC;AAAA,cAC5C;AACA;AAAA,YACF;AAAA;AAAA,YAGA,KAAK;AAEH,6BAAe;AAEf,kBAAI,SAAS;AACX,sBAAM,OAAOD;AACb;AAAA,cACF;AAEA,wBAAU;AACV,2BAAaC;AACb,6BAAe,GAAG;AAClB,oBAAMD;AACR;AAAA,YAEA,KAAK;AAKH,kBAAIC,OAAM,aAAa,KAAK,CAAC,SAAS;AACpC,sBAAM,OAAOD;AACb;AAAA,cACF;AASA,mBAAK,QAAQ,UAAU,aAAa,GAAGC,EAAC;AACxC,kBAAI;AACF,uBAAO,MAAM,aAAa,aAAa,EAAE,CAAC,IAAI,GAAG;AAEjD,sBAAMD;AAAA,cACR,SAAS,IAAI;AAGX,qBAAK,GAAG,UAAU,GAAG,YAAY,IAAI;AAAA,cACvC;AACA,yBAAW;AACX,wBAAU;AACZ;AAAA,YAEA;AAEE,6BAAe;AAEf,kBAAI,WAAWA,EAAC,KAAK,EAAEA,OAAM,OAAO,UAAU;AAC5C,sBAAM;AAAA,cACR;AAEA,oBAAMA;AACN;AAAA,UAEJ;AAAA,QACF;AAIA,YAAI,SAAS;AAKX,eAAK,QAAQ,MAAM,aAAa,CAAC;AACjC,eAAK,KAAK,MAAM,IAAI,QAAQ;AAC5B,eAAK,GAAG,UAAU,GAAG,YAAY,IAAI,QAAQ,GAAG,CAAC;AACjD,qBAAW,YAAY,GAAG,CAAC;AAAA,QAC7B;AAQA,aAAK,KAAK,iBAAiB,IAAI,GAAG,IAAI,KAAK,iBAAiB,IAAI,GAAG;AACjE,cAAI;AACJ,iBAAO,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,MAAM;AAC3C,eAAK,MAAM,gBAAgB,IAAI,EAAE;AAEjC,iBAAO,KAAK,QAAQ,6BAA6B,CAACI,IAAG,IAAI,OAAO;AAE9D,gBAAI,CAAC,IAAI;AAEP,mBAAK;AAAA,YACP;AAQA,mBAAO,KAAK,KAAK,KAAK;AAAA,UACxB,CAAC;AAED,eAAK,MAAM,kBAAkB,MAAM,MAAM,IAAI,EAAE;AAC/C,gBAAM,IAAI,GAAG,SAAS,MAAM,OACxB,GAAG,SAAS,MAAM,QAClB,OAAO,GAAG;AAEd,qBAAW;AACX,eAAK,GAAG,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,QAAQ;AAAA,QAC7C;AAGA,uBAAe;AACf,YAAI,UAAU;AAEZ,gBAAM;AAAA,QACR;AAIA,cAAM,kBAAkB,mBAAmB,GAAG,OAAO,CAAC,CAAC;AAOvD,iBAASC,KAAI,cAAc,SAAS,GAAGA,KAAI,IAAIA,MAAK;AAClD,gBAAM,KAAK,cAAcA,EAAC;AAE1B,gBAAM,WAAW,GAAG,MAAM,GAAG,GAAG,OAAO;AACvC,gBAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AACjD,cAAI,UAAU,GAAG,MAAM,GAAG,KAAK;AAC/B,gBAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,GAAG,KAAK,IAAI;AAKlD,gBAAM,oBAAoB,SAAS,MAAM,GAAG,EAAE;AAC9C,gBAAM,mBAAmB,SAAS,MAAM,GAAG,EAAE,SAAS;AACtD,cAAI,aAAa;AACjB,mBAASJ,KAAI,GAAGA,KAAI,kBAAkBA,MAAK;AACzC,yBAAa,WAAW,QAAQ,YAAY,EAAE;AAAA,UAChD;AACA,oBAAU;AAEV,gBAAM,SAAS,YAAY,MAAM,UAAU,WAAW,cAAc;AAEpE,eAAK,WAAW,UAAU,UAAU,SAAS;AAAA,QAC/C;AAKA,YAAI,OAAO,MAAM,UAAU;AACzB,eAAK,UAAU;AAAA,QACjB;AAEA,YAAI,iBAAiB;AACnB,eAAK,aAAa,IAAI;AAAA,QACxB;AAGA,YAAI,UAAU,UAAU;AACtB,iBAAO,CAAC,IAAI,QAAQ;AAAA,QACtB;AAGA,YAAI,QAAQ,UAAU,CAAC,UAAU;AAC/B,qBAAW,QAAQ,YAAY,MAAM,QAAQ,YAAY;AAAA,QAC3D;AAKA,YAAI,CAAC,UAAU;AACb,iBAAO,aAAa,OAAO;AAAA,QAC7B;AAEA,cAAM,QAAQ,QAAQ,SAAS,MAAM;AACrC,YAAI;AACF,iBAAO,OAAO,OAAO,IAAI,OAAO,MAAM,KAAK,KAAK,KAAK,GAAG;AAAA,YACtD,OAAO;AAAA,YACP,MAAM;AAAA,UACR,CAAC;AAAA,QACH,SAAS,IAAsD;AAK7D,iBAAO,IAAI,OAAO,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,MAEA,SAAU;AACR,YAAI,KAAK,UAAU,KAAK,WAAW,MAAO,QAAO,KAAK;AAQtD,cAAM,MAAM,KAAK;AAEjB,YAAI,CAAC,IAAI,QAAQ;AACf,eAAK,SAAS;AACd,iBAAO,KAAK;AAAA,QACd;AACA,cAAM,UAAU,KAAK;AAErB,cAAM,UAAU,QAAQ,aAAa,OACjC,QAAQ,MAAM,aACd;AACJ,cAAM,QAAQ,QAAQ,SAAS,MAAM;AAQrC,YAAI,KAAK,IAAI,IAAI,aAAW;AAC1B,oBAAU,QAAQ;AAAA,YAAI,OACpB,OAAO,MAAM,WAAW,aAAa,CAAC,IACpC,MAAM,WAAW,WACjB,EAAE;AAAA,UACN,EAAE,OAAO,CAACE,MAAK,MAAM;AACnB,gBAAI,EAAEA,KAAIA,KAAI,SAAS,CAAC,MAAM,YAAY,MAAM,WAAW;AACzD,cAAAA,KAAI,KAAK,CAAC;AAAA,YACZ;AACA,mBAAOA;AAAA,UACT,GAAG,CAAC,CAAC;AACL,kBAAQ,QAAQ,CAAC,GAAGF,OAAM;AACxB,gBAAI,MAAM,YAAY,QAAQA,KAAE,CAAC,MAAM,UAAU;AAC/C;AAAA,YACF;AACA,gBAAIA,OAAM,GAAG;AACX,kBAAI,QAAQ,SAAS,GAAG;AACtB,wBAAQA,KAAE,CAAC,IAAI,YAAa,UAAU,UAAW,QAAQA,KAAE,CAAC;AAAA,cAC9D,OAAO;AACL,wBAAQA,EAAC,IAAI;AAAA,cACf;AAAA,YACF,WAAWA,OAAM,QAAQ,SAAS,GAAG;AACnC,sBAAQA,KAAE,CAAC,KAAK,YAAa,UAAU;AAAA,YACzC,OAAO;AACL,sBAAQA,KAAE,CAAC,KAAK,eAAiB,UAAU,SAAU,QAAQA,KAAE,CAAC;AAChE,sBAAQA,KAAE,CAAC,IAAI;AAAA,YACjB;AAAA,UACF,CAAC;AACD,iBAAO,QAAQ,OAAO,OAAK,MAAM,QAAQ,EAAE,KAAK,GAAG;AAAA,QACrD,CAAC,EAAE,KAAK,GAAG;AAIX,aAAK,SAAS,KAAK;AAGnB,YAAI,KAAK,OAAQ,MAAK,SAAS,KAAK;AAEpC,YAAI;AACF,eAAK,SAAS,IAAI,OAAO,IAAI,KAAK;AAAA,QACpC,SAAS,IAAsD;AAC7D,eAAK,SAAS;AAAA,QAChB;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAO,GAAG,UAAU,KAAK,SAAS;AAChC,aAAK,MAAM,SAAS,GAAG,KAAK,OAAO;AAGnC,YAAI,KAAK,QAAS,QAAO;AACzB,YAAI,KAAK,MAAO,QAAO,MAAM;AAE7B,YAAI,MAAM,OAAO,QAAS,QAAO;AAEjC,cAAM,UAAU,KAAK;AAGrB,YAAIF,OAAK,QAAQ,KAAK;AACpB,cAAI,EAAE,MAAMA,OAAK,GAAG,EAAE,KAAK,GAAG;AAAA,QAChC;AAGA,YAAI,EAAE,MAAM,UAAU;AACtB,aAAK,MAAM,KAAK,SAAS,SAAS,CAAC;AAOnC,cAAM,MAAM,KAAK;AACjB,aAAK,MAAM,KAAK,SAAS,OAAO,GAAG;AAGnC,YAAI;AACJ,iBAASE,KAAI,EAAE,SAAS,GAAGA,MAAK,GAAGA,MAAK;AACtC,qBAAW,EAAEA,EAAC;AACd,cAAI,SAAU;AAAA,QAChB;AAEA,iBAASA,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,gBAAM,UAAU,IAAIA,EAAC;AACrB,cAAI,OAAO;AACX,cAAI,QAAQ,aAAa,QAAQ,WAAW,GAAG;AAC7C,mBAAO,CAAC,QAAQ;AAAA,UAClB;AACA,gBAAM,MAAM,KAAK,SAAS,MAAM,SAAS,OAAO;AAChD,cAAI,KAAK;AACP,gBAAI,QAAQ,WAAY,QAAO;AAC/B,mBAAO,CAAC,KAAK;AAAA,UACf;AAAA,QACF;AAIA,YAAI,QAAQ,WAAY,QAAO;AAC/B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,OAAO,SAAU,KAAK;AACpB,eAAO,UAAU,SAAS,GAAG,EAAE;AAAA,MACjC;AAAA,IACF;AAEA,cAAU,YAAY;AAAA;AAAA;;;ACn+BtB;AAAA,uCAAAK,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU;AAEjB,QAAMC,OAAK,QAAQ,IAAI;AACvB,QAAM,EAAE,cAAAC,cAAa,IAAI,QAAQ,QAAQ;AACzC,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,EAAE,QAAQ,IAAI,QAAQ,MAAM;AAElC,aAAS,QAAQC,MAAK,QAAQ;AAC5B,aAAO,IAAI,QAAQ,CAACC,UAASC,YAAW;AACtC,QAAAJ,KAAG,QAAQE,MAAK,EAAC,eAAe,KAAI,GAAG,CAAC,KAAK,UAAU;AACrD,cAAG,KAAK;AACN,oBAAQ,IAAI,MAAM;AAAA,cAChB,KAAK;AACH,oBAAG,QAAQ;AACT,kBAAAE,QAAO,GAAG;AAAA,gBACZ,OAAO;AACL,kBAAAD,SAAQ,CAAC,CAAC;AAAA,gBACZ;AACA;AAAA,cACF,KAAK;AAAA;AAAA,cACL,KAAK;AAAA;AAAA,cACL,KAAK;AAAA;AAAA,cACL,KAAK;AACH,gBAAAA,SAAQ,CAAC,CAAC;AACV;AAAA,cACF,KAAK;AAAA;AAAA,cACL;AACE,gBAAAC,QAAO,GAAG;AACV;AAAA,YACJ;AAAA,UACF,OAAO;AACL,YAAAD,SAAQ,KAAK;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,aAAS,KAAK,MAAM,gBAAgB;AAClC,aAAO,IAAI,QAAQ,CAACA,UAASC,YAAW;AACtC,cAAM,WAAW,iBAAiBJ,KAAG,OAAOA,KAAG;AAC/C,iBAAS,MAAM,CAAC,KAAK,UAAU;AAC7B,cAAG,KAAK;AACN,oBAAQ,IAAI,MAAM;AAAA,cAChB,KAAK;AACH,oBAAG,gBAAgB;AAEjB,kBAAAG,SAAQ,KAAK,MAAM,KAAK,CAAC;AAAA,gBAC3B,OAAO;AACL,kBAAAA,SAAQ,IAAI;AAAA,gBACd;AACA;AAAA,cACF;AACE,gBAAAA,SAAQ,IAAI;AACZ;AAAA,YACJ;AAAA,UACF,OAAO;AACL,YAAAA,SAAQ,KAAK;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,oBAAgB,iBAAiBD,MAAKG,QAAM,gBAAgB,SAAS,YAAY,QAAQ;AACvF,UAAI,QAAQ,MAAM,QAAQA,SAAOH,MAAK,MAAM;AAC5C,iBAAU,QAAQ,OAAO;AACvB,YAAI,OAAO,KAAK;AAChB,YAAG,SAAS,QAAW;AAGrB,iBAAO;AACP,oBAAU;AAAA,QACZ;AACA,cAAM,WAAWA,OAAM,MAAM;AAC7B,cAAM,WAAW,SAAS,MAAM,CAAC;AACjC,cAAM,WAAWG,SAAO,MAAM;AAC9B,YAAI,QAAQ;AACZ,YAAG,WAAW,gBAAgB;AAC5B,kBAAQ,MAAM,KAAK,UAAU,cAAc;AAAA,QAC7C;AACA,YAAG,CAAC,SAAS,KAAK,SAAS,QAAW;AACpC,kBAAQ;AAAA,QACV;AACA,YAAG,UAAU,MAAM;AACjB,kBAAQ,EAAE,aAAa,MAAM,MAAM;AAAA,QACrC;AAEA,YAAG,MAAM,YAAY,GAAG;AACtB,cAAG,CAAC,WAAW,QAAQ,GAAG;AACxB,kBAAM,EAAC,UAAU,UAAU,MAAK;AAChC,mBAAO,iBAAiB,UAAUA,QAAM,gBAAgB,SAAS,YAAY,KAAK;AAAA,UACpF;AAAA,QACF,OAAO;AACL,gBAAM,EAAC,UAAU,UAAU,MAAK;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AACA,oBAAgB,QAAQA,QAAM,gBAAgB,SAAS,YAAY;AACjE,aAAO,iBAAiB,IAAIA,QAAM,gBAAgB,SAAS,YAAY,IAAI;AAAA,IAC7E;AAGA,aAAS,YAAY,SAAS;AAC5B,aAAO;AAAA,QACL,SAAS,QAAQ;AAAA,QACjB,KAAK,CAAC,CAAC,QAAQ;AAAA,QACf,YAAY,CAAC,CAAC,QAAQ;AAAA,QACtB,WAAW,CAAC,CAAC,QAAQ;AAAA,QACrB,QAAQ,CAAC,CAAC,QAAQ;AAAA,QAClB,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,QAEd,QAAQ,CAAC,CAAC,QAAQ;AAAA,QAClB,MAAM,CAAC,CAAC,QAAQ;AAAA,QAChB,OAAO,CAAC,CAAC,QAAQ;AAAA,QACjB,MAAM,CAAC,CAAC,QAAQ;AAAA,QAChB,QAAQ,CAAC,CAAC,QAAQ;AAAA,QAClB,UAAU,CAAC,CAAC,QAAQ;AAAA,MACtB;AAAA,IACF;AAEA,QAAM,cAAN,cAA0BJ,cAAa;AAAA,MACrC,YAAY,KAAK,SAAS,IAAI;AAC5B,cAAM;AACN,YAAG,OAAO,YAAY,YAAY;AAChC,eAAK;AACL,oBAAU;AAAA,QACZ;AAEA,aAAK,UAAU,YAAY,WAAW,CAAC,CAAC;AAExC,aAAK,WAAW,CAAC;AACjB,YAAG,KAAK,QAAQ,SAAS;AACvB,gBAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ,UAAU,CAAC,KAAK,QAAQ,OAAO;AACnG,eAAK,WAAW,SAAS;AAAA,YAAK,OAC5B,IAAI,UAAU,GAAG;AAAA,cACf,KAAK,KAAK,QAAQ;AAAA,cAClB,YAAW,KAAK,QAAQ;AAAA,cACxB,WAAU,KAAK,QAAQ;AAAA,cACvB,QAAO,KAAK,QAAQ;AAAA,YACtB,CAAC;AAAA,UACH;AAAA,QACF;AAEA,aAAK,iBAAiB,CAAC;AACvB,YAAG,KAAK,QAAQ,QAAQ;AACtB,gBAAM,iBAAiB,MAAM,QAAQ,KAAK,QAAQ,MAAM,IAAI,KAAK,QAAQ,SAAS,CAAC,KAAK,QAAQ,MAAM;AACtG,eAAK,iBAAiB,eAAe;AAAA,YAAK,YACxC,IAAI,UAAU,QAAQ,EAAC,KAAK,KAAI,CAAC;AAAA,UACnC;AAAA,QACF;AAEA,aAAK,eAAe,CAAC;AACrB,YAAG,KAAK,QAAQ,MAAM;AACpB,gBAAM,eAAe,MAAM,QAAQ,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,OAAO,CAAC,KAAK,QAAQ,IAAI;AAC9F,eAAK,eAAe,aAAa;AAAA,YAAK,UACpC,IAAI,UAAU,MAAM,EAAC,KAAK,KAAI,CAAC;AAAA,UACjC;AAAA,QACF;AAEA,aAAK,WAAW,QAAQ,QAAQ,OAAO,GAAG,GAAG,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM,KAAK,qBAAqB,KAAK,IAAI,CAAC;AACzH,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,UAAU;AAEf,YAAG,IAAI;AACL,eAAK,WAAW,CAAC;AACjB,eAAK,GAAG,SAAS,WAAS,KAAK,SAAS,KAAK,KAAK,QAAQ,WAAW,MAAM,WAAW,MAAM,QAAQ,CAAC;AACrG,eAAK,GAAG,SAAS,SAAO,GAAG,GAAG,CAAC;AAC/B,eAAK,GAAG,OAAO,MAAM,GAAG,MAAM,KAAK,QAAQ,CAAC;AAAA,QAC9C;AAEA,mBAAY,MAAM,KAAK,MAAM,GAAG,CAAC;AAAA,MACnC;AAAA,MAEA,qBAAqB,UAAU;AAE7B,eAAO,KAAK,aAAa,KAAK,OAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MACtD;AAAA,MAEA,aAAa,UAAU,aAAa;AAClC,cAAM,OAAO,YAAY,cAAc,MAAM;AAC7C,gBAAQ,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,KAAK,OAAK,EAAE,MAAM,IAAI,CAAC,MACtE,CAAC,KAAK,eAAe,KAAK,OAAK,EAAE,MAAM,IAAI,CAAC,MAC3C,CAAC,KAAK,QAAQ,SAAS,CAAC;AAAA,MAChC;AAAA,MAEA,QAAQ;AACN,YAAG,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS;AAChC,eAAK,SAAS,KAAK,EAClB,KAAK,CAAC,QAAO;AACZ,gBAAG,CAAC,IAAI,MAAM;AACZ,oBAAM,cAAc,IAAI,MAAM,MAAM,YAAY;AAChD,kBAAG,KAAK,aAAa,IAAI,MAAM,UAAU,WAAY,GAAG;AACtD,oBAAI,WAAW,IAAI,MAAM;AACzB,oBAAI,WAAW,IAAI,MAAM;AACzB,oBAAG,KAAK,QAAQ,QAAQ,aAAa;AACnC,8BAAY;AACZ,8BAAY;AAAA,gBACd;AACA,oBAAG,KAAK,QAAQ,MAAM;AACpB,uBAAK,KAAK,SAAS,EAAC,UAAU,UAAU,MAAK,IAAI,MAAM,MAAK,CAAC;AAAA,gBAC/D,OAAO;AACL,uBAAK,KAAK,SAAS,EAAC,UAAU,SAAQ,CAAC;AAAA,gBACzC;AAAA,cACF;AACA,mBAAK,MAAM,KAAK,QAAQ;AAAA,YAC1B,OAAO;AACL,mBAAK,KAAK,KAAK;AAAA,YACjB;AAAA,UACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,iBAAK,MAAM;AACX,iBAAK,KAAK,SAAS,GAAG;AACtB,gBAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,QAAQ,QAAQ;AACpC,sBAAQ,MAAM,GAAG;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,eAAK,WAAW;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,QAAQ;AACN,aAAK,UAAU;AAAA,MACjB;AAAA,MAEA,QAAQ;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,SAAS;AACP,aAAK,SAAS;AACd,YAAG,KAAK,UAAU;AAChB,eAAK,WAAW;AAChB,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAGA,aAAS,YAAY,SAAS,SAAS,IAAI;AACzC,aAAO,IAAI,YAAY,SAAS,SAAS,EAAE;AAAA,IAC7C;AACA,gBAAY,cAAc;AAAA;AAAA;;;AClP1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CA,SAAS,MAAM,OAAO,MAAM;AACxB,SAAO,IAAI,aAAa,GAAG,GAAG,MAAK,GAAG,QAAQ;AAClD;AAEA,SAAS,cAAe,IAAI;AACxB,SAAO,YAAa,MAAoB;AACpC,QAAI,WAAW,KAAK,IAAI;AACxB,WAAO,GAAG,KAAK,MAAM,MAAM,QAAQ;AAAA,EACvC;AACJ;AAQA,SAAS,SAAS,IAAI;AAClB,aAAW,IAAI,CAAC;AACpB;AAEA,SAAS,KAAK,OAAO;AACjB,SAAO,CAAC,OAAO,SAAS,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AACnD;AAwEA,SAAS,SAAS,MAAM;AACpB,MAAIK,SAAQ,IAAI,GAAG;AACf,WAAO,YAAa,MAAoB;AACpC,YAAM,WAAW,KAAK,IAAI;AAC1B,YAAM,UAAU,KAAK,MAAM,MAAM,IAAI;AACrC,aAAOC,eAAc,SAAS,QAAQ;AAAA,IAC1C;AAAA,EACJ;AAEA,SAAO,cAAc,SAAU,MAAM,UAAU;AAC3C,QAAI;AACJ,QAAI;AACA,eAAS,KAAK,MAAM,MAAM,IAAI;AAAA,IAClC,SAAS,GAAG;AACR,aAAO,SAAS,CAAC;AAAA,IACrB;AAEA,QAAI,UAAU,OAAO,OAAO,SAAS,YAAY;AAC7C,aAAOA,eAAc,QAAQ,QAAQ;AAAA,IACzC,OAAO;AACH,eAAS,MAAM,MAAM;AAAA,IACzB;AAAA,EACJ,CAAC;AACL;AAEA,SAASA,eAAc,SAAS,UAAU;AACtC,SAAO,QAAQ,KAAK,WAAS;AACzB,mBAAe,UAAU,MAAM,KAAK;AAAA,EACxC,GAAG,SAAO;AACN,mBAAe,UAAU,QAAQ,eAAe,SAAS,IAAI,WAAW,MAAM,IAAI,MAAM,GAAG,CAAC;AAAA,EAChG,CAAC;AACL;AAEA,SAAS,eAAe,UAAU,OAAO,OAAO;AAC5C,MAAI;AACA,aAAS,OAAO,KAAK;AAAA,EACzB,SAAS,KAAK;AACV,mBAAe,OAAK;AAAE,YAAM;AAAA,IAAE,GAAG,GAAG;AAAA,EACxC;AACJ;AAEA,SAASD,SAAQ,IAAI;AACjB,SAAO,GAAG,OAAO,WAAW,MAAM;AACtC;AAEA,SAASE,kBAAiB,IAAI;AAC1B,SAAO,GAAG,OAAO,WAAW,MAAM;AACtC;AAEA,SAAS,gBAAgB,KAAK;AAC1B,SAAO,OAAO,IAAI,OAAO,aAAa,MAAM;AAChD;AAEA,SAAS,UAAU,SAAS;AACxB,MAAI,OAAO,YAAY,WAAY,OAAM,IAAI,MAAM,qBAAqB;AACxE,SAAOF,SAAQ,OAAO,IAAI,SAAS,OAAO,IAAI;AAClD;AAIA,SAAS,SAAU,SAAS,OAAO;AAC/B,MAAI,CAAC,MAAO,SAAQ,QAAQ;AAC5B,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,oBAAoB;AAChD,WAAS,aAAc,MAAM;AACzB,QAAI,OAAO,KAAK,QAAQ,CAAC,MAAM,YAAY;AACvC,aAAO,QAAQ,MAAM,MAAM,IAAI;AAAA,IACnC;AAEA,WAAO,IAAI,QAAQ,CAAC,SAASG,YAAW;AACpC,WAAK,QAAQ,CAAC,IAAI,CAAC,QAAQ,WAAW;AAClC,YAAI,IAAK,QAAOA,QAAO,GAAG;AAC1B,gBAAQ,OAAO,SAAS,IAAI,SAAS,OAAO,CAAC,CAAC;AAAA,MAClD;AACA,cAAQ,MAAM,MAAM,IAAI;AAAA,IAC5B,CAAC;AAAA,EACL;AAEA,SAAO;AACX;AAEA,SAAS,YAAa,QAAQ;AAC1B,SAAO,SAASC,WAAU,QAAQ,UAAU;AACxC,UAAM,KAAK,SAAS,SAAU,UAAU;AACpC,UAAI,OAAO;AACX,aAAO,OAAO,KAAK,CAAC,IAAI,OAAO;AAC3B,kBAAU,EAAE,EAAE,MAAM,MAAM,SAAS,OAAO,EAAE,CAAC;AAAA,MACjD,GAAG,QAAQ;AAAA,IACf,CAAC;AACD,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,UAAU,QAAQ,KAAK,UAAU,UAAU;AAChD,QAAM,OAAO,CAAC;AACd,MAAI,UAAU,CAAC;AACf,MAAI,UAAU;AACd,MAAI,YAAY,UAAU,QAAQ;AAElC,SAAO,OAAO,KAAK,CAAC,OAAOC,IAAG,WAAW;AACrC,QAAIC,SAAQ;AACZ,cAAU,OAAO,CAAC,KAAK,MAAM;AACzB,cAAQA,MAAK,IAAI;AACjB,aAAO,GAAG;AAAA,IACd,CAAC;AAAA,EACL,GAAG,SAAO;AACN,aAAS,KAAK,OAAO;AAAA,EACzB,CAAC;AACL;AAEA,SAAS,YAAY,OAAO;AACxB,SAAO,SACH,OAAO,MAAM,WAAW,YACxB,MAAM,UAAU,KAChB,MAAM,SAAS,MAAM;AAC7B;AAMA,SAASC,MAAK,IAAI;AACd,WAAS,WAAY,MAAM;AACvB,QAAI,OAAO,KAAM;AACjB,QAAI,SAAS;AACb,SAAK;AACL,WAAO,MAAM,MAAM,IAAI;AAAA,EAC3B;AACA,SAAO,OAAO,SAAS,EAAE;AACzB,SAAO;AACX;AAEA,SAAS,YAAa,MAAM;AACxB,SAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,QAAQ,EAAE;AAC1D;AAEA,SAAS,oBAAoB,MAAM;AAC/B,MAAIC,KAAI;AACR,MAAI,MAAM,KAAK;AACf,SAAO,SAAS,OAAO;AACnB,WAAO,EAAEA,KAAI,MAAM,EAAC,OAAO,KAAKA,EAAC,GAAG,KAAKA,GAAC,IAAI;AAAA,EAClD;AACJ;AAEA,SAAS,qBAAqB,UAAU;AACpC,MAAIA,KAAI;AACR,SAAO,SAAS,OAAO;AACnB,QAAI,OAAO,SAAS,KAAK;AACzB,QAAI,KAAK;AACL,aAAO;AACX,IAAAA;AACA,WAAO,EAAC,OAAO,KAAK,OAAO,KAAKA,GAAC;AAAA,EACrC;AACJ;AAEA,SAAS,qBAAqB,KAAK;AAC/B,MAAI,QAAQ,MAAM,OAAO,KAAK,GAAG,IAAI,CAAC;AACtC,MAAIA,KAAI;AACR,MAAI,MAAM,MAAM;AAChB,SAAO,SAAS,OAAO;AACnB,QAAI,MAAM,MAAM,EAAEA,EAAC;AACnB,QAAI,QAAQ,aAAa;AACrB,aAAO,KAAK;AAAA,IAChB;AACA,WAAOA,KAAI,MAAM,EAAC,OAAO,IAAI,GAAG,GAAG,IAAG,IAAI;AAAA,EAC9C;AACJ;AAEA,SAAS,eAAe,MAAM;AAC1B,MAAI,YAAY,IAAI,GAAG;AACnB,WAAO,oBAAoB,IAAI;AAAA,EACnC;AAEA,MAAI,WAAW,YAAY,IAAI;AAC/B,SAAO,WAAW,qBAAqB,QAAQ,IAAI,qBAAqB,IAAI;AAChF;AAEA,SAAS,SAAS,IAAI;AAClB,SAAO,YAAa,MAAM;AACtB,QAAI,OAAO,KAAM,OAAM,IAAI,MAAM,8BAA8B;AAC/D,QAAI,SAAS;AACb,SAAK;AACL,WAAO,MAAM,MAAM,IAAI;AAAA,EAC3B;AACJ;AAGA,SAAS,iBAAiB,WAAW,OAAO,UAAU,UAAU;AAC5D,MAAI,OAAO;AACX,MAAI,WAAW;AACf,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,MAAM;AAEV,WAAS,YAAY;AAEjB,QAAI,WAAW,SAAS,YAAY,KAAM;AAE1C,eAAW;AACX,cAAU,KAAK,EAAE,KAAK,CAAC,EAAC,OAAO,MAAM,SAAQ,MAAM;AAE/C,UAAI,YAAY,KAAM;AACtB,iBAAW;AACX,UAAI,UAAU;AACV,eAAO;AACP,YAAI,WAAW,GAAG;AAEd,mBAAS,IAAI;AAAA,QACjB;AACA;AAAA,MACJ;AACA;AACA,eAAS,OAAO,KAAK,gBAAgB;AACrC;AACA,gBAAU;AAAA,IACd,CAAC,EAAE,MAAM,WAAW;AAAA,EACxB;AAEA,WAAS,iBAAiB,KAAK,QAAQ;AAEnC,eAAW;AACX,QAAI,SAAU;AACd,QAAI,IAAK,QAAO,YAAY,GAAG;AAE/B,QAAI,QAAQ,OAAO;AACf,aAAO;AACP,iBAAW;AACX;AAAA,IACJ;AAEA,QAAI,WAAW,aAAc,QAAQ,WAAW,GAAI;AAChD,aAAO;AAEP,aAAO,SAAS,IAAI;AAAA,IACxB;AACA,cAAU;AAAA,EACd;AAEA,WAAS,YAAY,KAAK;AACtB,QAAI,SAAU;AACd,eAAW;AACX,WAAO;AACP,aAAS,GAAG;AAAA,EAChB;AAEA,YAAU;AACd;AAqFA,SAAS,YAAY,MAAM,OAAO,UAAU,UAAU;AAClD,SAAO,cAAc,KAAK,EAAE,MAAM,UAAU,QAAQ,GAAG,QAAQ;AACnE;AAKA,SAAS,gBAAgB,MAAM,UAAU,UAAU;AAC/C,aAAWD,MAAK,QAAQ;AACxB,MAAID,SAAQ,GACR,YAAY,GACZ,EAAC,OAAM,IAAI,MACX,WAAW;AACf,MAAI,WAAW,GAAG;AACd,aAAS,IAAI;AAAA,EACjB;AAEA,WAAS,iBAAiB,KAAK,OAAO;AAClC,QAAI,QAAQ,OAAO;AACf,iBAAW;AAAA,IACf;AACA,QAAI,aAAa,KAAM;AACvB,QAAI,KAAK;AACL,eAAS,GAAG;AAAA,IAChB,WAAY,EAAE,cAAc,UAAW,UAAU,WAAW;AACxD,eAAS,IAAI;AAAA,IACjB;AAAA,EACJ;AAEA,SAAOA,SAAQ,QAAQA,UAAS;AAC5B,aAAS,KAAKA,MAAK,GAAGA,QAAO,SAAS,gBAAgB,CAAC;AAAA,EAC3D;AACJ;AAGA,SAAS,cAAe,MAAM,UAAU,UAAU;AAC9C,SAAO,cAAc,MAAM,UAAU,UAAU,QAAQ;AAC3D;AA+GA,SAAS,OAAO,MAAM,UAAU,UAAU;AACtC,MAAI,uBAAuB,YAAY,IAAI,IAAI,kBAAkB;AACjE,SAAO,qBAAqB,MAAM,UAAU,QAAQ,GAAG,QAAQ;AACnE;AAyHA,SAAS,IAAK,MAAM,UAAU,UAAU;AACpC,SAAO,UAAU,UAAU,MAAM,UAAU,QAAQ;AACvD;AA8DA,SAAS,aAAa,MAAM,UAAU,UAAU;AAC5C,SAAO,cAAc,MAAM,GAAG,UAAU,QAAQ;AACpD;AAsBA,SAAS,UAAW,MAAM,UAAU,UAAU;AAC1C,SAAO,UAAU,gBAAgB,MAAM,UAAU,QAAQ;AAC7D;AA0BA,SAAS,kBAAmB;AACxB,MAAI,SAASH;AACb,WAAS,SAAU,QAAQ,MAAM;AAC7B,QAAI,IAAK,QAAOA,QAAO,GAAG;AAC1B,YAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,CAAC;AAAA,EAC5C;AAEA,WAAS,cAAc,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACjD,cAAU,KACVA,UAAS;AAAA,EACb,CAAC;AAED,SAAO;AACX;AAmJA,SAAS,KAAK,OAAO,aAAa,UAAU;AACxC,MAAI,OAAO,gBAAgB,UAAU;AAEjC,eAAW;AACX,kBAAc;AAAA,EAClB;AACA,aAAWI,MAAK,YAAY,gBAAgB,CAAC;AAC7C,MAAI,WAAW,OAAO,KAAK,KAAK,EAAE;AAClC,MAAI,CAAC,UAAU;AACX,WAAO,SAAS,IAAI;AAAA,EACxB;AACA,MAAI,CAAC,aAAa;AACd,kBAAc;AAAA,EAClB;AAEA,MAAI,UAAU,CAAC;AACf,MAAI,eAAe;AACnB,MAAI,WAAW;AACf,MAAI,WAAW;AAEf,MAAI,YAAY,uBAAO,OAAO,IAAI;AAElC,MAAI,aAAa,CAAC;AAGlB,MAAI,eAAe,CAAC;AAEpB,MAAI,wBAAwB,CAAC;AAE7B,SAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAC9B,QAAI,OAAO,MAAM,GAAG;AACpB,QAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AAEtB,kBAAY,KAAK,CAAC,IAAI,CAAC;AACvB,mBAAa,KAAK,GAAG;AACrB;AAAA,IACJ;AAEA,QAAI,eAAe,KAAK,MAAM,GAAG,KAAK,SAAS,CAAC;AAChD,QAAI,wBAAwB,aAAa;AACzC,QAAI,0BAA0B,GAAG;AAC7B,kBAAY,KAAK,IAAI;AACrB,mBAAa,KAAK,GAAG;AACrB;AAAA,IACJ;AACA,0BAAsB,GAAG,IAAI;AAE7B,iBAAa,QAAQ,oBAAkB;AACnC,UAAI,CAAC,MAAM,cAAc,GAAG;AACxB,cAAM,IAAI,MAAM,sBAAsB,MAClC,sCACA,iBAAiB,UACjB,aAAa,KAAK,IAAI,CAAC;AAAA,MAC/B;AACA,kBAAY,gBAAgB,MAAM;AAC9B;AACA,YAAI,0BAA0B,GAAG;AAC7B,sBAAY,KAAK,IAAI;AAAA,QACzB;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AAED,oBAAkB;AAClB,eAAa;AAEb,WAAS,YAAY,KAAK,MAAM;AAC5B,eAAW,KAAK,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC5C;AAEA,WAAS,eAAe;AACpB,QAAI,SAAU;AACd,QAAI,WAAW,WAAW,KAAK,iBAAiB,GAAG;AAC/C,aAAO,SAAS,MAAM,OAAO;AAAA,IACjC;AACA,WAAM,WAAW,UAAU,eAAe,aAAa;AACnD,UAAI,MAAM,WAAW,MAAM;AAC3B,UAAI;AAAA,IACR;AAAA,EAEJ;AAEA,WAAS,YAAY,UAAU,IAAI;AAC/B,QAAI,gBAAgB,UAAU,QAAQ;AACtC,QAAI,CAAC,eAAe;AAChB,sBAAgB,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC3C;AAEA,kBAAc,KAAK,EAAE;AAAA,EACzB;AAEA,WAAS,aAAa,UAAU;AAC5B,QAAI,gBAAgB,UAAU,QAAQ,KAAK,CAAC;AAC5C,kBAAc,QAAQ,QAAM,GAAG,CAAC;AAChC,iBAAa;AAAA,EACjB;AAGA,WAAS,QAAQ,KAAK,MAAM;AACxB,QAAI,SAAU;AAEd,QAAI,eAAe,SAAS,CAAC,QAAQ,WAAW;AAC5C;AACA,UAAI,QAAQ,OAAO;AACf,mBAAW;AACX;AAAA,MACJ;AACA,UAAI,OAAO,SAAS,GAAG;AACnB,SAAC,MAAM,IAAI;AAAA,MACf;AACA,UAAI,KAAK;AACL,YAAI,cAAc,CAAC;AACnB,eAAO,KAAK,OAAO,EAAE,QAAQ,UAAQ;AACjC,sBAAY,IAAI,IAAI,QAAQ,IAAI;AAAA,QACpC,CAAC;AACD,oBAAY,GAAG,IAAI;AACnB,mBAAW;AACX,oBAAY,uBAAO,OAAO,IAAI;AAC9B,YAAI,SAAU;AACd,iBAAS,KAAK,WAAW;AAAA,MAC7B,OAAO;AACH,gBAAQ,GAAG,IAAI;AACf,qBAAa,GAAG;AAAA,MACpB;AAAA,IACJ,CAAC;AAED;AACA,QAAI,SAAS,UAAU,KAAK,KAAK,SAAS,CAAC,CAAC;AAC5C,QAAI,KAAK,SAAS,GAAG;AACjB,aAAO,SAAS,YAAY;AAAA,IAChC,OAAO;AACH,aAAO,YAAY;AAAA,IACvB;AAAA,EACJ;AAEA,WAAS,oBAAoB;AAIzB,QAAI;AACJ,QAAI,UAAU;AACd,WAAO,aAAa,QAAQ;AACxB,oBAAc,aAAa,IAAI;AAC/B;AACA,oBAAc,WAAW,EAAE,QAAQ,eAAa;AAC5C,YAAI,EAAE,sBAAsB,SAAS,MAAM,GAAG;AAC1C,uBAAa,KAAK,SAAS;AAAA,QAC/B;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,QAAI,YAAY,UAAU;AACtB,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,WAAS,cAAc,UAAU;AAC7B,QAAI,SAAS,CAAC;AACd,WAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAC9B,YAAM,OAAO,MAAM,GAAG;AACtB,UAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,QAAQ,QAAQ,KAAK,GAAG;AACpD,eAAO,KAAK,GAAG;AAAA,MACnB;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAEA,SAAO,SAAS,cAAc;AAClC;AAOA,SAAS,cAAc,QAAQ;AAC3B,MAAI,WAAW;AACf,MAAID,SAAQ;AACZ,MAAI,kBAAkB,OAAO,QAAQ,IAAI;AACzC,SAAOA,SAAQ,OAAO,QAAQ;AAC1B,QAAI,OAAOA,MAAK,MAAM,OAAO,OAAOA,SAAM,CAAC,MAAM,KAAK;AAElD,UAAI,WAAW,OAAO,QAAQ,MAAMA,MAAK;AACzC,MAAAA,SAAS,aAAa,KAAM,OAAO,SAAS;AAAA,IAChD,WAAY,oBAAoB,MAAQ,OAAOA,MAAK,MAAM,OAAS,OAAOA,SAAM,CAAC,MAAM,KAAM;AAEzF,UAAI,WAAW,OAAO,QAAQ,MAAMA,MAAK;AACzC,UAAI,aAAa,IAAI;AACjB,QAAAA,SAAQ,WAAW;AACnB,0BAAkB,OAAO,QAAQ,MAAMA,MAAK;AAAA,MAChD,OAAO;AACH,oBAAY,OAAOA,MAAK;AACxB,QAAAA;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,kBAAY,OAAOA,MAAK;AACxB,MAAAA;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAEA,SAAS,YAAY,MAAM;AACvB,QAAM,MAAM,cAAc,KAAK,SAAS,CAAC;AACzC,MAAI,QAAQ,IAAI,MAAM,OAAO;AAC7B,MAAI,CAAC,OAAO;AACR,YAAQ,IAAI,MAAM,aAAa;AAAA,EACnC;AACA,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,kDAAkD,GAAG;AACjF,MAAI,CAAC,EAAE,IAAI,IAAI;AACf,SAAO,KACF,QAAQ,OAAO,EAAE,EACjB,MAAM,YAAY,EAClB,IAAI,CAAC,QAAQ,IAAI,QAAQ,QAAQ,EAAE,EAAE,KAAK,CAAC;AACpD;AAqFA,SAAS,WAAW,OAAO,UAAU;AACjC,MAAI,WAAW,CAAC;AAEhB,SAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAC9B,QAAI,SAAS,MAAM,GAAG;AACtB,QAAI;AACJ,QAAI,YAAYN,SAAQ,MAAM;AAC9B,QAAI,YACC,CAAC,aAAa,OAAO,WAAW,KAChC,aAAa,OAAO,WAAW;AAEpC,QAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,eAAS,CAAC,GAAG,MAAM;AACnB,eAAS,OAAO,IAAI;AAEpB,eAAS,GAAG,IAAI,OAAO,OAAO,OAAO,SAAS,IAAI,UAAU,MAAM;AAAA,IACtE,WAAW,WAAW;AAElB,eAAS,GAAG,IAAI;AAAA,IACpB,OAAO;AACH,eAAS,YAAY,MAAM;AAC3B,UAAK,OAAO,WAAW,KAAK,CAAC,aAAc,OAAO,WAAW,GAAG;AAC5D,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC5E;AAGA,UAAI,CAAC,UAAW,QAAO,IAAI;AAE3B,eAAS,GAAG,IAAI,OAAO,OAAO,OAAO;AAAA,IACzC;AAEA,aAAS,QAAQ,SAAS,QAAQ;AAC9B,UAAI,UAAU,OAAO,IAAI,UAAQ,QAAQ,IAAI,CAAC;AAC9C,cAAQ,KAAK,MAAM;AACnB,gBAAU,MAAM,EAAE,GAAG,OAAO;AAAA,IAChC;AAAA,EACJ,CAAC;AAED,SAAO,KAAK,UAAU,QAAQ;AAClC;AAyFA,SAAS,WAAW,KAAK,MAAM;AAC3B,MAAI,SAAS;AACb,MAAI,OAAO,IAAI,OAAO;AAC1B;AAEA,SAAS,QAAQ,QAAQ,aAAa,SAAS;AAC3C,MAAI,eAAe,MAAM;AACrB,kBAAc;AAAA,EAClB,WACQ,gBAAgB,GAAG;AACvB,UAAM,IAAI,WAAW,8BAA8B;AAAA,EACvD;AAEA,MAAI,UAAU,UAAU,MAAM;AAC9B,MAAI,aAAa;AACjB,MAAI,cAAc,CAAC;AACnB,QAAM,SAAS;AAAA,IACX,OAAO,CAAC;AAAA,IACR,OAAO,CAAC;AAAA,IACR,WAAW,CAAC;AAAA,IACZ,aAAa,CAAC;AAAA,IACd,OAAO,CAAC;AAAA,EACZ;AAEA,WAASS,IAAI,OAAO,SAAS;AACzB,WAAO,KAAK,EAAE,KAAK,OAAO;AAAA,EAC9B;AAEA,WAASF,OAAM,OAAO,SAAS;AAC3B,UAAM,kBAAkB,IAAI,SAAS;AACjC,UAAI,OAAO,eAAe;AAC1B,cAAQ,GAAG,IAAI;AAAA,IACnB;AACA,WAAO,KAAK,EAAE,KAAK,eAAe;AAAA,EACtC;AAEA,WAAS,IAAK,OAAO,SAAS;AAC1B,QAAI,CAAC,MAAO,QAAO,OAAO,KAAK,MAAM,EAAE,QAAQ,QAAM,OAAO,EAAE,IAAI,CAAC,CAAC;AACpE,QAAI,CAAC,QAAS,QAAO,OAAO,KAAK,IAAI,CAAC;AACtC,WAAO,KAAK,IAAI,OAAO,KAAK,EAAE,OAAO,QAAM,OAAO,OAAO;AAAA,EAC7D;AAEA,WAAS,QAAS,UAAU,MAAM;AAC9B,WAAO,KAAK,EAAE,QAAQ,aAAW,QAAQ,GAAG,IAAI,CAAC;AAAA,EACrD;AAEA,MAAI,sBAAsB;AAC1B,WAAS,QAAQ,MAAM,eAAe,eAAe,UAAU;AAC3D,QAAI,YAAY,QAAQ,OAAO,aAAa,YAAY;AACpD,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACtD;AACA,MAAE,UAAU;AAEZ,QAAI,KAAK;AACT,aAASG,iBAAiB,QAAQ,MAAM;AAGpC,UAAI,IAAK,QAAO,gBAAgB,IAAI,GAAG,IAAI,IAAI;AAC/C,UAAI,KAAK,UAAU,EAAG,QAAO,IAAI,KAAK,CAAC,CAAC;AACxC,UAAI,IAAI;AAAA,IACZ;AAEA,QAAI,OAAO,EAAE;AAAA,MACT;AAAA,MACA,gBAAgBA,mBACX,YAAYA;AAAA,IACrB;AAEA,QAAI,eAAe;AACf,QAAE,OAAO,QAAQ,IAAI;AAAA,IACzB,OAAO;AACH,QAAE,OAAO,KAAK,IAAI;AAAA,IACtB;AAEA,QAAI,CAAC,qBAAqB;AACtB,4BAAsB;AACtB,qBAAe,MAAM;AACjB,8BAAsB;AACtB,UAAE,QAAQ;AAAA,MACd,CAAC;AAAA,IACL;AAEA,QAAI,iBAAiB,CAAC,UAAU;AAC5B,aAAO,IAAI,QAAQ,CAAC,SAASP,YAAW;AACpC,cAAM;AACN,cAAMA;AAAA,MACV,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,WAAS,UAAU,OAAO;AACtB,WAAO,SAAU,QAAQ,MAAM;AAC3B,oBAAc;AAEd,eAASK,KAAI,GAAG,IAAI,MAAM,QAAQA,KAAI,GAAGA,MAAK;AAC1C,YAAI,OAAO,MAAMA,EAAC;AAElB,YAAIF,SAAQ,YAAY,QAAQ,IAAI;AACpC,YAAIA,WAAU,GAAG;AACb,sBAAY,MAAM;AAAA,QACtB,WAAWA,SAAQ,GAAG;AAClB,sBAAY,OAAOA,QAAO,CAAC;AAAA,QAC/B;AAEA,aAAK,SAAS,KAAK,GAAG,IAAI;AAE1B,YAAI,OAAO,MAAM;AACb,kBAAQ,SAAS,KAAK,KAAK,IAAI;AAAA,QACnC;AAAA,MACJ;AAEA,UAAI,cAAe,EAAE,cAAc,EAAE,QAAU;AAC3C,gBAAQ,aAAa;AAAA,MACzB;AAEA,UAAI,EAAE,KAAK,GAAG;AACV,gBAAQ,OAAO;AAAA,MACnB;AACA,QAAE,QAAQ;AAAA,IACd;AAAA,EACJ;AAEA,WAAS,YAAY,MAAM;AACvB,QAAI,KAAK,WAAW,KAAK,EAAE,KAAK,GAAG;AAE/B,qBAAe,MAAM,QAAQ,OAAO,CAAC;AACrC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAEA,QAAM,cAAc,CAAC,SAAS,CAAC,YAAY;AACvC,QAAI,CAAC,SAAS;AACV,aAAO,IAAI,QAAQ,CAAC,SAASH,YAAW;AACpC,QAAAI,OAAK,MAAM,CAAC,KAAK,SAAS;AACtB,cAAI,IAAK,QAAOJ,QAAO,GAAG;AAC1B,kBAAQ,IAAI;AAAA,QAChB,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AACA,QAAI,IAAI;AACR,IAAAM,IAAG,MAAM,OAAO;AAAA,EAEpB;AAEA,MAAI,eAAe;AACnB,MAAI,IAAI;AAAA,IACJ,QAAQ,IAAI,IAAI;AAAA,IAChB,gBAAiB,MAAM,UAAU;AAC7B,aAAO;AAAA,QACH;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,EAAE,OAAO,QAAQ,IAAK;AAClB,aAAO,EAAE,OAAO,OAAO,QAAQ,EAAE;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,cAAc;AAAA,IACtB,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,KAAM,MAAM,UAAU;AAClB,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,YAAI,YAAY,IAAI,EAAG;AACvB,eAAO,KAAK,IAAI,WAAS,QAAQ,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA,MACnE;AACA,aAAO,QAAQ,MAAM,OAAO,OAAO,QAAQ;AAAA,IAC/C;AAAA,IACA,UAAW,MAAM,UAAU;AACvB,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,YAAI,YAAY,IAAI,EAAG;AACvB,eAAO,KAAK,IAAI,WAAS,QAAQ,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,MAClE;AACA,aAAO,QAAQ,MAAM,OAAO,MAAM,QAAQ;AAAA,IAC9C;AAAA,IACA,OAAQ;AACJ,UAAI;AACJ,QAAE,OAAO,MAAM;AAAA,IACnB;AAAA,IACA,QAAS,MAAM,UAAU;AACrB,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,YAAI,YAAY,IAAI,EAAG;AACvB,eAAO,KAAK,IAAI,WAAS,QAAQ,OAAO,MAAM,OAAO,QAAQ,CAAC;AAAA,MAClE;AACA,aAAO,QAAQ,MAAM,MAAM,OAAO,QAAQ;AAAA,IAC9C;AAAA,IACA,aAAc,MAAM,UAAU;AAC1B,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,YAAI,YAAY,IAAI,EAAG;AACvB,eAAO,KAAK,IAAI,WAAS,QAAQ,OAAO,MAAM,MAAM,QAAQ,CAAC;AAAA,MACjE;AACA,aAAO,QAAQ,MAAM,MAAM,MAAM,QAAQ;AAAA,IAC7C;AAAA,IACA,OAAQ,QAAQ;AACZ,QAAE,OAAO,OAAO,MAAM;AAAA,IAC1B;AAAA,IACA,UAAW;AAGP,UAAI,cAAc;AACd;AAAA,MACJ;AACA,qBAAe;AACf,aAAM,CAAC,EAAE,UAAU,aAAa,EAAE,eAAe,EAAE,OAAO,QAAO;AAC7D,YAAI,QAAQ,CAAC,GAAG,OAAO,CAAC;AACxB,YAAI,IAAI,EAAE,OAAO;AACjB,YAAI,EAAE,QAAS,KAAI,KAAK,IAAI,GAAG,EAAE,OAAO;AACxC,iBAASD,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACxB,cAAI,OAAO,EAAE,OAAO,MAAM;AAC1B,gBAAM,KAAK,IAAI;AACf,sBAAY,KAAK,IAAI;AACrB,eAAK,KAAK,KAAK,IAAI;AAAA,QACvB;AAEA,sBAAc;AAEd,YAAI,EAAE,OAAO,WAAW,GAAG;AACvB,kBAAQ,OAAO;AAAA,QACnB;AAEA,YAAI,eAAe,EAAE,aAAa;AAC9B,kBAAQ,WAAW;AAAA,QACvB;AAEA,YAAI,KAAK,SAAS,UAAU,KAAK,CAAC;AAClC,gBAAQ,MAAM,EAAE;AAAA,MACpB;AACA,qBAAe;AAAA,IACnB;AAAA,IACA,SAAU;AACN,aAAO,EAAE,OAAO;AAAA,IACpB;AAAA,IACA,UAAW;AACP,aAAO;AAAA,IACX;AAAA,IACA,cAAe;AACX,aAAO;AAAA,IACX;AAAA,IACA,OAAO;AACH,aAAO,EAAE,OAAO,SAAS,eAAe;AAAA,IAC5C;AAAA,IACA,QAAS;AACL,QAAE,SAAS;AAAA,IACf;AAAA,IACA,SAAU;AACN,UAAI,EAAE,WAAW,OAAO;AAAE;AAAA,MAAQ;AAClC,QAAE,SAAS;AACX,qBAAe,EAAE,OAAO;AAAA,IAC5B;AAAA,EACJ;AAEA,SAAO,iBAAiB,GAAG;AAAA,IACvB,WAAW;AAAA,MACP,UAAU;AAAA,MACV,OAAO,YAAY,WAAW;AAAA,IAClC;AAAA,IACA,aAAa;AAAA,MACT,UAAU;AAAA,MACV,OAAO,YAAY,aAAa;AAAA,IACpC;AAAA,IACA,OAAO;AAAA,MACH,UAAU;AAAA,MACV,OAAO,YAAY,OAAO;AAAA,IAC9B;AAAA,IACA,OAAO;AAAA,MACH,UAAU;AAAA,MACV,OAAO,YAAY,OAAO;AAAA,IAC9B;AAAA,IACA,OAAO;AAAA,MACH,UAAU;AAAA,MACV,OAAO,YAAY,OAAO;AAAA,IAC9B;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AAgDA,SAAS,QAAQ,QAAQ,SAAS;AAC9B,SAAO,QAAQ,QAAQ,GAAG,OAAO;AACrC;AAwDA,SAAS,MAAM,QAAQ,aAAa,SAAS;AACzC,SAAO,QAAQ,QAAQ,aAAa,OAAO;AAC/C;AAuHA,SAAS,OAAO,MAAM,MAAM,UAAU,UAAU;AAC5C,aAAWD,MAAK,QAAQ;AACxB,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,eAAe,MAAM,CAAC,GAAGC,IAAG,WAAW;AAC1C,cAAU,MAAM,GAAG,CAAC,KAAK,MAAM;AAC3B,aAAO;AACP,aAAO,GAAG;AAAA,IACd,CAAC;AAAA,EACL,GAAG,SAAO,SAAS,KAAK,IAAI,CAAC;AACjC;AAyCA,SAAS,OAAO,WAAW;AACvB,MAAI,aAAa,UAAU,IAAI,SAAS;AACxC,SAAO,YAAa,MAAM;AACtB,QAAI,OAAO;AAEX,QAAI,KAAK,KAAK,KAAK,SAAS,CAAC;AAC7B,QAAI,OAAO,MAAM,YAAY;AACzB,WAAK,IAAI;AAAA,IACb,OAAO;AACH,WAAK,gBAAgB;AAAA,IACzB;AAEA;AAAA,MAAS;AAAA,MAAY;AAAA,MAAM,CAAC,SAAS,IAAI,WAAW;AAChD,WAAG,MAAM,MAAM,QAAQ,OAAO,CAAC,QAAQ,aAAa;AAChD,iBAAO,KAAK,QAAQ;AAAA,QACxB,CAAC,CAAC;AAAA,MACN;AAAA,MACA,CAAC,KAAK,YAAY,GAAG,KAAK,GAAG,OAAO;AAAA,IAAC;AAErC,WAAO,GAAG,cAAc;AAAA,EAC5B;AACJ;AAwCA,SAAS,WAAW,MAAM;AACtB,SAAO,IAAI,GAAG,KAAK,QAAQ,CAAC;AAChC;AAsBA,SAAS,SAAU,MAAM,OAAO,UAAU,UAAU;AAChD,SAAO,UAAU,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AACnE;AAuBA,SAAS,YAAY,MAAM,OAAO,UAAU,UAAU;AAClD,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,WAAW,MAAM,OAAO,CAAC,KAAK,WAAW;AAC5C,cAAU,KAAK,CAAC,QAAQ,SAAS;AAC7B,UAAI,IAAK,QAAO,OAAO,GAAG;AAC1B,aAAO,OAAO,KAAK,IAAI;AAAA,IAC3B,CAAC;AAAA,EACL,GAAG,CAAC,KAAK,eAAe;AACpB,QAAI,SAAS,CAAC;AACd,aAASA,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AACxC,UAAI,WAAWA,EAAC,GAAG;AACf,iBAAS,OAAO,OAAO,GAAG,WAAWA,EAAC,CAAC;AAAA,MAC3C;AAAA,IACJ;AAEA,WAAO,SAAS,KAAK,MAAM;AAAA,EAC/B,CAAC;AACL;AAiGA,SAAS,OAAO,MAAM,UAAU,UAAU;AACtC,SAAO,cAAc,MAAM,UAAU,UAAU,QAAQ;AAC3D;AAuBA,SAAS,aAAa,MAAM,UAAU,UAAU;AAC5C,SAAO,cAAc,MAAM,GAAG,UAAU,QAAQ;AACpD;AA6CA,SAAS,cAAc,MAAM;AACzB,SAAO,YAAa,aAA2B;AAC3C,QAAI,WAAW,YAAY,IAAI;AAC/B,WAAO,SAAS,MAAM,GAAG,IAAI;AAAA,EACjC;AACJ;AAEA,SAAS,cAAc,OAAO,WAAW;AACrC,SAAO,CAAC,QAAQ,KAAK,WAAW,OAAO;AACnC,QAAI,aAAa;AACjB,QAAI;AACJ,UAAM,WAAW,UAAU,SAAS;AACpC,WAAO,KAAK,CAAC,OAAOH,IAAG,aAAa;AAChC,eAAS,OAAO,CAAC,KAAK,WAAW;AAC7B,YAAI,OAAO,QAAQ,MAAO,QAAO,SAAS,GAAG;AAE7C,YAAI,MAAM,MAAM,KAAK,CAAC,YAAY;AAC9B,uBAAa;AACb,uBAAa,UAAU,MAAM,KAAK;AAClC,iBAAO,SAAS,MAAM,SAAS;AAAA,QACnC;AACA,iBAAS;AAAA,MACb,CAAC;AAAA,IACL,GAAG,SAAO;AACN,UAAI,IAAK,QAAO,GAAG,GAAG;AACtB,SAAG,MAAM,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,IACvD,CAAC;AAAA,EACL;AACJ;AAyEA,SAAS,OAAO,MAAM,UAAU,UAAU;AACtC,SAAO,cAAc,UAAQ,MAAM,CAAC,KAAK,SAAS,IAAI,EAAE,UAAU,MAAM,UAAU,QAAQ;AAC9F;AA0BA,SAAS,YAAY,MAAM,OAAO,UAAU,UAAU;AAClD,SAAO,cAAc,UAAQ,MAAM,CAAC,KAAK,SAAS,IAAI,EAAE,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AAC1G;AAwBA,SAAS,aAAa,MAAM,UAAU,UAAU;AAC5C,SAAO,cAAc,UAAQ,MAAM,CAAC,KAAK,SAAS,IAAI,EAAE,cAAc,CAAC,GAAG,MAAM,UAAU,QAAQ;AACtG;AAIA,SAAS,YAAY,MAAM;AACvB,SAAO,CAAC,OAAO,SAAS,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,eAAe;AAEnE,QAAI,OAAO,YAAY,UAAU;AAE7B,UAAI,KAAK;AAEL,YAAI,QAAQ,OAAO;AACf,kBAAQ,MAAM,GAAG;AAAA,QACrB;AAAA,MACJ,WAAW,QAAQ,IAAI,GAAG;AACtB,mBAAW,QAAQ,OAAK,QAAQ,IAAI,EAAE,CAAC,CAAC;AAAA,MAC5C;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAwDA,SAAS,SAAS,UAAU,MAAM,UAAU;AACxC,aAAW,SAAS,QAAQ;AAC5B,MAAI,MAAM,UAAU,QAAQ;AAC5B,MAAI,QAAQ,UAAU,IAAI;AAC1B,MAAI;AAEJ,WAAS,KAAK,QAAQ,MAAM;AACxB,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,QAAI,QAAQ,MAAO;AACnB,cAAU;AACV,UAAM,GAAG,MAAM,KAAK;AAAA,EACxB;AAEA,WAAS,MAAM,KAAK,OAAO;AACvB,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,QAAI,QAAQ,MAAO;AACnB,QAAI,CAAC,MAAO,QAAO,SAAS,MAAM,GAAG,OAAO;AAC5C,QAAI,IAAI;AAAA,EACZ;AAEA,SAAO,MAAM,MAAM,IAAI;AAC3B;AAyBA,SAAS,QAAQ,UAAU,MAAM,UAAU;AACvC,QAAM,QAAQ,UAAU,IAAI;AAC5B,SAAO,WAAW,UAAU,IAAI,SAAS;AACrC,UAAM,KAAK,KAAK,IAAI;AACpB,UAAM,GAAG,MAAM,CAAC,KAAK,UAAU,GAAI,KAAK,CAAC,KAAK,CAAC;AAAA,EACnD,GAAG,QAAQ;AACf;AAEA,SAAS,cAAc,UAAU;AAC7B,SAAO,CAAC,OAAOC,QAAO,aAAa,SAAS,OAAO,QAAQ;AAC/D;AAqGA,SAAS,YAAY,MAAM,UAAU,UAAU;AAC3C,SAAO,SAAS,MAAM,cAAc,UAAU,QAAQ,CAAC,GAAG,QAAQ;AACtE;AAyBA,SAAS,UAAU,MAAM,OAAO,UAAU,UAAU;AAChD,SAAO,cAAc,KAAK,EAAE,MAAM,cAAc,UAAU,QAAQ,CAAC,GAAG,QAAQ;AAClF;AA0BA,SAAS,WAAW,MAAM,UAAU,UAAU;AAC1C,SAAO,YAAY,MAAM,GAAG,UAAU,QAAQ;AAClD;AAsCA,SAAS,YAAY,IAAI;AACrB,MAAIN,SAAQ,EAAE,EAAG,QAAO;AACxB,SAAO,YAAa,MAAoB;AACpC,QAAI,WAAW,KAAK,IAAI;AACxB,QAAI,OAAO;AACX,SAAK,KAAK,IAAI,cAAc;AACxB,UAAI,MAAM;AACN,uBAAe,MAAM,SAAS,GAAG,SAAS,CAAC;AAAA,MAC/C,OAAO;AACH,iBAAS,GAAG,SAAS;AAAA,MACzB;AAAA,IACJ,CAAC;AACD,OAAG,MAAM,MAAM,IAAI;AACnB,WAAO;AAAA,EACX;AACJ;AAgGA,SAAS,MAAM,MAAM,UAAU,UAAU;AACrC,SAAO,cAAc,UAAQ,CAAC,MAAM,SAAO,CAAC,GAAG,EAAE,UAAU,MAAM,UAAU,QAAQ;AACvF;AAwBA,SAAS,WAAW,MAAM,OAAO,UAAU,UAAU;AACjD,SAAO,cAAc,UAAQ,CAAC,MAAM,SAAO,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AACnG;AAuBA,SAAS,YAAY,MAAM,UAAU,UAAU;AAC3C,SAAO,cAAc,UAAQ,CAAC,MAAM,SAAO,CAAC,GAAG,EAAE,gBAAgB,MAAM,UAAU,QAAQ;AAC7F;AAGA,SAAS,YAAY,QAAQ,KAAK,UAAU,UAAU;AAClD,MAAI,cAAc,IAAI,MAAM,IAAI,MAAM;AACtC,SAAO,KAAK,CAAC,GAAGM,QAAO,WAAW;AAC9B,aAAS,GAAG,CAAC,KAAK,MAAM;AACpB,kBAAYA,MAAK,IAAI,CAAC,CAAC;AACvB,aAAO,GAAG;AAAA,IACd,CAAC;AAAA,EACL,GAAG,SAAO;AACN,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,QAAI,UAAU,CAAC;AACf,aAASE,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACjC,UAAI,YAAYA,EAAC,EAAG,SAAQ,KAAK,IAAIA,EAAC,CAAC;AAAA,IAC3C;AACA,aAAS,MAAM,OAAO;AAAA,EAC1B,CAAC;AACL;AAEA,SAAS,cAAc,QAAQ,MAAM,UAAU,UAAU;AACrD,MAAI,UAAU,CAAC;AACf,SAAO,MAAM,CAAC,GAAGF,QAAO,WAAW;AAC/B,aAAS,GAAG,CAAC,KAAK,MAAM;AACpB,UAAI,IAAK,QAAO,OAAO,GAAG;AAC1B,UAAI,GAAG;AACH,gBAAQ,KAAK,EAAC,OAAAA,QAAO,OAAO,EAAC,CAAC;AAAA,MAClC;AACA,aAAO,GAAG;AAAA,IACd,CAAC;AAAA,EACL,GAAG,SAAO;AACN,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,aAAS,MAAM,QACV,KAAK,CAACK,IAAG,MAAMA,GAAE,QAAQ,EAAE,KAAK,EAChC,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,EAC1B,CAAC;AACL;AAEA,SAAS,QAAQ,QAAQ,MAAM,UAAU,UAAU;AAC/C,MAAIC,UAAS,YAAY,IAAI,IAAI,cAAc;AAC/C,SAAOA,QAAO,QAAQ,MAAM,UAAU,QAAQ,GAAG,QAAQ;AAC7D;AAsEA,SAAS,OAAQ,MAAM,UAAU,UAAU;AACvC,SAAO,QAAQ,UAAU,MAAM,UAAU,QAAQ;AACrD;AAuBA,SAAS,YAAa,MAAM,OAAO,UAAU,UAAU;AACnD,SAAO,QAAQ,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AACjE;AAqBA,SAAS,aAAc,MAAM,UAAU,UAAU;AAC7C,SAAO,QAAQ,gBAAgB,MAAM,UAAU,QAAQ;AAC3D;AAkCA,SAAS,QAAQ,IAAI,SAAS;AAC1B,MAAI,OAAO,SAAS,OAAO;AAC3B,MAAI,OAAO,UAAU,YAAY,EAAE,CAAC;AAEpC,WAAS,KAAK,KAAK;AACf,QAAI,IAAK,QAAO,KAAK,GAAG;AACxB,QAAI,QAAQ,MAAO;AACnB,SAAK,IAAI;AAAA,EACb;AACA,SAAO,KAAK;AAChB;AAuBA,SAAS,aAAa,MAAM,OAAO,UAAU,UAAU;AACnD,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,WAAW,MAAM,OAAO,CAAC,KAAK,WAAW;AAC5C,cAAU,KAAK,CAAC,KAAK,QAAQ;AACzB,UAAI,IAAK,QAAO,OAAO,GAAG;AAC1B,aAAO,OAAO,KAAK,EAAC,KAAK,IAAG,CAAC;AAAA,IACjC,CAAC;AAAA,EACL,GAAG,CAAC,KAAK,eAAe;AACpB,QAAI,SAAS,CAAC;AAEd,QAAI,EAAC,eAAc,IAAI,OAAO;AAE9B,aAASJ,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AACxC,UAAI,WAAWA,EAAC,GAAG;AACf,YAAI,EAAC,IAAG,IAAI,WAAWA,EAAC;AACxB,YAAI,EAAC,IAAG,IAAI,WAAWA,EAAC;AAExB,YAAI,eAAe,KAAK,QAAQ,GAAG,GAAG;AAClC,iBAAO,GAAG,EAAE,KAAK,GAAG;AAAA,QACxB,OAAO;AACH,iBAAO,GAAG,IAAI,CAAC,GAAG;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,SAAS,KAAK,MAAM;AAAA,EAC/B,CAAC;AACL;AA+FA,SAAS,QAAS,MAAM,UAAU,UAAU;AACxC,SAAO,eAAe,MAAM,UAAU,UAAU,QAAQ;AAC5D;AAqBA,SAAS,cAAe,MAAM,UAAU,UAAU;AAC9C,SAAO,eAAe,MAAM,GAAG,UAAU,QAAQ;AACrD;AAqDA,SAAS,eAAe,KAAK,OAAO,UAAU,UAAU;AACpD,aAAWD,MAAK,QAAQ;AACxB,MAAI,SAAS,CAAC;AACd,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,cAAc,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;AACjD,cAAU,KAAK,KAAK,CAAC,KAAK,WAAW;AACjC,UAAI,IAAK,QAAO,KAAK,GAAG;AACxB,aAAO,GAAG,IAAI;AACd,WAAK,GAAG;AAAA,IACZ,CAAC;AAAA,EACL,GAAG,SAAO,SAAS,KAAK,MAAM,CAAC;AACnC;AA2IA,SAAS,UAAU,KAAK,UAAU,UAAU;AACxC,SAAO,iBAAiB,KAAK,UAAU,UAAU,QAAQ;AAC7D;AAsBA,SAAS,gBAAgB,KAAK,UAAU,UAAU;AAC9C,SAAO,iBAAiB,KAAK,GAAG,UAAU,QAAQ;AACtD;AA0CA,SAAS,QAAQ,IAAI,SAAS,OAAK,GAAG;AAClC,MAAI,OAAO,uBAAO,OAAO,IAAI;AAC7B,MAAI,SAAS,uBAAO,OAAO,IAAI;AAC/B,MAAI,MAAM,UAAU,EAAE;AACtB,MAAI,WAAW,cAAc,CAAC,MAAM,aAAa;AAC7C,QAAI,MAAM,OAAO,GAAG,IAAI;AACxB,QAAI,OAAO,MAAM;AACb,qBAAe,MAAM,SAAS,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;AAAA,IACrD,WAAW,OAAO,QAAQ;AACtB,aAAO,GAAG,EAAE,KAAK,QAAQ;AAAA,IAC7B,OAAO;AACH,aAAO,GAAG,IAAI,CAAC,QAAQ;AACvB,UAAI,GAAG,MAAM,CAAC,QAAQ,eAAe;AAEjC,YAAI,CAAC,KAAK;AACN,eAAK,GAAG,IAAI;AAAA,QAChB;AACA,YAAI,IAAI,OAAO,GAAG;AAClB,eAAO,OAAO,GAAG;AACjB,iBAASC,KAAI,GAAG,IAAI,EAAE,QAAQA,KAAI,GAAGA,MAAK;AACtC,YAAEA,EAAC,EAAE,KAAK,GAAG,UAAU;AAAA,QAC3B;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ,CAAC;AACD,WAAS,OAAO;AAChB,WAAS,aAAa;AACtB,SAAO;AACX;AA4NA,SAAS,SAAS,OAAO,UAAU;AAC/B,SAAO,UAAU,UAAU,OAAO,QAAQ;AAC9C;AAsBA,SAAS,cAAc,OAAO,OAAO,UAAU;AAC3C,SAAO,UAAU,cAAc,KAAK,GAAG,OAAO,QAAQ;AAC1D;AAgJA,SAAS,MAAO,QAAQ,aAAa;AACjC,MAAI,UAAU,UAAU,MAAM;AAC9B,SAAO,QAAQ,CAAC,OAAO,OAAO;AAC1B,YAAQ,MAAM,CAAC,GAAG,EAAE;AAAA,EACxB,GAAG,aAAa,CAAC;AACrB;AAoGA,SAAS,QAAQA,IAAG;AAChB,UAAQA,MAAG,KAAG;AAClB;AAEA,SAAS,OAAOA,IAAG;AACf,UAASA,KAAE,KAAI,KAAG;AACtB;AAEA,SAAS,QAAQ,GAAG,GAAG;AACnB,MAAI,EAAE,aAAa,EAAE,UAAU;AAC3B,WAAO,EAAE,WAAW,EAAE;AAAA,EAC1B,OACK;AACD,WAAO,EAAE,YAAY,EAAE;AAAA,EAC3B;AACJ;AA2BA,SAAS,cAAc,QAAQ,aAAa;AAExC,MAAI,IAAI,MAAM,QAAQ,WAAW;AAEjC,MAAI;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,IAAE,SAAS,IAAI,KAAK;AACpB,IAAE,kBAAkB,CAAC,EAAC,MAAM,SAAQ,GAAG,aAAa;AAChD,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,WAAS,gBAAgB,OAAO,UAAU;AACtC,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,aAAO,EAAC,MAAM,OAAO,SAAQ;AAAA,IACjC;AACA,WAAO,MAAM,IAAI,UAAQ;AAAE,aAAO,EAAC,MAAM,SAAQ;AAAA,IAAG,CAAC;AAAA,EACzD;AAGA,IAAE,OAAO,SAAS,MAAM,WAAW,GAAG,UAAU;AAC5C,WAAO,KAAK,gBAAgB,MAAM,QAAQ,GAAG,QAAQ;AAAA,EACzD;AAEA,IAAE,YAAY,SAAS,MAAM,WAAW,GAAG,UAAU;AACjD,WAAO,UAAU,gBAAgB,MAAM,QAAQ,GAAG,QAAQ;AAAA,EAC9D;AAGA,SAAO,EAAE;AACT,SAAO,EAAE;AAET,SAAO;AACX;AAsCA,SAAS,KAAK,OAAO,UAAU;AAC3B,aAAWD,MAAK,QAAQ;AACxB,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,SAAS,IAAI,UAAU,sDAAsD,CAAC;AAChH,MAAI,CAAC,MAAM,OAAQ,QAAO,SAAS;AACnC,WAASC,KAAI,GAAG,IAAI,MAAM,QAAQA,KAAI,GAAGA,MAAK;AAC1C,cAAU,MAAMA,EAAC,CAAC,EAAE,QAAQ;AAAA,EAChC;AACJ;AA2BA,SAAS,YAAa,OAAO,MAAM,UAAU,UAAU;AACnD,MAAI,WAAW,CAAC,GAAG,KAAK,EAAE,QAAQ;AAClC,SAAO,SAAS,UAAU,MAAM,UAAU,QAAQ;AACtD;AAyCA,SAAS,QAAQ,IAAI;AACjB,MAAI,MAAM,UAAU,EAAE;AACtB,SAAO,cAAc,SAAS,UAAU,MAAM,iBAAiB;AAC3D,SAAK,KAAK,CAAC,UAAU,WAAW;AAC5B,UAAI,SAAS,CAAC;AACd,UAAI,OAAO;AACP,eAAO,QAAQ;AAAA,MACnB;AACA,UAAI,OAAO,SAAS,GAAE;AAClB,YAAI,QAAQ;AACZ,YAAI,OAAO,UAAU,GAAG;AACpB,WAAC,KAAK,IAAI;AAAA,QACd;AACA,eAAO,QAAQ;AAAA,MACnB;AACA,sBAAgB,MAAM,MAAM;AAAA,IAChC,CAAC;AAED,WAAO,IAAI,MAAM,MAAM,IAAI;AAAA,EAC/B,CAAC;AACL;AAqEA,SAAS,WAAW,OAAO;AACvB,MAAI;AACJ,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,cAAU,MAAM,IAAI,OAAO;AAAA,EAC/B,OAAO;AACH,cAAU,CAAC;AACX,WAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAC9B,cAAQ,GAAG,IAAI,QAAQ,KAAK,MAAM,MAAM,GAAG,CAAC;AAAA,IAChD,CAAC;AAAA,EACL;AACA,SAAO;AACX;AAEA,SAAS,SAAS,QAAQ,KAAK,WAAW,UAAU;AAChD,QAAM,WAAW,UAAU,SAAS;AACpC,SAAO,QAAQ,QAAQ,KAAK,CAAC,OAAO,OAAO;AACvC,aAAS,OAAO,CAAC,KAAK,MAAM;AACxB,SAAG,KAAK,CAAC,CAAC;AAAA,IACd,CAAC;AAAA,EACL,GAAG,QAAQ;AACf;AAgEA,SAAS,OAAQ,MAAM,UAAU,UAAU;AACvC,SAAO,SAAS,UAAU,MAAM,UAAU,QAAQ;AACtD;AAuBA,SAAS,YAAa,MAAM,OAAO,UAAU,UAAU;AACnD,SAAO,SAAS,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AAClE;AAqBA,SAAS,aAAc,MAAM,UAAU,UAAU;AAC7C,SAAO,SAAS,gBAAgB,MAAM,UAAU,QAAQ;AAC5D;AAGA,SAAS,SAAS,OAAO;AACrB,SAAO,WAAY;AACf,WAAO;AAAA,EACX;AACJ;AA0FA,SAAS,MAAM,MAAM,MAAM,UAAU;AACjC,MAAI,UAAU;AAAA,IACV,OAAO;AAAA,IACP,cAAc,SAAS,gBAAgB;AAAA,EAC3C;AAEA,MAAI,UAAU,SAAS,KAAK,OAAO,SAAS,YAAY;AACpD,eAAW,QAAQ,gBAAgB;AACnC,WAAO;AAAA,EACX,OAAO;AACH,eAAW,SAAS,IAAI;AACxB,eAAW,YAAY,gBAAgB;AAAA,EAC3C;AAEA,MAAI,OAAO,SAAS,YAAY;AAC5B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AAEA,MAAI,QAAQ,UAAU,IAAI;AAE1B,MAAI,UAAU;AACd,WAAS,eAAe;AACpB,UAAM,CAAC,QAAQ,SAAS;AACpB,UAAI,QAAQ,MAAO;AACnB,UAAI,OAAO,YAAY,QAAQ,UAC1B,OAAO,QAAQ,eAAe,cAC3B,QAAQ,YAAY,GAAG,IAAI;AAC/B,mBAAW,cAAc,QAAQ,aAAa,UAAU,CAAC,CAAC;AAAA,MAC9D,OAAO;AACH,iBAAS,KAAK,GAAG,IAAI;AAAA,MACzB;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,eAAa;AACb,SAAO,SAAS,cAAc;AAClC;AAEA,SAAS,WAAW,KAAK,GAAG;AACxB,MAAI,OAAO,MAAM,UAAU;AACvB,QAAI,QAAQ,CAAC,EAAE,SAAS;AAExB,QAAI,eAAe,OAAO,EAAE,aAAa,aACrC,EAAE,WACF,SAAS,CAAC,EAAE,YAAY,gBAAgB;AAE5C,QAAI,cAAc,EAAE;AAAA,EACxB,WAAW,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACvD,QAAI,QAAQ,CAAC,KAAK;AAAA,EACtB,OAAO;AACH,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AACJ;AA+BA,SAAS,UAAW,MAAM,MAAM;AAC5B,MAAI,CAAC,MAAM;AACP,WAAO;AACP,WAAO;AAAA,EACX;AACA,MAAI,QAAS,QAAQ,KAAK,SAAU,KAAK;AACzC,MAAIR,SAAQ,IAAI,GAAG;AACf,aAAS;AAAA,EACb;AACA,MAAI,QAAQ,UAAU,IAAI;AAC1B,SAAO,cAAc,CAAC,MAAM,aAAa;AACrC,QAAI,KAAK,SAAS,QAAQ,KAAK,YAAY,MAAM;AAC7C,WAAK,KAAK,QAAQ;AAClB,iBAAW,gBAAgB;AAAA,IAC/B;AACA,aAAS,OAAO,IAAI;AAChB,YAAM,GAAG,MAAM,EAAE;AAAA,IACrB;AAEA,QAAI,KAAM,OAAM,MAAM,QAAQ,QAAQ;AAAA,QACjC,OAAM,QAAQ,QAAQ;AAE3B,WAAO,SAAS,cAAc;AAAA,EAClC,CAAC;AACL;AAuKA,SAAS,OAAO,OAAO,UAAU;AAC7B,SAAO,UAAU,gBAAgB,OAAO,QAAQ;AACpD;AAmGA,SAAS,KAAK,MAAM,UAAU,UAAU;AACpC,SAAO,cAAc,SAAS,SAAO,GAAG,EAAE,UAAU,MAAM,UAAU,QAAQ;AAChF;AAyBA,SAAS,UAAU,MAAM,OAAO,UAAU,UAAU;AAChD,SAAO,cAAc,SAAS,SAAO,GAAG,EAAE,cAAc,KAAK,GAAG,MAAM,UAAU,QAAQ;AAC5F;AAwBA,SAAS,WAAW,MAAM,UAAU,UAAU;AAC1C,SAAO,cAAc,SAAS,SAAO,GAAG,EAAE,gBAAgB,MAAM,UAAU,QAAQ;AACtF;AAyJA,SAAS,OAAQ,MAAM,UAAU,UAAU;AACvC,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,MAAM,MAAM,CAAC,GAAG,WAAW;AAC9B,cAAU,GAAG,CAAC,KAAK,aAAa;AAC5B,UAAI,IAAK,QAAO,OAAO,GAAG;AAC1B,aAAO,KAAK,EAAC,OAAO,GAAG,SAAQ,CAAC;AAAA,IACpC,CAAC;AAAA,EACL,GAAG,CAAC,KAAK,YAAY;AACjB,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,aAAS,MAAM,QAAQ,KAAK,UAAU,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,EAC7D,CAAC;AAED,WAAS,WAAW,MAAM,OAAO;AAC7B,QAAIW,KAAI,KAAK,UAAU,IAAI,MAAM;AACjC,WAAOA,KAAI,IAAI,KAAKA,KAAI,IAAI,IAAI;AAAA,EACpC;AACJ;AA4CA,SAAS,QAAQ,SAAS,cAAc,MAAM;AAC1C,MAAI,KAAK,UAAU,OAAO;AAE1B,SAAO,cAAc,CAAC,MAAM,aAAa;AACrC,QAAI,WAAW;AACf,QAAI;AAEJ,aAAS,kBAAkB;AACvB,UAAI,OAAO,QAAQ,QAAQ;AAC3B,UAAI,QAAS,IAAI,MAAM,wBAAwB,OAAO,cAAc;AACpE,YAAM,OAAO;AACb,UAAI,MAAM;AACN,cAAM,OAAO;AAAA,MACjB;AACA,iBAAW;AACX,eAAS,KAAK;AAAA,IAClB;AAEA,SAAK,KAAK,IAAI,WAAW;AACrB,UAAI,CAAC,UAAU;AACX,iBAAS,GAAG,MAAM;AAClB,qBAAa,KAAK;AAAA,MACtB;AAAA,IACJ,CAAC;AAGD,YAAQ,WAAW,iBAAiB,YAAY;AAChD,OAAG,GAAG,IAAI;AAAA,EACd,CAAC;AACL;AAEA,SAAS,MAAM,MAAM;AACjB,MAAI,SAAS,MAAM,IAAI;AACvB,SAAO,QAAQ;AACX,WAAO,IAAI,IAAI;AAAA,EACnB;AACA,SAAO;AACX;AAmBA,SAAS,WAAWE,QAAO,OAAO,UAAU,UAAU;AAClD,MAAI,YAAY,UAAU,QAAQ;AAClC,SAAO,WAAW,MAAMA,MAAK,GAAG,OAAO,WAAW,QAAQ;AAC9D;AAmCA,SAAS,MAAOC,IAAG,UAAU,UAAU;AACnC,SAAO,WAAWA,IAAG,UAAU,UAAU,QAAQ;AACrD;AAiBA,SAAS,YAAaA,IAAG,UAAU,UAAU;AACzC,SAAO,WAAWA,IAAG,GAAG,UAAU,QAAQ;AAC9C;AAyIA,SAAS,UAAW,MAAM,aAAa,UAAU,UAAU;AACvD,MAAI,UAAU,UAAU,KAAK,OAAO,gBAAgB,YAAY;AAC5D,eAAW;AACX,eAAW;AACX,kBAAc,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;AAAA,EAC9C;AACA,aAAWP,MAAK,YAAY,gBAAgB,CAAC;AAC7C,MAAI,YAAY,UAAU,QAAQ;AAElC,WAAS,MAAM,CAAC,GAAG,GAAG,OAAO;AACzB,cAAU,aAAa,GAAG,GAAG,EAAE;AAAA,EACnC,GAAG,SAAO,SAAS,KAAK,WAAW,CAAC;AACpC,SAAO,SAAS,cAAc;AAClC;AAwCA,SAAS,QAAQ,OAAO,UAAU;AAC9B,MAAI,QAAQ;AACZ,MAAI;AACJ,SAAO,aAAa,OAAO,CAAC,MAAM,WAAW;AACzC,cAAU,IAAI,EAAE,CAAC,QAAQ,SAAS;AAC9B,UAAI,QAAQ,MAAO,QAAO,OAAO,GAAG;AAEpC,UAAI,KAAK,SAAS,GAAG;AACjB,SAAC,MAAM,IAAI;AAAA,MACf,OAAO;AACH,iBAAS;AAAA,MACb;AACA,cAAQ;AACR,aAAO,MAAM,OAAO,CAAC,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,GAAG,MAAM,SAAS,OAAO,MAAM,CAAC;AACpC;AAiBA,SAAS,UAAU,IAAI;AACnB,SAAO,IAAI,SAAS;AAChB,YAAQ,GAAG,cAAc,IAAI,GAAG,IAAI;AAAA,EACxC;AACJ;AAoCA,SAAS,OAAO,MAAM,UAAU,UAAU;AACtC,aAAW,SAAS,QAAQ;AAC5B,MAAI,MAAM,UAAU,QAAQ;AAC5B,MAAI,QAAQ,UAAU,IAAI;AAC1B,MAAI,UAAU,CAAC;AAEf,WAAS,KAAK,QAAQ,MAAM;AACxB,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,cAAU;AACV,QAAI,QAAQ,MAAO;AACnB,UAAM,KAAK;AAAA,EACf;AAEA,WAAS,MAAM,KAAK,OAAO;AACvB,QAAI,IAAK,QAAO,SAAS,GAAG;AAC5B,QAAI,QAAQ,MAAO;AACnB,QAAI,CAAC,MAAO,QAAO,SAAS,MAAM,GAAG,OAAO;AAC5C,QAAI,IAAI;AAAA,EACZ;AAEA,SAAO,MAAM,KAAK;AACtB;AA0CA,SAAS,MAAM,MAAM,UAAU,UAAU;AACrC,QAAM,QAAQ,UAAU,IAAI;AAC5B,SAAO,SAAS,CAAC,OAAO,MAAM,CAAC,KAAK,UAAU,GAAI,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,QAAQ;AACvF;AA2DA,SAAS,UAAW,OAAO,UAAU;AACjC,aAAWA,MAAK,QAAQ;AACxB,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,SAAS,IAAI,MAAM,2DAA2D,CAAC;AACjH,MAAI,CAAC,MAAM,OAAQ,QAAO,SAAS;AACnC,MAAI,YAAY;AAEhB,WAAS,SAAS,MAAM;AACpB,QAAI,OAAO,UAAU,MAAM,WAAW,CAAC;AACvC,SAAK,GAAG,MAAM,SAAS,IAAI,CAAC;AAAA,EAChC;AAEA,WAAS,KAAK,QAAQ,MAAM;AACxB,QAAI,QAAQ,MAAO;AACnB,QAAI,OAAO,cAAc,MAAM,QAAQ;AACnC,aAAO,SAAS,KAAK,GAAG,IAAI;AAAA,IAChC;AACA,aAAS,IAAI;AAAA,EACjB;AAEA,WAAS,CAAC,CAAC;AACf;AAnqLA,IA0DI,mBACA,iBACA,aAUA,UAYA,gBAgLE,WAiIF,eAuFA,eAqJA,UA0HA,OAyCA,WAuBA,gBAwBA,aAqBA,iBAEE,gBA8UF,SACA,eACA,cACA,QA2KE,KAmlBF,UAgIA,YAwCA,eAmGA,UAyBA,gBAoJA,UA4BA,eA2BA,gBAgDA,KAgDA,YA0IA,MA0BA,aA4BA,cAuJA,SA0BA,cAyBA,eAiHA,UAyBA,eAuBA,gBA4CA,WAmDA,gBAmJA,KAqCA,kBA4QA,QAUA,UAEA,WAgWE,MAgOF,QAqPA,UAyBA,eAuBA,gBA6FE,eACA,kBA4XF,QA2BA,aA0BA,cAyKA,UA8WA,WA6EA,UA6HA,aA0CA;AA/sLJ;AAAA;AAAA;AA0DA,IAAI,oBAAoB,OAAO,mBAAmB,cAAc;AAChE,IAAI,kBAAkB,OAAO,iBAAiB,cAAc;AAC5D,IAAI,cAAc,OAAO,YAAY,YAAY,OAAO,QAAQ,aAAa;AAY7E,QAAI,mBAAmB;AACnB,iBAAW;AAAA,IACf,WAAW,iBAAiB;AACxB,iBAAW;AAAA,IACf,WAAW,aAAa;AACpB,iBAAW,QAAQ;AAAA,IACvB,OAAO;AACH,iBAAW;AAAA,IACf;AAEA,IAAI,iBAAiB,KAAK,QAAQ;AAgLlC,IAAM,YAAY,CAAC;AAiInB,IAAI,gBAAgB,CAAC,UAAU;AAC3B,aAAO,CAAC,KAAK,UAAU,aAAa;AAChC,mBAAWA,MAAK,QAAQ;AACxB,YAAI,SAAS,GAAG;AACZ,gBAAM,IAAI,WAAW,yCAAyC;AAAA,QAClE;AACA,YAAI,CAAC,KAAK;AACN,iBAAO,SAAS,IAAI;AAAA,QACxB;AACA,YAAIL,kBAAiB,GAAG,GAAG;AACvB,iBAAO,iBAAiB,KAAK,OAAO,UAAU,QAAQ;AAAA,QAC1D;AACA,YAAI,gBAAgB,GAAG,GAAG;AACtB,iBAAO,iBAAiB,IAAI,OAAO,aAAa,EAAE,GAAG,OAAO,UAAU,QAAQ;AAAA,QAClF;AACA,YAAI,WAAW,eAAe,GAAG;AACjC,YAAI,OAAO;AACX,YAAI,WAAW;AACf,YAAI,UAAU;AACd,YAAI,UAAU;AAEd,iBAAS,iBAAiB,KAAK,OAAO;AAClC,cAAI,SAAU;AACd,qBAAW;AACX,cAAI,KAAK;AACL,mBAAO;AACP,qBAAS,GAAG;AAAA,UAChB,WACS,QAAQ,OAAO;AACpB,mBAAO;AACP,uBAAW;AAAA,UACf,WACS,UAAU,aAAc,QAAQ,WAAW,GAAI;AACpD,mBAAO;AACP,mBAAO,SAAS,IAAI;AAAA,UACxB,WACS,CAAC,SAAS;AACf,sBAAU;AAAA,UACd;AAAA,QACJ;AAEA,iBAAS,YAAa;AAClB,oBAAU;AACV,iBAAO,UAAU,SAAS,CAAC,MAAM;AAC7B,gBAAI,OAAO,SAAS;AACpB,gBAAI,SAAS,MAAM;AACf,qBAAO;AACP,kBAAI,WAAW,GAAG;AACd,yBAAS,IAAI;AAAA,cACjB;AACA;AAAA,YACJ;AACA,uBAAW;AACX,qBAAS,KAAK,OAAO,KAAK,KAAK,SAAS,gBAAgB,CAAC;AAAA,UAC7D;AACA,oBAAU;AAAA,QACd;AAEA,kBAAU;AAAA,MACd;AAAA,IACJ;AA2BA,IAAI,gBAAgB,SAAS,aAAa,CAAC;AAqJ3C,IAAI,WAAW,SAAS,QAAQ,CAAC;AA0HjC,IAAI,QAAQ,SAAS,KAAK,CAAC;AAyC3B,IAAI,YAAY,YAAY,KAAK;AAuBjC,IAAI,iBAAiB,SAAS,cAAc,CAAC;AAwB7C,IAAI,cAAc,SAAS,WAAW,CAAC;AAqBvC,IAAI,kBAAkB,YAAY,WAAW;AAE7C,IAAM,iBAAiB,uBAAO,iBAAiB;AA8U/C,IAAI,UAAU;AACd,IAAI,gBAAgB;AACpB,IAAI,eAAe;AACnB,IAAI,SAAS;AA2Kb,IAAM,MAAN,MAAU;AAAA,MACN,cAAc;AACV,aAAK,OAAO,KAAK,OAAO;AACxB,aAAK,SAAS;AAAA,MAClB;AAAA,MAEA,WAAW,MAAM;AACb,YAAI,KAAK,KAAM,MAAK,KAAK,OAAO,KAAK;AAAA,YAChC,MAAK,OAAO,KAAK;AACtB,YAAI,KAAK,KAAM,MAAK,KAAK,OAAO,KAAK;AAAA,YAChC,MAAK,OAAO,KAAK;AAEtB,aAAK,OAAO,KAAK,OAAO;AACxB,aAAK,UAAU;AACf,eAAO;AAAA,MACX;AAAA,MAEA,QAAS;AACL,eAAM,KAAK,KAAM,MAAK,MAAM;AAC5B,eAAO;AAAA,MACX;AAAA,MAEA,YAAY,MAAM,SAAS;AACvB,gBAAQ,OAAO;AACf,gBAAQ,OAAO,KAAK;AACpB,YAAI,KAAK,KAAM,MAAK,KAAK,OAAO;AAAA,YAC3B,MAAK,OAAO;AACjB,aAAK,OAAO;AACZ,aAAK,UAAU;AAAA,MACnB;AAAA,MAEA,aAAa,MAAM,SAAS;AACxB,gBAAQ,OAAO,KAAK;AACpB,gBAAQ,OAAO;AACf,YAAI,KAAK,KAAM,MAAK,KAAK,OAAO;AAAA,YAC3B,MAAK,OAAO;AACjB,aAAK,OAAO;AACZ,aAAK,UAAU;AAAA,MACnB;AAAA,MAEA,QAAQ,MAAM;AACV,YAAI,KAAK,KAAM,MAAK,aAAa,KAAK,MAAM,IAAI;AAAA,YAC3C,YAAW,MAAM,IAAI;AAAA,MAC9B;AAAA,MAEA,KAAK,MAAM;AACP,YAAI,KAAK,KAAM,MAAK,YAAY,KAAK,MAAM,IAAI;AAAA,YAC1C,YAAW,MAAM,IAAI;AAAA,MAC9B;AAAA,MAEA,QAAQ;AACJ,eAAO,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI;AAAA,MACjD;AAAA,MAEA,MAAM;AACF,eAAO,KAAK,QAAQ,KAAK,WAAW,KAAK,IAAI;AAAA,MACjD;AAAA,MAEA,UAAU;AACN,eAAO,CAAC,GAAG,IAAI;AAAA,MACnB;AAAA,MAEA,EAAE,OAAO,QAAQ,IAAK;AAClB,YAAI,MAAM,KAAK;AACf,eAAO,KAAK;AACR,gBAAM,IAAI;AACV,gBAAM,IAAI;AAAA,QACd;AAAA,MACJ;AAAA,MAEA,OAAQ,QAAQ;AACZ,YAAI,OAAO,KAAK;AAChB,eAAM,MAAM;AACR,cAAI,EAAC,KAAI,IAAI;AACb,cAAI,OAAO,IAAI,GAAG;AACd,iBAAK,WAAW,IAAI;AAAA,UACxB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAkgBA,IAAI,WAAW,SAAS,QAAQ,CAAC;AAgIjC,IAAI,aAAa,SAAS,UAAU,CAAC;AAwCrC,IAAI,gBAAgB,SAAS,aAAa,CAAC;AAmG3C,IAAI,WAAW,SAAS,QAAQ,CAAC;AAyBjC,IAAI,iBAAiB,SAAS,cAAc,CAAC;AAoJ7C,IAAI,WAAW,SAAS,QAAQ,CAAC;AA4BjC,IAAI,gBAAgB,SAAS,aAAa,CAAC;AA2B3C,IAAI,iBAAiB,SAAS,cAAc,CAAC;AAgD7C,IAAI,MAAM,YAAY,KAAK;AAgD3B,IAAI,aAAa,SAAS,UAAU,CAAC;AA0IrC,IAAI,OAAO,SAAS,aAAa,CAAC;AA0BlC,IAAI,cAAc,SAAS,WAAW,CAAC;AA4BvC,IAAI,eAAe,SAAS,YAAY,CAAC;AAuJzC,IAAI,UAAU,SAAS,OAAO,CAAC;AA0B/B,IAAI,eAAe,SAAS,YAAY,CAAC;AAyBzC,IAAI,gBAAgB,SAAS,aAAa,CAAC;AAiH3C,IAAI,WAAW,SAAS,QAAQ,CAAC;AAyBjC,IAAI,gBAAgB,SAAS,aAAa,CAAC;AAuB3C,IAAI,iBAAiB,SAAS,cAAc,CAAC;AA4C7C,IAAI,YAAY,SAAS,SAAS,CAAC;AAmDnC,IAAI,iBAAiB,SAAS,cAAc,CAAC;AAmJ7C,IAAI,MAAM,YAAY,KAAK;AAqC3B,IAAI,mBAAmB,SAAS,gBAAgB,CAAC;AA8QjD,QAAI,aAAa;AACb,eAAS,QAAQ;AAAA,IACrB,WAAW,iBAAiB;AACxB,eAAS;AAAA,IACb,OAAO;AACH,eAAS;AAAA,IACb;AAEA,IAAI,WAAW,KAAK,MAAM;AAE1B,IAAI,YAAY,SAAS,CAAC,QAAQ,OAAO,aAAa;AAClD,UAAI,UAAU,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC;AAEzC,aAAO,OAAO,CAAC,MAAM,KAAK,WAAW;AACjC,kBAAU,IAAI,EAAE,CAAC,QAAQ,WAAW;AAChC,cAAI,OAAO,SAAS,GAAG;AACnB,aAAC,MAAM,IAAI;AAAA,UACf;AACA,kBAAQ,GAAG,IAAI;AACf,iBAAO,GAAG;AAAA,QACd,CAAC;AAAA,MACL,GAAG,SAAO,SAAS,KAAK,OAAO,CAAC;AAAA,IACpC,GAAG,CAAC;AAoVJ,IAAM,OAAN,MAAW;AAAA,MACP,cAAc;AACV,aAAK,OAAO,CAAC;AACb,aAAK,YAAY,OAAO;AAAA,MAC5B;AAAA,MAEA,IAAI,SAAS;AACT,eAAO,KAAK,KAAK;AAAA,MACrB;AAAA,MAEA,QAAS;AACL,aAAK,OAAO,CAAC;AACb,eAAO;AAAA,MACX;AAAA,MAEA,OAAOI,QAAO;AACV,YAAI;AAEJ,eAAOA,SAAQ,KAAK,QAAQ,KAAK,KAAKA,MAAK,GAAG,KAAK,KAAK,IAAE,OAAOA,MAAK,CAAC,CAAC,GAAG;AACvE,cAAI,IAAI,KAAK,KAAKA,MAAK;AACvB,eAAK,KAAKA,MAAK,IAAI,KAAK,KAAK,CAAC;AAC9B,eAAK,KAAK,CAAC,IAAI;AAEf,UAAAA,SAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,SAASA,QAAO;AACZ,YAAI;AAEJ,gBAAQ,IAAE,QAAQA,MAAK,KAAK,KAAK,KAAK,QAAQ;AAC1C,cAAI,IAAE,IAAI,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK,IAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG;AACjE,gBAAI,IAAE;AAAA,UACV;AAEA,cAAI,QAAQ,KAAK,KAAKA,MAAK,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG;AACzC;AAAA,UACJ;AAEA,cAAI,IAAI,KAAK,KAAKA,MAAK;AACvB,eAAK,KAAKA,MAAK,IAAI,KAAK,KAAK,CAAC;AAC9B,eAAK,KAAK,CAAC,IAAI;AAEf,UAAAA,SAAQ;AAAA,QACZ;AAAA,MACJ;AAAA,MAEA,KAAK,MAAM;AACP,aAAK,YAAY,EAAE,KAAK;AACxB,aAAK,KAAK,KAAK,IAAI;AACnB,aAAK,OAAO,KAAK,KAAK,SAAO,CAAC;AAAA,MAClC;AAAA,MAEA,QAAQ,MAAM;AACV,eAAO,KAAK,KAAK,KAAK,IAAI;AAAA,MAC9B;AAAA,MAEA,QAAQ;AACJ,YAAI,CAAC,GAAG,IAAI,KAAK;AAEjB,aAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,SAAO,CAAC;AAC3C,aAAK,KAAK,IAAI;AACd,aAAK,SAAS,CAAC;AAEf,eAAO;AAAA,MACX;AAAA,MAEA,UAAU;AACN,eAAO,CAAC,GAAG,IAAI;AAAA,MACnB;AAAA,MAEA,EAAE,OAAO,QAAQ,IAAK;AAClB,iBAASE,KAAI,GAAGA,KAAI,KAAK,KAAK,QAAQA,MAAK;AACvC,gBAAM,KAAK,KAAKA,EAAC,EAAE;AAAA,QACvB;AAAA,MACJ;AAAA,MAEA,OAAQ,QAAQ;AACZ,YAAI,IAAI;AACR,iBAASA,KAAI,GAAGA,KAAI,KAAK,KAAK,QAAQA,MAAK;AACvC,cAAI,CAAC,OAAO,KAAK,KAAKA,EAAC,CAAC,GAAG;AACvB,iBAAK,KAAK,CAAC,IAAI,KAAK,KAAKA,EAAC;AAC1B;AAAA,UACJ;AAAA,QACJ;AAEA,aAAK,KAAK,OAAO,CAAC;AAElB,iBAASA,KAAI,OAAO,KAAK,KAAK,SAAO,CAAC,GAAGA,MAAK,GAAGA,MAAK;AAClD,eAAK,SAASA,EAAC;AAAA,QACnB;AAEA,eAAO;AAAA,MACX;AAAA,IACJ;AAkIA,IAAI,SAAS,SAAS,MAAM,CAAC;AAqP7B,IAAI,WAAW,SAAS,QAAQ,CAAC;AAyBjC,IAAI,gBAAgB,SAAS,aAAa,CAAC;AAuB3C,IAAI,iBAAiB,SAAS,cAAc,CAAC;AA6F7C,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AA4XzB,IAAI,SAAS,SAAS,MAAM,CAAC;AA2B7B,IAAI,cAAc,SAAS,WAAW,CAAC;AA0BvC,IAAI,eAAe,SAAS,YAAY,CAAC;AAyKzC,IAAI,WAAW,SAAS,QAAQ,CAAC;AA8WjC,IAAI,YAAY,SAAS,OAAO;AA6EhC,IAAI,WAAW,SAAS,QAAQ,CAAC;AA6HjC,IAAI,cAAc,SAAS,SAAS;AA0CpC,IAAI,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,YAAY;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT;AAAA,MACA,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,MAAM;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,QAAQ;AAAA;AAAA,MAGR,KAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,KAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,MAAM;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,cAAc;AAAA,MACd,eAAe;AAAA,MACf,SAAS;AAAA,MACT,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA;AAAA;;;ACzzLA;AAAA,oCAAAO,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAW,YAChB,WAAW,QACX,OAAO,WAAW,YAClB,OAAO,OAAO,SAAS;AAExB,IAAAA,UAAS,WAAW,YACnBA,UAAS,MAAM,KACf,OAAO,aAAa,SACpB,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,mBAAmB;AAElC,IAAAA,UAAS,WAAW,YACnBA,UAAS,MAAM,KACf,OAAO,aAAa,SACpB,OAAO,OAAO,UAAU,cACxB,OAAO,OAAO,mBAAmB;AAElC,IAAAA,UAAS,SAAS,YACjBA,UAAS,SAAS,MAAM,KACxBA,UAAS,SAAS,MAAM;AAEzB,IAAAA,UAAS,YAAY,YACpBA,UAAS,OAAO,MAAM,KACtB,OAAO,OAAO,eAAe;AAE9B,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AC3BjB;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAI,OAAO,YAAY,eACnB,CAAC,QAAQ,WACT,QAAQ,QAAQ,QAAQ,KAAK,MAAM,KACnC,QAAQ,QAAQ,QAAQ,KAAK,MAAM,KAAK,QAAQ,QAAQ,QAAQ,OAAO,MAAM,GAAG;AAClF,MAAAA,QAAO,UAAU,EAAE,UAAUC,UAAS;AAAA,IACxC,OAAO;AACL,MAAAD,QAAO,UAAU;AAAA,IACnB;AAEA,aAASC,UAAS,IAAI,MAAM,MAAM,MAAM;AACtC,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,UAAU,wCAAwC;AAAA,MAC9D;AACA,UAAI,MAAM,UAAU;AACpB,UAAI,MAAMC;AACV,cAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,QAAQ,SAAS,EAAE;AAAA,QAC5B,KAAK;AACH,iBAAO,QAAQ,SAAS,SAAS,eAAe;AAC9C,eAAG,KAAK,MAAM,IAAI;AAAA,UACpB,CAAC;AAAA,QACH,KAAK;AACH,iBAAO,QAAQ,SAAS,SAAS,eAAe;AAC9C,eAAG,KAAK,MAAM,MAAM,IAAI;AAAA,UAC1B,CAAC;AAAA,QACH,KAAK;AACH,iBAAO,QAAQ,SAAS,SAAS,iBAAiB;AAChD,eAAG,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,UAChC,CAAC;AAAA,QACH;AACE,iBAAO,IAAI,MAAM,MAAM,CAAC;AACxB,UAAAA,KAAI;AACJ,iBAAOA,KAAI,KAAK,QAAQ;AACtB,iBAAKA,IAAG,IAAI,UAAUA,EAAC;AAAA,UACzB;AACA,iBAAO,QAAQ,SAAS,SAAS,YAAY;AAC3C,eAAG,MAAM,MAAM,IAAI;AAAA,UACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAAA;;;AC3CA;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,YAAW,CAAC,EAAE;AAElB,IAAAD,QAAO,UAAU,MAAM,WAAW,SAAU,KAAK;AAC/C,aAAOC,UAAS,KAAK,GAAG,KAAK;AAAA,IAC/B;AAAA;AAAA;;;ACJA;AAAA,wFAAAC,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU,QAAQ,QAAQ;AAAA;AAAA;;;ACAjC;AAAA,8DAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,SAAS,QAAQ,QAAQ;AAC7B,QAAIC,UAAS,OAAO;AAGpB,aAAS,UAAW,KAAK,KAAK;AAC5B,eAAS,OAAO,KAAK;AACnB,YAAI,GAAG,IAAI,IAAI,GAAG;AAAA,MACpB;AAAA,IACF;AACA,QAAIA,QAAO,QAAQA,QAAO,SAASA,QAAO,eAAeA,QAAO,iBAAiB;AAC/E,MAAAD,QAAO,UAAU;AAAA,IACnB,OAAO;AAEL,gBAAU,QAAQD,QAAO;AACzB,MAAAA,SAAQ,SAAS;AAAA,IACnB;AAEA,aAAS,WAAY,KAAK,kBAAkB,QAAQ;AAClD,aAAOE,QAAO,KAAK,kBAAkB,MAAM;AAAA,IAC7C;AAGA,cAAUA,SAAQ,UAAU;AAE5B,eAAW,OAAO,SAAU,KAAK,kBAAkB,QAAQ;AACzD,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,IAAI,UAAU,+BAA+B;AAAA,MACrD;AACA,aAAOA,QAAO,KAAK,kBAAkB,MAAM;AAAA,IAC7C;AAEA,eAAW,QAAQ,SAAU,MAAM,MAAM,UAAU;AACjD,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,UAAI,MAAMA,QAAO,IAAI;AACrB,UAAI,SAAS,QAAW;AACtB,YAAI,OAAO,aAAa,UAAU;AAChC,cAAI,KAAK,MAAM,QAAQ;AAAA,QACzB,OAAO;AACL,cAAI,KAAK,IAAI;AAAA,QACf;AAAA,MACF,OAAO;AACL,YAAI,KAAK,CAAC;AAAA,MACZ;AACA,aAAO;AAAA,IACT;AAEA,eAAW,cAAc,SAAU,MAAM;AACvC,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,aAAOA,QAAO,IAAI;AAAA,IACpB;AAEA,eAAW,kBAAkB,SAAU,MAAM;AAC3C,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,aAAO,OAAO,WAAW,IAAI;AAAA,IAC/B;AAAA;AAAA;;;AC7DA,IAAAC,gBAAA;AAAA,0CAAAC,UAAA;AAAA;AAwBA,aAAS,QAAQ,KAAK;AACpB,UAAI,MAAM,SAAS;AACjB,eAAO,MAAM,QAAQ,GAAG;AAAA,MAC1B;AACA,aAAOC,gBAAe,GAAG,MAAM;AAAA,IACjC;AACA,IAAAD,SAAQ,UAAU;AAElB,aAAS,UAAU,KAAK;AACtB,aAAO,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,YAAY;AAEpB,aAAS,OAAO,KAAK;AACnB,aAAO,QAAQ;AAAA,IACjB;AACA,IAAAA,SAAQ,SAAS;AAEjB,aAAS,kBAAkB,KAAK;AAC9B,aAAO,OAAO;AAAA,IAChB;AACA,IAAAA,SAAQ,oBAAoB;AAE5B,aAAS,SAAS,KAAK;AACrB,aAAO,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,WAAW;AAEnB,aAAS,SAAS,KAAK;AACrB,aAAO,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,WAAW;AAEnB,aAAS,SAAS,KAAK;AACrB,aAAO,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,WAAW;AAEnB,aAAS,YAAY,KAAK;AACxB,aAAO,QAAQ;AAAA,IACjB;AACA,IAAAA,SAAQ,cAAc;AAEtB,aAAS,SAAS,IAAI;AACpB,aAAOC,gBAAe,EAAE,MAAM;AAAA,IAChC;AACA,IAAAD,SAAQ,WAAW;AAEnB,aAASE,UAAS,KAAK;AACrB,aAAO,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAC5C;AACA,IAAAF,SAAQ,WAAWE;AAEnB,aAAS,OAAO,GAAG;AACjB,aAAOD,gBAAe,CAAC,MAAM;AAAA,IAC/B;AACA,IAAAD,SAAQ,SAAS;AAEjB,aAAS,QAAQ,GAAG;AAClB,aAAQC,gBAAe,CAAC,MAAM,oBAAoB,aAAa;AAAA,IACjE;AACA,IAAAD,SAAQ,UAAU;AAElB,aAAS,WAAW,KAAK;AACvB,aAAO,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,aAAa;AAErB,aAAS,YAAY,KAAK;AACxB,aAAO,QAAQ,QACR,OAAO,QAAQ,aACf,OAAO,QAAQ,YACf,OAAO,QAAQ,YACf,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,IACxB;AACA,IAAAA,SAAQ,cAAc;AAEtB,IAAAA,SAAQ,WAAW,QAAQ,QAAQ,EAAE,OAAO;AAE5C,aAASC,gBAAeE,IAAG;AACzB,aAAO,OAAO,UAAU,SAAS,KAAKA,EAAC;AAAA,IACzC;AAAA;AAAA;;;AC1GA;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,OAAO,OAAO,WAAW,YAAY;AAEvC,MAAAA,QAAO,UAAU,SAAS,SAAS,MAAM,WAAW;AAClD,YAAI,WAAW;AACb,eAAK,SAAS;AACd,eAAK,YAAY,OAAO,OAAO,UAAU,WAAW;AAAA,YAClD,aAAa;AAAA,cACX,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,cAAc;AAAA,YAChB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,OAAO;AAEL,MAAAA,QAAO,UAAU,SAAS,SAAS,MAAM,WAAW;AAClD,YAAI,WAAW;AACb,eAAK,SAAS;AACd,cAAI,WAAW,WAAY;AAAA,UAAC;AAC5B,mBAAS,YAAY,UAAU;AAC/B,eAAK,YAAY,IAAI,SAAS;AAC9B,eAAK,UAAU,cAAc;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC1BA;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI;AACE,MAAAC,QAAO,QAAQ,MAAM;AAEzB,UAAI,OAAOA,MAAK,aAAa,WAAY,OAAM;AAC/C,MAAAD,QAAO,UAAUC,MAAK;AAAA,IACxB,SAAS,GAAG;AAEV,MAAAD,QAAO,UAAU;AAAA,IACnB;AAPM,QAAAC;AAAA;AAAA;;;ACDN;AAAA,4FAAAC,UAAAC,SAAA;AAAA;AAEA,aAAS,gBAAgB,UAAU,aAAa;AAAE,UAAI,EAAE,oBAAoB,cAAc;AAAE,cAAM,IAAI,UAAU,mCAAmC;AAAA,MAAG;AAAA,IAAE;AAExJ,QAAIC,UAAS,sBAAuB;AACpC,QAAIC,QAAO,QAAQ,MAAM;AAEzB,aAAS,WAAW,KAAK,QAAQ,QAAQ;AACvC,UAAI,KAAK,QAAQ,MAAM;AAAA,IACzB;AAEA,IAAAF,QAAO,WAAU,WAAY;AAC3B,eAAS,aAAa;AACpB,wBAAgB,MAAM,UAAU;AAEhC,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAEA,iBAAW,UAAU,OAAO,SAAS,KAAK,GAAG;AAC3C,YAAI,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK;AAClC,YAAI,KAAK,SAAS,EAAG,MAAK,KAAK,OAAO;AAAA,YAAW,MAAK,OAAO;AAC7D,aAAK,OAAO;AACZ,UAAE,KAAK;AAAA,MACT;AAEA,iBAAW,UAAU,UAAU,SAAS,QAAQ,GAAG;AACjD,YAAI,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,KAAK;AACvC,YAAI,KAAK,WAAW,EAAG,MAAK,OAAO;AACnC,aAAK,OAAO;AACZ,UAAE,KAAK;AAAA,MACT;AAEA,iBAAW,UAAU,QAAQ,SAAS,QAAQ;AAC5C,YAAI,KAAK,WAAW,EAAG;AACvB,YAAI,MAAM,KAAK,KAAK;AACpB,YAAI,KAAK,WAAW,EAAG,MAAK,OAAO,KAAK,OAAO;AAAA,YAAU,MAAK,OAAO,KAAK,KAAK;AAC/E,UAAE,KAAK;AACP,eAAO;AAAA,MACT;AAEA,iBAAW,UAAU,QAAQ,SAAS,QAAQ;AAC5C,aAAK,OAAO,KAAK,OAAO;AACxB,aAAK,SAAS;AAAA,MAChB;AAEA,iBAAW,UAAU,OAAO,SAAS,KAAK,GAAG;AAC3C,YAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,YAAI,IAAI,KAAK;AACb,YAAI,MAAM,KAAK,EAAE;AACjB,eAAO,IAAI,EAAE,MAAM;AACjB,iBAAO,IAAI,EAAE;AAAA,QACf;AAAC,eAAO;AAAA,MACV;AAEA,iBAAW,UAAU,SAAS,SAASG,QAAOC,IAAG;AAC/C,YAAI,KAAK,WAAW,EAAG,QAAOH,QAAO,MAAM,CAAC;AAC5C,YAAI,MAAMA,QAAO,YAAYG,OAAM,CAAC;AACpC,YAAI,IAAI,KAAK;AACb,YAAIC,KAAI;AACR,eAAO,GAAG;AACR,qBAAW,EAAE,MAAM,KAAKA,EAAC;AACzB,UAAAA,MAAK,EAAE,KAAK;AACZ,cAAI,EAAE;AAAA,QACR;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,GAAE;AAEF,QAAIH,SAAQA,MAAK,WAAWA,MAAK,QAAQ,QAAQ;AAC/C,MAAAF,QAAO,QAAQ,UAAUE,MAAK,QAAQ,MAAM,IAAI,WAAY;AAC1D,YAAI,MAAMA,MAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC9C,eAAO,KAAK,YAAY,OAAO,MAAM;AAAA,MACvC;AAAA,IACF;AAAA;AAAA;;;AC7EA;AAAA,yFAAAI,UAAAC,SAAA;AAAA;AAIA,QAAI,MAAM;AAIV,aAAS,QAAQ,KAAK,IAAI;AACxB,UAAI,QAAQ;AAEZ,UAAI,oBAAoB,KAAK,kBAAkB,KAAK,eAAe;AACnE,UAAI,oBAAoB,KAAK,kBAAkB,KAAK,eAAe;AAEnE,UAAI,qBAAqB,mBAAmB;AAC1C,YAAI,IAAI;AACN,aAAG,GAAG;AAAA,QACR,WAAW,KAAK;AACd,cAAI,CAAC,KAAK,gBAAgB;AACxB,gBAAI,SAAS,aAAa,MAAM,GAAG;AAAA,UACrC,WAAW,CAAC,KAAK,eAAe,cAAc;AAC5C,iBAAK,eAAe,eAAe;AACnC,gBAAI,SAAS,aAAa,MAAM,GAAG;AAAA,UACrC;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAKA,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,YAAY;AAAA,MAClC;AAGA,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,YAAY;AAAA,MAClC;AAEA,WAAK,SAAS,OAAO,MAAM,SAAUC,MAAK;AACxC,YAAI,CAAC,MAAMA,MAAK;AACd,cAAI,CAAC,MAAM,gBAAgB;AACzB,gBAAI,SAAS,aAAa,OAAOA,IAAG;AAAA,UACtC,WAAW,CAAC,MAAM,eAAe,cAAc;AAC7C,kBAAM,eAAe,eAAe;AACpC,gBAAI,SAAS,aAAa,OAAOA,IAAG;AAAA,UACtC;AAAA,QACF,WAAW,IAAI;AACb,aAAGA,IAAG;AAAA,QACR;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAEA,aAAS,YAAY;AACnB,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,YAAY;AAChC,aAAK,eAAe,UAAU;AAC9B,aAAK,eAAe,QAAQ;AAC5B,aAAK,eAAe,aAAa;AAAA,MACnC;AAEA,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,YAAY;AAChC,aAAK,eAAe,QAAQ;AAC5B,aAAK,eAAe,SAAS;AAC7B,aAAK,eAAe,cAAc;AAClC,aAAK,eAAe,cAAc;AAClC,aAAK,eAAe,WAAW;AAC/B,aAAK,eAAe,eAAe;AAAA,MACrC;AAAA,IACF;AAEA,aAAS,YAAYC,OAAM,KAAK;AAC9B,MAAAA,MAAK,KAAK,SAAS,GAAG;AAAA,IACxB;AAEA,IAAAF,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACnFA;AAAA,wCAAAG,UAAAC,SAAA;AAAA;AAKA,IAAAA,QAAO,UAAU,QAAQ,MAAM,EAAE;AAAA;AAAA;;;ACLjC;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AA6BA,QAAI,MAAM;AAGV,IAAAA,QAAO,UAAUC;AAYjB,aAAS,cAAcC,QAAO;AAC5B,UAAI,QAAQ;AAEZ,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK,SAAS,WAAY;AACxB,uBAAe,OAAOA,MAAK;AAAA,MAC7B;AAAA,IACF;AAIA,QAAI,aAAa,CAAC,QAAQ,WAAW,CAAC,SAAS,OAAO,EAAE,QAAQ,QAAQ,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI;AAIvH,QAAIC;AAGJ,IAAAF,UAAS,gBAAgB;AAGzB,QAAIG,QAAO,OAAO,OAAO,eAAuB;AAChD,IAAAA,MAAK,WAAW;AAIhB,QAAI,eAAe;AAAA,MACjB,WAAW;AAAA,IACb;AAIA,QAAI,SAAS;AAKb,QAAIC,UAAS,sBAAuB;AACpC,QAAI,iBAAiB,OAAO,WAAW,cAAc,SAAS,OAAO,WAAW,cAAc,SAAS,OAAO,SAAS,cAAc,OAAO,CAAC,GAAG,cAAc,WAAY;AAAA,IAAC;AAC3K,aAAS,oBAAoBC,QAAO;AAClC,aAAOD,QAAO,KAAKC,MAAK;AAAA,IAC1B;AACA,aAAS,cAAc,KAAK;AAC1B,aAAOD,QAAO,SAAS,GAAG,KAAK,eAAe;AAAA,IAChD;AAIA,QAAI,cAAc;AAElB,IAAAD,MAAK,SAASH,WAAU,MAAM;AAE9B,aAAS,MAAM;AAAA,IAAC;AAEhB,aAAS,cAAc,SAAS,QAAQ;AACtC,MAAAE,UAASA,WAAU;AAEnB,gBAAU,WAAW,CAAC;AAOtB,UAAI,WAAW,kBAAkBA;AAIjC,WAAK,aAAa,CAAC,CAAC,QAAQ;AAE5B,UAAI,SAAU,MAAK,aAAa,KAAK,cAAc,CAAC,CAAC,QAAQ;AAK7D,UAAI,MAAM,QAAQ;AAClB,UAAI,cAAc,QAAQ;AAC1B,UAAI,aAAa,KAAK,aAAa,KAAK,KAAK;AAE7C,UAAI,OAAO,QAAQ,EAAG,MAAK,gBAAgB;AAAA,eAAa,aAAa,eAAe,gBAAgB,GAAI,MAAK,gBAAgB;AAAA,UAAiB,MAAK,gBAAgB;AAGnK,WAAK,gBAAgB,KAAK,MAAM,KAAK,aAAa;AAGlD,WAAK,cAAc;AAGnB,WAAK,YAAY;AAEjB,WAAK,SAAS;AAEd,WAAK,QAAQ;AAEb,WAAK,WAAW;AAGhB,WAAK,YAAY;AAKjB,UAAI,WAAW,QAAQ,kBAAkB;AACzC,WAAK,gBAAgB,CAAC;AAKtB,WAAK,kBAAkB,QAAQ,mBAAmB;AAKlD,WAAK,SAAS;AAGd,WAAK,UAAU;AAGf,WAAK,SAAS;AAMd,WAAK,OAAO;AAKZ,WAAK,mBAAmB;AAGxB,WAAK,UAAU,SAAU,IAAI;AAC3B,gBAAQ,QAAQ,EAAE;AAAA,MACpB;AAGA,WAAK,UAAU;AAGf,WAAK,WAAW;AAEhB,WAAK,kBAAkB;AACvB,WAAK,sBAAsB;AAI3B,WAAK,YAAY;AAIjB,WAAK,cAAc;AAGnB,WAAK,eAAe;AAGpB,WAAK,uBAAuB;AAI5B,WAAK,qBAAqB,IAAI,cAAc,IAAI;AAAA,IAClD;AAEA,kBAAc,UAAU,YAAY,SAAS,YAAY;AACvD,UAAI,UAAU,KAAK;AACnB,UAAI,MAAM,CAAC;AACX,aAAO,SAAS;AACd,YAAI,KAAK,OAAO;AAChB,kBAAU,QAAQ;AAAA,MACpB;AACA,aAAO;AAAA,IACT;AAEA,KAAC,WAAY;AACX,UAAI;AACF,eAAO,eAAe,cAAc,WAAW,UAAU;AAAA,UACvD,KAAK,aAAa,UAAU,WAAY;AACtC,mBAAO,KAAK,UAAU;AAAA,UACxB,GAAG,8EAAmF,SAAS;AAAA,QACjG,CAAC;AAAA,MACH,SAASI,IAAG;AAAA,MAAC;AAAA,IACf,GAAG;AAIH,QAAI;AACJ,QAAI,OAAO,WAAW,cAAc,OAAO,eAAe,OAAO,SAAS,UAAU,OAAO,WAAW,MAAM,YAAY;AACtH,wBAAkB,SAAS,UAAU,OAAO,WAAW;AACvD,aAAO,eAAeN,WAAU,OAAO,aAAa;AAAA,QAClD,OAAO,SAAU,QAAQ;AACvB,cAAI,gBAAgB,KAAK,MAAM,MAAM,EAAG,QAAO;AAC/C,cAAI,SAASA,UAAU,QAAO;AAE9B,iBAAO,UAAU,OAAO,0BAA0B;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,wBAAkB,SAAU,QAAQ;AAClC,eAAO,kBAAkB;AAAA,MAC3B;AAAA,IACF;AAEA,aAASA,UAAS,SAAS;AACzB,MAAAE,UAASA,WAAU;AASnB,UAAI,CAAC,gBAAgB,KAAKF,WAAU,IAAI,KAAK,EAAE,gBAAgBE,UAAS;AACtE,eAAO,IAAIF,UAAS,OAAO;AAAA,MAC7B;AAEA,WAAK,iBAAiB,IAAI,cAAc,SAAS,IAAI;AAGrD,WAAK,WAAW;AAEhB,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAE/D,YAAI,OAAO,QAAQ,WAAW,WAAY,MAAK,UAAU,QAAQ;AAEjE,YAAI,OAAO,QAAQ,YAAY,WAAY,MAAK,WAAW,QAAQ;AAEnE,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAAA,MACjE;AAEA,aAAO,KAAK,IAAI;AAAA,IAClB;AAGA,IAAAA,UAAS,UAAU,OAAO,WAAY;AACpC,WAAK,KAAK,SAAS,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAC3D;AAEA,aAAS,cAAc,QAAQ,IAAI;AACjC,UAAI,KAAK,IAAI,MAAM,iBAAiB;AAEpC,aAAO,KAAK,SAAS,EAAE;AACvB,UAAI,SAAS,IAAI,EAAE;AAAA,IACrB;AAKA,aAAS,WAAW,QAAQC,QAAOI,QAAO,IAAI;AAC5C,UAAI,QAAQ;AACZ,UAAI,KAAK;AAET,UAAIA,WAAU,MAAM;AAClB,aAAK,IAAI,UAAU,qCAAqC;AAAA,MAC1D,WAAW,OAAOA,WAAU,YAAYA,WAAU,UAAa,CAACJ,OAAM,YAAY;AAChF,aAAK,IAAI,UAAU,iCAAiC;AAAA,MACtD;AACA,UAAI,IAAI;AACN,eAAO,KAAK,SAAS,EAAE;AACvB,YAAI,SAAS,IAAI,EAAE;AACnB,gBAAQ;AAAA,MACV;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,UAAS,UAAU,QAAQ,SAAUK,QAAO,UAAU,IAAI;AACxD,UAAIJ,SAAQ,KAAK;AACjB,UAAI,MAAM;AACV,UAAI,QAAQ,CAACA,OAAM,cAAc,cAAcI,MAAK;AAEpD,UAAI,SAAS,CAACD,QAAO,SAASC,MAAK,GAAG;AACpC,QAAAA,SAAQ,oBAAoBA,MAAK;AAAA,MACnC;AAEA,UAAI,OAAO,aAAa,YAAY;AAClC,aAAK;AACL,mBAAW;AAAA,MACb;AAEA,UAAI,MAAO,YAAW;AAAA,eAAkB,CAAC,SAAU,YAAWJ,OAAM;AAEpE,UAAI,OAAO,OAAO,WAAY,MAAK;AAEnC,UAAIA,OAAM,MAAO,eAAc,MAAM,EAAE;AAAA,eAAW,SAAS,WAAW,MAAMA,QAAOI,QAAO,EAAE,GAAG;AAC7F,QAAAJ,OAAM;AACN,cAAM,cAAc,MAAMA,QAAO,OAAOI,QAAO,UAAU,EAAE;AAAA,MAC7D;AAEA,aAAO;AAAA,IACT;AAEA,IAAAL,UAAS,UAAU,OAAO,WAAY;AACpC,UAAIC,SAAQ,KAAK;AAEjB,MAAAA,OAAM;AAAA,IACR;AAEA,IAAAD,UAAS,UAAU,SAAS,WAAY;AACtC,UAAIC,SAAQ,KAAK;AAEjB,UAAIA,OAAM,QAAQ;AAChB,QAAAA,OAAM;AAEN,YAAI,CAACA,OAAM,WAAW,CAACA,OAAM,UAAU,CAACA,OAAM,oBAAoBA,OAAM,gBAAiB,aAAY,MAAMA,MAAK;AAAA,MAClH;AAAA,IACF;AAEA,IAAAD,UAAS,UAAU,qBAAqB,SAAS,mBAAmB,UAAU;AAE5E,UAAI,OAAO,aAAa,SAAU,YAAW,SAAS,YAAY;AAClE,UAAI,EAAE,CAAC,OAAO,QAAQ,SAAS,SAAS,UAAU,UAAU,QAAQ,SAAS,WAAW,YAAY,KAAK,EAAE,SAAS,WAAW,IAAI,YAAY,CAAC,IAAI,IAAK,OAAM,IAAI,UAAU,uBAAuB,QAAQ;AAC5M,WAAK,eAAe,kBAAkB;AACtC,aAAO;AAAA,IACT;AAEA,aAAS,YAAYC,QAAOI,QAAO,UAAU;AAC3C,UAAI,CAACJ,OAAM,cAAcA,OAAM,kBAAkB,SAAS,OAAOI,WAAU,UAAU;AACnF,QAAAA,SAAQD,QAAO,KAAKC,QAAO,QAAQ;AAAA,MACrC;AACA,aAAOA;AAAA,IACT;AAEA,WAAO,eAAeL,UAAS,WAAW,yBAAyB;AAAA;AAAA;AAAA;AAAA,MAIjE,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,IACF,CAAC;AAKD,aAAS,cAAc,QAAQC,QAAO,OAAOI,QAAO,UAAU,IAAI;AAChE,UAAI,CAAC,OAAO;AACV,YAAI,WAAW,YAAYJ,QAAOI,QAAO,QAAQ;AACjD,YAAIA,WAAU,UAAU;AACtB,kBAAQ;AACR,qBAAW;AACX,UAAAA,SAAQ;AAAA,QACV;AAAA,MACF;AACA,UAAI,MAAMJ,OAAM,aAAa,IAAII,OAAM;AAEvC,MAAAJ,OAAM,UAAU;AAEhB,UAAI,MAAMA,OAAM,SAASA,OAAM;AAE/B,UAAI,CAAC,IAAK,CAAAA,OAAM,YAAY;AAE5B,UAAIA,OAAM,WAAWA,OAAM,QAAQ;AACjC,YAAI,OAAOA,OAAM;AACjB,QAAAA,OAAM,sBAAsB;AAAA,UAC1B,OAAOI;AAAA,UACP;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AACA,YAAI,MAAM;AACR,eAAK,OAAOJ,OAAM;AAAA,QACpB,OAAO;AACL,UAAAA,OAAM,kBAAkBA,OAAM;AAAA,QAChC;AACA,QAAAA,OAAM,wBAAwB;AAAA,MAChC,OAAO;AACL,gBAAQ,QAAQA,QAAO,OAAO,KAAKI,QAAO,UAAU,EAAE;AAAA,MACxD;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,QAAQ,QAAQJ,QAAO,QAAQ,KAAKI,QAAO,UAAU,IAAI;AAChE,MAAAJ,OAAM,WAAW;AACjB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,OAAO;AACb,UAAI,OAAQ,QAAO,QAAQI,QAAOJ,OAAM,OAAO;AAAA,UAAO,QAAO,OAAOI,QAAO,UAAUJ,OAAM,OAAO;AAClG,MAAAA,OAAM,OAAO;AAAA,IACf;AAEA,aAAS,aAAa,QAAQA,QAAO,MAAM,IAAI,IAAI;AACjD,QAAEA,OAAM;AAER,UAAI,MAAM;AAGR,YAAI,SAAS,IAAI,EAAE;AAGnB,YAAI,SAAS,aAAa,QAAQA,MAAK;AACvC,eAAO,eAAe,eAAe;AACrC,eAAO,KAAK,SAAS,EAAE;AAAA,MACzB,OAAO;AAGL,WAAG,EAAE;AACL,eAAO,eAAe,eAAe;AACrC,eAAO,KAAK,SAAS,EAAE;AAGvB,oBAAY,QAAQA,MAAK;AAAA,MAC3B;AAAA,IACF;AAEA,aAAS,mBAAmBA,QAAO;AACjC,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAUA,OAAM;AACtB,MAAAA,OAAM,WAAW;AAAA,IACnB;AAEA,aAAS,QAAQ,QAAQ,IAAI;AAC3B,UAAIA,SAAQ,OAAO;AACnB,UAAI,OAAOA,OAAM;AACjB,UAAI,KAAKA,OAAM;AAEf,yBAAmBA,MAAK;AAExB,UAAI,GAAI,cAAa,QAAQA,QAAO,MAAM,IAAI,EAAE;AAAA,WAAO;AAErD,YAAIM,YAAW,WAAWN,MAAK;AAE/B,YAAI,CAACM,aAAY,CAACN,OAAM,UAAU,CAACA,OAAM,oBAAoBA,OAAM,iBAAiB;AAClF,sBAAY,QAAQA,MAAK;AAAA,QAC3B;AAEA,YAAI,MAAM;AAER,qBAAW,YAAY,QAAQA,QAAOM,WAAU,EAAE;AAAA,QAEpD,OAAO;AACL,qBAAW,QAAQN,QAAOM,WAAU,EAAE;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,WAAW,QAAQN,QAAOM,WAAU,IAAI;AAC/C,UAAI,CAACA,UAAU,cAAa,QAAQN,MAAK;AACzC,MAAAA,OAAM;AACN,SAAG;AACH,kBAAY,QAAQA,MAAK;AAAA,IAC3B;AAKA,aAAS,aAAa,QAAQA,QAAO;AACnC,UAAIA,OAAM,WAAW,KAAKA,OAAM,WAAW;AACzC,QAAAA,OAAM,YAAY;AAClB,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA,IACF;AAGA,aAAS,YAAY,QAAQA,QAAO;AAClC,MAAAA,OAAM,mBAAmB;AACzB,UAAI,QAAQA,OAAM;AAElB,UAAI,OAAO,WAAW,SAAS,MAAM,MAAM;AAEzC,YAAI,IAAIA,OAAM;AACd,YAAI,SAAS,IAAI,MAAM,CAAC;AACxB,YAAI,SAASA,OAAM;AACnB,eAAO,QAAQ;AAEf,YAAIO,SAAQ;AACZ,YAAI,aAAa;AACjB,eAAO,OAAO;AACZ,iBAAOA,MAAK,IAAI;AAChB,cAAI,CAAC,MAAM,MAAO,cAAa;AAC/B,kBAAQ,MAAM;AACd,UAAAA,UAAS;AAAA,QACX;AACA,eAAO,aAAa;AAEpB,gBAAQ,QAAQP,QAAO,MAAMA,OAAM,QAAQ,QAAQ,IAAI,OAAO,MAAM;AAIpE,QAAAA,OAAM;AACN,QAAAA,OAAM,sBAAsB;AAC5B,YAAI,OAAO,MAAM;AACf,UAAAA,OAAM,qBAAqB,OAAO;AAClC,iBAAO,OAAO;AAAA,QAChB,OAAO;AACL,UAAAA,OAAM,qBAAqB,IAAI,cAAcA,MAAK;AAAA,QACpD;AACA,QAAAA,OAAM,uBAAuB;AAAA,MAC/B,OAAO;AAEL,eAAO,OAAO;AACZ,cAAII,SAAQ,MAAM;AAClB,cAAI,WAAW,MAAM;AACrB,cAAI,KAAK,MAAM;AACf,cAAI,MAAMJ,OAAM,aAAa,IAAII,OAAM;AAEvC,kBAAQ,QAAQJ,QAAO,OAAO,KAAKI,QAAO,UAAU,EAAE;AACtD,kBAAQ,MAAM;AACd,UAAAJ,OAAM;AAKN,cAAIA,OAAM,SAAS;AACjB;AAAA,UACF;AAAA,QACF;AAEA,YAAI,UAAU,KAAM,CAAAA,OAAM,sBAAsB;AAAA,MAClD;AAEA,MAAAA,OAAM,kBAAkB;AACxB,MAAAA,OAAM,mBAAmB;AAAA,IAC3B;AAEA,IAAAD,UAAS,UAAU,SAAS,SAAUK,QAAO,UAAU,IAAI;AACzD,SAAG,IAAI,MAAM,6BAA6B,CAAC;AAAA,IAC7C;AAEA,IAAAL,UAAS,UAAU,UAAU;AAE7B,IAAAA,UAAS,UAAU,MAAM,SAAUK,QAAO,UAAU,IAAI;AACtD,UAAIJ,SAAQ,KAAK;AAEjB,UAAI,OAAOI,WAAU,YAAY;AAC/B,aAAKA;AACL,QAAAA,SAAQ;AACR,mBAAW;AAAA,MACb,WAAW,OAAO,aAAa,YAAY;AACzC,aAAK;AACL,mBAAW;AAAA,MACb;AAEA,UAAIA,WAAU,QAAQA,WAAU,OAAW,MAAK,MAAMA,QAAO,QAAQ;AAGrE,UAAIJ,OAAM,QAAQ;AAChB,QAAAA,OAAM,SAAS;AACf,aAAK,OAAO;AAAA,MACd;AAGA,UAAI,CAACA,OAAM,OAAQ,aAAY,MAAMA,QAAO,EAAE;AAAA,IAChD;AAEA,aAAS,WAAWA,QAAO;AACzB,aAAOA,OAAM,UAAUA,OAAM,WAAW,KAAKA,OAAM,oBAAoB,QAAQ,CAACA,OAAM,YAAY,CAACA,OAAM;AAAA,IAC3G;AACA,aAAS,UAAU,QAAQA,QAAO;AAChC,aAAO,OAAO,SAAU,KAAK;AAC3B,QAAAA,OAAM;AACN,YAAI,KAAK;AACP,iBAAO,KAAK,SAAS,GAAG;AAAA,QAC1B;AACA,QAAAA,OAAM,cAAc;AACpB,eAAO,KAAK,WAAW;AACvB,oBAAY,QAAQA,MAAK;AAAA,MAC3B,CAAC;AAAA,IACH;AACA,aAAS,UAAU,QAAQA,QAAO;AAChC,UAAI,CAACA,OAAM,eAAe,CAACA,OAAM,aAAa;AAC5C,YAAI,OAAO,OAAO,WAAW,YAAY;AACvC,UAAAA,OAAM;AACN,UAAAA,OAAM,cAAc;AACpB,cAAI,SAAS,WAAW,QAAQA,MAAK;AAAA,QACvC,OAAO;AACL,UAAAA,OAAM,cAAc;AACpB,iBAAO,KAAK,WAAW;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,YAAY,QAAQA,QAAO;AAClC,UAAI,OAAO,WAAWA,MAAK;AAC3B,UAAI,MAAM;AACR,kBAAU,QAAQA,MAAK;AACvB,YAAIA,OAAM,cAAc,GAAG;AACzB,UAAAA,OAAM,WAAW;AACjB,iBAAO,KAAK,QAAQ;AAAA,QACtB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,QAAQA,QAAO,IAAI;AACtC,MAAAA,OAAM,SAAS;AACf,kBAAY,QAAQA,MAAK;AACzB,UAAI,IAAI;AACN,YAAIA,OAAM,SAAU,KAAI,SAAS,EAAE;AAAA,YAAO,QAAO,KAAK,UAAU,EAAE;AAAA,MACpE;AACA,MAAAA,OAAM,QAAQ;AACd,aAAO,WAAW;AAAA,IACpB;AAEA,aAAS,eAAe,SAASA,QAAO,KAAK;AAC3C,UAAI,QAAQ,QAAQ;AACpB,cAAQ,QAAQ;AAChB,aAAO,OAAO;AACZ,YAAI,KAAK,MAAM;AACf,QAAAA,OAAM;AACN,WAAG,GAAG;AACN,gBAAQ,MAAM;AAAA,MAChB;AAGA,MAAAA,OAAM,mBAAmB,OAAO;AAAA,IAClC;AAEA,WAAO,eAAeD,UAAS,WAAW,aAAa;AAAA,MACrD,KAAK,WAAY;AACf,YAAI,KAAK,mBAAmB,QAAW;AACrC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,MACA,KAAK,SAAU,OAAO;AAGpB,YAAI,CAAC,KAAK,gBAAgB;AACxB;AAAA,QACF;AAIA,aAAK,eAAe,YAAY;AAAA,MAClC;AAAA,IACF,CAAC;AAED,IAAAA,UAAS,UAAU,UAAU,YAAY;AACzC,IAAAA,UAAS,UAAU,aAAa,YAAY;AAC5C,IAAAA,UAAS,UAAU,WAAW,SAAU,KAAK,IAAI;AAC/C,WAAK,IAAI;AACT,SAAG,GAAG;AAAA,IACR;AAAA;AAAA;;;AC5qBA;AAAA,+EAAAS,UAAAC,SAAA;AAAA;AA8BA,QAAI,MAAM;AAIV,QAAI,aAAa,OAAO,QAAQ,SAAU,KAAK;AAC7C,UAAIC,QAAO,CAAC;AACZ,eAAS,OAAO,KAAK;AACnB,QAAAA,MAAK,KAAK,GAAG;AAAA,MACf;AAAC,aAAOA;AAAA,IACV;AAGA,IAAAD,QAAO,UAAUE;AAGjB,QAAIC,QAAO,OAAO,OAAO,eAAuB;AAChD,IAAAA,MAAK,WAAW;AAGhB,QAAIC,YAAW;AACf,QAAIC,YAAW;AAEf,IAAAF,MAAK,SAASD,SAAQE,SAAQ;AAE9B;AAEM,aAAO,WAAWC,UAAS,SAAS;AACxC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAChC,iBAAS,KAAK,CAAC;AACnB,YAAI,CAACH,QAAO,UAAU,MAAM,EAAG,CAAAA,QAAO,UAAU,MAAM,IAAIG,UAAS,UAAU,MAAM;AAAA,MACrF;AAAA,IACF;AALM;AAEE;AADG;AAMX,aAASH,QAAO,SAAS;AACvB,UAAI,EAAE,gBAAgBA,SAAS,QAAO,IAAIA,QAAO,OAAO;AAExD,MAAAE,UAAS,KAAK,MAAM,OAAO;AAC3B,MAAAC,UAAS,KAAK,MAAM,OAAO;AAE3B,UAAI,WAAW,QAAQ,aAAa,MAAO,MAAK,WAAW;AAE3D,UAAI,WAAW,QAAQ,aAAa,MAAO,MAAK,WAAW;AAE3D,WAAK,gBAAgB;AACrB,UAAI,WAAW,QAAQ,kBAAkB,MAAO,MAAK,gBAAgB;AAErE,WAAK,KAAK,OAAO,KAAK;AAAA,IACxB;AAEA,WAAO,eAAeH,QAAO,WAAW,yBAAyB;AAAA;AAAA;AAAA;AAAA,MAI/D,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,IACF,CAAC;AAGD,aAAS,QAAQ;AAGf,UAAI,KAAK,iBAAiB,KAAK,eAAe,MAAO;AAIrD,UAAI,SAAS,SAAS,IAAI;AAAA,IAC5B;AAEA,aAAS,QAAQI,OAAM;AACrB,MAAAA,MAAK,IAAI;AAAA,IACX;AAEA,WAAO,eAAeJ,QAAO,WAAW,aAAa;AAAA,MACnD,KAAK,WAAY;AACf,YAAI,KAAK,mBAAmB,UAAa,KAAK,mBAAmB,QAAW;AAC1E,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,eAAe,aAAa,KAAK,eAAe;AAAA,MAC9D;AAAA,MACA,KAAK,SAAU,OAAO;AAGpB,YAAI,KAAK,mBAAmB,UAAa,KAAK,mBAAmB,QAAW;AAC1E;AAAA,QACF;AAIA,aAAK,eAAe,YAAY;AAChC,aAAK,eAAe,YAAY;AAAA,MAClC;AAAA,IACF,CAAC;AAED,IAAAA,QAAO,UAAU,WAAW,SAAU,KAAK,IAAI;AAC7C,WAAK,KAAK,IAAI;AACd,WAAK,IAAI;AAET,UAAI,SAAS,IAAI,GAAG;AAAA,IACtB;AAAA;AAAA;;;AClIA;AAAA,8EAAAK,UAAA;AAAA;AAyBA,QAAIC,UAAS,sBAAuB;AAGpC,QAAI,aAAaA,QAAO,cAAc,SAAU,UAAU;AACxD,iBAAW,KAAK;AAChB,cAAQ,YAAY,SAAS,YAAY,GAAG;AAAA,QAC1C,KAAK;AAAA,QAAM,KAAK;AAAA,QAAO,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAO,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAU,KAAK;AAAA,QAAW,KAAK;AACxI,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEA,aAAS,mBAAmB,KAAK;AAC/B,UAAI,CAAC,IAAK,QAAO;AACjB,UAAI;AACJ,aAAO,MAAM;AACX,gBAAQ,KAAK;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT;AACE,gBAAI,QAAS;AACb,mBAAO,KAAK,KAAK,YAAY;AAC7B,sBAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAIA,aAAS,kBAAkB,KAAK;AAC9B,UAAI,OAAO,mBAAmB,GAAG;AACjC,UAAI,OAAO,SAAS,aAAaA,QAAO,eAAe,cAAc,CAAC,WAAW,GAAG,GAAI,OAAM,IAAI,MAAM,uBAAuB,GAAG;AAClI,aAAO,QAAQ;AAAA,IACjB;AAKA,IAAAD,SAAQ,gBAAgBE;AACxB,aAASA,eAAc,UAAU;AAC/B,WAAK,WAAW,kBAAkB,QAAQ;AAC1C,UAAI;AACJ,cAAQ,KAAK,UAAU;AAAA,QACrB,KAAK;AACH,eAAK,OAAO;AACZ,eAAK,MAAM;AACX,eAAK;AACL;AAAA,QACF,KAAK;AACH,eAAK,WAAW;AAChB,eAAK;AACL;AAAA,QACF,KAAK;AACH,eAAK,OAAO;AACZ,eAAK,MAAM;AACX,eAAK;AACL;AAAA,QACF;AACE,eAAK,QAAQ;AACb,eAAK,MAAM;AACX;AAAA,MACJ;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,WAAWD,QAAO,YAAY,EAAE;AAAA,IACvC;AAEA,IAAAC,eAAc,UAAU,QAAQ,SAAU,KAAK;AAC7C,UAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,UAAI;AACJ,UAAIC;AACJ,UAAI,KAAK,UAAU;AACjB,YAAI,KAAK,SAAS,GAAG;AACrB,YAAI,MAAM,OAAW,QAAO;AAC5B,QAAAA,KAAI,KAAK;AACT,aAAK,WAAW;AAAA,MAClB,OAAO;AACL,QAAAA,KAAI;AAAA,MACN;AACA,UAAIA,KAAI,IAAI,OAAQ,QAAO,IAAI,IAAI,KAAK,KAAK,KAAKA,EAAC,IAAI,KAAK,KAAK,KAAKA,EAAC;AACvE,aAAO,KAAK;AAAA,IACd;AAEA,IAAAD,eAAc,UAAU,MAAM;AAG9B,IAAAA,eAAc,UAAU,OAAO;AAG/B,IAAAA,eAAc,UAAU,WAAW,SAAU,KAAK;AAChD,UAAI,KAAK,YAAY,IAAI,QAAQ;AAC/B,YAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAG,KAAK,QAAQ;AACxE,eAAO,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAAA,MAChE;AACA,UAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAG,IAAI,MAAM;AACrE,WAAK,YAAY,IAAI;AAAA,IACvB;AAIA,aAAS,cAAc,MAAM;AAC3B,UAAI,QAAQ,IAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,EAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,GAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,GAAM,QAAO;AAC3I,aAAO,QAAQ,MAAM,IAAO,KAAK;AAAA,IACnC;AAKA,aAAS,oBAAoBE,OAAM,KAAKD,IAAG;AACzC,UAAI,IAAI,IAAI,SAAS;AACrB,UAAI,IAAIA,GAAG,QAAO;AAClB,UAAI,KAAK,cAAc,IAAI,CAAC,CAAC;AAC7B,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,EAAG,CAAAC,MAAK,WAAW,KAAK;AACjC,eAAO;AAAA,MACT;AACA,UAAI,EAAE,IAAID,MAAK,OAAO,GAAI,QAAO;AACjC,WAAK,cAAc,IAAI,CAAC,CAAC;AACzB,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,EAAG,CAAAC,MAAK,WAAW,KAAK;AACjC,eAAO;AAAA,MACT;AACA,UAAI,EAAE,IAAID,MAAK,OAAO,GAAI,QAAO;AACjC,WAAK,cAAc,IAAI,CAAC,CAAC;AACzB,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,GAAG;AACV,cAAI,OAAO,EAAG,MAAK;AAAA,cAAO,CAAAC,MAAK,WAAW,KAAK;AAAA,QACjD;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAUA,aAAS,oBAAoBA,OAAM,KAAK,GAAG;AACzC,WAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,QAAAA,MAAK,WAAW;AAChB,eAAO;AAAA,MACT;AACA,UAAIA,MAAK,WAAW,KAAK,IAAI,SAAS,GAAG;AACvC,aAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,UAAAA,MAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AACA,YAAIA,MAAK,WAAW,KAAK,IAAI,SAAS,GAAG;AACvC,eAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,YAAAA,MAAK,WAAW;AAChB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,aAAS,aAAa,KAAK;AACzB,UAAI,IAAI,KAAK,YAAY,KAAK;AAC9B,UAAI,IAAI,oBAAoB,MAAM,KAAK,CAAC;AACxC,UAAI,MAAM,OAAW,QAAO;AAC5B,UAAI,KAAK,YAAY,IAAI,QAAQ;AAC/B,YAAI,KAAK,KAAK,UAAU,GAAG,GAAG,KAAK,QAAQ;AAC3C,eAAO,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAAA,MAChE;AACA,UAAI,KAAK,KAAK,UAAU,GAAG,GAAG,IAAI,MAAM;AACxC,WAAK,YAAY,IAAI;AAAA,IACvB;AAKA,aAAS,SAAS,KAAKD,IAAG;AACxB,UAAI,QAAQ,oBAAoB,MAAM,KAAKA,EAAC;AAC5C,UAAI,CAAC,KAAK,SAAU,QAAO,IAAI,SAAS,QAAQA,EAAC;AACjD,WAAK,YAAY;AACjB,UAAI,MAAM,IAAI,UAAU,QAAQ,KAAK;AACrC,UAAI,KAAK,KAAK,UAAU,GAAG,GAAG;AAC9B,aAAO,IAAI,SAAS,QAAQA,IAAG,GAAG;AAAA,IACpC;AAIA,aAAS,QAAQ,KAAK;AACpB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,SAAU,QAAO,IAAI;AAC9B,aAAO;AAAA,IACT;AAMA,aAAS,UAAU,KAAKA,IAAG;AACzB,WAAK,IAAI,SAASA,MAAK,MAAM,GAAG;AAC9B,YAAI,IAAI,IAAI,SAAS,WAAWA,EAAC;AACjC,YAAI,GAAG;AACL,cAAIE,KAAI,EAAE,WAAW,EAAE,SAAS,CAAC;AACjC,cAAIA,MAAK,SAAUA,MAAK,OAAQ;AAC9B,iBAAK,WAAW;AAChB,iBAAK,YAAY;AACjB,iBAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,iBAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,mBAAO,EAAE,MAAM,GAAG,EAAE;AAAA,UACtB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,aAAO,IAAI,SAAS,WAAWF,IAAG,IAAI,SAAS,CAAC;AAAA,IAClD;AAIA,aAAS,SAAS,KAAK;AACrB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,UAAU;AACjB,YAAI,MAAM,KAAK,YAAY,KAAK;AAChC,eAAO,IAAI,KAAK,SAAS,SAAS,WAAW,GAAG,GAAG;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AAEA,aAAS,WAAW,KAAKA,IAAG;AAC1B,UAAIG,MAAK,IAAI,SAASH,MAAK;AAC3B,UAAIG,OAAM,EAAG,QAAO,IAAI,SAAS,UAAUH,EAAC;AAC5C,WAAK,WAAW,IAAIG;AACpB,WAAK,YAAY;AACjB,UAAIA,OAAM,GAAG;AACX,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AAAA,MACvC,OAAO;AACL,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AAAA,MACvC;AACA,aAAO,IAAI,SAAS,UAAUH,IAAG,IAAI,SAASG,EAAC;AAAA,IACjD;AAEA,aAAS,UAAU,KAAK;AACtB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,SAAU,QAAO,IAAI,KAAK,SAAS,SAAS,UAAU,GAAG,IAAI,KAAK,QAAQ;AACnF,aAAO;AAAA,IACT;AAGA,aAAS,YAAY,KAAK;AACxB,aAAO,IAAI,SAAS,KAAK,QAAQ;AAAA,IACnC;AAEA,aAAS,UAAU,KAAK;AACtB,aAAO,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAAA,IAC/C;AAAA;AAAA;;;ACvSA;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AAyBA,QAAI,MAAM;AAGV,IAAAA,QAAO,UAAUC;AAGjB,QAAI,UAAU;AAId,QAAIC;AAGJ,IAAAD,UAAS,gBAAgB;AAGzB,QAAI,KAAK,QAAQ,QAAQ,EAAE;AAE3B,QAAI,kBAAkB,SAAU,SAAS,MAAM;AAC7C,aAAO,QAAQ,UAAU,IAAI,EAAE;AAAA,IACjC;AAIA,QAAI,SAAS;AAKb,QAAIE,UAAS,sBAAuB;AACpC,QAAI,iBAAiB,OAAO,WAAW,cAAc,SAAS,OAAO,WAAW,cAAc,SAAS,OAAO,SAAS,cAAc,OAAO,CAAC,GAAG,cAAc,WAAY;AAAA,IAAC;AAC3K,aAAS,oBAAoBC,QAAO;AAClC,aAAOD,QAAO,KAAKC,MAAK;AAAA,IAC1B;AACA,aAAS,cAAc,KAAK;AAC1B,aAAOD,QAAO,SAAS,GAAG,KAAK,eAAe;AAAA,IAChD;AAKA,QAAIE,QAAO,OAAO,OAAO,eAAuB;AAChD,IAAAA,MAAK,WAAW;AAIhB,QAAI,YAAY,QAAQ,MAAM;AAC9B,QAAI,QAAQ;AACZ,QAAI,aAAa,UAAU,UAAU;AACnC,cAAQ,UAAU,SAAS,QAAQ;AAAA,IACrC,OAAO;AACL,cAAQ,WAAY;AAAA,MAAC;AAAA,IACvB;AAGA,QAAI,aAAa;AACjB,QAAI,cAAc;AAClB,QAAIC;AAEJ,IAAAD,MAAK,SAASJ,WAAU,MAAM;AAE9B,QAAI,eAAe,CAAC,SAAS,SAAS,WAAW,SAAS,QAAQ;AAElE,aAAS,gBAAgB,SAAS,OAAO,IAAI;AAG3C,UAAI,OAAO,QAAQ,oBAAoB,WAAY,QAAO,QAAQ,gBAAgB,OAAO,EAAE;AAM3F,UAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,QAAQ,KAAK,EAAG,SAAQ,GAAG,OAAO,EAAE;AAAA,eAAW,QAAQ,QAAQ,QAAQ,KAAK,CAAC,EAAG,SAAQ,QAAQ,KAAK,EAAE,QAAQ,EAAE;AAAA,UAAO,SAAQ,QAAQ,KAAK,IAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,CAAC;AAAA,IAC/M;AAEA,aAAS,cAAc,SAAS,QAAQ;AACtC,MAAAC,UAASA,WAAU;AAEnB,gBAAU,WAAW,CAAC;AAOtB,UAAI,WAAW,kBAAkBA;AAIjC,WAAK,aAAa,CAAC,CAAC,QAAQ;AAE5B,UAAI,SAAU,MAAK,aAAa,KAAK,cAAc,CAAC,CAAC,QAAQ;AAI7D,UAAI,MAAM,QAAQ;AAClB,UAAI,cAAc,QAAQ;AAC1B,UAAI,aAAa,KAAK,aAAa,KAAK,KAAK;AAE7C,UAAI,OAAO,QAAQ,EAAG,MAAK,gBAAgB;AAAA,eAAa,aAAa,eAAe,gBAAgB,GAAI,MAAK,gBAAgB;AAAA,UAAiB,MAAK,gBAAgB;AAGnK,WAAK,gBAAgB,KAAK,MAAM,KAAK,aAAa;AAKlD,WAAK,SAAS,IAAI,WAAW;AAC7B,WAAK,SAAS;AACd,WAAK,QAAQ;AACb,WAAK,aAAa;AAClB,WAAK,UAAU;AACf,WAAK,QAAQ;AACb,WAAK,aAAa;AAClB,WAAK,UAAU;AAMf,WAAK,OAAO;AAIZ,WAAK,eAAe;AACpB,WAAK,kBAAkB;AACvB,WAAK,oBAAoB;AACzB,WAAK,kBAAkB;AAGvB,WAAK,YAAY;AAKjB,WAAK,kBAAkB,QAAQ,mBAAmB;AAGlD,WAAK,aAAa;AAGlB,WAAK,cAAc;AAEnB,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,UAAI,QAAQ,UAAU;AACpB,YAAI,CAACI,eAAe,CAAAA,iBAAgB,yBAA2B;AAC/D,aAAK,UAAU,IAAIA,eAAc,QAAQ,QAAQ;AACjD,aAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,IACF;AAEA,aAASL,UAAS,SAAS;AACzB,MAAAC,UAASA,WAAU;AAEnB,UAAI,EAAE,gBAAgBD,WAAW,QAAO,IAAIA,UAAS,OAAO;AAE5D,WAAK,iBAAiB,IAAI,cAAc,SAAS,IAAI;AAGrD,WAAK,WAAW;AAEhB,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,SAAS,WAAY,MAAK,QAAQ,QAAQ;AAE7D,YAAI,OAAO,QAAQ,YAAY,WAAY,MAAK,WAAW,QAAQ;AAAA,MACrE;AAEA,aAAO,KAAK,IAAI;AAAA,IAClB;AAEA,WAAO,eAAeA,UAAS,WAAW,aAAa;AAAA,MACrD,KAAK,WAAY;AACf,YAAI,KAAK,mBAAmB,QAAW;AACrC,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,MACA,KAAK,SAAU,OAAO;AAGpB,YAAI,CAAC,KAAK,gBAAgB;AACxB;AAAA,QACF;AAIA,aAAK,eAAe,YAAY;AAAA,MAClC;AAAA,IACF,CAAC;AAED,IAAAA,UAAS,UAAU,UAAU,YAAY;AACzC,IAAAA,UAAS,UAAU,aAAa,YAAY;AAC5C,IAAAA,UAAS,UAAU,WAAW,SAAU,KAAK,IAAI;AAC/C,WAAK,KAAK,IAAI;AACd,SAAG,GAAG;AAAA,IACR;AAMA,IAAAA,UAAS,UAAU,OAAO,SAAUG,QAAO,UAAU;AACnD,UAAIG,SAAQ,KAAK;AACjB,UAAI;AAEJ,UAAI,CAACA,OAAM,YAAY;AACrB,YAAI,OAAOH,WAAU,UAAU;AAC7B,qBAAW,YAAYG,OAAM;AAC7B,cAAI,aAAaA,OAAM,UAAU;AAC/B,YAAAH,SAAQD,QAAO,KAAKC,QAAO,QAAQ;AACnC,uBAAW;AAAA,UACb;AACA,2BAAiB;AAAA,QACnB;AAAA,MACF,OAAO;AACL,yBAAiB;AAAA,MACnB;AAEA,aAAO,iBAAiB,MAAMA,QAAO,UAAU,OAAO,cAAc;AAAA,IACtE;AAGA,IAAAH,UAAS,UAAU,UAAU,SAAUG,QAAO;AAC5C,aAAO,iBAAiB,MAAMA,QAAO,MAAM,MAAM,KAAK;AAAA,IACxD;AAEA,aAAS,iBAAiB,QAAQA,QAAO,UAAU,YAAY,gBAAgB;AAC7E,UAAIG,SAAQ,OAAO;AACnB,UAAIH,WAAU,MAAM;AAClB,QAAAG,OAAM,UAAU;AAChB,mBAAW,QAAQA,MAAK;AAAA,MAC1B,OAAO;AACL,YAAI;AACJ,YAAI,CAAC,eAAgB,MAAK,aAAaA,QAAOH,MAAK;AACnD,YAAI,IAAI;AACN,iBAAO,KAAK,SAAS,EAAE;AAAA,QACzB,WAAWG,OAAM,cAAcH,UAASA,OAAM,SAAS,GAAG;AACxD,cAAI,OAAOA,WAAU,YAAY,CAACG,OAAM,cAAc,OAAO,eAAeH,MAAK,MAAMD,QAAO,WAAW;AACvG,YAAAC,SAAQ,oBAAoBA,MAAK;AAAA,UACnC;AAEA,cAAI,YAAY;AACd,gBAAIG,OAAM,WAAY,QAAO,KAAK,SAAS,IAAI,MAAM,kCAAkC,CAAC;AAAA,gBAAO,UAAS,QAAQA,QAAOH,QAAO,IAAI;AAAA,UACpI,WAAWG,OAAM,OAAO;AACtB,mBAAO,KAAK,SAAS,IAAI,MAAM,yBAAyB,CAAC;AAAA,UAC3D,OAAO;AACL,YAAAA,OAAM,UAAU;AAChB,gBAAIA,OAAM,WAAW,CAAC,UAAU;AAC9B,cAAAH,SAAQG,OAAM,QAAQ,MAAMH,MAAK;AACjC,kBAAIG,OAAM,cAAcH,OAAM,WAAW,EAAG,UAAS,QAAQG,QAAOH,QAAO,KAAK;AAAA,kBAAO,eAAc,QAAQG,MAAK;AAAA,YACpH,OAAO;AACL,uBAAS,QAAQA,QAAOH,QAAO,KAAK;AAAA,YACtC;AAAA,UACF;AAAA,QACF,WAAW,CAAC,YAAY;AACtB,UAAAG,OAAM,UAAU;AAAA,QAClB;AAAA,MACF;AAEA,aAAO,aAAaA,MAAK;AAAA,IAC3B;AAEA,aAAS,SAAS,QAAQA,QAAOH,QAAO,YAAY;AAClD,UAAIG,OAAM,WAAWA,OAAM,WAAW,KAAK,CAACA,OAAM,MAAM;AACtD,eAAO,KAAK,QAAQH,MAAK;AACzB,eAAO,KAAK,CAAC;AAAA,MACf,OAAO;AAEL,QAAAG,OAAM,UAAUA,OAAM,aAAa,IAAIH,OAAM;AAC7C,YAAI,WAAY,CAAAG,OAAM,OAAO,QAAQH,MAAK;AAAA,YAAO,CAAAG,OAAM,OAAO,KAAKH,MAAK;AAExE,YAAIG,OAAM,aAAc,cAAa,MAAM;AAAA,MAC7C;AACA,oBAAc,QAAQA,MAAK;AAAA,IAC7B;AAEA,aAAS,aAAaA,QAAOH,QAAO;AAClC,UAAI;AACJ,UAAI,CAAC,cAAcA,MAAK,KAAK,OAAOA,WAAU,YAAYA,WAAU,UAAa,CAACG,OAAM,YAAY;AAClG,aAAK,IAAI,UAAU,iCAAiC;AAAA,MACtD;AACA,aAAO;AAAA,IACT;AASA,aAAS,aAAaA,QAAO;AAC3B,aAAO,CAACA,OAAM,UAAUA,OAAM,gBAAgBA,OAAM,SAASA,OAAM,iBAAiBA,OAAM,WAAW;AAAA,IACvG;AAEA,IAAAN,UAAS,UAAU,WAAW,WAAY;AACxC,aAAO,KAAK,eAAe,YAAY;AAAA,IACzC;AAGA,IAAAA,UAAS,UAAU,cAAc,SAAU,KAAK;AAC9C,UAAI,CAACK,eAAe,CAAAA,iBAAgB,yBAA2B;AAC/D,WAAK,eAAe,UAAU,IAAIA,eAAc,GAAG;AACnD,WAAK,eAAe,WAAW;AAC/B,aAAO;AAAA,IACT;AAGA,QAAI,UAAU;AACd,aAAS,wBAAwBE,IAAG;AAClC,UAAIA,MAAK,SAAS;AAChB,QAAAA,KAAI;AAAA,MACN,OAAO;AAGL,QAAAA;AACA,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA;AAAA,MACF;AACA,aAAOA;AAAA,IACT;AAIA,aAAS,cAAcA,IAAGD,QAAO;AAC/B,UAAIC,MAAK,KAAKD,OAAM,WAAW,KAAKA,OAAM,MAAO,QAAO;AACxD,UAAIA,OAAM,WAAY,QAAO;AAC7B,UAAIC,OAAMA,IAAG;AAEX,YAAID,OAAM,WAAWA,OAAM,OAAQ,QAAOA,OAAM,OAAO,KAAK,KAAK;AAAA,YAAY,QAAOA,OAAM;AAAA,MAC5F;AAEA,UAAIC,KAAID,OAAM,cAAe,CAAAA,OAAM,gBAAgB,wBAAwBC,EAAC;AAC5E,UAAIA,MAAKD,OAAM,OAAQ,QAAOC;AAE9B,UAAI,CAACD,OAAM,OAAO;AAChB,QAAAA,OAAM,eAAe;AACrB,eAAO;AAAA,MACT;AACA,aAAOA,OAAM;AAAA,IACf;AAGA,IAAAN,UAAS,UAAU,OAAO,SAAUO,IAAG;AACrC,YAAM,QAAQA,EAAC;AACf,MAAAA,KAAI,SAASA,IAAG,EAAE;AAClB,UAAID,SAAQ,KAAK;AACjB,UAAI,QAAQC;AAEZ,UAAIA,OAAM,EAAG,CAAAD,OAAM,kBAAkB;AAKrC,UAAIC,OAAM,KAAKD,OAAM,iBAAiBA,OAAM,UAAUA,OAAM,iBAAiBA,OAAM,QAAQ;AACzF,cAAM,sBAAsBA,OAAM,QAAQA,OAAM,KAAK;AACrD,YAAIA,OAAM,WAAW,KAAKA,OAAM,MAAO,aAAY,IAAI;AAAA,YAAO,cAAa,IAAI;AAC/E,eAAO;AAAA,MACT;AAEA,MAAAC,KAAI,cAAcA,IAAGD,MAAK;AAG1B,UAAIC,OAAM,KAAKD,OAAM,OAAO;AAC1B,YAAIA,OAAM,WAAW,EAAG,aAAY,IAAI;AACxC,eAAO;AAAA,MACT;AAyBA,UAAI,SAASA,OAAM;AACnB,YAAM,iBAAiB,MAAM;AAG7B,UAAIA,OAAM,WAAW,KAAKA,OAAM,SAASC,KAAID,OAAM,eAAe;AAChE,iBAAS;AACT,cAAM,8BAA8B,MAAM;AAAA,MAC5C;AAIA,UAAIA,OAAM,SAASA,OAAM,SAAS;AAChC,iBAAS;AACT,cAAM,oBAAoB,MAAM;AAAA,MAClC,WAAW,QAAQ;AACjB,cAAM,SAAS;AACf,QAAAA,OAAM,UAAU;AAChB,QAAAA,OAAM,OAAO;AAEb,YAAIA,OAAM,WAAW,EAAG,CAAAA,OAAM,eAAe;AAE7C,aAAK,MAAMA,OAAM,aAAa;AAC9B,QAAAA,OAAM,OAAO;AAGb,YAAI,CAACA,OAAM,QAAS,CAAAC,KAAI,cAAc,OAAOD,MAAK;AAAA,MACpD;AAEA,UAAI;AACJ,UAAIC,KAAI,EAAG,OAAM,SAASA,IAAGD,MAAK;AAAA,UAAO,OAAM;AAE/C,UAAI,QAAQ,MAAM;AAChB,QAAAA,OAAM,eAAe;AACrB,QAAAC,KAAI;AAAA,MACN,OAAO;AACL,QAAAD,OAAM,UAAUC;AAAA,MAClB;AAEA,UAAID,OAAM,WAAW,GAAG;AAGtB,YAAI,CAACA,OAAM,MAAO,CAAAA,OAAM,eAAe;AAGvC,YAAI,UAAUC,MAAKD,OAAM,MAAO,aAAY,IAAI;AAAA,MAClD;AAEA,UAAI,QAAQ,KAAM,MAAK,KAAK,QAAQ,GAAG;AAEvC,aAAO;AAAA,IACT;AAEA,aAAS,WAAW,QAAQA,QAAO;AACjC,UAAIA,OAAM,MAAO;AACjB,UAAIA,OAAM,SAAS;AACjB,YAAIH,SAAQG,OAAM,QAAQ,IAAI;AAC9B,YAAIH,UAASA,OAAM,QAAQ;AACzB,UAAAG,OAAM,OAAO,KAAKH,MAAK;AACvB,UAAAG,OAAM,UAAUA,OAAM,aAAa,IAAIH,OAAM;AAAA,QAC/C;AAAA,MACF;AACA,MAAAG,OAAM,QAAQ;AAGd,mBAAa,MAAM;AAAA,IACrB;AAKA,aAAS,aAAa,QAAQ;AAC5B,UAAIA,SAAQ,OAAO;AACnB,MAAAA,OAAM,eAAe;AACrB,UAAI,CAACA,OAAM,iBAAiB;AAC1B,cAAM,gBAAgBA,OAAM,OAAO;AACnC,QAAAA,OAAM,kBAAkB;AACxB,YAAIA,OAAM,KAAM,KAAI,SAAS,eAAe,MAAM;AAAA,YAAO,eAAc,MAAM;AAAA,MAC/E;AAAA,IACF;AAEA,aAAS,cAAc,QAAQ;AAC7B,YAAM,eAAe;AACrB,aAAO,KAAK,UAAU;AACtB,WAAK,MAAM;AAAA,IACb;AAQA,aAAS,cAAc,QAAQA,QAAO;AACpC,UAAI,CAACA,OAAM,aAAa;AACtB,QAAAA,OAAM,cAAc;AACpB,YAAI,SAAS,gBAAgB,QAAQA,MAAK;AAAA,MAC5C;AAAA,IACF;AAEA,aAAS,eAAe,QAAQA,QAAO;AACrC,UAAI,MAAMA,OAAM;AAChB,aAAO,CAACA,OAAM,WAAW,CAACA,OAAM,WAAW,CAACA,OAAM,SAASA,OAAM,SAASA,OAAM,eAAe;AAC7F,cAAM,sBAAsB;AAC5B,eAAO,KAAK,CAAC;AACb,YAAI,QAAQA,OAAM;AAEhB;AAAA,YAAW,OAAMA,OAAM;AAAA,MAC3B;AACA,MAAAA,OAAM,cAAc;AAAA,IACtB;AAMA,IAAAN,UAAS,UAAU,QAAQ,SAAUO,IAAG;AACtC,WAAK,KAAK,SAAS,IAAI,MAAM,4BAA4B,CAAC;AAAA,IAC5D;AAEA,IAAAP,UAAS,UAAU,OAAO,SAAU,MAAM,UAAU;AAClD,UAAI,MAAM;AACV,UAAIM,SAAQ,KAAK;AAEjB,cAAQA,OAAM,YAAY;AAAA,QACxB,KAAK;AACH,UAAAA,OAAM,QAAQ;AACd;AAAA,QACF,KAAK;AACH,UAAAA,OAAM,QAAQ,CAACA,OAAM,OAAO,IAAI;AAChC;AAAA,QACF;AACE,UAAAA,OAAM,MAAM,KAAK,IAAI;AACrB;AAAA,MACJ;AACA,MAAAA,OAAM,cAAc;AACpB,YAAM,yBAAyBA,OAAM,YAAY,QAAQ;AAEzD,UAAI,SAAS,CAAC,YAAY,SAAS,QAAQ,UAAU,SAAS,QAAQ,UAAU,SAAS,QAAQ;AAEjG,UAAI,QAAQ,QAAQ,QAAQ;AAC5B,UAAIA,OAAM,WAAY,KAAI,SAAS,KAAK;AAAA,UAAO,KAAI,KAAK,OAAO,KAAK;AAEpE,WAAK,GAAG,UAAU,QAAQ;AAC1B,eAAS,SAASE,WAAU,YAAY;AACtC,cAAM,UAAU;AAChB,YAAIA,cAAa,KAAK;AACpB,cAAI,cAAc,WAAW,eAAe,OAAO;AACjD,uBAAW,aAAa;AACxB,oBAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAEA,eAAS,QAAQ;AACf,cAAM,OAAO;AACb,aAAK,IAAI;AAAA,MACX;AAMA,UAAI,UAAU,YAAY,GAAG;AAC7B,WAAK,GAAG,SAAS,OAAO;AAExB,UAAI,YAAY;AAChB,eAAS,UAAU;AACjB,cAAM,SAAS;AAEf,aAAK,eAAe,SAAS,OAAO;AACpC,aAAK,eAAe,UAAU,QAAQ;AACtC,aAAK,eAAe,SAAS,OAAO;AACpC,aAAK,eAAe,SAAS,OAAO;AACpC,aAAK,eAAe,UAAU,QAAQ;AACtC,YAAI,eAAe,OAAO,KAAK;AAC/B,YAAI,eAAe,OAAO,MAAM;AAChC,YAAI,eAAe,QAAQ,MAAM;AAEjC,oBAAY;AAOZ,YAAIF,OAAM,eAAe,CAAC,KAAK,kBAAkB,KAAK,eAAe,WAAY,SAAQ;AAAA,MAC3F;AAMA,UAAI,sBAAsB;AAC1B,UAAI,GAAG,QAAQ,MAAM;AACrB,eAAS,OAAOH,QAAO;AACrB,cAAM,QAAQ;AACd,8BAAsB;AACtB,YAAI,MAAM,KAAK,MAAMA,MAAK;AAC1B,YAAI,UAAU,OAAO,CAAC,qBAAqB;AAKzC,eAAKG,OAAM,eAAe,KAAKA,OAAM,UAAU,QAAQA,OAAM,aAAa,KAAK,QAAQA,OAAM,OAAO,IAAI,MAAM,OAAO,CAAC,WAAW;AAC/H,kBAAM,+BAA+BA,OAAM,UAAU;AACrD,YAAAA,OAAM;AACN,kCAAsB;AAAA,UACxB;AACA,cAAI,MAAM;AAAA,QACZ;AAAA,MACF;AAIA,eAAS,QAAQ,IAAI;AACnB,cAAM,WAAW,EAAE;AACnB,eAAO;AACP,aAAK,eAAe,SAAS,OAAO;AACpC,YAAI,gBAAgB,MAAM,OAAO,MAAM,EAAG,MAAK,KAAK,SAAS,EAAE;AAAA,MACjE;AAGA,sBAAgB,MAAM,SAAS,OAAO;AAGtC,eAAS,UAAU;AACjB,aAAK,eAAe,UAAU,QAAQ;AACtC,eAAO;AAAA,MACT;AACA,WAAK,KAAK,SAAS,OAAO;AAC1B,eAAS,WAAW;AAClB,cAAM,UAAU;AAChB,aAAK,eAAe,SAAS,OAAO;AACpC,eAAO;AAAA,MACT;AACA,WAAK,KAAK,UAAU,QAAQ;AAE5B,eAAS,SAAS;AAChB,cAAM,QAAQ;AACd,YAAI,OAAO,IAAI;AAAA,MACjB;AAGA,WAAK,KAAK,QAAQ,GAAG;AAGrB,UAAI,CAACA,OAAM,SAAS;AAClB,cAAM,aAAa;AACnB,YAAI,OAAO;AAAA,MACb;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,KAAK;AACxB,aAAO,WAAY;AACjB,YAAIA,SAAQ,IAAI;AAChB,cAAM,eAAeA,OAAM,UAAU;AACrC,YAAIA,OAAM,WAAY,CAAAA,OAAM;AAC5B,YAAIA,OAAM,eAAe,KAAK,gBAAgB,KAAK,MAAM,GAAG;AAC1D,UAAAA,OAAM,UAAU;AAChB,eAAK,GAAG;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,IAAAN,UAAS,UAAU,SAAS,SAAU,MAAM;AAC1C,UAAIM,SAAQ,KAAK;AACjB,UAAI,aAAa,EAAE,YAAY,MAAM;AAGrC,UAAIA,OAAM,eAAe,EAAG,QAAO;AAGnC,UAAIA,OAAM,eAAe,GAAG;AAE1B,YAAI,QAAQ,SAASA,OAAM,MAAO,QAAO;AAEzC,YAAI,CAAC,KAAM,QAAOA,OAAM;AAGxB,QAAAA,OAAM,QAAQ;AACd,QAAAA,OAAM,aAAa;AACnB,QAAAA,OAAM,UAAU;AAChB,YAAI,KAAM,MAAK,KAAK,UAAU,MAAM,UAAU;AAC9C,eAAO;AAAA,MACT;AAIA,UAAI,CAAC,MAAM;AAET,YAAI,QAAQA,OAAM;AAClB,YAAI,MAAMA,OAAM;AAChB,QAAAA,OAAM,QAAQ;AACd,QAAAA,OAAM,aAAa;AACnB,QAAAA,OAAM,UAAU;AAEhB,iBAASG,KAAI,GAAGA,KAAI,KAAKA,MAAK;AAC5B,gBAAMA,EAAC,EAAE,KAAK,UAAU,MAAM,EAAE,YAAY,MAAM,CAAC;AAAA,QACrD;AAAC,eAAO;AAAA,MACV;AAGA,UAAIC,SAAQ,QAAQJ,OAAM,OAAO,IAAI;AACrC,UAAII,WAAU,GAAI,QAAO;AAEzB,MAAAJ,OAAM,MAAM,OAAOI,QAAO,CAAC;AAC3B,MAAAJ,OAAM,cAAc;AACpB,UAAIA,OAAM,eAAe,EAAG,CAAAA,OAAM,QAAQA,OAAM,MAAM,CAAC;AAEvD,WAAK,KAAK,UAAU,MAAM,UAAU;AAEpC,aAAO;AAAA,IACT;AAIA,IAAAN,UAAS,UAAU,KAAK,SAAU,IAAI,IAAI;AACxC,UAAI,MAAM,OAAO,UAAU,GAAG,KAAK,MAAM,IAAI,EAAE;AAE/C,UAAI,OAAO,QAAQ;AAEjB,YAAI,KAAK,eAAe,YAAY,MAAO,MAAK,OAAO;AAAA,MACzD,WAAW,OAAO,YAAY;AAC5B,YAAIM,SAAQ,KAAK;AACjB,YAAI,CAACA,OAAM,cAAc,CAACA,OAAM,mBAAmB;AACjD,UAAAA,OAAM,oBAAoBA,OAAM,eAAe;AAC/C,UAAAA,OAAM,kBAAkB;AACxB,cAAI,CAACA,OAAM,SAAS;AAClB,gBAAI,SAAS,kBAAkB,IAAI;AAAA,UACrC,WAAWA,OAAM,QAAQ;AACvB,yBAAa,IAAI;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AACA,IAAAN,UAAS,UAAU,cAAcA,UAAS,UAAU;AAEpD,aAAS,iBAAiBW,OAAM;AAC9B,YAAM,0BAA0B;AAChC,MAAAA,MAAK,KAAK,CAAC;AAAA,IACb;AAIA,IAAAX,UAAS,UAAU,SAAS,WAAY;AACtC,UAAIM,SAAQ,KAAK;AACjB,UAAI,CAACA,OAAM,SAAS;AAClB,cAAM,QAAQ;AACd,QAAAA,OAAM,UAAU;AAChB,eAAO,MAAMA,MAAK;AAAA,MACpB;AACA,aAAO;AAAA,IACT;AAEA,aAAS,OAAO,QAAQA,QAAO;AAC7B,UAAI,CAACA,OAAM,iBAAiB;AAC1B,QAAAA,OAAM,kBAAkB;AACxB,YAAI,SAAS,SAAS,QAAQA,MAAK;AAAA,MACrC;AAAA,IACF;AAEA,aAAS,QAAQ,QAAQA,QAAO;AAC9B,UAAI,CAACA,OAAM,SAAS;AAClB,cAAM,eAAe;AACrB,eAAO,KAAK,CAAC;AAAA,MACf;AAEA,MAAAA,OAAM,kBAAkB;AACxB,MAAAA,OAAM,aAAa;AACnB,aAAO,KAAK,QAAQ;AACpB,WAAK,MAAM;AACX,UAAIA,OAAM,WAAW,CAACA,OAAM,QAAS,QAAO,KAAK,CAAC;AAAA,IACpD;AAEA,IAAAN,UAAS,UAAU,QAAQ,WAAY;AACrC,YAAM,yBAAyB,KAAK,eAAe,OAAO;AAC1D,UAAI,UAAU,KAAK,eAAe,SAAS;AACzC,cAAM,OAAO;AACb,aAAK,eAAe,UAAU;AAC9B,aAAK,KAAK,OAAO;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAEA,aAAS,KAAK,QAAQ;AACpB,UAAIM,SAAQ,OAAO;AACnB,YAAM,QAAQA,OAAM,OAAO;AAC3B,aAAOA,OAAM,WAAW,OAAO,KAAK,MAAM,MAAM;AAAA,MAAC;AAAA,IACnD;AAKA,IAAAN,UAAS,UAAU,OAAO,SAAU,QAAQ;AAC1C,UAAI,QAAQ;AAEZ,UAAIM,SAAQ,KAAK;AACjB,UAAI,SAAS;AAEb,aAAO,GAAG,OAAO,WAAY;AAC3B,cAAM,aAAa;AACnB,YAAIA,OAAM,WAAW,CAACA,OAAM,OAAO;AACjC,cAAIH,SAAQG,OAAM,QAAQ,IAAI;AAC9B,cAAIH,UAASA,OAAM,OAAQ,OAAM,KAAKA,MAAK;AAAA,QAC7C;AAEA,cAAM,KAAK,IAAI;AAAA,MACjB,CAAC;AAED,aAAO,GAAG,QAAQ,SAAUA,QAAO;AACjC,cAAM,cAAc;AACpB,YAAIG,OAAM,QAAS,CAAAH,SAAQG,OAAM,QAAQ,MAAMH,MAAK;AAGpD,YAAIG,OAAM,eAAeH,WAAU,QAAQA,WAAU,QAAY;AAAA,iBAAgB,CAACG,OAAM,eAAe,CAACH,UAAS,CAACA,OAAM,QAAS;AAEjI,YAAI,MAAM,MAAM,KAAKA,MAAK;AAC1B,YAAI,CAAC,KAAK;AACR,mBAAS;AACT,iBAAO,MAAM;AAAA,QACf;AAAA,MACF,CAAC;AAID,eAASM,MAAK,QAAQ;AACpB,YAAI,KAAKA,EAAC,MAAM,UAAa,OAAO,OAAOA,EAAC,MAAM,YAAY;AAC5D,eAAKA,EAAC,IAAI,0BAAU,QAAQ;AAC1B,mBAAO,WAAY;AACjB,qBAAO,OAAO,MAAM,EAAE,MAAM,QAAQ,SAAS;AAAA,YAC/C;AAAA,UACF,GAAEA,EAAC;AAAA,QACL;AAAA,MACF;AAGA,eAASF,KAAI,GAAGA,KAAI,aAAa,QAAQA,MAAK;AAC5C,eAAO,GAAG,aAAaA,EAAC,GAAG,KAAK,KAAK,KAAK,MAAM,aAAaA,EAAC,CAAC,CAAC;AAAA,MAClE;AAIA,WAAK,QAAQ,SAAUA,IAAG;AACxB,cAAM,iBAAiBA,EAAC;AACxB,YAAI,QAAQ;AACV,mBAAS;AACT,iBAAO,OAAO;AAAA,QAChB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,WAAO,eAAeP,UAAS,WAAW,yBAAyB;AAAA;AAAA;AAAA;AAAA,MAIjE,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,eAAO,KAAK,eAAe;AAAA,MAC7B;AAAA,IACF,CAAC;AAGD,IAAAA,UAAS,YAAY;AAMrB,aAAS,SAASO,IAAGD,QAAO;AAE1B,UAAIA,OAAM,WAAW,EAAG,QAAO;AAE/B,UAAI;AACJ,UAAIA,OAAM,WAAY,OAAMA,OAAM,OAAO,MAAM;AAAA,eAAW,CAACC,MAAKA,MAAKD,OAAM,QAAQ;AAEjF,YAAIA,OAAM,QAAS,OAAMA,OAAM,OAAO,KAAK,EAAE;AAAA,iBAAWA,OAAM,OAAO,WAAW,EAAG,OAAMA,OAAM,OAAO,KAAK;AAAA,YAAU,OAAMA,OAAM,OAAO,OAAOA,OAAM,MAAM;AAC3J,QAAAA,OAAM,OAAO,MAAM;AAAA,MACrB,OAAO;AAEL,cAAM,gBAAgBC,IAAGD,OAAM,QAAQA,OAAM,OAAO;AAAA,MACtD;AAEA,aAAO;AAAA,IACT;AAKA,aAAS,gBAAgBC,IAAG,MAAM,YAAY;AAC5C,UAAI;AACJ,UAAIA,KAAI,KAAK,KAAK,KAAK,QAAQ;AAE7B,cAAM,KAAK,KAAK,KAAK,MAAM,GAAGA,EAAC;AAC/B,aAAK,KAAK,OAAO,KAAK,KAAK,KAAK,MAAMA,EAAC;AAAA,MACzC,WAAWA,OAAM,KAAK,KAAK,KAAK,QAAQ;AAEtC,cAAM,KAAK,MAAM;AAAA,MACnB,OAAO;AAEL,cAAM,aAAa,qBAAqBA,IAAG,IAAI,IAAI,eAAeA,IAAG,IAAI;AAAA,MAC3E;AACA,aAAO;AAAA,IACT;AAMA,aAAS,qBAAqBA,IAAG,MAAM;AACrC,UAAI,IAAI,KAAK;AACb,UAAIK,KAAI;AACR,UAAI,MAAM,EAAE;AACZ,MAAAL,MAAK,IAAI;AACT,aAAO,IAAI,EAAE,MAAM;AACjB,YAAI,MAAM,EAAE;AACZ,YAAI,KAAKA,KAAI,IAAI,SAAS,IAAI,SAASA;AACvC,YAAI,OAAO,IAAI,OAAQ,QAAO;AAAA,YAAS,QAAO,IAAI,MAAM,GAAGA,EAAC;AAC5D,QAAAA,MAAK;AACL,YAAIA,OAAM,GAAG;AACX,cAAI,OAAO,IAAI,QAAQ;AACrB,cAAEK;AACF,gBAAI,EAAE,KAAM,MAAK,OAAO,EAAE;AAAA,gBAAU,MAAK,OAAO,KAAK,OAAO;AAAA,UAC9D,OAAO;AACL,iBAAK,OAAO;AACZ,cAAE,OAAO,IAAI,MAAM,EAAE;AAAA,UACvB;AACA;AAAA,QACF;AACA,UAAEA;AAAA,MACJ;AACA,WAAK,UAAUA;AACf,aAAO;AAAA,IACT;AAKA,aAAS,eAAeL,IAAG,MAAM;AAC/B,UAAI,MAAML,QAAO,YAAYK,EAAC;AAC9B,UAAI,IAAI,KAAK;AACb,UAAIK,KAAI;AACR,QAAE,KAAK,KAAK,GAAG;AACf,MAAAL,MAAK,EAAE,KAAK;AACZ,aAAO,IAAI,EAAE,MAAM;AACjB,YAAI,MAAM,EAAE;AACZ,YAAI,KAAKA,KAAI,IAAI,SAAS,IAAI,SAASA;AACvC,YAAI,KAAK,KAAK,IAAI,SAASA,IAAG,GAAG,EAAE;AACnC,QAAAA,MAAK;AACL,YAAIA,OAAM,GAAG;AACX,cAAI,OAAO,IAAI,QAAQ;AACrB,cAAEK;AACF,gBAAI,EAAE,KAAM,MAAK,OAAO,EAAE;AAAA,gBAAU,MAAK,OAAO,KAAK,OAAO;AAAA,UAC9D,OAAO;AACL,iBAAK,OAAO;AACZ,cAAE,OAAO,IAAI,MAAM,EAAE;AAAA,UACvB;AACA;AAAA,QACF;AACA,UAAEA;AAAA,MACJ;AACA,WAAK,UAAUA;AACf,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,QAAQ;AAC3B,UAAIN,SAAQ,OAAO;AAInB,UAAIA,OAAM,SAAS,EAAG,OAAM,IAAI,MAAM,4CAA4C;AAElF,UAAI,CAACA,OAAM,YAAY;AACrB,QAAAA,OAAM,QAAQ;AACd,YAAI,SAAS,eAAeA,QAAO,MAAM;AAAA,MAC3C;AAAA,IACF;AAEA,aAAS,cAAcA,QAAO,QAAQ;AAEpC,UAAI,CAACA,OAAM,cAAcA,OAAM,WAAW,GAAG;AAC3C,QAAAA,OAAM,aAAa;AACnB,eAAO,WAAW;AAClB,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,aAAS,QAAQ,IAAI,GAAG;AACtB,eAASG,KAAI,GAAG,IAAI,GAAG,QAAQA,KAAI,GAAGA,MAAK;AACzC,YAAI,GAAGA,EAAC,MAAM,EAAG,QAAOA;AAAA,MAC1B;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC1/BA;AAAA,kFAAAI,UAAAC,SAAA;AAAA;AAiEA,IAAAA,QAAO,UAAUC;AAEjB,QAAIC,UAAS;AAGb,QAAIC,QAAO,OAAO,OAAO,eAAuB;AAChD,IAAAA,MAAK,WAAW;AAGhB,IAAAA,MAAK,SAASF,YAAWC,OAAM;AAE/B,aAAS,eAAe,IAAI,MAAM;AAChC,UAAI,KAAK,KAAK;AACd,SAAG,eAAe;AAElB,UAAI,KAAK,GAAG;AAEZ,UAAI,CAAC,IAAI;AACP,eAAO,KAAK,KAAK,SAAS,IAAI,MAAM,sCAAsC,CAAC;AAAA,MAC7E;AAEA,SAAG,aAAa;AAChB,SAAG,UAAU;AAEb,UAAI,QAAQ;AACV,aAAK,KAAK,IAAI;AAEhB,SAAG,EAAE;AAEL,UAAI,KAAK,KAAK;AACd,SAAG,UAAU;AACb,UAAI,GAAG,gBAAgB,GAAG,SAAS,GAAG,eAAe;AACnD,aAAK,MAAM,GAAG,aAAa;AAAA,MAC7B;AAAA,IACF;AAEA,aAASD,WAAU,SAAS;AAC1B,UAAI,EAAE,gBAAgBA,YAAY,QAAO,IAAIA,WAAU,OAAO;AAE9D,MAAAC,QAAO,KAAK,MAAM,OAAO;AAEzB,WAAK,kBAAkB;AAAA,QACrB,gBAAgB,eAAe,KAAK,IAAI;AAAA,QACxC,eAAe;AAAA,QACf,cAAc;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAGA,WAAK,eAAe,eAAe;AAKnC,WAAK,eAAe,OAAO;AAE3B,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,cAAc,WAAY,MAAK,aAAa,QAAQ;AAEvE,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAAA,MACjE;AAGA,WAAK,GAAG,aAAa,SAAS;AAAA,IAChC;AAEA,aAAS,YAAY;AACnB,UAAI,QAAQ;AAEZ,UAAI,OAAO,KAAK,WAAW,YAAY;AACrC,aAAK,OAAO,SAAU,IAAI,MAAM;AAC9B,eAAK,OAAO,IAAI,IAAI;AAAA,QACtB,CAAC;AAAA,MACH,OAAO;AACL,aAAK,MAAM,MAAM,IAAI;AAAA,MACvB;AAAA,IACF;AAEA,IAAAD,WAAU,UAAU,OAAO,SAAUG,QAAO,UAAU;AACpD,WAAK,gBAAgB,gBAAgB;AACrC,aAAOF,QAAO,UAAU,KAAK,KAAK,MAAME,QAAO,QAAQ;AAAA,IACzD;AAYA,IAAAH,WAAU,UAAU,aAAa,SAAUG,QAAO,UAAU,IAAI;AAC9D,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAEA,IAAAH,WAAU,UAAU,SAAS,SAAUG,QAAO,UAAU,IAAI;AAC1D,UAAI,KAAK,KAAK;AACd,SAAG,UAAU;AACb,SAAG,aAAaA;AAChB,SAAG,gBAAgB;AACnB,UAAI,CAAC,GAAG,cAAc;AACpB,YAAI,KAAK,KAAK;AACd,YAAI,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,SAAS,GAAG,cAAe,MAAK,MAAM,GAAG,aAAa;AAAA,MACtG;AAAA,IACF;AAKA,IAAAH,WAAU,UAAU,QAAQ,SAAUI,IAAG;AACvC,UAAI,KAAK,KAAK;AAEd,UAAI,GAAG,eAAe,QAAQ,GAAG,WAAW,CAAC,GAAG,cAAc;AAC5D,WAAG,eAAe;AAClB,aAAK,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc;AAAA,MACpE,OAAO;AAGL,WAAG,gBAAgB;AAAA,MACrB;AAAA,IACF;AAEA,IAAAJ,WAAU,UAAU,WAAW,SAAU,KAAK,IAAI;AAChD,UAAI,SAAS;AAEb,MAAAC,QAAO,UAAU,SAAS,KAAK,MAAM,KAAK,SAAU,MAAM;AACxD,WAAG,IAAI;AACP,eAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAAA,IACH;AAEA,aAAS,KAAK,QAAQ,IAAI,MAAM;AAC9B,UAAI,GAAI,QAAO,OAAO,KAAK,SAAS,EAAE;AAEtC,UAAI,QAAQ;AACV,eAAO,KAAK,IAAI;AAIlB,UAAI,OAAO,eAAe,OAAQ,OAAM,IAAI,MAAM,4CAA4C;AAE9F,UAAI,OAAO,gBAAgB,aAAc,OAAM,IAAI,MAAM,gDAAgD;AAEzG,aAAO,OAAO,KAAK,IAAI;AAAA,IACzB;AAAA;AAAA;;;ACrNA;AAAA,oFAAAI,UAAAC,SAAA;AAAA;AA2BA,IAAAA,QAAO,UAAUC;AAEjB,QAAIC,aAAY;AAGhB,QAAIC,QAAO,OAAO,OAAO,eAAuB;AAChD,IAAAA,MAAK,WAAW;AAGhB,IAAAA,MAAK,SAASF,cAAaC,UAAS;AAEpC,aAASD,aAAY,SAAS;AAC5B,UAAI,EAAE,gBAAgBA,cAAc,QAAO,IAAIA,aAAY,OAAO;AAElE,MAAAC,WAAU,KAAK,MAAM,OAAO;AAAA,IAC9B;AAEA,IAAAD,aAAY,UAAU,aAAa,SAAUG,QAAO,UAAU,IAAI;AAChE,SAAG,MAAMA,MAAK;AAAA,IAChB;AAAA;AAAA;;;AC9CA;AAAA,qEAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,SAAS,QAAQ,QAAQ;AAC7B,QAAI,QAAQ,IAAI,oBAAoB,aAAa,QAAQ;AACvD,MAAAA,QAAO,UAAU;AACjB,MAAAD,WAAUC,QAAO,UAAU,OAAO;AAClC,MAAAD,SAAQ,WAAW,OAAO;AAC1B,MAAAA,SAAQ,WAAW,OAAO;AAC1B,MAAAA,SAAQ,SAAS,OAAO;AACxB,MAAAA,SAAQ,YAAY,OAAO;AAC3B,MAAAA,SAAQ,cAAc,OAAO;AAC7B,MAAAA,SAAQ,SAAS;AAAA,IACnB,OAAO;AACL,MAAAA,WAAUC,QAAO,UAAU;AAC3B,MAAAD,SAAQ,SAAS,UAAUA;AAC3B,MAAAA,SAAQ,WAAWA;AACnB,MAAAA,SAAQ,WAAW;AACnB,MAAAA,SAAQ,SAAS;AACjB,MAAAA,SAAQ,YAAY;AACpB,MAAAA,SAAQ,cAAc;AAAA,IACxB;AAAA;AAAA;;;AClBA;AAAA,wEAAAE,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU,mBAAsB;AAAA;AAAA;;;ACAvC;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,QAAO,QAAQ,MAAM;AACzB,QAAIC,eAAc;AAElB,IAAAF,QAAO,UAAU;AAAA,MACf,UAAUG;AAAA,MACV,UAAUC;AAAA,IACZ;AAEA,IAAAH,MAAK,SAASE,WAAUD,YAAW;AACnC,IAAAD,MAAK,SAASG,WAAUF,YAAW;AAKnC,aAAS,gBAAgB,UAAU,QAAQ,UAAU;AACnD,eAAS,MAAM,IAAI,WAAW;AAC5B,eAAO,SAAS,MAAM;AACtB,iBAAS,MAAM,MAAM,SAAS;AAC9B,eAAO,KAAK,MAAM,EAAE,MAAM,MAAM,SAAS;AAAA,MAC3C;AAAA,IACF;AAEA,aAASC,UAAS,IAAI,SAAS;AAC7B,UAAI,EAAE,gBAAgBA;AACpB,eAAO,IAAIA,UAAS,IAAI,OAAO;AAEjC,MAAAD,aAAY,KAAK,MAAM,OAAO;AAE9B,sBAAgB,MAAM,SAAS,WAAW;AACxC,YAAI,SAAS,GAAG,KAAK,MAAM,OAAO;AAClC,YAAI,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO;AACvC,eAAO,GAAG,SAAS,IAAI;AACvB,eAAO,KAAK,IAAI;AAAA,MAClB,CAAC;AAED,WAAK,KAAK,UAAU;AAAA,IACtB;AAEA,aAASE,UAAS,IAAI,SAAS;AAC7B,UAAI,EAAE,gBAAgBA;AACpB,eAAO,IAAIA,UAAS,IAAI,OAAO;AAEjC,MAAAF,aAAY,KAAK,MAAM,OAAO;AAE9B,sBAAgB,MAAM,UAAU,WAAW;AACzC,YAAI,cAAc,GAAG,KAAK,MAAM,OAAO;AACvC,YAAI,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO;AACvC,oBAAY,GAAG,SAAS,IAAI;AAC5B,aAAK,KAAK,WAAW;AAAA,MACvB,CAAC;AAED,WAAK,KAAK,UAAU;AAAA,IACtB;AAAA;AAAA;;;ACpDA;AAAA,yCAAAG,UAAAC,SAAA;AAAA;AAOA,IAAAA,QAAO,UAAU,SAASC,QAAM,eAAe;AAC7C,UAAI,OAAOA,WAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,8BAA8B;AAAA,MACpD;AAEA,UAAIA,WAAS,QAAQA,WAAS,IAAK,QAAO;AAE1C,UAAI,MAAMA,OAAK;AACf,UAAI,OAAO,EAAG,QAAOA;AAKrB,UAAI,SAAS;AACb,UAAI,MAAM,KAAKA,OAAK,CAAC,MAAM,MAAM;AAC/B,YAAI,KAAKA,OAAK,CAAC;AACf,aAAK,OAAO,OAAO,OAAO,QAAQA,OAAK,MAAM,GAAG,CAAC,MAAM,QAAQ;AAC7D,UAAAA,SAAOA,OAAK,MAAM,CAAC;AACnB,mBAAS;AAAA,QACX;AAAA,MACF;AAEA,UAAI,OAAOA,OAAK,MAAM,QAAQ;AAC9B,UAAI,kBAAkB,SAAS,KAAK,KAAK,SAAS,CAAC,MAAM,IAAI;AAC3D,aAAK,IAAI;AAAA,MACX;AACA,aAAO,SAAS,KAAK,KAAK,GAAG;AAAA,IAC/B;AAAA;AAAA;;;AClCA;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAgBA,aAASC,UAAS,OAAO;AACvB,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACpBjB;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AAUA,aAASC,OAAM,MAAM,SAAS,MAAM;AAClC,cAAQ,KAAK,QAAQ;AAAA,QACnB,KAAK;AAAG,iBAAO,KAAK,KAAK,OAAO;AAAA,QAChC,KAAK;AAAG,iBAAO,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,QACzC,KAAK;AAAG,iBAAO,KAAK,KAAK,SAAS,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,QAClD,KAAK;AAAG,iBAAO,KAAK,KAAK,SAAS,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,MAC7D;AACA,aAAO,KAAK,MAAM,SAAS,IAAI;AAAA,IACjC;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACpBjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,SAAQ;AAGZ,QAAI,YAAY,KAAK;AAWrB,aAAS,SAAS,MAAM,OAAOC,YAAW;AACxC,cAAQ,UAAU,UAAU,SAAa,KAAK,SAAS,IAAK,OAAO,CAAC;AACpE,aAAO,WAAW;AAChB,YAAI,OAAO,WACPC,SAAQ,IACR,SAAS,UAAU,KAAK,SAAS,OAAO,CAAC,GACzC,QAAQ,MAAM,MAAM;AAExB,eAAO,EAAEA,SAAQ,QAAQ;AACvB,gBAAMA,MAAK,IAAI,KAAK,QAAQA,MAAK;AAAA,QACnC;AACA,QAAAA,SAAQ;AACR,YAAI,YAAY,MAAM,QAAQ,CAAC;AAC/B,eAAO,EAAEA,SAAQ,OAAO;AACtB,oBAAUA,MAAK,IAAI,KAAKA,MAAK;AAAA,QAC/B;AACA,kBAAU,KAAK,IAAID,WAAU,KAAK;AAClC,eAAOD,OAAM,MAAM,MAAM,SAAS;AAAA,MACpC;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACnCjB;AAAA,oCAAAI,UAAAC,SAAA;AAAA;AAmBA,aAASC,UAAS,OAAO;AACvB,aAAO,WAAW;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACzBjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,aAAa,OAAO,UAAU,YAAY,UAAU,OAAO,WAAW,UAAU;AAEpF,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACHjB;AAAA,iCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,WAAW,OAAO,QAAQ,YAAY,QAAQ,KAAK,WAAW,UAAU;AAG5E,QAAI,OAAO,cAAc,YAAY,SAAS,aAAa,EAAE;AAE7D,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACRjB;AAAA,mCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,OAAO;AAGX,QAAIC,UAAS,KAAK;AAElB,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACLjB;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,UAAS;AAGb,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAOjC,QAAI,uBAAuB,YAAY;AAGvC,QAAI,iBAAiBA,UAASA,QAAO,cAAc;AASnD,aAAS,UAAU,OAAO;AACxB,UAAI,QAAQ,eAAe,KAAK,OAAO,cAAc,GACjD,MAAM,MAAM,cAAc;AAE9B,UAAI;AACF,cAAM,cAAc,IAAI;AACxB,YAAI,WAAW;AAAA,MACjB,SAAS,GAAG;AAAA,MAAC;AAEb,UAAI,SAAS,qBAAqB,KAAK,KAAK;AAC5C,UAAI,UAAU;AACZ,YAAI,OAAO;AACT,gBAAM,cAAc,IAAI;AAAA,QAC1B,OAAO;AACL,iBAAO,MAAM,cAAc;AAAA,QAC7B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC7CjB;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AACA,QAAI,cAAc,OAAO;AAOzB,QAAI,uBAAuB,YAAY;AASvC,aAASC,gBAAe,OAAO;AAC7B,aAAO,qBAAqB,KAAK,KAAK;AAAA,IACxC;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACrBjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,UAAS;AAAb,QACI,YAAY;AADhB,QAEIC,kBAAiB;AAGrB,QAAI,UAAU;AAAd,QACI,eAAe;AAGnB,QAAI,iBAAiBD,UAASA,QAAO,cAAc;AASnD,aAAS,WAAW,OAAO;AACzB,UAAI,SAAS,MAAM;AACjB,eAAO,UAAU,SAAY,eAAe;AAAA,MAC9C;AACA,aAAQ,kBAAkB,kBAAkB,OAAO,KAAK,IACpD,UAAU,KAAK,IACfC,gBAAe,KAAK;AAAA,IAC1B;AAEA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC3BjB;AAAA,oCAAAG,UAAAC,SAAA;AAAA;AAyBA,aAASC,UAAS,OAAO;AACvB,UAAI,OAAO,OAAO;AAClB,aAAO,SAAS,SAAS,QAAQ,YAAY,QAAQ;AAAA,IACvD;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AC9BjB;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACIC,YAAW;AAGf,QAAI,WAAW;AAAf,QACI,UAAU;AADd,QAEI,SAAS;AAFb,QAGI,WAAW;AAmBf,aAAS,WAAW,OAAO;AACzB,UAAI,CAACA,UAAS,KAAK,GAAG;AACpB,eAAO;AAAA,MACT;AAGA,UAAI,MAAM,WAAW,KAAK;AAC1B,aAAO,OAAO,WAAW,OAAO,UAAU,OAAO,YAAY,OAAO;AAAA,IACtE;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA,uCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,OAAO;AAGX,QAAI,aAAa,KAAK,oBAAoB;AAE1C,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,cAAc,WAAW;AAC3B,UAAI,MAAM,SAAS,KAAK,cAAc,WAAW,QAAQ,WAAW,KAAK,YAAY,EAAE;AACvF,aAAO,MAAO,mBAAmB,MAAO;AAAA,IAC1C,GAAE;AASF,aAAS,SAAS,MAAM;AACtB,aAAO,CAAC,CAAC,cAAe,cAAc;AAAA,IACxC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,YAAY,SAAS;AAGzB,QAAI,eAAe,UAAU;AAS7B,aAAS,SAAS,MAAM;AACtB,UAAI,QAAQ,MAAM;AAChB,YAAI;AACF,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B,SAAS,GAAG;AAAA,QAAC;AACb,YAAI;AACF,iBAAQ,OAAO;AAAA,QACjB,SAAS,GAAG;AAAA,QAAC;AAAA,MACf;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,WAAW;AADf,QAEIC,YAAW;AAFf,QAGI,WAAW;AAMf,QAAI,eAAe;AAGnB,QAAI,eAAe;AAGnB,QAAI,YAAY,SAAS;AAAzB,QACI,cAAc,OAAO;AAGzB,QAAI,eAAe,UAAU;AAG7B,QAAI,iBAAiB,YAAY;AAGjC,QAAI,aAAa;AAAA,MAAO,MACtB,aAAa,KAAK,cAAc,EAAE,QAAQ,cAAc,MAAM,EAC7D,QAAQ,0DAA0D,OAAO,IAAI;AAAA,IAChF;AAUA,aAAS,aAAa,OAAO;AAC3B,UAAI,CAACA,UAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AACvC,eAAO;AAAA,MACT;AACA,UAAI,UAAU,WAAW,KAAK,IAAI,aAAa;AAC/C,aAAO,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,IACrC;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC9CjB;AAAA,qCAAAE,UAAAC,SAAA;AAAA;AAQA,aAAS,SAAS,QAAQ,KAAK;AAC7B,aAAO,UAAU,OAAO,SAAY,OAAO,GAAG;AAAA,IAChD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAAnB,QACI,WAAW;AAUf,aAAS,UAAU,QAAQ,KAAK;AAC9B,UAAI,QAAQ,SAAS,QAAQ,GAAG;AAChC,aAAO,aAAa,KAAK,IAAI,QAAQ;AAAA,IACvC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAEhB,QAAI,kBAAkB,WAAW;AAC/B,UAAI;AACF,YAAI,OAAO,UAAU,QAAQ,gBAAgB;AAC7C,aAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,eAAO;AAAA,MACT,SAAS,GAAG;AAAA,MAAC;AAAA,IACf,GAAE;AAEF,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACVjB;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,YAAW;AAAf,QACI,iBAAiB;AADrB,QAEIC,YAAW;AAUf,QAAI,kBAAkB,CAAC,iBAAiBA,YAAW,SAAS,MAAM,QAAQ;AACxE,aAAO,eAAe,MAAM,YAAY;AAAA,QACtC,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,SAASD,UAAS,MAAM;AAAA,QACxB,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA,qCAAAG,UAAAC,SAAA;AAAA;AACA,QAAI,YAAY;AAAhB,QACI,WAAW;AAGf,QAAI,YAAY,KAAK;AAWrB,aAAS,SAAS,MAAM;AACtB,UAAIC,SAAQ,GACR,aAAa;AAEjB,aAAO,WAAW;AAChB,YAAI,QAAQ,UAAU,GAClB,YAAY,YAAY,QAAQ;AAEpC,qBAAa;AACb,YAAI,YAAY,GAAG;AACjB,cAAI,EAAEA,UAAS,WAAW;AACxB,mBAAO,UAAU,CAAC;AAAA,UACpB;AAAA,QACF,OAAO;AACL,UAAAA,SAAQ;AAAA,QACV;AACA,eAAO,KAAK,MAAM,QAAW,SAAS;AAAA,MACxC;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA,wCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,WAAW;AAUf,QAAI,cAAc,SAAS,eAAe;AAE1C,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,YAAW;AAAf,QACI,WAAW;AADf,QAEI,cAAc;AAUlB,aAAS,SAAS,MAAM,OAAO;AAC7B,aAAO,YAAY,SAAS,MAAM,OAAOA,SAAQ,GAAG,OAAO,EAAE;AAAA,IAC/D;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA,8BAAAE,UAAAC,SAAA;AAAA;AAgCA,aAAS,GAAG,OAAO,OAAO;AACxB,aAAO,UAAU,SAAU,UAAU,SAAS,UAAU;AAAA,IAC1D;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACpCjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,mBAAmB;AA4BvB,aAAS,SAAS,OAAO;AACvB,aAAO,OAAO,SAAS,YACrB,QAAQ,MAAM,QAAQ,KAAK,KAAK,SAAS;AAAA,IAC7C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,WAAW;AA2Bf,aAASC,aAAY,OAAO;AAC1B,aAAO,SAAS,QAAQ,SAAS,MAAM,MAAM,KAAK,CAAC,WAAW,KAAK;AAAA,IACrE;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AChCjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,mBAAmB;AAGvB,QAAI,WAAW;AAUf,aAAS,QAAQ,OAAO,QAAQ;AAC9B,UAAI,OAAO,OAAO;AAClB,eAAS,UAAU,OAAO,mBAAmB;AAE7C,aAAO,CAAC,CAAC,WACN,QAAQ,YACN,QAAQ,YAAY,SAAS,KAAK,KAAK,OACrC,QAAQ,MAAM,QAAQ,KAAK,KAAK,QAAQ;AAAA,IACjD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,KAAK;AAAT,QACIC,eAAc;AADlB,QAEI,UAAU;AAFd,QAGIC,YAAW;AAYf,aAAS,eAAe,OAAOC,QAAO,QAAQ;AAC5C,UAAI,CAACD,UAAS,MAAM,GAAG;AACrB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,OAAOC;AAClB,UAAI,QAAQ,WACHF,aAAY,MAAM,KAAK,QAAQE,QAAO,OAAO,MAAM,IACnD,QAAQ,YAAYA,UAAS,QAChC;AACJ,eAAO,GAAG,OAAOA,MAAK,GAAG,KAAK;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AAEA,IAAAH,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,sCAAAI,UAAAC,SAAA;AAAA;AASA,aAAS,UAAUC,IAAG,UAAU;AAC9B,UAAIC,SAAQ,IACR,SAAS,MAAMD,EAAC;AAEpB,aAAO,EAAEC,SAAQD,IAAG;AAClB,eAAOC,MAAK,IAAI,SAASA,MAAK;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AAEA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,wCAAAG,UAAAC,SAAA;AAAA;AAwBA,aAAS,aAAa,OAAO;AAC3B,aAAO,SAAS,QAAQ,OAAO,SAAS;AAAA,IAC1C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC5BjB;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,eAAe;AAGnB,QAAI,UAAU;AASd,aAAS,gBAAgB,OAAO;AAC9B,aAAO,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,IACrD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,kBAAkB;AAAtB,QACI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAGjC,QAAI,uBAAuB,YAAY;AAoBvC,QAAI,cAAc,gBAAgB,4BAAW;AAAE,aAAO;AAAA,IAAW,GAAE,CAAC,IAAI,kBAAkB,SAAS,OAAO;AACxG,aAAO,aAAa,KAAK,KAAK,eAAe,KAAK,OAAO,QAAQ,KAC/D,CAAC,qBAAqB,KAAK,OAAO,QAAQ;AAAA,IAC9C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnCjB;AAAA,mCAAAC,UAAAC,SAAA;AAAA;AAuBA,QAAI,UAAU,MAAM;AAEpB,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAaA,aAAS,YAAY;AACnB,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,OAAO;AAAX,QACI,YAAY;AAGhB,QAAI,cAAc,OAAOD,YAAW,YAAYA,YAAW,CAACA,SAAQ,YAAYA;AAGhF,QAAI,aAAa,eAAe,OAAOC,WAAU,YAAYA,WAAU,CAACA,QAAO,YAAYA;AAG3F,QAAI,gBAAgB,cAAc,WAAW,YAAY;AAGzD,QAAIC,UAAS,gBAAgB,KAAK,SAAS;AAG3C,QAAI,iBAAiBA,UAASA,QAAO,WAAW;AAmBhD,QAAI,WAAW,kBAAkB;AAEjC,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACrCjB;AAAA,6CAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,WAAW;AADf,QAEI,eAAe;AAGnB,QAAI,UAAU;AAAd,QACI,WAAW;AADf,QAEI,UAAU;AAFd,QAGI,UAAU;AAHd,QAII,WAAW;AAJf,QAKI,UAAU;AALd,QAMI,SAAS;AANb,QAOI,YAAY;AAPhB,QAQI,YAAY;AARhB,QASI,YAAY;AAThB,QAUI,SAAS;AAVb,QAWI,YAAY;AAXhB,QAYI,aAAa;AAEjB,QAAI,iBAAiB;AAArB,QACI,cAAc;AADlB,QAEI,aAAa;AAFjB,QAGI,aAAa;AAHjB,QAII,UAAU;AAJd,QAKI,WAAW;AALf,QAMI,WAAW;AANf,QAOI,WAAW;AAPf,QAQI,kBAAkB;AARtB,QASI,YAAY;AAThB,QAUI,YAAY;AAGhB,QAAI,iBAAiB,CAAC;AACtB,mBAAe,UAAU,IAAI,eAAe,UAAU,IACtD,eAAe,OAAO,IAAI,eAAe,QAAQ,IACjD,eAAe,QAAQ,IAAI,eAAe,QAAQ,IAClD,eAAe,eAAe,IAAI,eAAe,SAAS,IAC1D,eAAe,SAAS,IAAI;AAC5B,mBAAe,OAAO,IAAI,eAAe,QAAQ,IACjD,eAAe,cAAc,IAAI,eAAe,OAAO,IACvD,eAAe,WAAW,IAAI,eAAe,OAAO,IACpD,eAAe,QAAQ,IAAI,eAAe,OAAO,IACjD,eAAe,MAAM,IAAI,eAAe,SAAS,IACjD,eAAe,SAAS,IAAI,eAAe,SAAS,IACpD,eAAe,MAAM,IAAI,eAAe,SAAS,IACjD,eAAe,UAAU,IAAI;AAS7B,aAAS,iBAAiB,OAAO;AAC/B,aAAO,aAAa,KAAK,KACvB,SAAS,MAAM,MAAM,KAAK,CAAC,CAAC,eAAe,WAAW,KAAK,CAAC;AAAA,IAChE;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3DjB;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAOA,aAAS,UAAU,MAAM;AACvB,aAAO,SAAS,OAAO;AACrB,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAGjB,QAAI,cAAc,OAAOD,YAAW,YAAYA,YAAW,CAACA,SAAQ,YAAYA;AAGhF,QAAI,aAAa,eAAe,OAAOC,WAAU,YAAYA,WAAU,CAACA,QAAO,YAAYA;AAG3F,QAAI,gBAAgB,cAAc,WAAW,YAAY;AAGzD,QAAI,cAAc,iBAAiB,WAAW;AAG9C,QAAI,YAAY,WAAW;AACzB,UAAI;AAEF,YAAI,QAAQ,cAAc,WAAW,WAAW,WAAW,QAAQ,MAAM,EAAE;AAE3E,YAAI,OAAO;AACT,iBAAO;AAAA,QACT;AAGA,eAAO,eAAe,YAAY,WAAW,YAAY,QAAQ,MAAM;AAAA,MACzE,SAAS,GAAG;AAAA,MAAC;AAAA,IACf,GAAE;AAEF,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,mBAAmB;AAAvB,QACI,YAAY;AADhB,QAEI,WAAW;AAGf,QAAI,mBAAmB,YAAY,SAAS;AAmB5C,QAAI,eAAe,mBAAmB,UAAU,gBAAgB,IAAI;AAEpE,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,cAAc;AADlB,QAEI,UAAU;AAFd,QAGI,WAAW;AAHf,QAII,UAAU;AAJd,QAKI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAUjC,aAAS,cAAc,OAAO,WAAW;AACvC,UAAI,QAAQ,QAAQ,KAAK,GACrB,QAAQ,CAAC,SAAS,YAAY,KAAK,GACnC,SAAS,CAAC,SAAS,CAAC,SAAS,SAAS,KAAK,GAC3C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,aAAa,KAAK,GAC1D,cAAc,SAAS,SAAS,UAAU,QAC1C,SAAS,cAAc,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAC,GAC1D,SAAS,OAAO;AAEpB,eAAS,OAAO,OAAO;AACrB,aAAK,aAAa,eAAe,KAAK,OAAO,GAAG,MAC5C,EAAE;AAAA,SAEC,OAAO;AAAA,QAEN,WAAW,OAAO,YAAY,OAAO;AAAA,QAErC,WAAW,OAAO,YAAY,OAAO,gBAAgB,OAAO;AAAA,QAE7D,QAAQ,KAAK,MAAM,KAClB;AACN,iBAAO,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChDjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AACA,QAAI,cAAc,OAAO;AASzB,aAAS,YAAY,OAAO;AAC1B,UAAI,OAAO,SAAS,MAAM,aACtB,QAAS,OAAO,QAAQ,cAAc,KAAK,aAAc;AAE7D,aAAO,UAAU;AAAA,IACnB;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AASA,aAAS,aAAa,QAAQ;AAC5B,UAAI,SAAS,CAAC;AACd,UAAI,UAAU,MAAM;AAClB,iBAAS,OAAO,OAAO,MAAM,GAAG;AAC9B,iBAAO,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,YAAW;AAAf,QACI,cAAc;AADlB,QAEI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AASjC,aAAS,WAAW,QAAQ;AAC1B,UAAI,CAACA,UAAS,MAAM,GAAG;AACrB,eAAO,aAAa,MAAM;AAAA,MAC5B;AACA,UAAI,UAAU,YAAY,MAAM,GAC5B,SAAS,CAAC;AAEd,eAAS,OAAO,QAAQ;AACtB,YAAI,EAAE,OAAO,kBAAkB,WAAW,CAAC,eAAe,KAAK,QAAQ,GAAG,KAAK;AAC7E,iBAAO,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA,kCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,gBAAgB;AAApB,QACI,aAAa;AADjB,QAEIC,eAAc;AAyBlB,aAAS,OAAO,QAAQ;AACtB,aAAOA,aAAY,MAAM,IAAI,cAAc,QAAQ,IAAI,IAAI,WAAW,MAAM;AAAA,IAC9E;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA,oCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,KAAK;AADT,QAEI,iBAAiB;AAFrB,QAGI,SAAS;AAGb,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAuBjC,QAAI,WAAW,SAAS,SAAS,QAAQ,SAAS;AAChD,eAAS,OAAO,MAAM;AAEtB,UAAIC,SAAQ;AACZ,UAAI,SAAS,QAAQ;AACrB,UAAI,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAEtC,UAAI,SAAS,eAAe,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,GAAG;AAC1D,iBAAS;AAAA,MACX;AAEA,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,SAAS,QAAQA,MAAK;AAC1B,YAAI,QAAQ,OAAO,MAAM;AACzB,YAAI,aAAa;AACjB,YAAI,cAAc,MAAM;AAExB,eAAO,EAAE,aAAa,aAAa;AACjC,cAAI,MAAM,MAAM,UAAU;AAC1B,cAAI,QAAQ,OAAO,GAAG;AAEtB,cAAI,UAAU,UACT,GAAG,OAAO,YAAY,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,QAAQ,GAAG,GAAI;AACtE,mBAAO,GAAG,IAAI,OAAO,GAAG;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AAED,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/DjB;AAAA,yDAAAE,UAAAC,SAAA;AAAA;AAWA,QAAM,iBAAN,cAA6B,MAAM;AAAA,MACjC,YAAY,QAAQ;AAClB,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,gBAAM,IAAI,UAAU,sCAAsC,OAAO,MAAM,EAAE;AAAA,QAC3E;AACA,YAAI,UAAU;AACd,iBAASC,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACtC,qBAAW,OAAO,OAAOA,EAAC,EAAE,KAAK;AAAA;AAAA,QACnC;AACA,cAAM,OAAO;AACb,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AACA,IAAAD,QAAO,UAAU;AAAA,MACf;AAAA,MACA,aAAaE,OAAM;AACjB,eAAO,MAAM,QAAQA,KAAI;AAAA,MAC3B;AAAA,MACA,uBAAuBA,OAAM,IAAI;AAC/B,eAAOA,MAAK,SAAS,EAAE;AAAA,MACzB;AAAA,MACA,sBAAsBA,OAAM,IAAI;AAC9B,eAAOA,MAAK,QAAQ,EAAE;AAAA,MACxB;AAAA,MACA,mBAAmBA,OAAM,KAAK;AAC5B,eAAOA,MAAK,KAAK,GAAG;AAAA,MACtB;AAAA,MACA,kBAAkBA,OAAM,IAAI;AAC1B,eAAOA,MAAK,IAAI,EAAE;AAAA,MACpB;AAAA,MACA,kBAAkBA,OAAM,IAAI;AAC1B,eAAOA,MAAK,IAAI,EAAE;AAAA,MACpB;AAAA,MACA,mBAAmBA,OAAM,IAAI;AAC3B,eAAOA,MAAK,KAAK,EAAE;AAAA,MACrB;AAAA,MACA,oBAAoBA,OAAM,OAAO,KAAK;AACpC,eAAOA,MAAK,MAAM,OAAO,GAAG;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,sBAAsB,IAAI,aAAa,MAAM;AAC3C,eAAO,GAAG,KAAK,UAAU,GAAG,IAAI;AAAA,MAClC;AAAA,MACA,mCAAmCA,OAAM,UAAU;AACjD,eAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAKA,OAAM,QAAQ;AAAA,MACnE;AAAA,MACA,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,iBAAiB,OAAO;AAAA,MACxB,aAAa,OAAO;AAAA,MACpB,wBAAwB,OAAO;AAAA,MAC/B,wBAAwB,OAAO;AAAA,MAC/B,gBAAgB,OAAO;AAAA,MACvB,uBAAuBA,OAAM,OAAO;AAClC,eAAO,OAAO,iBAAiBA,OAAM,KAAK;AAAA,MAC5C;AAAA,MACA,qBAAqBA,OAAM,MAAM,MAAM;AACrC,eAAO,OAAO,eAAeA,OAAM,MAAM,IAAI;AAAA,MAC/C;AAAA,MACA,+BAA+BA,OAAM,MAAM;AACzC,eAAO,OAAO,yBAAyBA,OAAM,IAAI;AAAA,MACnD;AAAA,MACA,WAAW,KAAK;AACd,eAAO,OAAO,KAAK,GAAG;AAAA,MACxB;AAAA,MACA,qBAAqB,QAAQ,OAAO;AAClC,eAAO,OAAO,eAAe,QAAQ,KAAK;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,sBAAsBA,OAAM,IAAI;AAC9B,eAAOA,MAAK,MAAM,EAAE;AAAA,MACtB;AAAA,MACA,qBAAqBA,OAAM,QAAQ,SAAS;AAC1C,eAAOA,MAAK,KAAK,QAAQ,OAAO;AAAA,MAClC;AAAA,MACA,cAAc,KAAK;AACjB,eAAO,QAAQ,OAAO,GAAG;AAAA,MAC3B;AAAA,MACA,eAAe,KAAK;AAClB,eAAO,QAAQ,QAAQ,GAAG;AAAA,MAC5B;AAAA,MACA,cAAc,QAAQ;AAAA,MACtB,oBAAoBA,OAAM,OAAO;AAC/B,eAAOA,MAAK,KAAK,KAAK;AAAA,MACxB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,qBAAqBA,OAAM,OAAO,KAAK;AACrC,eAAOA,MAAK,MAAM,OAAO,GAAG;AAAA,MAC9B;AAAA,MACA,2BAA2BA,OAAM;AAC/B,eAAOA,MAAK,YAAY;AAAA,MAC1B;AAAA,MACA,2BAA2BA,OAAM;AAC/B,eAAOA,MAAK,YAAY;AAAA,MAC1B;AAAA,MACA,oBAAoBA,OAAM;AACxB,eAAOA,MAAK,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA,WAAW,OAAO;AAAA,MAClB,qBAAqB,OAAO;AAAA,MAC5B,mBAAmB,OAAO;AAAA,MAC1B,gBAAgB,OAAO;AAAA,MACvB,eAAe,OAAO,WAAW,uBAAO,gBAAgB;AAAA,MACxD,oBAAoB,OAAO,gBAAgB,uBAAO,qBAAqB;AAAA,MACvE,uBAAuBA,OAAM,KAAK,KAAK;AACrC,eAAOA,MAAK,IAAI,KAAK,GAAG;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC3HA;AAAA,0DAAAC,UAAAC,SAAA;AAAA;AASA,IAAAA,QAAO,UAAU;AAAA,MACf,OAAOC,YAAW,MAAM;AAEtB,eAAOA,QAAO,QAAQ,eAAe,YAAa,CAAC,SAAS,IAAI,GAAG;AACjE,gBAAM,cAAc,KAAK,MAAM;AAC/B,cAAI,SAAS,KAAK;AAChB,mBAAO,YAAY,QAAQ,CAAC;AAAA,UAC9B,WAAW,SAAS,KAAK;AACvB,mBAAO,KAAK,UAAU,WAAW;AAAA,UACnC,WAAW,SAAS,OAAO,OAAO,gBAAgB,UAAU;AAC1D,kBAAM,OAAO,YAAY,gBAAgB,SAAS,YAAY,YAAY,OAAO;AACjF,mBAAO,GAAG,IAAI,MAAM,KAAK;AAAA,UAC3B,OAAO;AACL,mBAAO,YAAY,SAAS;AAAA,UAC9B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,QAAQ,OAAO;AAEb,gBAAQ,OAAO,OAAO;AAAA,UACpB,KAAK;AACH,gBAAI,MAAM,SAAS,GAAG,GAAG;AACvB,kBAAI,CAAC,MAAM,SAAS,GAAG,GAAG;AACxB,uBAAO,IAAI,KAAK;AAAA,cAClB,WAAW,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,SAAS,IAAI,GAAG;AACxD,uBAAO,KAAK,KAAK;AAAA,cACnB;AAAA,YACF;AACA,mBAAO,IAAI,KAAK;AAAA,UAClB,KAAK;AACH,gBAAI,MAAM,KAAK,GAAG;AAChB,qBAAO;AAAA,YACT,WAAW,OAAO,GAAG,OAAO,EAAE,GAAG;AAC/B,qBAAO,OAAO,KAAK;AAAA,YACrB;AACA,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO,GAAG,OAAO,KAAK,CAAC;AAAA,UACzB,KAAK;AAAA,UACL,KAAK;AACH,mBAAO,OAAO,KAAK;AAAA,UACrB,KAAK;AACH,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACtDA;AAAA,oDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,QAAAC,SAAQ,SAAAC,SAAQ,IAAI;AAC5B,QAAM,EAAE,gBAAgB,qBAAqB,IAAI;AAWjD,QAAM,iBAAiB,WAAW,kBAAkB;AACpD,QAAM,eAAe,uBAAO,cAAc;AAC1C,QAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAM,cAAc;AACpB,QAAM,qBAAqB;AAC3B,QAAM,QAAQ,CAAC;AACf,aAAS,OAAO,OAAO,SAAS;AAC9B,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,uBAAuB,OAAO;AAAA,MAChD;AAAA,IACF;AAGA,aAAS,sBAAsB,KAAK;AAClC,UAAI,MAAM;AACV,UAAIC,KAAI,IAAI;AACZ,YAAM,QAAQ,IAAI,CAAC,MAAM,MAAM,IAAI;AACnC,aAAOA,MAAK,QAAQ,GAAGA,MAAK,GAAG;AAC7B,cAAM,IAAI,IAAI,MAAMA,KAAI,GAAGA,EAAC,CAAC,GAAG,GAAG;AAAA,MACrC;AACA,aAAO,GAAG,IAAI,MAAM,GAAGA,EAAC,CAAC,GAAG,GAAG;AAAA,IACjC;AACA,aAASC,YAAW,KAAK,KAAK,MAAM;AAClC,UAAI,OAAO,QAAQ,YAAY;AAC7B;AAAA,UACE,IAAI,UAAU,KAAK;AAAA;AAAA,UAEnB,SAAS,GAAG,oCAAoC,KAAK,MAAM,uCAAuC,IAAI,MAAM;AAAA,QAC9G;AACA,eAAO,IAAI,GAAG,IAAI;AAAA,MACpB;AACA,YAAM,kBAAkB,IAAI,MAAM,aAAa,KAAK,CAAC,GAAG;AACxD;AAAA,QACE,mBAAmB,KAAK;AAAA,QACxB,SAAS,GAAG,oCAAoC,KAAK,MAAM,uCAAuC,cAAc;AAAA,MAClH;AACA,UAAI,KAAK,WAAW,GAAG;AACrB,eAAO;AAAA,MACT;AACA,aAAOH,QAAO,KAAK,GAAG,IAAI;AAAA,IAC5B;AACA,aAAS,EAAE,MAAM,SAAS,MAAM;AAC9B,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AAAA,MACA,MAAM,kBAAkB,KAAK;AAAA,QAC3B,eAAe,MAAM;AACnB,gBAAMG,YAAW,MAAM,SAAS,IAAI,CAAC;AAAA,QACvC;AAAA,QACA,WAAW;AACT,iBAAO,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,QAChD;AAAA,MACF;AACA,aAAO,iBAAiB,UAAU,WAAW;AAAA,QAC3C,MAAM;AAAA,UACJ,OAAO,KAAK;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,QACA,UAAU;AAAA,UACR,QAAQ;AACN,mBAAO,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM,KAAK,OAAO;AAAA,UAChD;AAAA,UACA,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,MACF,CAAC;AACD,gBAAU,UAAU,OAAO;AAC3B,gBAAU,UAAU,YAAY,IAAI;AACpC,YAAM,IAAI,IAAI;AAAA,IAChB;AACA,aAAS,gBAAgB,IAAI;AAG3B,YAAMC,UAAS,qBAAqB,GAAG;AACvC,aAAO,eAAe,IAAI,QAAQ;AAAA,QAChC,OAAOA;AAAA,MACT,CAAC;AACD,aAAO;AAAA,IACT;AACA,aAAS,mBAAmB,YAAY,YAAY;AAClD,UAAI,cAAc,cAAc,eAAe,YAAY;AACzD,YAAI,MAAM,QAAQ,WAAW,MAAM,GAAG;AAEpC,qBAAW,OAAO,KAAK,UAAU;AACjC,iBAAO;AAAA,QACT;AACA,cAAM,MAAM,IAAI,eAAe,CAAC,YAAY,UAAU,GAAG,WAAW,OAAO;AAC3E,YAAI,OAAO,WAAW;AACtB,eAAO;AAAA,MACT;AACA,aAAO,cAAc;AAAA,IACvB;AACA,QAAM,aAAN,cAAyB,MAAM;AAAA,MAC7B,YAAY,UAAU,6BAA6B,UAAU,QAAW;AACtE,YAAI,YAAY,UAAa,OAAO,YAAY,UAAU;AACxD,gBAAM,IAAI,MAAM,qBAAqB,WAAW,UAAU,OAAO;AAAA,QACnE;AACA,cAAM,SAAS,OAAO;AACtB,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AACA,MAAE,iBAAiB,MAAM,KAAK;AAC9B;AAAA,MACE;AAAA,MACA,CAAC,MAAM,UAAU,WAAW;AAC1B,eAAO,OAAO,SAAS,UAAU,yBAAyB;AAC1D,YAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,qBAAW,CAAC,QAAQ;AAAA,QACtB;AACA,YAAI,MAAM;AACV,YAAI,KAAK,SAAS,WAAW,GAAG;AAE9B,iBAAO,GAAG,IAAI;AAAA,QAChB,OAAO;AACL,iBAAO,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,IAAI,aAAa,UAAU;AAAA,QAClE;AACA,eAAO;AACP,cAAM,QAAQ,CAAC;AACf,cAAM,YAAY,CAAC;AACnB,cAAM,QAAQ,CAAC;AACf,mBAAW,SAAS,UAAU;AAC5B,iBAAO,OAAO,UAAU,UAAU,gDAAgD;AAClF,cAAI,OAAO,SAAS,KAAK,GAAG;AAC1B,kBAAM,KAAK,MAAM,YAAY,CAAC;AAAA,UAChC,WAAW,YAAY,KAAK,KAAK,GAAG;AAClC,sBAAU,KAAK,KAAK;AAAA,UACtB,OAAO;AACL,mBAAO,UAAU,UAAU,kDAAkD;AAC7E,kBAAM,KAAK,KAAK;AAAA,UAClB;AAAA,QACF;AAIA,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,MAAM,MAAM,QAAQ,QAAQ;AAClC,cAAI,QAAQ,IAAI;AACd,kBAAM,OAAO,OAAO,KAAK,CAAC;AAC1B,sBAAU,KAAK,QAAQ;AAAA,UACzB;AAAA,QACF;AACA,YAAI,MAAM,SAAS,GAAG;AACpB,kBAAQ,MAAM,QAAQ;AAAA,YACpB,KAAK;AACH,qBAAO,WAAW,MAAM,CAAC,CAAC;AAC1B;AAAA,YACF,KAAK;AACH,qBAAO,eAAe,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC;AAC7C;AAAA,YACF,SAAS;AACP,oBAAM,OAAO,MAAM,IAAI;AACvB,qBAAO,eAAe,MAAM,KAAK,IAAI,CAAC,QAAQ,IAAI;AAAA,YACpD;AAAA,UACF;AACA,cAAI,UAAU,SAAS,KAAK,MAAM,SAAS,GAAG;AAC5C,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,UAAU,SAAS,GAAG;AACxB,kBAAQ,UAAU,QAAQ;AAAA,YACxB,KAAK;AACH,qBAAO,kBAAkB,UAAU,CAAC,CAAC;AACrC;AAAA,YACF,KAAK;AACH,qBAAO,kBAAkB,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC;AACxD;AAAA,YACF,SAAS;AACP,oBAAM,OAAO,UAAU,IAAI;AAC3B,qBAAO,kBAAkB,UAAU,KAAK,IAAI,CAAC,QAAQ,IAAI;AAAA,YAC3D;AAAA,UACF;AACA,cAAI,MAAM,SAAS,GAAG;AACpB,mBAAO;AAAA,UACT;AAAA,QACF;AACA,gBAAQ,MAAM,QAAQ;AAAA,UACpB,KAAK;AACH;AAAA,UACF,KAAK;AACH,gBAAI,MAAM,CAAC,EAAE,YAAY,MAAM,MAAM,CAAC,GAAG;AACvC,qBAAO;AAAA,YACT;AACA,mBAAO,GAAG,MAAM,CAAC,CAAC;AAClB;AAAA,UACF,KAAK;AACH,mBAAO,UAAU,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC;AAAA,UACF,SAAS;AACP,kBAAM,OAAO,MAAM,IAAI;AACvB,mBAAO,UAAU,MAAM,KAAK,IAAI,CAAC,QAAQ,IAAI;AAAA,UAC/C;AAAA,QACF;AACA,YAAI,UAAU,MAAM;AAClB,iBAAO,cAAc,MAAM;AAAA,QAC7B,WAAW,OAAO,WAAW,cAAc,OAAO,MAAM;AACtD,iBAAO,uBAAuB,OAAO,IAAI;AAAA,QAC3C,WAAW,OAAO,WAAW,UAAU;AACrC,cAAI;AACJ,eACG,sBAAsB,OAAO,iBAAiB,QAC/C,wBAAwB,UACxB,oBAAoB,MACpB;AACA,mBAAO,6BAA6B,OAAO,YAAY,IAAI;AAAA,UAC7D,OAAO;AACL,kBAAM,YAAYH,SAAQ,QAAQ;AAAA,cAChC,OAAO;AAAA,YACT,CAAC;AACD,mBAAO,cAAc,SAAS;AAAA,UAChC;AAAA,QACF,OAAO;AACL,cAAI,YAAYA,SAAQ,QAAQ;AAAA,YAC9B,QAAQ;AAAA,UACV,CAAC;AACD,cAAI,UAAU,SAAS,IAAI;AACzB,wBAAY,GAAG,UAAU,MAAM,GAAG,EAAE,CAAC;AAAA,UACvC;AACA,iBAAO,mBAAmB,OAAO,MAAM,KAAK,SAAS;AAAA,QACvD;AACA,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,CAAC,MAAM,OAAO,SAAS,iBAAiB;AACtC,YAAI,YAAYA,SAAQ,KAAK;AAC7B,YAAI,UAAU,SAAS,KAAK;AAC1B,sBAAY,UAAU,MAAM,GAAG,GAAG,IAAI;AAAA,QACxC;AACA,cAAM,OAAO,KAAK,SAAS,GAAG,IAAI,aAAa;AAC/C,eAAO,OAAO,IAAI,KAAK,IAAI,KAAK,MAAM,cAAc,SAAS;AAAA,MAC/D;AAAA,MACA;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,CAAC,OAAO,MAAM,UAAU;AACtB,YAAI;AACJ,cAAM,OACJ,UAAU,QACV,UAAU,WACT,qBAAqB,MAAM,iBAAiB,QAC7C,uBAAuB,UACvB,mBAAmB,OACf,eAAe,MAAM,YAAY,IAAI,KACrC,QAAQ,OAAO,KAAK;AAC1B,eAAO,YAAY,KAAK,6BAA6B,IAAI,sBAA2B,IAAI;AAAA,MAC1F;AAAA,MACA;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,IAAI,SAAS;AACX,eAAO,KAAK,SAAS,GAAG,wCAAwC;AAChE,YAAI;AACJ,cAAM,MAAM,KAAK;AACjB,gBAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAACI,OAAM,IAAIA,EAAC,GAAG,EAAE,KAAK,MAAM;AAC7E,gBAAQ,KAAK;AAAA,UACX,KAAK;AACH,mBAAO,OAAO,KAAK,CAAC,CAAC;AACrB;AAAA,UACF,KAAK;AACH,mBAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;AACpC;AAAA,UACF;AACE;AACE,oBAAM,OAAO,KAAK,IAAI;AACtB,qBAAO,OAAO,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI;AAAA,YAC5C;AACA;AAAA,QACJ;AACA,eAAO,GAAG,GAAG;AAAA,MACf;AAAA,MACA;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,CAAC,KAAKC,QAAO,UAAU;AACrB,eAAOA,QAAO,0BAA0B;AACxC,YAAI;AACJ,YAAI,OAAO,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;AACxD,qBAAW,sBAAsB,OAAO,KAAK,CAAC;AAAA,QAChD,WAAW,OAAO,UAAU,UAAU;AACpC,qBAAW,OAAO,KAAK;AACvB,gBAAM,QAAQ,OAAO,CAAC,KAAK,OAAO,EAAE;AACpC,cAAI,QAAQ,SAAS,QAAQ,CAAC,OAAO;AACnC,uBAAW,sBAAsB,QAAQ;AAAA,UAC3C;AACA,sBAAY;AAAA,QACd,OAAO;AACL,qBAAWL,SAAQ,KAAK;AAAA,QAC1B;AACA,eAAO,iBAAiB,GAAG,iCAAiCK,MAAK,cAAc,QAAQ;AAAA,MACzF;AAAA,MACA;AAAA,IACF;AACA,MAAE,yBAAyB,kCAAkC,KAAK;AAClE,MAAE,8BAA8B,oCAAoC,KAAK;AACzE,MAAE,+BAA+B,8CAA8C,KAAK;AACpF,MAAE,0BAA0B,6BAA6B,KAAK;AAC9D,MAAE,wBAAwB,+CAA+C,KAAK;AAC9E,MAAE,0BAA0B,uCAAuC,SAAS;AAC5E,MAAE,8BAA8B,mBAAmB,KAAK;AACxD,MAAE,6BAA6B,2BAA2B,KAAK;AAC/D,MAAE,sCAAsC,oCAAoC,KAAK;AACjF,MAAE,8BAA8B,mBAAmB,KAAK;AACxD,MAAE,wBAAwB,wBAAwB,SAAS;AAC3D,IAAAP,QAAO,UAAU;AAAA,MACf;AAAA,MACA,oBAAoB,gBAAgB,kBAAkB;AAAA,MACtD;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;;;;;ACnUA,QAAM,cAAc,oBAAI,QAAO;AAO/B,QAAM,WAAW,oBAAI,QAAO;AAQ5B,aAAS,GAAG,OAAO;AACf,YAAM,OAAO,YAAY,IAAI,KAAK;AAClC,cAAQ;QACJ,QAAQ;QACR;QACA;;AAEJ,aAAO;;AAOX,aAAS,cAAc,MAAM;AACzB,UAAI,KAAK,mBAAmB,MAAM;AAC9B,YACI,OAAO,YAAY,eACnB,OAAO,QAAQ,UAAU,YAC3B;AACE,kBAAQ;YACJ;YACA,KAAK;;;AAGb;;AAEJ,UAAI,CAAC,KAAK,MAAM,YAAY;AACxB;;AAGJ,WAAK,WAAW;AAChB,UAAI,OAAO,KAAK,MAAM,mBAAmB,YAAY;AACjD,aAAK,MAAM,eAAc;;;AAcjC,aAAS,MAAM,aAAa,OAAO;AAC/B,kBAAY,IAAI,MAAM;QAClB;QACA;QACA,YAAY;QACZ,eAAe;QACf,UAAU;QACV,SAAS;QACT,kBAAkB;QAClB,iBAAiB;QACjB,WAAW,MAAM,aAAa,KAAK,IAAG;OACzC;AAGD,aAAO,eAAe,MAAM,aAAa,EAAE,OAAO,OAAO,YAAY,KAAI,CAAE;AAG3E,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,eAASQ,KAAI,GAAGA,KAAI,KAAK,QAAQ,EAAEA,IAAG;AAClC,cAAM,MAAM,KAAKA,EAAC;AAClB,YAAI,EAAE,OAAO,OAAO;AAChB,iBAAO,eAAe,MAAM,KAAK,yBAAyB,GAAG,CAAC;;;;AAM1E,UAAM,YAAY;;;;;MAKd,IAAI,OAAO;AACP,eAAO,GAAG,IAAI,EAAE,MAAM;;;;;;MAO1B,IAAI,SAAS;AACT,eAAO,GAAG,IAAI,EAAE;;;;;;MAOpB,IAAI,gBAAgB;AAChB,eAAO,GAAG,IAAI,EAAE;;;;;MAMpB,eAAe;AACX,cAAM,gBAAgB,GAAG,IAAI,EAAE;AAC/B,YAAI,iBAAiB,MAAM;AACvB,iBAAO,CAAA;;AAEX,eAAO,CAAC,aAAa;;;;;;MAOzB,IAAI,OAAO;AACP,eAAO;;;;;;MAOX,IAAI,kBAAkB;AAClB,eAAO;;;;;;MAOX,IAAI,YAAY;AACZ,eAAO;;;;;;MAOX,IAAI,iBAAiB;AACjB,eAAO;;;;;;MAOX,IAAI,aAAa;AACb,eAAO,GAAG,IAAI,EAAE;;;;;;MAOpB,kBAAkB;AACd,cAAM,OAAO,GAAG,IAAI;AAEpB,aAAK,UAAU;AACf,YAAI,OAAO,KAAK,MAAM,oBAAoB,YAAY;AAClD,eAAK,MAAM,gBAAe;;;;;;;MAQlC,2BAA2B;AACvB,cAAM,OAAO,GAAG,IAAI;AAEpB,aAAK,UAAU;AACf,aAAK,mBAAmB;AACxB,YAAI,OAAO,KAAK,MAAM,6BAA6B,YAAY;AAC3D,eAAK,MAAM,yBAAwB;;;;;;;MAQ3C,IAAI,UAAU;AACV,eAAO,QAAQ,GAAG,IAAI,EAAE,MAAM,OAAO;;;;;;MAOzC,IAAI,aAAa;AACb,eAAO,QAAQ,GAAG,IAAI,EAAE,MAAM,UAAU;;;;;;MAO5C,iBAAiB;AACb,sBAAc,GAAG,IAAI,CAAC;;;;;;MAO1B,IAAI,mBAAmB;AACnB,eAAO,GAAG,IAAI,EAAE;;;;;;MAOpB,IAAI,WAAW;AACX,eAAO,QAAQ,GAAG,IAAI,EAAE,MAAM,QAAQ;;;;;;MAO1C,IAAI,YAAY;AACZ,eAAO,GAAG,IAAI,EAAE;;;;;;;MAQpB,IAAI,aAAa;AACb,eAAO,GAAG,IAAI,EAAE;;;;;;;MAQpB,IAAI,eAAe;AACf,eAAO,GAAG,IAAI,EAAE;;MAEpB,IAAI,aAAa,OAAO;AACpB,YAAI,CAAC,OAAO;AACR;;AAEJ,cAAM,OAAO,GAAG,IAAI;AAEpB,aAAK,UAAU;AACf,YAAI,OAAO,KAAK,MAAM,iBAAiB,WAAW;AAC9C,eAAK,MAAM,eAAe;;;;;;;;MASlC,IAAI,cAAc;AACd,eAAO,CAAC,GAAG,IAAI,EAAE;;MAErB,IAAI,YAAY,OAAO;AACnB,YAAI,CAAC,OAAO;AACR,wBAAc,GAAG,IAAI,CAAC;;;;;;;;;;MAW9B,YAAY;;;AAMhB,WAAO,eAAe,MAAM,WAAW,eAAe;MAClD,OAAO;MACP,cAAc;MACd,UAAU;KACb;AAGD,QAAI,OAAO,WAAW,eAAe,OAAO,OAAO,UAAU,aAAa;AACtE,aAAO,eAAe,MAAM,WAAW,OAAO,MAAM,SAAS;AAG7D,eAAS,IAAI,OAAO,MAAM,WAAW,KAAK;;AAS9C,aAAS,yBAAyB,KAAK;AACnC,aAAO;QACH,MAAM;AACF,iBAAO,GAAG,IAAI,EAAE,MAAM,GAAG;;QAE7B,IAAI,OAAO;AACP,aAAG,IAAI,EAAE,MAAM,GAAG,IAAI;;QAE1B,cAAc;QACd,YAAY;;;AAUpB,aAAS,qBAAqB,KAAK;AAC/B,aAAO;QACH,QAAQ;AACJ,gBAAM,QAAQ,GAAG,IAAI,EAAE;AACvB,iBAAO,MAAM,GAAG,EAAE,MAAM,OAAO,SAAS;;QAE5C,cAAc;QACd,YAAY;;;AAWpB,aAAS,cAAc,WAAW,OAAO;AACrC,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,UAAI,KAAK,WAAW,GAAG;AACnB,eAAO;;AAIX,eAAS,YAAY,aAAa,OAAO;AACrC,kBAAU,KAAK,MAAM,aAAa,KAAK;;AAG3C,kBAAY,YAAY,OAAO,OAAO,UAAU,WAAW;QACvD,aAAa,EAAE,OAAO,aAAa,cAAc,MAAM,UAAU,KAAI;OACxE;AAGD,eAASA,KAAI,GAAGA,KAAI,KAAK,QAAQ,EAAEA,IAAG;AAClC,cAAM,MAAM,KAAKA,EAAC;AAClB,YAAI,EAAE,OAAO,UAAU,YAAY;AAC/B,gBAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,gBAAM,SAAS,OAAO,WAAW,UAAU;AAC3C,iBAAO;YACH,YAAY;YACZ;YACA,SACM,qBAAqB,GAAG,IACxB,yBAAyB,GAAG;;;;AAK9C,aAAO;;AASX,aAAS,WAAW,OAAO;AACvB,UAAI,SAAS,QAAQ,UAAU,OAAO,WAAW;AAC7C,eAAO;;AAGX,UAAI,UAAU,SAAS,IAAI,KAAK;AAChC,UAAI,WAAW,MAAM;AACjB,kBAAU,cAAc,WAAW,OAAO,eAAe,KAAK,CAAC,GAAG,KAAK;AACvE,iBAAS,IAAI,OAAO,OAAO;;AAE/B,aAAO;;AAUJ,aAAS,UAAU,aAAa,OAAO;AAC1C,YAAM,UAAU,WAAW,OAAO,eAAe,KAAK,CAAC;AACvD,aAAO,IAAI,QAAQ,aAAa,KAAK;;AASlC,aAAS,UAAU,OAAO;AAC7B,aAAO,GAAG,KAAK,EAAE;;AAUd,aAAS,cAAc,OAAO,YAAY;AAC7C,SAAG,KAAK,EAAE,aAAa;;AAUpB,aAAS,iBAAiB,OAAO,eAAe;AACnD,SAAG,KAAK,EAAE,gBAAgB;;AAUvB,aAAS,mBAAmB,OAAO,iBAAiB;AACvD,SAAG,KAAK,EAAE,kBAAkB;;ACvchC,QAAM,eAAe,oBAAI,QAAO;AAGhC,QAAM,UAAU;AAChB,QAAM,SAAS;AACf,QAAM,YAAY;AAOlB,aAASC,UAAS,GAAG;AACjB,aAAO,MAAM,QAAQ,OAAO,MAAM;;AAStC,aAAS,aAAa,aAAa;AAC/B,YAAM,YAAY,aAAa,IAAI,WAAW;AAC9C,UAAI,aAAa,MAAM;AACnB,cAAM,IAAI;UACN;;;AAGR,aAAO;;AASX,aAAS,+BAA+B,WAAW;AAC/C,aAAO;QACH,MAAM;AACF,gBAAM,YAAY,aAAa,IAAI;AACnC,cAAI,OAAO,UAAU,IAAI,SAAS;AAClC,iBAAO,QAAQ,MAAM;AACjB,gBAAI,KAAK,iBAAiB,WAAW;AACjC,qBAAO,KAAK;;AAEhB,mBAAO,KAAK;;AAEhB,iBAAO;;QAGX,IAAI,UAAU;AACV,cAAI,OAAO,aAAa,cAAc,CAACA,UAAS,QAAQ,GAAG;AACvD,uBAAW;;AAEf,gBAAM,YAAY,aAAa,IAAI;AAGnC,cAAI,OAAO;AACX,cAAI,OAAO,UAAU,IAAI,SAAS;AAClC,iBAAO,QAAQ,MAAM;AACjB,gBAAI,KAAK,iBAAiB,WAAW;AAEjC,kBAAI,SAAS,MAAM;AACf,qBAAK,OAAO,KAAK;yBACV,KAAK,SAAS,MAAM;AAC3B,0BAAU,IAAI,WAAW,KAAK,IAAI;qBAC/B;AACH,0BAAU,OAAO,SAAS;;mBAE3B;AACH,qBAAO;;AAGX,mBAAO,KAAK;;AAIhB,cAAI,aAAa,MAAM;AACnB,kBAAM,UAAU;cACZ;cACA,cAAc;cACd,SAAS;cACT,MAAM;cACN,MAAM;;AAEV,gBAAI,SAAS,MAAM;AACf,wBAAU,IAAI,WAAW,OAAO;mBAC7B;AACH,mBAAK,OAAO;;;;QAIxB,cAAc;QACd,YAAY;;;AAUpB,aAAS,qBAAqB,sBAAsB,WAAW;AAC3D,aAAO;QACH;QACA,KAAK,SAAS;QACd,+BAA+B,SAAS;;;AAUhD,aAAS,wBAAwB,YAAY;AAEzC,eAAS,oBAAoB;AACzB,oBAAY,KAAK,IAAI;;AAGzB,wBAAkB,YAAY,OAAO,OAAO,YAAY,WAAW;QAC/D,aAAa;UACT,OAAO;UACP,cAAc;UACd,UAAU;;OAEjB;AAED,eAASD,KAAI,GAAGA,KAAI,WAAW,QAAQ,EAAEA,IAAG;AACxC,6BAAqB,kBAAkB,WAAW,WAAWA,EAAC,CAAC;;AAGnE,aAAO;;AAgBX,aAAS,cAAc;AAEnB,UAAI,gBAAgB,aAAa;AAC7B,qBAAa,IAAI,MAAM,oBAAI,IAAG,CAAE;AAChC;;AAEJ,UAAI,UAAU,WAAW,KAAK,MAAM,QAAQ,UAAU,CAAC,CAAC,GAAG;AACvD,eAAO,wBAAwB,UAAU,CAAC,CAAC;;AAE/C,UAAI,UAAU,SAAS,GAAG;AACtB,cAAM,QAAQ,IAAI,MAAM,UAAU,MAAM;AACxC,iBAASA,KAAI,GAAGA,KAAI,UAAU,QAAQ,EAAEA,IAAG;AACvC,gBAAMA,EAAC,IAAI,UAAUA,EAAC;;AAE1B,eAAO,wBAAwB,KAAK;;AAExC,YAAM,IAAI,UAAU,mCAAmC;;AAK3D,gBAAY,YAAY;;;;;;;;MAQpB,iBAAiB,WAAW,UAAU,SAAS;AAC3C,YAAI,YAAY,MAAM;AAClB;;AAEJ,YAAI,OAAO,aAAa,cAAc,CAACC,UAAS,QAAQ,GAAG;AACvD,gBAAM,IAAI,UAAU,+CAA+C;;AAGvE,cAAM,YAAY,aAAa,IAAI;AACnC,cAAM,eAAeA,UAAS,OAAO;AACrC,cAAM,UAAU,eACV,QAAQ,QAAQ,OAAO,IACvB,QAAQ,OAAO;AACrB,cAAM,eAAe,UAAU,UAAU;AACzC,cAAM,UAAU;UACZ;UACA;UACA,SAAS,gBAAgB,QAAQ,QAAQ,OAAO;UAChD,MAAM,gBAAgB,QAAQ,QAAQ,IAAI;UAC1C,MAAM;;AAIV,YAAI,OAAO,UAAU,IAAI,SAAS;AAClC,YAAI,SAAS,QAAW;AACpB,oBAAU,IAAI,WAAW,OAAO;AAChC;;AAIJ,YAAI,OAAO;AACX,eAAO,QAAQ,MAAM;AACjB,cACI,KAAK,aAAa,YAClB,KAAK,iBAAiB,cACxB;AAEE;;AAEJ,iBAAO;AACP,iBAAO,KAAK;;AAIhB,aAAK,OAAO;;;;;;;;;MAUhB,oBAAoB,WAAW,UAAU,SAAS;AAC9C,YAAI,YAAY,MAAM;AAClB;;AAGJ,cAAM,YAAY,aAAa,IAAI;AACnC,cAAM,UAAUA,UAAS,OAAO,IAC1B,QAAQ,QAAQ,OAAO,IACvB,QAAQ,OAAO;AACrB,cAAM,eAAe,UAAU,UAAU;AAEzC,YAAI,OAAO;AACX,YAAI,OAAO,UAAU,IAAI,SAAS;AAClC,eAAO,QAAQ,MAAM;AACjB,cACI,KAAK,aAAa,YAClB,KAAK,iBAAiB,cACxB;AACE,gBAAI,SAAS,MAAM;AACf,mBAAK,OAAO,KAAK;uBACV,KAAK,SAAS,MAAM;AAC3B,wBAAU,IAAI,WAAW,KAAK,IAAI;mBAC/B;AACH,wBAAU,OAAO,SAAS;;AAE9B;;AAGJ,iBAAO;AACP,iBAAO,KAAK;;;;;;;;MASpB,cAAc,OAAO;AACjB,YAAI,SAAS,QAAQ,OAAO,MAAM,SAAS,UAAU;AACjD,gBAAM,IAAI,UAAU,kCAAkC;;AAI1D,cAAM,YAAY,aAAa,IAAI;AACnC,cAAM,YAAY,MAAM;AACxB,YAAI,OAAO,UAAU,IAAI,SAAS;AAClC,YAAI,QAAQ,MAAM;AACd,iBAAO;;AAIX,cAAM,eAAe,UAAU,MAAM,KAAK;AAI1C,YAAI,OAAO;AACX,eAAO,QAAQ,MAAM;AAEjB,cAAI,KAAK,MAAM;AACX,gBAAI,SAAS,MAAM;AACf,mBAAK,OAAO,KAAK;uBACV,KAAK,SAAS,MAAM;AAC3B,wBAAU,IAAI,WAAW,KAAK,IAAI;mBAC/B;AACH,wBAAU,OAAO,SAAS;;iBAE3B;AACH,mBAAO;;AAIX;YACI;YACA,KAAK,UAAU,KAAK,WAAW;;AAEnC,cAAI,OAAO,KAAK,aAAa,YAAY;AACrC,gBAAI;AACA,mBAAK,SAAS,KAAK,MAAM,YAAY;qBAChC,KAAK;AACV,kBACI,OAAO,YAAY,eACnB,OAAO,QAAQ,UAAU,YAC3B;AACE,wBAAQ,MAAM,GAAG;;;qBAIzB,KAAK,iBAAiB,aACtB,OAAO,KAAK,SAAS,gBAAgB,YACvC;AACE,iBAAK,SAAS,YAAY,YAAY;;AAI1C,cAAI,UAAU,YAAY,GAAG;AACzB;;AAGJ,iBAAO,KAAK;;AAEhB,2BAAmB,cAAc,IAAI;AACrC,sBAAc,cAAc,CAAC;AAC7B,yBAAiB,cAAc,IAAI;AAEnC,eAAO,CAAC,aAAa;;;AAK7B,WAAO,eAAe,YAAY,WAAW,eAAe;MACxD,OAAO;MACP,cAAc;MACd,UAAU;KACb;AAGD,QACI,OAAO,WAAW,eAClB,OAAO,OAAO,gBAAgB,aAChC;AACE,aAAO,eAAe,YAAY,WAAW,OAAO,YAAY,SAAS;;;;;;;;;;;;;;;;;ACrW7E,QAAqBC,eAArB,cAAyCC,gBAAAA,YAAoC;;;;MAIzE,cAAA;AACI,cAAK;AACL,cAAM,IAAI,UAAU,4CAA4C;;;;;MAMpE,IAAW,UAAO;AACd,cAAMC,WAAU,aAAa,IAAI,IAAI;AACrC,YAAI,OAAOA,aAAY,WAAW;AAC9B,gBAAM,IAAI,UACN,0DACI,SAAS,OAAO,SAAS,OAAO,IACpC,EAAE;;AAGV,eAAOA;;;AAGfC,oBAAAA,qBAAqBH,aAAY,WAAW,OAAO;AAKnD,aAAgB,oBAAiB;AAC7B,YAAM,SAAS,OAAO,OAAOA,aAAY,SAAS;AAClDC,sBAAAA,YAAY,KAAK,MAAM;AACvB,mBAAa,IAAI,QAAQ,KAAK;AAC9B,aAAO;;AAMX,aAAgB,YAAY,QAAmB;AAC3C,UAAI,aAAa,IAAI,MAAM,MAAM,OAAO;AACpC;;AAGJ,mBAAa,IAAI,QAAQ,IAAI;AAC7B,aAAO,cAAuB,EAAE,MAAM,QAAO,CAAE;;AAMnD,QAAM,eAAe,oBAAI,QAAO;AAGhC,WAAO,iBAAiBD,aAAY,WAAW;MAC3C,SAAS,EAAE,YAAY,KAAI;KAC9B;AAGD,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,gBAAgB,UAAU;AACxE,aAAO,eAAeA,aAAY,WAAW,OAAO,aAAa;QAC7D,cAAc;QACd,OAAO;OACV;;AC/EL,QAAqBI,mBAArB,MAAoC;;;;MAIhC,cAAA;AACI,QAAAC,SAAQ,IAAI,MAAM,kBAAiB,CAAE;;;;;MAMzC,IAAW,SAAM;AACb,eAAO,UAAU,IAAI;;;;;MAMlB,QAAK;AACR,oBAAY,UAAU,IAAI,CAAC;;;AAOnC,QAAMA,WAAU,oBAAI,QAAO;AAK3B,aAAS,UAAU,YAA2B;AAC1C,YAAM,SAASA,SAAQ,IAAI,UAAU;AACrC,UAAI,UAAU,MAAM;AAChB,cAAM,IAAI,UACN,8DACI,eAAe,OAAO,SAAS,OAAO,UAC1C,EAAE;;AAGV,aAAO;;AAIX,WAAO,iBAAiBD,iBAAgB,WAAW;MAC/C,QAAQ,EAAE,YAAY,KAAI;MAC1B,OAAO,EAAE,YAAY,KAAI;KAC5B;AAED,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,gBAAgB,UAAU;AACxE,aAAO,eAAeA,iBAAgB,WAAW,OAAO,aAAa;QACjE,cAAc;QACd,OAAO;OACV;;;;;;;;;;;;AC3DL,IAAAE,gBAAA;AAAA,kDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,eAAe,QAAQ,QAAQ;AACrC,QAAM,EAAE,QAAAC,SAAQ,SAAAC,SAAQ,IAAI;AAC5B,QAAM;AAAA,MACJ,OAAO,EAAE,qBAAqB;AAAA,IAChC,IAAI;AACJ,QAAM,EAAE,wBAAwB,gBAAgB,cAAc,IAAI;AAClE,QAAMC,eAAc,WAAW,eAAe,2BAA4B;AAC1E,QAAMC,mBAAkB,WAAW,mBAAmB,2BAA4B;AAClF,QAAM,gBAAgB,OAAO,eAAe,iBAAkB;AAAA,IAAC,CAAC,EAAE;AAClE,QAAM,OAAO,WAAW,QAAQ,aAAa;AAE7C,QAAM,SACJ,OAAO,SAAS,cACZ,SAASC,QAAO,GAAG;AAEjB,aAAO,aAAa;AAAA,IACtB,IACA,SAASA,QAAO,GAAG;AACjB,aAAO;AAAA,IACT;AAGN,QAAM,sBAAsB,CAAC,QAAQ,SAAS;AAC5C,UAAI,WAAW,WAAc,WAAW,QAAQ,OAAO,WAAW,YAAY,EAAE,aAAa,UAAU;AACrG,cAAM,IAAI,qBAAqB,MAAM,eAAe,MAAM;AAAA,MAC5D;AAAA,IACF;AACA,QAAM,mBAAmB,CAAC,OAAO,SAAS;AACxC,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,IAAI,qBAAqB,MAAM,YAAY,KAAK;AAAA,MACxD;AAAA,IACF;AACA,IAAAL,QAAO,UAAU;AAAA,MACf;AAAA,MACA,cAAc,OAAO,OAAO,CAAC,CAAC;AAAA,MAC9B,KAAK,UAAU;AACb,YAAI,SAAS;AACb,eAAO,YAAa,MAAM;AACxB,cAAI,QAAQ;AACV;AAAA,UACF;AACA,mBAAS;AACT,mBAAS,MAAM,MAAM,IAAI;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,uBAAuB,WAAY;AACjC,YAAI;AACJ,YAAIM;AAGJ,cAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACxC,oBAAU;AACV,UAAAA,UAAS;AAAA,QACX,CAAC;AACD,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAAA;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAU,IAAI;AACZ,eAAO,IAAI,QAAQ,CAAC,SAASA,YAAW;AACtC,aAAG,CAAC,QAAQ,SAAS;AACnB,gBAAI,KAAK;AACP,qBAAOA,QAAO,GAAG;AAAA,YACnB;AACA,mBAAO,QAAQ,GAAG,IAAI;AAAA,UACxB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO,WAAY;AAAA,QAAC;AAAA,MACtB;AAAA,MACA,QAAAL;AAAA,MACA,SAAAC;AAAA,MACA,OAAO;AAAA,QACL,gBAAgB,IAAI;AAClB,iBAAO,cAAc;AAAA,QACvB;AAAA,QACA,kBAAkB,KAAK;AACrB,iBAAO,YAAY,OAAO,GAAG;AAAA,QAC/B;AAAA,MACF;AAAA,MACA;AAAA,MACA,UAAU,IAAI,SAAS;AACrB,eAAO;AAAA,MACT;AAAA,MACA,kBACE,QAAQ,QAAQ,EAAE,oBAClB,SAASK,kBAAiB,QAAQ,UAAU;AAC1C,YAAI,WAAW,QAAW;AACxB,gBAAM,IAAI,qBAAqB,UAAU,eAAe,MAAM;AAAA,QAChE;AACA,4BAAoB,QAAQ,QAAQ;AACpC,yBAAiB,UAAU,UAAU;AACrC,YAAI;AACJ,YAAI,OAAO,SAAS;AAClB,yBAAe,MAAM,SAAS,CAAC;AAAA,QACjC,OAAO;AACL,iBAAO,iBAAiB,SAAS,UAAU;AAAA,YACzC,WAAW;AAAA,YACX,MAAM;AAAA,YACN,CAAC,sBAAsB,GAAG;AAAA,UAC5B,CAAC;AACD,gCAAsB,MAAM;AAC1B,mBAAO,oBAAoB,SAAS,QAAQ;AAAA,UAC9C;AAAA,QACF;AACA,eAAO;AAAA,UACL,WAAW;AAAA,UACX,CAAC,aAAa,IAAI;AAChB,gBAAI;AACH,aAAC,uBAAuB,yBAAyB,QAAQ,yBAAyB,SAC/E,SACA,qBAAqB;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,MACF,gBACEJ,aAAY,OACZ,SAAS,eAAeK,UAAS;AAE/B,YAAIA,SAAQ,WAAW,GAAG;AACxB,iBAAOA,SAAQ,CAAC;AAAA,QAClB;AACA,cAAM,KAAK,IAAIJ,iBAAgB;AAC/B,cAAM,QAAQ,MAAM,GAAG,MAAM;AAC7B,QAAAI,SAAQ,QAAQ,CAAC,WAAW;AAC1B,8BAAoB,QAAQ,SAAS;AACrC,iBAAO,iBAAiB,SAAS,OAAO;AAAA,YACtC,MAAM;AAAA,UACR,CAAC;AAAA,QACH,CAAC;AACD,WAAG,OAAO;AAAA,UACR;AAAA,UACA,MAAM;AACJ,YAAAA,SAAQ,QAAQ,CAAC,WAAW,OAAO,oBAAoB,SAAS,KAAK,CAAC;AAAA,UACxE;AAAA,UACA;AAAA,YACE,MAAM;AAAA,UACR;AAAA,QACF;AACA,eAAO,GAAG;AAAA,MACZ;AAAA,IACJ;AACA,IAAAR,QAAO,QAAQ,UAAU,SAAS,uBAAO,IAAI,8BAA8B;AAAA;AAAA;;;ACnJ3E;AAAA,4DAAAS,UAAAC,SAAA;AAAA;AAIA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA,OAAO,EAAE,qBAAqB,sBAAsB,uBAAuB,kBAAkB,mBAAmB;AAAA,IAClH,IAAI;AACJ,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,iBAAiB,kBAAkB,IAAI,gBAAwB;AACvE,QAAMC,WAAU,CAAC;AAMjB,aAAS,QAAQ,OAAO;AACtB,aAAO,WAAW,QAAQ;AAAA,IAC5B;AAMA,aAAS,SAAS,OAAO;AACvB,aAAO,UAAU,UAAU;AAAA,IAC7B;AACA,QAAM,WAAW;AACjB,QAAM,WAAW;AAajB,aAAS,cAAc,OAAO,MAAM,KAAK;AACvC,UAAI,OAAO,UAAU,aAAa;AAChC,gBAAQ;AAAA,MACV;AACA,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAI,oBAAoB,UAAU,KAAK,MAAM,MAAM;AACjD,gBAAM,IAAI,sBAAsB,MAAM,OAAO,QAAQ;AAAA,QACvD;AACA,gBAAQ,eAAe,OAAO,CAAC;AAAA,MACjC;AACA,qBAAe,OAAO,IAAI;AAC1B,aAAO;AAAA,IACT;AAYA,QAAM,kBAAkB,gBAAgB,CAAC,OAAO,MAAM,MAAM,wBAAwB,MAAM,2BAA2B;AACnH,UAAI,OAAO,UAAU,SAAU,OAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AACnF,UAAI,CAAC,gBAAgB,KAAK,EAAG,OAAM,IAAI,iBAAiB,MAAM,cAAc,KAAK;AACjF,UAAI,QAAQ,OAAO,QAAQ,IAAK,OAAM,IAAI,iBAAiB,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,KAAK;AAAA,IAClG,CAAC;AAYD,QAAM,gBAAgB,gBAAgB,CAAC,OAAO,MAAM,MAAM,aAAa,MAAM,eAAe;AAE1F,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AAAA,MACtD;AACA,UAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,cAAM,IAAI,iBAAiB,MAAM,cAAc,KAAK;AAAA,MACtD;AACA,UAAI,QAAQ,OAAO,QAAQ,KAAK;AAC9B,cAAM,IAAI,iBAAiB,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,KAAK;AAAA,MAClE;AAAA,IACF,CAAC;AAWD,QAAM,iBAAiB,gBAAgB,CAAC,OAAO,MAAM,WAAW,UAAU;AACxE,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AAAA,MACtD;AACA,UAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,cAAM,IAAI,iBAAiB,MAAM,cAAc,KAAK;AAAA,MACtD;AACA,YAAM,MAAM,WAAW,IAAI;AAE3B,YAAM,MAAM;AACZ,UAAI,QAAQ,OAAO,QAAQ,KAAK;AAC9B,cAAM,IAAI,iBAAiB,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,KAAK;AAAA,MAClE;AAAA,IACF,CAAC;AAUD,aAAS,eAAe,OAAO,MAAM;AACnC,UAAI,OAAO,UAAU,SAAU,OAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AAAA,IACrF;AAYA,aAAS,eAAe,OAAO,MAAM,MAAM,QAAW,KAAK;AACzD,UAAI,OAAO,UAAU,SAAU,OAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AACnF,UACG,OAAO,QAAQ,QAAQ,OACvB,OAAO,QAAQ,QAAQ,QACtB,OAAO,QAAQ,OAAO,SAAS,YAAY,KAAK,GAClD;AACA,cAAM,IAAI;AAAA,UACR;AAAA,UACA,GAAG,OAAO,OAAO,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,QAAQ,OAAO,OAAO,SAAS,EAAE,GAAG,OAAO,OAAO,MAAM,GAAG,KAAK,EAAE;AAAA,UAC7G;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAWA,QAAM,gBAAgB,gBAAgB,CAAC,OAAO,MAAM,UAAU;AAC5D,UAAI,CAAC,uBAAuB,OAAO,KAAK,GAAG;AACzC,cAAM,UAAU;AAAA,UACd,kBAAkB,OAAO,CAAC,MAAO,OAAO,MAAM,WAAW,IAAI,CAAC,MAAMD,QAAO,CAAC,CAAE;AAAA,UAC9E;AAAA,QACF;AACA,cAAM,SAAS,qBAAqB;AACpC,cAAM,IAAI,sBAAsB,MAAM,OAAO,MAAM;AAAA,MACrD;AAAA,IACF,CAAC;AAUD,aAAS,gBAAgB,OAAO,MAAM;AACpC,UAAI,OAAO,UAAU,UAAW,OAAM,IAAI,qBAAqB,MAAM,WAAW,KAAK;AAAA,IACvF;AAQA,aAAS,6BAA6B,SAAS,KAAK,cAAc;AAChE,aAAO,WAAW,QAAQ,CAAC,8BAA8B,SAAS,GAAG,IAAI,eAAe,QAAQ,GAAG;AAAA,IACrG;AAcA,QAAM,iBAAiB,gBAAgB,CAAC,OAAO,MAAM,UAAU,SAAS;AACtE,YAAM,aAAa,6BAA6B,SAAS,cAAc,KAAK;AAC5E,YAAM,gBAAgB,6BAA6B,SAAS,iBAAiB,KAAK;AAClF,YAAM,WAAW,6BAA6B,SAAS,YAAY,KAAK;AACxE,UACG,CAAC,YAAY,UAAU,QACvB,CAAC,cAAc,aAAa,KAAK,KACjC,OAAO,UAAU,aAAa,CAAC,iBAAiB,OAAO,UAAU,aAClE;AACA,cAAM,IAAI,qBAAqB,MAAM,UAAU,KAAK;AAAA,MACtD;AAAA,IACF,CAAC;AAcD,QAAM,qBAAqB,gBAAgB,CAAC,OAAO,SAAS;AAC1D,UAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY;AAC7E,cAAM,IAAI,qBAAqB,MAAM,gBAAgB,KAAK;AAAA,MAC5D;AAAA,IACF,CAAC;AAWD,QAAM,gBAAgB,gBAAgB,CAAC,OAAO,MAAM,YAAY,MAAM;AACpE,UAAI,CAAC,aAAa,KAAK,GAAG;AACxB,cAAM,IAAI,qBAAqB,MAAM,SAAS,KAAK;AAAA,MACrD;AACA,UAAI,MAAM,SAAS,WAAW;AAC5B,cAAM,SAAS,uBAAuB,SAAS;AAC/C,cAAM,IAAI,sBAAsB,MAAM,OAAO,MAAM;AAAA,MACrD;AAAA,IACF,CAAC;AAUD,aAAS,oBAAoB,OAAO,MAAM;AACxC,oBAAc,OAAO,IAAI;AACzB,eAASE,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACrC,uBAAe,MAAMA,EAAC,GAAG,GAAG,IAAI,IAAIA,EAAC,GAAG;AAAA,MAC1C;AAAA,IACF;AAUA,aAAS,qBAAqB,OAAO,MAAM;AACzC,oBAAc,OAAO,IAAI;AACzB,eAASA,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACrC,wBAAgB,MAAMA,EAAC,GAAG,GAAG,IAAI,IAAIA,EAAC,GAAG;AAAA,MAC3C;AAAA,IACF;AAUA,aAAS,yBAAyB,OAAO,MAAM;AAC7C,oBAAc,OAAO,IAAI;AACzB,eAASA,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACrC,cAAM,SAAS,MAAMA,EAAC;AACtB,cAAM,cAAc,GAAG,IAAI,IAAIA,EAAC;AAChC,YAAI,UAAU,MAAM;AAClB,gBAAM,IAAI,qBAAqB,aAAa,eAAe,MAAM;AAAA,QACnE;AACA,4BAAoB,QAAQ,WAAW;AAAA,MACzC;AAAA,IACF;AAOA,aAAS,mBAAmB,QAAQ,OAAO,UAAU;AACnD,qBAAe,QAAQ,IAAI;AAC3B,UAAID,SAAQ,MAAM,MAAM,QAAW;AACjC,YAAIA,SAAQ,2BAA2B,MAAM,CAAC,MAAM,QAAW;AAC7D,gBAAM,IAAI,mBAAmB,SAAS,yCAAyC;AAAA,QACjF;AACA,cAAM,IAAI,mBAAmB,MAAM;AAAA,MACrC;AAAA,IACF;AAUA,QAAM,iBAAiB,gBAAgB,CAAC,QAAQ,OAAO,aAAa;AAClE,UAAI,CAAC,kBAAkB,MAAM,GAAG;AAC9B,cAAM,IAAI,qBAAqB,MAAM,CAAC,UAAU,cAAc,UAAU,GAAG,MAAM;AAAA,MACnF;AAAA,IACF,CAAC;AAMD,aAASE,kBAAiB,MAAM,UAAU;AACxC,YAAM,qBAAqB,kBAAkB,QAAQ;AACrD,YAAM,SAAS,KAAK;AACpB,UAAI,uBAAuB,SAAS,SAAS,MAAM,GAAG;AACpD,cAAM,IAAI,sBAAsB,YAAY,UAAU,iCAAiC,MAAM,EAAE;AAAA,MACjG;AAAA,IACF;AAUA,aAAS,aAAa,MAAM,OAAO,QAAQ,YAAY,MAAM;AAC3D,UACG,OAAO,SAAS,YAAY,OAAO,SAAS,YAC5C,OAAO,SAAS,YAAY,oBAAoB,IAAI,EAAE,WAAW,KAClE,CAAC,SAAS,CAAC,SAAS,KACpB,OAAO,SACN,SAAS,KAAK,CAAC,WAChB;AACA,cAAM,IAAI,oBAAoB,MAAM,MAAM,SAAS;AAAA,MACrD;AACA,aAAO,OAAO;AAAA,IAChB;AASA,QAAM,sBAAsB,gBAAgB,CAAC,QAAQ,SAAS;AAC5D,UAAI,WAAW,WAAc,WAAW,QAAQ,OAAO,WAAW,YAAY,EAAE,aAAa,UAAU;AACrG,cAAM,IAAI,qBAAqB,MAAM,eAAe,MAAM;AAAA,MAC5D;AAAA,IACF,CAAC;AAUD,QAAM,mBAAmB,gBAAgB,CAAC,OAAO,SAAS;AACxD,UAAI,OAAO,UAAU,WAAY,OAAM,IAAI,qBAAqB,MAAM,YAAY,KAAK;AAAA,IACzF,CAAC;AAUD,QAAM,wBAAwB,gBAAgB,CAAC,OAAO,SAAS;AAC7D,UAAI,OAAO,UAAU,cAAc,gBAAgB,KAAK,EAAG,OAAM,IAAI,qBAAqB,MAAM,YAAY,KAAK;AAAA,IACnH,CAAC;AAUD,QAAM,oBAAoB,gBAAgB,CAAC,OAAO,SAAS;AACzD,UAAI,UAAU,OAAW,OAAM,IAAI,qBAAqB,MAAM,aAAa,KAAK;AAAA,IAClF,CAAC;AAQD,aAAS,cAAc,OAAO,MAAM,OAAO;AACzC,UAAI,CAAC,uBAAuB,OAAO,KAAK,GAAG;AACzC,cAAM,IAAI,qBAAqB,MAAM,KAAK,mBAAmB,OAAO,GAAG,CAAC,MAAM,KAAK;AAAA,MACrF;AAAA,IACF;AAUA,QAAM,kBAAkB;AAMxB,aAAS,yBAAyB,OAAO,MAAM;AAC7C,UAAI,OAAO,UAAU,eAAe,CAAC,oBAAoB,iBAAiB,KAAK,GAAG;AAChF,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAMA,aAAS,wBAAwB,OAAO;AACtC,UAAI,OAAO,UAAU,UAAU;AAC7B,iCAAyB,OAAO,OAAO;AACvC,eAAO;AAAA,MACT,WAAW,aAAa,KAAK,GAAG;AAC9B,cAAM,cAAc,MAAM;AAC1B,YAAI,SAAS;AACb,YAAI,gBAAgB,GAAG;AACrB,iBAAO;AAAA,QACT;AACA,iBAASD,KAAI,GAAGA,KAAI,aAAaA,MAAK;AACpC,gBAAM,OAAO,MAAMA,EAAC;AACpB,mCAAyB,MAAM,OAAO;AACtC,oBAAU;AACV,cAAIA,OAAM,cAAc,GAAG;AACzB,sBAAU;AAAA,UACZ;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAAH,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACjhBA;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AACA,IAAAA,QAAO,UAAU,OAAO;AAAA;AAAA;;;ACDxB,IAAAC,iBAAA;AAAA,+DAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,qBAAqB,gBAAgB,UAAU,IAAI;AAM3D,QAAM,eAAe,UAAU,yBAAyB;AACxD,QAAM,aAAa,UAAU,uBAAuB;AACpD,QAAM,cAAc,UAAU,wBAAwB;AACtD,QAAM,cAAc,UAAU,wBAAwB;AACtD,QAAM,eAAe,UAAU,yBAAyB;AACxD,QAAM,mBAAmB,UAAU,kCAAkC;AACrE,QAAM,2BAA2B,UAAU,0CAA0C;AACrF,aAAS,qBAAqB,KAAK,SAAS,OAAO;AACjD,UAAI;AACJ,aAAO,CAAC,EAEJ,OACA,OAAO,IAAI,SAAS,cACpB,OAAO,IAAI,OAAO,eACjB,CAAC,UAAW,OAAO,IAAI,UAAU,cAAc,OAAO,IAAI,WAAW,gBACrE,CAAC,IAAI,oBACF,sBAAsB,IAAI,oBAAoB,QAAQ,wBAAwB,SAC5E,SACA,oBAAoB,cAAc;AAAA,OAEvC,CAAC,IAAI,kBAAkB,IAAI;AAAA,IAGlC;AACA,aAAS,qBAAqB,KAAK;AACjC,UAAI;AACJ,aAAO,CAAC,EAEJ,OACA,OAAO,IAAI,UAAU,cACrB,OAAO,IAAI,OAAO,eACjB,CAAC,IAAI,oBACF,sBAAsB,IAAI,oBAAoB,QAAQ,wBAAwB,SAC5E,SACA,oBAAoB,cAAc;AAAA,IAG9C;AACA,aAAS,mBAAmB,KAAK;AAC/B,aAAO,CAAC,EACN,OACA,OAAO,IAAI,SAAS,cACpB,IAAI,kBACJ,OAAO,IAAI,OAAO,cAClB,OAAO,IAAI,UAAU;AAAA,IAEzB;AACA,aAAS,aAAa,KAAK;AACzB,aACE,QACC,IAAI,kBACH,IAAI,kBACH,OAAO,IAAI,UAAU,cAAc,OAAO,IAAI,OAAO,cACrD,OAAO,IAAI,SAAS,cAAc,OAAO,IAAI,OAAO;AAAA,IAE3D;AACA,aAASC,kBAAiB,KAAK;AAC7B,aAAO,CAAC,EACN,OACA,CAAC,aAAa,GAAG,KACjB,OAAO,IAAI,gBAAgB,cAC3B,OAAO,IAAI,cAAc,cACzB,OAAO,IAAI,WAAW;AAAA,IAE1B;AACA,aAASC,kBAAiB,KAAK;AAC7B,aAAO,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,KAAK,OAAO,IAAI,cAAc,cAAc,OAAO,IAAI,UAAU;AAAA,IACrG;AACA,aAASC,mBAAkB,KAAK;AAC9B,aAAO,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,KAAK,OAAO,IAAI,aAAa,YAAY,OAAO,IAAI,aAAa;AAAA,IACrG;AACA,aAASC,aAAY,KAAK;AACxB,aAAOH,kBAAiB,GAAG,KAAKC,kBAAiB,GAAG,KAAKC,mBAAkB,GAAG;AAAA,IAChF;AACA,aAAS,WAAW,KAAKE,UAAS;AAChC,UAAI,OAAO,KAAM,QAAO;AACxB,UAAIA,aAAY,KAAM,QAAO,OAAO,IAAI,mBAAmB,MAAM;AACjE,UAAIA,aAAY,MAAO,QAAO,OAAO,IAAI,cAAc,MAAM;AAC7D,aAAO,OAAO,IAAI,mBAAmB,MAAM,cAAc,OAAO,IAAI,cAAc,MAAM;AAAA,IAC1F;AACA,aAAS,YAAY,QAAQ;AAC3B,UAAI,CAAC,aAAa,MAAM,EAAG,QAAO;AAClC,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,OAAO;AACtB,YAAMC,SAAQ,UAAU;AACxB,aAAO,CAAC,EAAE,OAAO,aAAa,OAAO,YAAY,KAAMA,WAAU,QAAQA,WAAU,UAAaA,OAAM;AAAA,IACxG;AAGA,aAAS,gBAAgB,QAAQ;AAC/B,UAAI,CAAC,qBAAqB,MAAM,EAAG,QAAO;AAC1C,UAAI,OAAO,kBAAkB,KAAM,QAAO;AAC1C,YAAM,SAAS,OAAO;AACtB,UAAI,WAAW,QAAQ,WAAW,UAAa,OAAO,QAAS,QAAO;AACtE,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,WAAW,UAAW,QAAO;AACtG,aAAO,OAAO;AAAA,IAChB;AAGA,aAAS,mBAAmB,QAAQ,QAAQ;AAC1C,UAAI,CAAC,qBAAqB,MAAM,EAAG,QAAO;AAC1C,UAAI,OAAO,qBAAqB,KAAM,QAAO;AAC7C,YAAM,SAAS,OAAO;AACtB,UAAI,WAAW,QAAQ,WAAW,UAAa,OAAO,QAAS,QAAO;AACtE,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,cAAc,UAAW,QAAO;AACzG,aAAO,CAAC,EAAE,OAAO,YAAa,WAAW,SAAS,OAAO,UAAU,QAAQ,OAAO,WAAW;AAAA,IAC/F;AAGA,aAAS,gBAAgB,QAAQ;AAC/B,UAAI,CAAC,qBAAqB,MAAM,EAAG,QAAO;AAC1C,UAAI,OAAO,kBAAkB,KAAM,QAAO;AAC1C,YAAM,SAAS,OAAO;AACtB,UAAI,CAAC,UAAU,OAAO,QAAS,QAAO;AACtC,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,WAAW,UAAW,QAAO;AACtG,aAAO,OAAO;AAAA,IAChB;AAGA,aAAS,mBAAmB,QAAQ,QAAQ;AAC1C,UAAI,CAAC,qBAAqB,MAAM,EAAG,QAAO;AAC1C,YAAM,SAAS,OAAO;AACtB,UAAI,WAAW,QAAQ,WAAW,UAAa,OAAO,QAAS,QAAO;AACtE,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,gBAAgB,UAAW,QAAO;AAC3G,aAAO,CAAC,EAAE,OAAO,cAAe,WAAW,SAAS,OAAO,UAAU,QAAQ,OAAO,WAAW;AAAA,IACjG;AACA,aAAS,WAAW,QAAQ;AAC1B,UAAI,UAAU,OAAO,WAAW,KAAK,KAAM,QAAO,OAAO,WAAW;AACpE,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,cAAc,UAAW,QAAO;AACzG,UAAI,YAAY,MAAM,EAAG,QAAO;AAChC,aAAO,qBAAqB,MAAM,KAAK,OAAO,YAAY,CAAC,mBAAmB,MAAM;AAAA,IACtF;AACA,aAAS,WAAW,QAAQ;AAC1B,UAAI,UAAU,OAAO,WAAW,KAAK,KAAM,QAAO,OAAO,WAAW;AACpE,UAAI,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,cAAc,UAAW,QAAO;AACzG,UAAI,YAAY,MAAM,EAAG,QAAO;AAChC,aAAO,qBAAqB,MAAM,KAAK,OAAO,YAAY,CAAC,gBAAgB,MAAM;AAAA,IACnF;AACA,aAAS,WAAW,QAAQ,MAAM;AAChC,UAAI,CAAC,aAAa,MAAM,GAAG;AACzB,eAAO;AAAA,MACT;AACA,UAAI,YAAY,MAAM,GAAG;AACvB,eAAO;AAAA,MACT;AACA,WAAK,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,cAAc,SAAS,WAAW,MAAM,GAAG;AACrG,eAAO;AAAA,MACT;AACA,WAAK,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,cAAc,SAAS,WAAW,MAAM,GAAG;AACrG,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,aAAS,kBAAkB,QAAQ;AACjC,UAAI,uBAAuB;AAC3B,UAAI,CAAC,aAAa,MAAM,GAAG;AACzB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,iBAAiB;AAC1B,eAAO,OAAO;AAAA,MAChB;AACA,cAAQ,yBACL,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACpF,SACA,uBAAuB,aAAa,QAAQ,0BAA0B,SACxE,wBACA;AAAA,IACN;AACA,aAAS,kBAAkB,QAAQ;AACjC,UAAI,uBAAuB;AAC3B,UAAI,CAAC,aAAa,MAAM,GAAG;AACzB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,iBAAiB;AAC1B,eAAO,OAAO;AAAA,MAChB;AACA,cAAQ,yBACL,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACpF,SACA,uBAAuB,aAAa,QAAQ,0BAA0B,SACxE,wBACA;AAAA,IACN;AACA,aAAS,SAAS,QAAQ;AACxB,UAAI,CAAC,aAAa,MAAM,GAAG;AACzB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,OAAO,WAAW,WAAW;AACtC,eAAO,OAAO;AAAA,MAChB;AACA,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,OAAO;AACtB,UACE,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,YAAY,aACjF,QAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,YAAY,WACjF;AACA,gBACG,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,YAC7D,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO;AAAA,MAElE;AACA,UAAI,OAAO,OAAO,YAAY,aAAa,kBAAkB,MAAM,GAAG;AACpE,eAAO,OAAO;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AACA,aAAS,kBAAkB,QAAQ;AACjC,aACE,OAAO,OAAO,YAAY,aAC1B,OAAO,OAAO,sBAAsB,aACpC,OAAO,OAAO,uBAAuB,aACrC,OAAO,OAAO,oBAAoB;AAAA,IAEtC;AACA,aAAS,iBAAiB,QAAQ;AAChC,aAAO,OAAO,OAAO,aAAa,aAAa,kBAAkB,MAAM;AAAA,IACzE;AACA,aAAS,gBAAgB,QAAQ;AAC/B,UAAI;AACJ,aACE,OAAO,OAAO,eAAe,aAC7B,OAAO,OAAO,YAAY,eACxB,cAAc,OAAO,SAAS,QAAQ,gBAAgB,SAAY,SAAY,YAAY,sBAC1F;AAAA,IAEN;AACA,aAAS,cAAc,QAAQ;AAC7B,UAAI,CAAC,aAAa,MAAM,EAAG,QAAO;AAClC,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,OAAO;AACtB,YAAMA,SAAQ,UAAU;AACxB,aACG,CAACA,UAAS,iBAAiB,MAAM,KAAM,CAAC,EAAEA,UAASA,OAAM,eAAeA,OAAM,aAAaA,OAAM,WAAW;AAAA,IAEjH;AACA,aAAS,YAAY,QAAQ;AAC3B,UAAI;AACJ,aAAO,CAAC,EACN,YACE,uBAAuB,OAAO,YAAY,OAAO,QAAQ,yBAAyB,SAChF,uBACA,OAAO,mBAAmB,OAAO;AAAA,IAEzC;AACA,aAAS,UAAU,QAAQ;AACzB,UAAI,MACF,OACA,OACA,OACA,OACA,oBACA,wBACA,wBACA,wBACA;AACF,aAAO,CAAC,EACN,YACE,QACC,SACE,SACE,SACE,SACE,qBAAqB,OAAO,UAAU,OAAO,QAAQ,uBAAuB,SACzE,qBACA,OAAO,qBAAqB,QAAQ,UAAU,SAChD,QACA,OAAO,qBAAqB,QAAQ,UAAU,SAChD,SACC,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACxF,SACA,uBAAuB,kBAAkB,QAAQ,UAAU,SAC7D,SACC,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACxF,SACA,uBAAuB,kBAAkB,QAAQ,UAAU,SAC7D,SACC,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACxF,SACA,uBAAuB,aAAa,QAAQ,SAAS,SACvD,QACC,yBAAyB,OAAO,oBAAoB,QAAQ,2BAA2B,SACxF,SACA,uBAAuB;AAAA,IAE/B;AACA,IAAAN,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAG;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAAC;AAAA,IACF;AAAA;AAAA;;;ACtUA;AAAA,uEAAAI,UAAAC,SAAA;AAAA;AAOA,QAAMC,YAAU;AAIhB,QAAM,EAAE,YAAY,MAAM,IAAI;AAC9B,QAAM,EAAE,sBAAsB,2BAA2B,IAAI;AAC7D,QAAM,EAAE,cAAc,MAAAC,OAAK,IAAI;AAC/B,QAAM,EAAE,qBAAqB,kBAAkB,gBAAgB,gBAAgB,IAAI;AACnF,QAAM,EAAE,SAAAC,UAAS,sBAAsB,cAAc,IAAI;AACzD,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,IACF,IAAI;AACJ,QAAIC;AACJ,aAAS,UAAU,QAAQ;AACzB,aAAO,OAAO,aAAa,OAAO,OAAO,UAAU;AAAA,IACrD;AACA,QAAM,MAAM,MAAM;AAAA,IAAC;AACnB,aAAS,IAAI,QAAQ,SAAS,UAAU;AACtC,UAAI,mBAAmB;AACvB,UAAI,UAAU,WAAW,GAAG;AAC1B,mBAAW;AACX,kBAAU;AAAA,MACZ,WAAW,WAAW,MAAM;AAC1B,kBAAU;AAAA,MACZ,OAAO;AACL,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,uBAAiB,UAAU,UAAU;AACrC,0BAAoB,QAAQ,QAAQ,gBAAgB;AACpD,iBAAWJ,OAAK,QAAQ;AACxB,UAAIE,kBAAiB,MAAM,KAAKC,kBAAiB,MAAM,GAAG;AACxD,eAAO,OAAO,QAAQ,SAAS,QAAQ;AAAA,MACzC;AACA,UAAI,CAAC,aAAa,MAAM,GAAG;AACzB,cAAM,IAAI,qBAAqB,UAAU,CAAC,kBAAkB,kBAAkB,QAAQ,GAAG,MAAM;AAAA,MACjG;AACA,YAAME,aACH,oBAAoB,QAAQ,cAAc,QAAQ,sBAAsB,SACrE,oBACA,qBAAqB,MAAM;AACjC,YAAMC,aACH,oBAAoB,QAAQ,cAAc,QAAQ,sBAAsB,SACrE,oBACA,qBAAqB,MAAM;AACjC,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,OAAO;AACtB,YAAM,iBAAiB,MAAM;AAC3B,YAAI,CAAC,OAAO,UAAU;AACpB,mBAAS;AAAA,QACX;AAAA,MACF;AAKA,UAAI,gBACF,eAAe,MAAM,KAAK,qBAAqB,MAAM,MAAMD,aAAY,qBAAqB,MAAM,MAAMC;AAC1G,UAAI,mBAAmB,mBAAmB,QAAQ,KAAK;AACvD,YAAM,WAAW,MAAM;AACrB,2BAAmB;AAInB,YAAI,OAAO,WAAW;AACpB,0BAAgB;AAAA,QAClB;AACA,YAAI,kBAAkB,CAAC,OAAO,YAAYD,YAAW;AACnD;AAAA,QACF;AACA,YAAI,CAACA,aAAY,kBAAkB;AACjC,mBAAS,KAAK,MAAM;AAAA,QACtB;AAAA,MACF;AACA,UAAI,mBAAmB,mBAAmB,QAAQ,KAAK;AACvD,YAAM,QAAQ,MAAM;AAClB,2BAAmB;AAInB,YAAI,OAAO,WAAW;AACpB,0BAAgB;AAAA,QAClB;AACA,YAAI,kBAAkB,CAAC,OAAO,YAAYC,YAAW;AACnD;AAAA,QACF;AACA,YAAI,CAACA,aAAY,kBAAkB;AACjC,mBAAS,KAAK,MAAM;AAAA,QACtB;AAAA,MACF;AACA,YAAM,UAAU,CAAC,QAAQ;AACvB,iBAAS,KAAK,QAAQ,GAAG;AAAA,MAC3B;AACA,UAAI,SAAS,SAAS,MAAM;AAC5B,YAAM,UAAU,MAAM;AACpB,iBAAS;AACT,cAAM,UAAU,kBAAkB,MAAM,KAAK,kBAAkB,MAAM;AACrE,YAAI,WAAW,OAAO,YAAY,WAAW;AAC3C,iBAAO,SAAS,KAAK,QAAQ,OAAO;AAAA,QACtC;AACA,YAAID,aAAY,CAAC,oBAAoB,qBAAqB,QAAQ,IAAI,GAAG;AACvE,cAAI,CAAC,mBAAmB,QAAQ,KAAK,EAAG,QAAO,SAAS,KAAK,QAAQ,IAAI,2BAA2B,CAAC;AAAA,QACvG;AACA,YAAIC,aAAY,CAAC,kBAAkB;AACjC,cAAI,CAAC,mBAAmB,QAAQ,KAAK,EAAG,QAAO,SAAS,KAAK,QAAQ,IAAI,2BAA2B,CAAC;AAAA,QACvG;AACA,iBAAS,KAAK,MAAM;AAAA,MACtB;AACA,YAAM,WAAW,MAAM;AACrB,iBAAS;AACT,cAAM,UAAU,kBAAkB,MAAM,KAAK,kBAAkB,MAAM;AACrE,YAAI,WAAW,OAAO,YAAY,WAAW;AAC3C,iBAAO,SAAS,KAAK,QAAQ,OAAO;AAAA,QACtC;AACA,iBAAS,KAAK,MAAM;AAAA,MACtB;AACA,YAAM,YAAY,MAAM;AACtB,eAAO,IAAI,GAAG,UAAU,QAAQ;AAAA,MAClC;AACA,UAAI,UAAU,MAAM,GAAG;AACrB,eAAO,GAAG,YAAY,QAAQ;AAC9B,YAAI,CAAC,eAAe;AAClB,iBAAO,GAAG,SAAS,OAAO;AAAA,QAC5B;AACA,YAAI,OAAO,KAAK;AACd,oBAAU;AAAA,QACZ,OAAO;AACL,iBAAO,GAAG,WAAW,SAAS;AAAA,QAChC;AAAA,MACF,WAAWA,aAAY,CAAC,QAAQ;AAE9B,eAAO,GAAG,OAAO,cAAc;AAC/B,eAAO,GAAG,SAAS,cAAc;AAAA,MACnC;AAGA,UAAI,CAAC,iBAAiB,OAAO,OAAO,YAAY,WAAW;AACzD,eAAO,GAAG,WAAW,OAAO;AAAA,MAC9B;AACA,aAAO,GAAG,OAAO,KAAK;AACtB,aAAO,GAAG,UAAU,QAAQ;AAC5B,UAAI,QAAQ,UAAU,OAAO;AAC3B,eAAO,GAAG,SAAS,OAAO;AAAA,MAC5B;AACA,aAAO,GAAG,SAAS,OAAO;AAC1B,UAAI,QAAQ;AACV,QAAAP,UAAQ,SAAS,OAAO;AAAA,MAC1B,WACG,WAAW,QAAQ,WAAW,UAAa,OAAO,gBAClD,WAAW,QAAQ,WAAW,UAAa,OAAO,cACnD;AACA,YAAI,CAAC,eAAe;AAClB,UAAAA,UAAQ,SAAS,QAAQ;AAAA,QAC3B;AAAA,MACF,WACE,CAACM,cACA,CAAC,iBAAiB,WAAW,MAAM,OACnC,oBAAoB,WAAW,MAAM,MAAM,QAC5C;AACA,QAAAN,UAAQ,SAAS,QAAQ;AAAA,MAC3B,WACE,CAACO,cACA,CAAC,iBAAiB,WAAW,MAAM,OACnC,oBAAoB,WAAW,MAAM,MAAM,QAC5C;AACA,QAAAP,UAAQ,SAAS,QAAQ;AAAA,MAC3B,WAAW,UAAU,OAAO,OAAO,OAAO,SAAS;AACjD,QAAAA,UAAQ,SAAS,QAAQ;AAAA,MAC3B;AACA,YAAM,UAAU,MAAM;AACpB,mBAAW;AACX,eAAO,eAAe,WAAW,OAAO;AACxC,eAAO,eAAe,YAAY,QAAQ;AAC1C,eAAO,eAAe,SAAS,OAAO;AACtC,eAAO,eAAe,WAAW,SAAS;AAC1C,YAAI,OAAO,IAAK,QAAO,IAAI,eAAe,UAAU,QAAQ;AAC5D,eAAO,eAAe,OAAO,cAAc;AAC3C,eAAO,eAAe,SAAS,cAAc;AAC7C,eAAO,eAAe,UAAU,QAAQ;AACxC,eAAO,eAAe,OAAO,KAAK;AAClC,eAAO,eAAe,SAAS,OAAO;AACtC,eAAO,eAAe,SAAS,OAAO;AAAA,MACxC;AACA,UAAI,QAAQ,UAAU,CAAC,QAAQ;AAC7B,cAAM,QAAQ,MAAM;AAElB,gBAAM,cAAc;AACpB,kBAAQ;AACR,sBAAY;AAAA,YACV;AAAA,YACA,IAAI,WAAW,QAAW;AAAA,cACxB,OAAO,QAAQ,OAAO;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,QAAQ,OAAO,SAAS;AAC1B,UAAAA,UAAQ,SAAS,KAAK;AAAA,QACxB,OAAO;AACL,UAAAK,oBAAmBA,qBAAoB,gBAA2B;AAClE,gBAAM,aAAaA,kBAAiB,QAAQ,QAAQ,KAAK;AACzD,gBAAM,mBAAmB;AACzB,qBAAWJ,OAAK,IAAI,SAAS;AAC3B,uBAAW,aAAa,EAAE;AAC1B,6BAAiB,MAAM,QAAQ,IAAI;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,aAAS,OAAO,QAAQ,SAAS,UAAU;AACzC,UAAIO,aAAY;AAChB,UAAI,QAAQ;AACZ,UAAI,QAAQ,QAAQ;AAClB,gBAAQ,MAAM;AACZ,UAAAA,aAAY;AACZ,mBAAS;AAAA,YACP;AAAA,YACA,IAAI,WAAW,QAAW;AAAA,cACxB,OAAO,QAAQ,OAAO;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,QAAQ,OAAO,SAAS;AAC1B,UAAAR,UAAQ,SAAS,KAAK;AAAA,QACxB,OAAO;AACL,UAAAK,oBAAmBA,qBAAoB,gBAA2B;AAClE,gBAAM,aAAaA,kBAAiB,QAAQ,QAAQ,KAAK;AACzD,gBAAM,mBAAmB;AACzB,qBAAWJ,OAAK,IAAI,SAAS;AAC3B,uBAAW,aAAa,EAAE;AAC1B,6BAAiB,MAAM,QAAQ,IAAI;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF;AACA,YAAM,aAAa,IAAI,SAAS;AAC9B,YAAI,CAACO,YAAW;AACd,UAAAR,UAAQ,SAAS,MAAM,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,QACrD;AAAA,MACF;AACA,2BAAqB,OAAO,gBAAgB,EAAE,SAAS,YAAY,UAAU;AAC7E,aAAO;AAAA,IACT;AACA,aAASS,UAAS,QAAQ,MAAM;AAC9B,UAAI;AACJ,UAAI,cAAc;AAClB,UAAI,SAAS,MAAM;AACjB,eAAO;AAAA,MACT;AACA,WAAK,QAAQ,UAAU,QAAQ,UAAU,UAAa,MAAM,SAAS;AACnE,wBAAgB,KAAK,SAAS,SAAS;AACvC,sBAAc,KAAK;AAAA,MACrB;AACA,aAAO,IAAIP,SAAQ,CAAC,SAASQ,YAAW;AACtC,cAAM,UAAU,IAAI,QAAQ,MAAM,CAAC,QAAQ;AACzC,cAAI,aAAa;AACf,oBAAQ;AAAA,UACV;AACA,cAAI,KAAK;AACP,YAAAA,QAAO,GAAG;AAAA,UACZ,OAAO;AACL,oBAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,IAAAX,QAAO,UAAU;AACjB,IAAAA,QAAO,QAAQ,WAAWU;AAAA;AAAA;;;AC7R1B,IAAAE,mBAAA;AAAA,iEAAAC,UAAAC,SAAA;AAAA;AAIA,QAAMC,YAAU;AAIhB,QAAM;AAAA,MACJ;AAAA,MACA,OAAO,EAAE,sBAAsB;AAAA,MAC/B;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,QAAAC,QAAO,IAAI;AACnB,QAAM,EAAE,cAAc,aAAa,YAAY,gBAAgB,IAAI;AACnE,QAAM,WAAWA,QAAO,UAAU;AAClC,QAAM,aAAaA,QAAO,YAAY;AACtC,aAAS,WAAW,KAAK,GAAG,GAAG;AAC7B,UAAI,KAAK;AAEP,YAAI;AAEJ,YAAI,KAAK,CAAC,EAAE,SAAS;AACnB,YAAE,UAAU;AAAA,QACd;AACA,YAAI,KAAK,CAAC,EAAE,SAAS;AACnB,YAAE,UAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAIA,aAAS,QAAQ,KAAK,IAAI;AACxB,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,KAAK;AAEf,YAAM,IAAI,KAAK;AACf,UAAK,MAAM,QAAQ,MAAM,UAAa,EAAE,aAAe,MAAM,QAAQ,MAAM,UAAa,EAAE,WAAY;AACpG,YAAI,OAAO,OAAO,YAAY;AAC5B,aAAG;AAAA,QACL;AACA,eAAO;AAAA,MACT;AAIA,iBAAW,KAAK,GAAG,CAAC;AACpB,UAAI,GAAG;AACL,UAAE,YAAY;AAAA,MAChB;AACA,UAAI,GAAG;AACL,UAAE,YAAY;AAAA,MAChB;AAGA,UAAI,CAAC,EAAE,aAAa;AAClB,aAAK,KAAK,UAAU,SAAU,IAAI;AAChC,mBAAS,MAAM,mBAAmB,IAAI,GAAG,GAAG,EAAE;AAAA,QAChD,CAAC;AAAA,MACH,OAAO;AACL,iBAAS,MAAM,KAAK,EAAE;AAAA,MACxB;AACA,aAAO;AAAA,IACT;AACA,aAAS,SAASC,OAAM,KAAK,IAAI;AAC/B,UAAI,SAAS;AACb,eAAS,UAAUC,MAAK;AACtB,YAAI,QAAQ;AACV;AAAA,QACF;AACA,iBAAS;AACT,cAAM,IAAID,MAAK;AACf,cAAM,IAAIA,MAAK;AACf,mBAAWC,MAAK,GAAG,CAAC;AACpB,YAAI,GAAG;AACL,YAAE,SAAS;AAAA,QACb;AACA,YAAI,GAAG;AACL,YAAE,SAAS;AAAA,QACb;AACA,YAAI,OAAO,OAAO,YAAY;AAC5B,aAAGA,IAAG;AAAA,QACR;AACA,YAAIA,MAAK;AACP,UAAAH,UAAQ,SAAS,kBAAkBE,OAAMC,IAAG;AAAA,QAC9C,OAAO;AACL,UAAAH,UAAQ,SAAS,aAAaE,KAAI;AAAA,QACpC;AAAA,MACF;AACA,UAAI;AACF,QAAAA,MAAK,SAAS,OAAO,MAAM,SAAS;AAAA,MACtC,SAASC,MAAK;AACZ,kBAAUA,IAAG;AAAA,MACf;AAAA,IACF;AACA,aAAS,iBAAiBD,OAAM,KAAK;AACnC,kBAAYA,OAAM,GAAG;AACrB,kBAAYA,KAAI;AAAA,IAClB;AACA,aAAS,YAAYA,OAAM;AACzB,YAAM,IAAIA,MAAK;AACf,YAAM,IAAIA,MAAK;AACf,UAAI,GAAG;AACL,UAAE,eAAe;AAAA,MACnB;AACA,UAAI,GAAG;AACL,UAAE,eAAe;AAAA,MACnB;AACA,UAAK,MAAM,QAAQ,MAAM,UAAa,EAAE,aAAe,MAAM,QAAQ,MAAM,UAAa,EAAE,WAAY;AACpG,QAAAA,MAAK,KAAK,OAAO;AAAA,MACnB;AAAA,IACF;AACA,aAAS,YAAYA,OAAM,KAAK;AAC9B,YAAM,IAAIA,MAAK;AACf,YAAM,IAAIA,MAAK;AACf,UAAK,MAAM,QAAQ,MAAM,UAAa,EAAE,gBAAkB,MAAM,QAAQ,MAAM,UAAa,EAAE,cAAe;AAC1G;AAAA,MACF;AACA,UAAI,GAAG;AACL,UAAE,eAAe;AAAA,MACnB;AACA,UAAI,GAAG;AACL,UAAE,eAAe;AAAA,MACnB;AACA,MAAAA,MAAK,KAAK,SAAS,GAAG;AAAA,IACxB;AACA,aAAS,YAAY;AACnB,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,KAAK;AACf,UAAI,GAAG;AACL,UAAE,cAAc;AAChB,UAAE,SAAS;AACX,UAAE,eAAe;AACjB,UAAE,YAAY;AACd,UAAE,UAAU;AACZ,UAAE,eAAe;AACjB,UAAE,UAAU;AACZ,UAAE,QAAQ,EAAE,aAAa;AACzB,UAAE,aAAa,EAAE,aAAa;AAAA,MAChC;AACA,UAAI,GAAG;AACL,UAAE,cAAc;AAChB,UAAE,YAAY;AACd,UAAE,SAAS;AACX,UAAE,eAAe;AACjB,UAAE,UAAU;AACZ,UAAE,eAAe;AACjB,UAAE,cAAc;AAChB,UAAE,cAAc;AAChB,UAAE,QAAQ,EAAE,aAAa;AACzB,UAAE,SAAS,EAAE,aAAa;AAC1B,UAAE,WAAW,EAAE,aAAa;AAAA,MAC9B;AAAA,IACF;AACA,aAAS,eAAe,QAAQ,KAAK,MAAM;AAOzC,YAAM,IAAI,OAAO;AACjB,YAAM,IAAI,OAAO;AACjB,UAAK,MAAM,QAAQ,MAAM,UAAa,EAAE,aAAe,MAAM,QAAQ,MAAM,UAAa,EAAE,WAAY;AACpG,eAAO;AAAA,MACT;AACA,UAAK,MAAM,QAAQ,MAAM,UAAa,EAAE,eAAiB,MAAM,QAAQ,MAAM,UAAa,EAAE;AAC1F,eAAO,QAAQ,GAAG;AAAA,eACX,KAAK;AAEZ,YAAI;AAEJ,YAAI,KAAK,CAAC,EAAE,SAAS;AACnB,YAAE,UAAU;AAAA,QACd;AACA,YAAI,KAAK,CAAC,EAAE,SAAS;AACnB,YAAE,UAAU;AAAA,QACd;AACA,YAAI,MAAM;AACR,UAAAF,UAAQ,SAAS,aAAa,QAAQ,GAAG;AAAA,QAC3C,OAAO;AACL,sBAAY,QAAQ,GAAG;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACA,aAAS,UAAU,QAAQ,IAAI;AAC7B,UAAI,OAAO,OAAO,eAAe,YAAY;AAC3C;AAAA,MACF;AACA,YAAM,IAAI,OAAO;AACjB,YAAM,IAAI,OAAO;AACjB,UAAI,GAAG;AACL,UAAE,cAAc;AAAA,MAClB;AACA,UAAI,GAAG;AACL,UAAE,cAAc;AAAA,MAClB;AACA,aAAO,KAAK,YAAY,EAAE;AAC1B,UAAI,OAAO,cAAc,UAAU,IAAI,GAAG;AAExC;AAAA,MACF;AACA,MAAAA,UAAQ,SAAS,aAAa,MAAM;AAAA,IACtC;AACA,aAAS,YAAY,QAAQ;AAC3B,UAAI,SAAS;AACb,eAAS,YAAY,KAAK;AACxB,YAAI,QAAQ;AACV,yBAAe,QAAQ,QAAQ,QAAQ,QAAQ,SAAY,MAAM,IAAI,sBAAsB,CAAC;AAC5F;AAAA,QACF;AACA,iBAAS;AACT,cAAM,IAAI,OAAO;AACjB,cAAM,IAAI,OAAO;AACjB,cAAM,IAAI,KAAK;AACf,YAAI,GAAG;AACL,YAAE,cAAc;AAAA,QAClB;AACA,YAAI,GAAG;AACL,YAAE,cAAc;AAAA,QAClB;AACA,YAAI,EAAE,WAAW;AACf,iBAAO,KAAK,UAAU,GAAG;AAAA,QAC3B,WAAW,KAAK;AACd,yBAAe,QAAQ,KAAK,IAAI;AAAA,QAClC,OAAO;AACL,UAAAA,UAAQ,SAAS,iBAAiB,MAAM;AAAA,QAC1C;AAAA,MACF;AACA,UAAI;AACF,eAAO,WAAW,CAAC,QAAQ;AACzB,UAAAA,UAAQ,SAAS,aAAa,GAAG;AAAA,QACnC,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,QAAAA,UAAQ,SAAS,aAAa,GAAG;AAAA,MACnC;AAAA,IACF;AACA,aAAS,gBAAgB,QAAQ;AAC/B,aAAO,KAAK,UAAU;AAAA,IACxB;AACA,aAAS,UAAU,QAAQ;AACzB,cAAQ,WAAW,QAAQ,WAAW,SAAY,SAAY,OAAO,cAAc,OAAO,OAAO,UAAU;AAAA,IAC7G;AACA,aAAS,gBAAgB,QAAQ;AAC/B,aAAO,KAAK,OAAO;AAAA,IACrB;AACA,aAAS,qBAAqB,QAAQ,KAAK;AACzC,aAAO,KAAK,SAAS,GAAG;AACxB,MAAAA,UAAQ,SAAS,iBAAiB,MAAM;AAAA,IAC1C;AAGA,aAAS,UAAU,QAAQ,KAAK;AAC9B,UAAI,CAAC,UAAU,YAAY,MAAM,GAAG;AAClC;AAAA,MACF;AACA,UAAI,CAAC,OAAO,CAAC,WAAW,MAAM,GAAG;AAC/B,cAAM,IAAI,WAAW;AAAA,MACvB;AAGA,UAAI,gBAAgB,MAAM,GAAG;AAC3B,eAAO,SAAS;AAChB,eAAO,QAAQ,GAAG;AAAA,MACpB,WAAW,UAAU,MAAM,GAAG;AAC5B,eAAO,MAAM;AAAA,MACf,WAAW,UAAU,OAAO,GAAG,GAAG;AAChC,eAAO,IAAI,MAAM;AAAA,MACnB,WAAW,OAAO,OAAO,YAAY,YAAY;AAC/C,eAAO,QAAQ,GAAG;AAAA,MACpB,WAAW,OAAO,OAAO,UAAU,YAAY;AAE7C,eAAO,MAAM;AAAA,MACf,WAAW,KAAK;AACd,QAAAA,UAAQ,SAAS,sBAAsB,QAAQ,GAAG;AAAA,MACpD,OAAO;AACL,QAAAA,UAAQ,SAAS,iBAAiB,MAAM;AAAA,MAC1C;AACA,UAAI,CAAC,OAAO,WAAW;AACrB,eAAO,YAAY,IAAI;AAAA,MACzB;AAAA,IACF;AACA,IAAAD,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACjSA;AAAA,gEAAAK,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,cAAc,qBAAqB,IAAI;AAC/C,QAAM,EAAE,cAAc,GAAG,IAAI,QAAQ,QAAQ;AAC7C,aAAS,OAAO,MAAM;AACpB,SAAG,KAAK,MAAM,IAAI;AAAA,IACpB;AACA,yBAAqB,OAAO,WAAW,GAAG,SAAS;AACnD,yBAAqB,QAAQ,EAAE;AAC/B,WAAO,UAAU,OAAO,SAAU,MAAM,SAAS;AAC/C,YAAM,SAAS;AACf,eAAS,OAAOC,QAAO;AACrB,YAAI,KAAK,YAAY,KAAK,MAAMA,MAAK,MAAM,SAAS,OAAO,OAAO;AAChE,iBAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO,GAAG,QAAQ,MAAM;AACxB,eAAS,UAAU;AACjB,YAAI,OAAO,YAAY,OAAO,QAAQ;AACpC,iBAAO,OAAO;AAAA,QAChB;AAAA,MACF;AACA,WAAK,GAAG,SAAS,OAAO;AAIxB,UAAI,CAAC,KAAK,aAAa,CAAC,WAAW,QAAQ,QAAQ,QAAQ;AACzD,eAAO,GAAG,OAAO,KAAK;AACtB,eAAO,GAAG,SAAS,OAAO;AAAA,MAC5B;AACA,UAAI,WAAW;AACf,eAAS,QAAQ;AACf,YAAI,SAAU;AACd,mBAAW;AACX,aAAK,IAAI;AAAA,MACX;AACA,eAAS,UAAU;AACjB,YAAI,SAAU;AACd,mBAAW;AACX,YAAI,OAAO,KAAK,YAAY,WAAY,MAAK,QAAQ;AAAA,MACvD;AAGA,eAAS,QAAQ,IAAI;AACnB,gBAAQ;AACR,YAAI,GAAG,cAAc,MAAM,OAAO,MAAM,GAAG;AACzC,eAAK,KAAK,SAAS,EAAE;AAAA,QACvB;AAAA,MACF;AACA,sBAAgB,QAAQ,SAAS,OAAO;AACxC,sBAAgB,MAAM,SAAS,OAAO;AAGtC,eAAS,UAAU;AACjB,eAAO,eAAe,QAAQ,MAAM;AACpC,aAAK,eAAe,SAAS,OAAO;AACpC,eAAO,eAAe,OAAO,KAAK;AAClC,eAAO,eAAe,SAAS,OAAO;AACtC,eAAO,eAAe,SAAS,OAAO;AACtC,aAAK,eAAe,SAAS,OAAO;AACpC,eAAO,eAAe,OAAO,OAAO;AACpC,eAAO,eAAe,SAAS,OAAO;AACtC,aAAK,eAAe,SAAS,OAAO;AAAA,MACtC;AACA,aAAO,GAAG,OAAO,OAAO;AACxB,aAAO,GAAG,SAAS,OAAO;AAC1B,WAAK,GAAG,SAAS,OAAO;AACxB,WAAK,KAAK,QAAQ,MAAM;AAGxB,aAAO;AAAA,IACT;AACA,aAAS,gBAAgB,SAAS,OAAO,IAAI;AAG3C,UAAI,OAAO,QAAQ,oBAAoB,WAAY,QAAO,QAAQ,gBAAgB,OAAO,EAAE;AAM3F,UAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,QAAQ,KAAK,EAAG,SAAQ,GAAG,OAAO,EAAE;AAAA,eAC5D,aAAa,QAAQ,QAAQ,KAAK,CAAC,EAAG,SAAQ,QAAQ,KAAK,EAAE,QAAQ,EAAE;AAAA,UAC3E,SAAQ,QAAQ,KAAK,IAAI,CAAC,IAAI,QAAQ,QAAQ,KAAK,CAAC;AAAA,IAC3D;AACA,IAAAD,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACxFA;AAAA,0EAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,cAAc,IAAI;AAC1B,QAAM,EAAE,YAAY,MAAM,IAAI;AAC9B,QAAM,EAAE,cAAc,aAAAC,cAAa,yBAAyB,IAAI;AAChE,QAAM,MAAM;AACZ,QAAM,EAAE,qBAAqB,IAAI;AACjC,QAAIC;AAKJ,QAAM,sBAAsB,CAAC,QAAQ,SAAS;AAC5C,UAAI,OAAO,WAAW,YAAY,EAAE,aAAa,SAAS;AACxD,cAAM,IAAI,qBAAqB,MAAM,eAAe,MAAM;AAAA,MAC5D;AAAA,IACF;AACA,IAAAF,QAAO,QAAQ,iBAAiB,SAAS,eAAe,QAAQ,QAAQ;AACtE,0BAAoB,QAAQ,QAAQ;AACpC,UAAI,CAAC,aAAa,MAAM,KAAK,CAACC,aAAY,MAAM,GAAG;AACjD,cAAM,IAAI,qBAAqB,UAAU,CAAC,kBAAkB,kBAAkB,QAAQ,GAAG,MAAM;AAAA,MACjG;AACA,aAAOD,QAAO,QAAQ,yBAAyB,QAAQ,MAAM;AAAA,IAC/D;AACA,IAAAA,QAAO,QAAQ,2BAA2B,SAAU,QAAQ,QAAQ;AAClE,UAAI,OAAO,WAAW,YAAY,EAAE,aAAa,SAAS;AACxD,eAAO;AAAA,MACT;AACA,YAAM,UAAU,aAAa,MAAM,IAC/B,MAAM;AACJ,eAAO;AAAA,UACL,IAAI,WAAW,QAAW;AAAA,YACxB,OAAO,OAAO;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF,IACA,MAAM;AACJ,eAAO,wBAAwB;AAAA,UAC7B,IAAI,WAAW,QAAW;AAAA,YACxB,OAAO,OAAO;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AACJ,UAAI,OAAO,SAAS;AAClB,gBAAQ;AAAA,MACV,OAAO;AACL,QAAAE,oBAAmBA,qBAAoB,gBAA2B;AAClE,cAAM,aAAaA,kBAAiB,QAAQ,OAAO;AACnD,YAAI,QAAQ,WAAW,aAAa,CAAC;AAAA,MACvC;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACnDA;AAAA,qEAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,sBAAsB,gBAAgB,wBAAwB,YAAAC,YAAW,IAAI;AACrF,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,EAAE,SAAAC,SAAQ,IAAI;AACpB,IAAAH,QAAO,UAAU,MAAM,WAAW;AAAA,MAChC,cAAc;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,KAAK,GAAG;AACN,cAAM,QAAQ;AAAA,UACZ,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AACA,YAAI,KAAK,SAAS,EAAG,MAAK,KAAK,OAAO;AAAA,YACjC,MAAK,OAAO;AACjB,aAAK,OAAO;AACZ,UAAE,KAAK;AAAA,MACT;AAAA,MACA,QAAQ,GAAG;AACT,cAAM,QAAQ;AAAA,UACZ,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,QACb;AACA,YAAI,KAAK,WAAW,EAAG,MAAK,OAAO;AACnC,aAAK,OAAO;AACZ,UAAE,KAAK;AAAA,MACT;AAAA,MACA,QAAQ;AACN,YAAI,KAAK,WAAW,EAAG;AACvB,cAAM,MAAM,KAAK,KAAK;AACtB,YAAI,KAAK,WAAW,EAAG,MAAK,OAAO,KAAK,OAAO;AAAA,YAC1C,MAAK,OAAO,KAAK,KAAK;AAC3B,UAAE,KAAK;AACP,eAAO;AAAA,MACT;AAAA,MACA,QAAQ;AACN,aAAK,OAAO,KAAK,OAAO;AACxB,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,KAAK,GAAG;AACN,YAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,YAAI,IAAI,KAAK;AACb,YAAI,MAAM,KAAK,EAAE;AACjB,gBAAQ,IAAI,EAAE,UAAU,KAAM,QAAO,IAAI,EAAE;AAC3C,eAAO;AAAA,MACT;AAAA,MACA,OAAOI,IAAG;AACR,YAAI,KAAK,WAAW,EAAG,QAAOF,QAAO,MAAM,CAAC;AAC5C,cAAM,MAAMA,QAAO,YAAYE,OAAM,CAAC;AACtC,YAAI,IAAI,KAAK;AACb,YAAIC,KAAI;AACR,eAAO,GAAG;AACR,iCAAuB,KAAK,EAAE,MAAMA,EAAC;AACrC,UAAAA,MAAK,EAAE,KAAK;AACZ,cAAI,EAAE;AAAA,QACR;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,QAAQD,IAAG,YAAY;AACrB,cAAM,OAAO,KAAK,KAAK;AACvB,YAAIA,KAAI,KAAK,QAAQ;AAEnB,gBAAM,QAAQ,KAAK,MAAM,GAAGA,EAAC;AAC7B,eAAK,KAAK,OAAO,KAAK,MAAMA,EAAC;AAC7B,iBAAO;AAAA,QACT;AACA,YAAIA,OAAM,KAAK,QAAQ;AAErB,iBAAO,KAAK,MAAM;AAAA,QACpB;AAEA,eAAO,aAAa,KAAK,WAAWA,EAAC,IAAI,KAAK,WAAWA,EAAC;AAAA,MAC5D;AAAA,MACA,QAAQ;AACN,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,MACA,EAAE,cAAc,IAAI;AAClB,iBAAS,IAAI,KAAK,MAAM,GAAG,IAAI,EAAE,MAAM;AACrC,gBAAM,EAAE;AAAA,QACV;AAAA,MACF;AAAA;AAAA,MAGA,WAAWA,IAAG;AACZ,YAAI,MAAM;AACV,YAAI,IAAI,KAAK;AACb,YAAIE,KAAI;AACR,WAAG;AACD,gBAAM,MAAM,EAAE;AACd,cAAIF,KAAI,IAAI,QAAQ;AAClB,mBAAO;AACP,YAAAA,MAAK,IAAI;AAAA,UACX,OAAO;AACL,gBAAIA,OAAM,IAAI,QAAQ;AACpB,qBAAO;AACP,gBAAEE;AACF,kBAAI,EAAE,KAAM,MAAK,OAAO,EAAE;AAAA,kBACrB,MAAK,OAAO,KAAK,OAAO;AAAA,YAC/B,OAAO;AACL,qBAAO,qBAAqB,KAAK,GAAGF,EAAC;AACrC,mBAAK,OAAO;AACZ,gBAAE,OAAO,qBAAqB,KAAKA,EAAC;AAAA,YACtC;AACA;AAAA,UACF;AACA,YAAEE;AAAA,QACJ,UAAU,IAAI,EAAE,UAAU;AAC1B,aAAK,UAAUA;AACf,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,WAAWF,IAAG;AACZ,cAAM,MAAMF,QAAO,YAAYE,EAAC;AAChC,cAAM,SAASA;AACf,YAAI,IAAI,KAAK;AACb,YAAIE,KAAI;AACR,WAAG;AACD,gBAAM,MAAM,EAAE;AACd,cAAIF,KAAI,IAAI,QAAQ;AAClB,mCAAuB,KAAK,KAAK,SAASA,EAAC;AAC3C,YAAAA,MAAK,IAAI;AAAA,UACX,OAAO;AACL,gBAAIA,OAAM,IAAI,QAAQ;AACpB,qCAAuB,KAAK,KAAK,SAASA,EAAC;AAC3C,gBAAEE;AACF,kBAAI,EAAE,KAAM,MAAK,OAAO,EAAE;AAAA,kBACrB,MAAK,OAAO,KAAK,OAAO;AAAA,YAC/B,OAAO;AACL,qCAAuB,KAAK,IAAIL,YAAW,IAAI,QAAQ,IAAI,YAAYG,EAAC,GAAG,SAASA,EAAC;AACrF,mBAAK,OAAO;AACZ,gBAAE,OAAO,IAAI,MAAMA,EAAC;AAAA,YACtB;AACA;AAAA,UACF;AACA,YAAEE;AAAA,QACJ,UAAU,IAAI,EAAE,UAAU;AAC1B,aAAK,UAAUA;AACf,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,CAAC,uBAAO,IAAI,4BAA4B,CAAC,EAAEC,IAAG,SAAS;AACrD,eAAOJ,SAAQ,MAAM;AAAA,UACnB,GAAG;AAAA;AAAA,UAEH,OAAO;AAAA;AAAA,UAEP,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAAA;;;AC5JA;AAAA,+DAAAK,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,WAAW,gBAAgB,IAAI;AACvC,QAAM,EAAE,gBAAgB,IAAI;AAC5B,QAAM,EAAE,sBAAsB,IAAI,iBAA6B;AAC/D,QAAI,4BAA4B,KAAK;AACrC,QAAI,iCAAiC;AACrC,aAAS,kBAAkB,SAAS,UAAU,WAAW;AACvD,aAAO,QAAQ,iBAAiB,OAAO,QAAQ,gBAAgB,WAAW,QAAQ,SAAS,IAAI;AAAA,IACjG;AACA,aAASC,yBAAwB,YAAY;AAC3C,aAAO,aAAa,iCAAiC;AAAA,IACvD;AACA,aAAS,wBAAwB,YAAY,OAAO;AAClD,sBAAgB,OAAO,SAAS,CAAC;AACjC,UAAI,YAAY;AACd,yCAAiC;AAAA,MACnC,OAAO;AACL,oCAA4B;AAAA,MAC9B;AAAA,IACF;AACA,aAASC,kBAAiBC,QAAO,SAAS,WAAW,UAAU;AAC7D,YAAM,MAAM,kBAAkB,SAAS,UAAU,SAAS;AAC1D,UAAI,OAAO,MAAM;AACf,YAAI,CAAC,gBAAgB,GAAG,KAAK,MAAM,GAAG;AACpC,gBAAM,OAAO,WAAW,WAAW,SAAS,KAAK;AACjD,gBAAM,IAAI,sBAAsB,MAAM,GAAG;AAAA,QAC3C;AACA,eAAO,UAAU,GAAG;AAAA,MACtB;AAGA,aAAOF,yBAAwBE,OAAM,UAAU;AAAA,IACjD;AACA,IAAAH,QAAO,UAAU;AAAA,MACf,kBAAAE;AAAA,MACA,yBAAAD;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACtCA,IAAAG,uBAAA;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAI,SAAS,QAAQ,QAAQ;AAC7B,QAAIC,UAAS,OAAO;AAGpB,aAAS,UAAW,KAAK,KAAK;AAC5B,eAAS,OAAO,KAAK;AACnB,YAAI,GAAG,IAAI,IAAI,GAAG;AAAA,MACpB;AAAA,IACF;AACA,QAAIA,QAAO,QAAQA,QAAO,SAASA,QAAO,eAAeA,QAAO,iBAAiB;AAC/E,MAAAD,QAAO,UAAU;AAAA,IACnB,OAAO;AAEL,gBAAU,QAAQD,QAAO;AACzB,MAAAA,SAAQ,SAAS;AAAA,IACnB;AAEA,aAAS,WAAY,KAAK,kBAAkB,QAAQ;AAClD,aAAOE,QAAO,KAAK,kBAAkB,MAAM;AAAA,IAC7C;AAEA,eAAW,YAAY,OAAO,OAAOA,QAAO,SAAS;AAGrD,cAAUA,SAAQ,UAAU;AAE5B,eAAW,OAAO,SAAU,KAAK,kBAAkB,QAAQ;AACzD,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,IAAI,UAAU,+BAA+B;AAAA,MACrD;AACA,aAAOA,QAAO,KAAK,kBAAkB,MAAM;AAAA,IAC7C;AAEA,eAAW,QAAQ,SAAU,MAAM,MAAM,UAAU;AACjD,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,UAAI,MAAMA,QAAO,IAAI;AACrB,UAAI,SAAS,QAAW;AACtB,YAAI,OAAO,aAAa,UAAU;AAChC,cAAI,KAAK,MAAM,QAAQ;AAAA,QACzB,OAAO;AACL,cAAI,KAAK,IAAI;AAAA,QACf;AAAA,MACF,OAAO;AACL,YAAI,KAAK,CAAC;AAAA,MACZ;AACA,aAAO;AAAA,IACT;AAEA,eAAW,cAAc,SAAU,MAAM;AACvC,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,aAAOA,QAAO,IAAI;AAAA,IACpB;AAEA,eAAW,kBAAkB,SAAU,MAAM;AAC3C,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,2BAA2B;AAAA,MACjD;AACA,aAAO,OAAO,WAAW,IAAI;AAAA,IAC/B;AAAA;AAAA;;;AChEA,IAAAC,0BAAA;AAAA,sDAAAC,UAAA;AAAA;AAyBA,QAAIC,UAAS,uBAAuB;AAGpC,QAAI,aAAaA,QAAO,cAAc,SAAU,UAAU;AACxD,iBAAW,KAAK;AAChB,cAAQ,YAAY,SAAS,YAAY,GAAG;AAAA,QAC1C,KAAK;AAAA,QAAM,KAAK;AAAA,QAAO,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAS,KAAK;AAAA,QAAS,KAAK;AAAA,QAAO,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAU,KAAK;AAAA,QAAW,KAAK;AACxI,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEA,aAAS,mBAAmB,KAAK;AAC/B,UAAI,CAAC,IAAK,QAAO;AACjB,UAAI;AACJ,aAAO,MAAM;AACX,gBAAQ,KAAK;AAAA,UACX,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,UACT;AACE,gBAAI,QAAS;AACb,mBAAO,KAAK,KAAK,YAAY;AAC7B,sBAAU;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAIA,aAAS,kBAAkB,KAAK;AAC9B,UAAI,OAAO,mBAAmB,GAAG;AACjC,UAAI,OAAO,SAAS,aAAaA,QAAO,eAAe,cAAc,CAAC,WAAW,GAAG,GAAI,OAAM,IAAI,MAAM,uBAAuB,GAAG;AAClI,aAAO,QAAQ;AAAA,IACjB;AAKA,IAAAD,SAAQ,gBAAgBE;AACxB,aAASA,eAAc,UAAU;AAC/B,WAAK,WAAW,kBAAkB,QAAQ;AAC1C,UAAI;AACJ,cAAQ,KAAK,UAAU;AAAA,QACrB,KAAK;AACH,eAAK,OAAO;AACZ,eAAK,MAAM;AACX,eAAK;AACL;AAAA,QACF,KAAK;AACH,eAAK,WAAW;AAChB,eAAK;AACL;AAAA,QACF,KAAK;AACH,eAAK,OAAO;AACZ,eAAK,MAAM;AACX,eAAK;AACL;AAAA,QACF;AACE,eAAK,QAAQ;AACb,eAAK,MAAM;AACX;AAAA,MACJ;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,WAAWD,QAAO,YAAY,EAAE;AAAA,IACvC;AAEA,IAAAC,eAAc,UAAU,QAAQ,SAAU,KAAK;AAC7C,UAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,UAAI;AACJ,UAAIC;AACJ,UAAI,KAAK,UAAU;AACjB,YAAI,KAAK,SAAS,GAAG;AACrB,YAAI,MAAM,OAAW,QAAO;AAC5B,QAAAA,KAAI,KAAK;AACT,aAAK,WAAW;AAAA,MAClB,OAAO;AACL,QAAAA,KAAI;AAAA,MACN;AACA,UAAIA,KAAI,IAAI,OAAQ,QAAO,IAAI,IAAI,KAAK,KAAK,KAAKA,EAAC,IAAI,KAAK,KAAK,KAAKA,EAAC;AACvE,aAAO,KAAK;AAAA,IACd;AAEA,IAAAD,eAAc,UAAU,MAAM;AAG9B,IAAAA,eAAc,UAAU,OAAO;AAG/B,IAAAA,eAAc,UAAU,WAAW,SAAU,KAAK;AAChD,UAAI,KAAK,YAAY,IAAI,QAAQ;AAC/B,YAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAG,KAAK,QAAQ;AACxE,eAAO,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAAA,MAChE;AACA,UAAI,KAAK,KAAK,UAAU,KAAK,YAAY,KAAK,UAAU,GAAG,IAAI,MAAM;AACrE,WAAK,YAAY,IAAI;AAAA,IACvB;AAIA,aAAS,cAAc,MAAM;AAC3B,UAAI,QAAQ,IAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,EAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,GAAM,QAAO;AAAA,eAAW,QAAQ,MAAM,GAAM,QAAO;AAC3I,aAAO,QAAQ,MAAM,IAAO,KAAK;AAAA,IACnC;AAKA,aAAS,oBAAoBE,OAAM,KAAKD,IAAG;AACzC,UAAI,IAAI,IAAI,SAAS;AACrB,UAAI,IAAIA,GAAG,QAAO;AAClB,UAAI,KAAK,cAAc,IAAI,CAAC,CAAC;AAC7B,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,EAAG,CAAAC,MAAK,WAAW,KAAK;AACjC,eAAO;AAAA,MACT;AACA,UAAI,EAAE,IAAID,MAAK,OAAO,GAAI,QAAO;AACjC,WAAK,cAAc,IAAI,CAAC,CAAC;AACzB,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,EAAG,CAAAC,MAAK,WAAW,KAAK;AACjC,eAAO;AAAA,MACT;AACA,UAAI,EAAE,IAAID,MAAK,OAAO,GAAI,QAAO;AACjC,WAAK,cAAc,IAAI,CAAC,CAAC;AACzB,UAAI,MAAM,GAAG;AACX,YAAI,KAAK,GAAG;AACV,cAAI,OAAO,EAAG,MAAK;AAAA,cAAO,CAAAC,MAAK,WAAW,KAAK;AAAA,QACjD;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAUA,aAAS,oBAAoBA,OAAM,KAAK,GAAG;AACzC,WAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,QAAAA,MAAK,WAAW;AAChB,eAAO;AAAA,MACT;AACA,UAAIA,MAAK,WAAW,KAAK,IAAI,SAAS,GAAG;AACvC,aAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,UAAAA,MAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AACA,YAAIA,MAAK,WAAW,KAAK,IAAI,SAAS,GAAG;AACvC,eAAK,IAAI,CAAC,IAAI,SAAU,KAAM;AAC5B,YAAAA,MAAK,WAAW;AAChB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,aAAS,aAAa,KAAK;AACzB,UAAI,IAAI,KAAK,YAAY,KAAK;AAC9B,UAAI,IAAI,oBAAoB,MAAM,KAAK,CAAC;AACxC,UAAI,MAAM,OAAW,QAAO;AAC5B,UAAI,KAAK,YAAY,IAAI,QAAQ;AAC/B,YAAI,KAAK,KAAK,UAAU,GAAG,GAAG,KAAK,QAAQ;AAC3C,eAAO,KAAK,SAAS,SAAS,KAAK,UAAU,GAAG,KAAK,SAAS;AAAA,MAChE;AACA,UAAI,KAAK,KAAK,UAAU,GAAG,GAAG,IAAI,MAAM;AACxC,WAAK,YAAY,IAAI;AAAA,IACvB;AAKA,aAAS,SAAS,KAAKD,IAAG;AACxB,UAAI,QAAQ,oBAAoB,MAAM,KAAKA,EAAC;AAC5C,UAAI,CAAC,KAAK,SAAU,QAAO,IAAI,SAAS,QAAQA,EAAC;AACjD,WAAK,YAAY;AACjB,UAAI,MAAM,IAAI,UAAU,QAAQ,KAAK;AACrC,UAAI,KAAK,KAAK,UAAU,GAAG,GAAG;AAC9B,aAAO,IAAI,SAAS,QAAQA,IAAG,GAAG;AAAA,IACpC;AAIA,aAAS,QAAQ,KAAK;AACpB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,SAAU,QAAO,IAAI;AAC9B,aAAO;AAAA,IACT;AAMA,aAAS,UAAU,KAAKA,IAAG;AACzB,WAAK,IAAI,SAASA,MAAK,MAAM,GAAG;AAC9B,YAAI,IAAI,IAAI,SAAS,WAAWA,EAAC;AACjC,YAAI,GAAG;AACL,cAAIE,KAAI,EAAE,WAAW,EAAE,SAAS,CAAC;AACjC,cAAIA,MAAK,SAAUA,MAAK,OAAQ;AAC9B,iBAAK,WAAW;AAChB,iBAAK,YAAY;AACjB,iBAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,iBAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,mBAAO,EAAE,MAAM,GAAG,EAAE;AAAA,UACtB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,WAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,aAAO,IAAI,SAAS,WAAWF,IAAG,IAAI,SAAS,CAAC;AAAA,IAClD;AAIA,aAAS,SAAS,KAAK;AACrB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,UAAU;AACjB,YAAI,MAAM,KAAK,YAAY,KAAK;AAChC,eAAO,IAAI,KAAK,SAAS,SAAS,WAAW,GAAG,GAAG;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AAEA,aAAS,WAAW,KAAKA,IAAG;AAC1B,UAAIG,MAAK,IAAI,SAASH,MAAK;AAC3B,UAAIG,OAAM,EAAG,QAAO,IAAI,SAAS,UAAUH,EAAC;AAC5C,WAAK,WAAW,IAAIG;AACpB,WAAK,YAAY;AACjB,UAAIA,OAAM,GAAG;AACX,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AAAA,MACvC,OAAO;AACL,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AACrC,aAAK,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC;AAAA,MACvC;AACA,aAAO,IAAI,SAAS,UAAUH,IAAG,IAAI,SAASG,EAAC;AAAA,IACjD;AAEA,aAAS,UAAU,KAAK;AACtB,UAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAC9C,UAAI,KAAK,SAAU,QAAO,IAAI,KAAK,SAAS,SAAS,UAAU,GAAG,IAAI,KAAK,QAAQ;AACnF,aAAO;AAAA,IACT;AAGA,aAAS,YAAY,KAAK;AACxB,aAAO,IAAI,SAAS,KAAK,QAAQ;AAAA,IACnC;AAEA,aAAS,UAAU,KAAK;AACtB,aAAO,OAAO,IAAI,SAAS,KAAK,MAAM,GAAG,IAAI;AAAA,IAC/C;AAAA;AAAA;;;ACvSA;AAAA,8DAAAC,UAAAC,SAAA;AAAA;AAIA,QAAMC,YAAU;AAIhB,QAAM,EAAE,sBAAsB,qBAAqB,eAAe,IAAI;AACtE,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,EAAE,sBAAsB,uBAAuB,IAAI,iBAA6B;AACtF,aAAS,KAAKC,WAAU,UAAU,MAAM;AACtC,UAAI;AACJ,UAAI,OAAO,aAAa,YAAY,oBAAoBD,SAAQ;AAC9D,eAAO,IAAIC,UAAS;AAAA,UAClB,YAAY;AAAA,UACZ,GAAG;AAAA,UACH,OAAO;AACL,iBAAK,KAAK,QAAQ;AAClB,iBAAK,KAAK,IAAI;AAAA,UAChB;AAAA,QACF,CAAC;AAAA,MACH;AACA,UAAIC;AACJ,UAAI,YAAY,SAAS,mBAAmB,GAAG;AAC7C,QAAAA,WAAU;AACV,mBAAW,SAAS,mBAAmB,EAAE;AAAA,MAC3C,WAAW,YAAY,SAAS,cAAc,GAAG;AAC/C,QAAAA,WAAU;AACV,mBAAW,SAAS,cAAc,EAAE;AAAA,MACtC,OAAO;AACL,cAAM,IAAI,qBAAqB,YAAY,CAAC,UAAU,GAAG,QAAQ;AAAA,MACnE;AACA,YAAMC,YAAW,IAAIF,UAAS;AAAA,QAC5B,YAAY;AAAA,QACZ,eAAe;AAAA;AAAA,QAEf,GAAG;AAAA,MACL,CAAC;AAID,UAAI,UAAU;AACd,MAAAE,UAAS,QAAQ,WAAY;AAC3B,YAAI,CAAC,SAAS;AACZ,oBAAU;AACV,eAAK;AAAA,QACP;AAAA,MACF;AACA,MAAAA,UAAS,WAAW,SAAU,OAAO,IAAI;AACvC;AAAA,UACE,MAAM,KAAK;AAAA,UACX,MAAMJ,UAAQ,SAAS,IAAI,KAAK;AAAA;AAAA,UAEhC,CAAC,MAAMA,UAAQ,SAAS,IAAI,KAAK,KAAK;AAAA,QACxC;AAAA,MACF;AACA,qBAAe,MAAM,OAAO;AAC1B,cAAM,WAAW,UAAU,UAAa,UAAU;AAClD,cAAM,WAAW,OAAO,SAAS,UAAU;AAC3C,YAAI,YAAY,UAAU;AACxB,gBAAM,EAAE,OAAO,KAAK,IAAI,MAAM,SAAS,MAAM,KAAK;AAClD,gBAAM;AACN,cAAI,MAAM;AACR;AAAA,UACF;AAAA,QACF;AACA,YAAI,OAAO,SAAS,WAAW,YAAY;AACzC,gBAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AACxC,gBAAM;AAAA,QACR;AAAA,MACF;AACA,qBAAe,OAAO;AACpB,mBAAS;AACP,cAAI;AACF,kBAAM,EAAE,OAAO,KAAK,IAAIG,WAAU,MAAM,SAAS,KAAK,IAAI,SAAS,KAAK;AACxE,gBAAI,MAAM;AACR,cAAAC,UAAS,KAAK,IAAI;AAAA,YACpB,OAAO;AACL,oBAAM,MAAM,SAAS,OAAO,MAAM,SAAS,aAAa,MAAM,QAAQ;AACtE,kBAAI,QAAQ,MAAM;AAChB,0BAAU;AACV,sBAAM,IAAI,uBAAuB;AAAA,cACnC,WAAWA,UAAS,KAAK,GAAG,GAAG;AAC7B;AAAA,cACF,OAAO;AACL,0BAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF,SAAS,KAAK;AACZ,YAAAA,UAAS,QAAQ,GAAG;AAAA,UACtB;AACA;AAAA,QACF;AAAA,MACF;AACA,aAAOA;AAAA,IACT;AACA,IAAAL,QAAO,UAAU;AAAA;AAAA;;;ACjGjB,IAAAM,oBAAA;AAAA,kEAAAC,UAAAC,SAAA;AAAA;AAyBA,QAAMC,YAAU;AAIhB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,IACF,IAAI;AACJ,IAAAH,QAAO,UAAUI;AACjB,IAAAA,UAAS,gBAAgB;AACzB,QAAM,EAAE,cAAc,GAAG,IAAI,QAAQ,QAAQ;AAC7C,QAAM,EAAE,QAAQ,gBAAgB,IAAI;AACpC,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,EAAE,eAAe,IAAI;AAC3B,QAAM,MAAM;AACZ,QAAI,QAAQ,gBAA2B,SAAS,UAAU,CAAC,OAAO;AAChE,cAAQ;AAAA,IACV,CAAC;AACD,QAAM,aAAa;AACnB,QAAM,cAAc;AACpB,QAAM,EAAE,kBAAAC,mBAAkB,yBAAAC,yBAAwB,IAAI;AACtD,QAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,eAAe,IAAI;AAC3B,QAAM,UAAUJ,QAAO,SAAS;AAChC,QAAM,EAAE,eAAAK,eAAc,IAAI;AAC1B,QAAM,OAAO;AACb,yBAAqBJ,UAAS,WAAW,OAAO,SAAS;AACzD,yBAAqBA,WAAU,MAAM;AACrC,QAAM,MAAM,MAAM;AAAA,IAAC;AACnB,QAAM,EAAE,eAAe,IAAI;AAC3B,QAAM,cAAc,KAAK;AACzB,QAAM,SAAS,KAAK;AACpB,QAAM,cAAc,KAAK;AACzB,QAAM,WAAW,KAAK;AACtB,QAAM,eAAe,KAAK;AAC1B,QAAM,QAAQ,KAAK;AACnB,QAAM,gBAAgB,KAAK;AAC3B,QAAM,mBAAmB,KAAK;AAC9B,QAAM,qBAAqB,KAAK;AAChC,QAAM,mBAAmB,KAAK;AAC9B,QAAM,gBAAgB,KAAK;AAC3B,QAAM,aAAa,KAAK;AACxB,QAAM,eAAe,KAAK;AAC1B,QAAM,aAAa,KAAK;AACxB,QAAM,UAAU,KAAK;AACrB,QAAM,gBAAgB,KAAK;AAC3B,QAAM,mBAAmB,KAAK;AAC9B,QAAM,eAAe,KAAK;AAC1B,QAAM,eAAe,KAAK;AAG1B,aAAS,qBAAqB,KAAK;AACjC,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,MAAM;AACJ,kBAAQ,KAAK,QAAQ,SAAS;AAAA,QAChC;AAAA,QACA,IAAI,OAAO;AACT,cAAI,MAAO,MAAK,SAAS;AAAA,cACpB,MAAK,SAAS,CAAC;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AACA,2BAAuB,cAAc,WAAW;AAAA,MAC9C,YAAY,qBAAqB,WAAW;AAAA,MAC5C,OAAO,qBAAqB,MAAM;AAAA,MAClC,YAAY,qBAAqB,WAAW;AAAA,MAC5C,SAAS,qBAAqB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKtC,aAAa,qBAAqB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9C,MAAM,qBAAqB,KAAK;AAAA;AAAA;AAAA,MAGhC,cAAc,qBAAqB,aAAa;AAAA,MAChD,iBAAiB,qBAAqB,gBAAgB;AAAA,MACtD,mBAAmB,qBAAqB,kBAAkB;AAAA,MAC1D,iBAAiB,qBAAqB,gBAAgB;AAAA;AAAA,MAEtD,cAAc,qBAAqB,aAAa;AAAA,MAChD,WAAW,qBAAqB,UAAU;AAAA,MAC1C,aAAa,qBAAqB,YAAY;AAAA;AAAA,MAE9C,WAAW,qBAAqB,UAAU;AAAA;AAAA,MAE1C,QAAQ,qBAAqB,OAAO;AAAA;AAAA;AAAA,MAGpC,cAAc,qBAAqB,aAAa;AAAA,MAChD,iBAAiB,qBAAqB,gBAAgB;AAAA;AAAA,MAEtD,aAAa,qBAAqB,YAAY;AAAA,MAC9C,aAAa,qBAAqB,YAAY;AAAA,IAChD,CAAC;AACD,aAAS,cAAc,SAAS,QAAQ,UAAU;AAMhD,UAAI,OAAO,aAAa,UAAW,YAAW,kBAAkB;AAIhE,WAAK,QAAQ,aAAa,eAAe,eAAe;AAGxD,UAAI,WAAW,QAAQ,WAAY,MAAK,SAAS;AACjD,UAAI,YAAY,WAAW,QAAQ,mBAAoB,MAAK,SAAS;AAIrE,WAAK,gBAAgB,UACjBE,kBAAiB,MAAM,SAAS,yBAAyB,QAAQ,IACjEC,yBAAwB,KAAK;AAKjC,WAAK,SAAS,IAAI,WAAW;AAC7B,WAAK,SAAS;AACd,WAAK,QAAQ,CAAC;AACd,WAAK,UAAU;AACf,WAAK,OAAO,IAAI;AAGhB,UAAI,WAAW,QAAQ,cAAc,MAAO,MAAK,SAAS,CAAC;AAG3D,UAAI,WAAW,QAAQ,gBAAgB,MAAO,MAAK,SAAS,CAAC;AAM7D,WAAK,UAAU;AAKf,WAAK,kBAAmB,WAAW,QAAQ,mBAAoB;AAI/D,WAAK,oBAAoB;AACzB,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,UAAI,WAAW,QAAQ,UAAU;AAC/B,aAAK,UAAU,IAAIC,eAAc,QAAQ,QAAQ;AACjD,aAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA,IACF;AACA,aAASJ,UAAS,SAAS;AACzB,UAAI,EAAE,gBAAgBA,WAAW,QAAO,IAAIA,UAAS,OAAO;AAI5D,YAAM,WAAW,gBAAgB;AACjC,WAAK,iBAAiB,IAAI,cAAc,SAAS,MAAM,QAAQ;AAC/D,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,SAAS,WAAY,MAAK,QAAQ,QAAQ;AAC7D,YAAI,OAAO,QAAQ,YAAY,WAAY,MAAK,WAAW,QAAQ;AACnE,YAAI,OAAO,QAAQ,cAAc,WAAY,MAAK,aAAa,QAAQ;AACvE,YAAI,QAAQ,UAAU,CAAC,SAAU,gBAAe,QAAQ,QAAQ,IAAI;AAAA,MACtE;AACA,aAAO,KAAK,MAAM,OAAO;AACzB,kBAAY,UAAU,MAAM,MAAM;AAChC,YAAI,KAAK,eAAe,cAAc;AACpC,wBAAc,MAAM,KAAK,cAAc;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AACA,IAAAA,UAAS,UAAU,UAAU,YAAY;AACzC,IAAAA,UAAS,UAAU,aAAa,YAAY;AAC5C,IAAAA,UAAS,UAAU,WAAW,SAAU,KAAK,IAAI;AAC/C,SAAG,GAAG;AAAA,IACR;AACA,IAAAA,UAAS,UAAU,GAAG,sBAAsB,IAAI,SAAU,KAAK;AAC7D,WAAK,QAAQ,GAAG;AAAA,IAClB;AACA,IAAAA,UAAS,UAAU,kBAAkB,IAAI,WAAY;AACnD,UAAI;AACJ,UAAI,CAAC,KAAK,WAAW;AACnB,gBAAQ,KAAK,gBAAgB,OAAO,IAAI,WAAW;AACnD,aAAK,QAAQ,KAAK;AAAA,MACpB;AACA,aAAO,IAAIF,SAAQ,CAAC,SAASO,YAAW,IAAI,MAAM,CAAC,QAAS,OAAO,QAAQ,QAAQA,QAAO,GAAG,IAAI,QAAQ,IAAI,CAAE,CAAC;AAAA,IAClH;AAMA,IAAAL,UAAS,UAAU,OAAO,SAAUM,QAAO,UAAU;AACnD,aAAO,iBAAiB,MAAMA,QAAO,UAAU,KAAK;AAAA,IACtD;AAGA,IAAAN,UAAS,UAAU,UAAU,SAAUM,QAAO,UAAU;AACtD,aAAO,iBAAiB,MAAMA,QAAO,UAAU,IAAI;AAAA,IACrD;AACA,aAAS,iBAAiB,QAAQA,QAAO,UAAU,YAAY;AAC7D,YAAM,oBAAoBA,MAAK;AAC/B,YAAMC,SAAQ,OAAO;AACrB,UAAI;AACJ,WAAKA,OAAM,QAAQ,iBAAiB,GAAG;AACrC,YAAI,OAAOD,WAAU,UAAU;AAC7B,qBAAW,YAAYC,OAAM;AAC7B,cAAIA,OAAM,aAAa,UAAU;AAC/B,gBAAI,cAAcA,OAAM,UAAU;AAGhC,cAAAD,SAAQL,QAAO,KAAKK,QAAO,QAAQ,EAAE,SAASC,OAAM,QAAQ;AAAA,YAC9D,OAAO;AACL,cAAAD,SAAQL,QAAO,KAAKK,QAAO,QAAQ;AACnC,yBAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF,WAAWA,kBAAiBL,SAAQ;AAClC,qBAAW;AAAA,QACb,WAAW,OAAO,cAAcK,MAAK,GAAG;AACtC,UAAAA,SAAQ,OAAO,oBAAoBA,MAAK;AACxC,qBAAW;AAAA,QACb,WAAWA,UAAS,MAAM;AACxB,gBAAM,IAAI,qBAAqB,SAAS,CAAC,UAAU,UAAU,YAAY,GAAGA,MAAK;AAAA,QACnF;AAAA,MACF;AACA,UAAI,KAAK;AACP,uBAAe,QAAQ,GAAG;AAAA,MAC5B,WAAWA,WAAU,MAAM;AACzB,QAAAC,OAAM,SAAS,CAAC;AAChB,mBAAW,QAAQA,MAAK;AAAA,MAC1B,YAAYA,OAAM,QAAQ,iBAAiB,KAAMD,UAASA,OAAM,SAAS,GAAI;AAC3E,YAAI,YAAY;AACd,eAAKC,OAAM,QAAQ,iBAAiB,EAAG,gBAAe,QAAQ,IAAI,mCAAmC,CAAC;AAAA,mBAC7FA,OAAM,aAAaA,OAAM,QAAS,QAAO;AAAA,cAC7C,UAAS,QAAQA,QAAOD,QAAO,IAAI;AAAA,QAC1C,WAAWC,OAAM,OAAO;AACtB,yBAAe,QAAQ,IAAI,0BAA0B,CAAC;AAAA,QACxD,WAAWA,OAAM,aAAaA,OAAM,SAAS;AAC3C,iBAAO;AAAA,QACT,OAAO;AACL,UAAAA,OAAM,SAAS,CAAC;AAChB,cAAIA,OAAM,WAAW,CAAC,UAAU;AAC9B,YAAAD,SAAQC,OAAM,QAAQ,MAAMD,MAAK;AACjC,gBAAIC,OAAM,cAAcD,OAAM,WAAW,EAAG,UAAS,QAAQC,QAAOD,QAAO,KAAK;AAAA,gBAC3E,eAAc,QAAQC,MAAK;AAAA,UAClC,OAAO;AACL,qBAAS,QAAQA,QAAOD,QAAO,KAAK;AAAA,UACtC;AAAA,QACF;AAAA,MACF,WAAW,CAAC,YAAY;AACtB,QAAAC,OAAM,SAAS,CAAC;AAChB,sBAAc,QAAQA,MAAK;AAAA,MAC7B;AAKA,aAAO,CAACA,OAAM,UAAUA,OAAM,SAASA,OAAM,iBAAiBA,OAAM,WAAW;AAAA,IACjF;AACA,aAAS,SAAS,QAAQA,QAAOD,QAAO,YAAY;AAClD,UAAIC,OAAM,WAAWA,OAAM,WAAW,KAAK,CAACA,OAAM,QAAQ,OAAO,cAAc,MAAM,IAAI,GAAG;AAG1F,aAAKA,OAAM,QAAQ,sBAAsB,GAAG;AAC1C,UAAAA,OAAM,kBAAkB,MAAM;AAAA,QAChC,OAAO;AACL,UAAAA,OAAM,oBAAoB;AAAA,QAC5B;AACA,QAAAA,OAAM,cAAc;AACpB,eAAO,KAAK,QAAQD,MAAK;AAAA,MAC3B,OAAO;AAEL,QAAAC,OAAM,UAAUA,OAAM,aAAa,IAAID,OAAM;AAC7C,YAAI,WAAY,CAAAC,OAAM,OAAO,QAAQD,MAAK;AAAA,YACrC,CAAAC,OAAM,OAAO,KAAKD,MAAK;AAC5B,aAAKC,OAAM,QAAQ,mBAAmB,EAAG,cAAa,MAAM;AAAA,MAC9D;AACA,oBAAc,QAAQA,MAAK;AAAA,IAC7B;AACA,IAAAP,UAAS,UAAU,WAAW,WAAY;AACxC,YAAMO,SAAQ,KAAK;AACnB,aAAOA,OAAM,OAAO,MAAM,QAAQA,OAAM,YAAY;AAAA,IACtD;AAGA,IAAAP,UAAS,UAAU,cAAc,SAAU,KAAK;AAC9C,YAAM,UAAU,IAAII,eAAc,GAAG;AACrC,WAAK,eAAe,UAAU;AAE9B,WAAK,eAAe,WAAW,KAAK,eAAe,QAAQ;AAC3D,YAAM,SAAS,KAAK,eAAe;AAEnC,UAAI,UAAU;AACd,iBAAW,QAAQ,QAAQ;AACzB,mBAAW,QAAQ,MAAM,IAAI;AAAA,MAC/B;AACA,aAAO,MAAM;AACb,UAAI,YAAY,GAAI,QAAO,KAAK,OAAO;AACvC,WAAK,eAAe,SAAS,QAAQ;AACrC,aAAO;AAAA,IACT;AAGA,QAAM,UAAU;AAChB,aAAS,wBAAwBI,IAAG;AAClC,UAAIA,KAAI,SAAS;AACf,cAAM,IAAI,iBAAiB,QAAQ,WAAWA,EAAC;AAAA,MACjD,OAAO;AAGL,QAAAA;AACA,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA,MAAKA,OAAM;AACX,QAAAA;AAAA,MACF;AACA,aAAOA;AAAA,IACT;AAIA,aAAS,cAAcA,IAAGD,QAAO;AAC/B,UAAIC,MAAK,KAAMD,OAAM,WAAW,KAAKA,OAAM,MAAQ,QAAO;AAC1D,WAAKA,OAAM,QAAQ,iBAAiB,EAAG,QAAO;AAC9C,UAAI,YAAYC,EAAC,GAAG;AAElB,YAAID,OAAM,WAAWA,OAAM,OAAQ,QAAOA,OAAM,OAAO,MAAM,EAAE;AAC/D,eAAOA,OAAM;AAAA,MACf;AACA,UAAIC,MAAKD,OAAM,OAAQ,QAAOC;AAC9B,aAAOD,OAAM,QAAQA,OAAM,SAAS;AAAA,IACtC;AAGA,IAAAP,UAAS,UAAU,OAAO,SAAUQ,IAAG;AACrC,YAAM,QAAQA,EAAC;AAGf,UAAIA,OAAM,QAAW;AACnB,QAAAA,KAAI;AAAA,MACN,WAAW,CAAC,gBAAgBA,EAAC,GAAG;AAC9B,QAAAA,KAAI,eAAeA,IAAG,EAAE;AAAA,MAC1B;AACA,YAAMD,SAAQ,KAAK;AACnB,YAAM,QAAQC;AAGd,UAAIA,KAAID,OAAM,cAAe,CAAAA,OAAM,gBAAgB,wBAAwBC,EAAC;AAC5E,UAAIA,OAAM,EAAG,CAAAD,OAAM,SAAS,CAAC;AAK7B,UACEC,OAAM,KACND,OAAM,kBACJA,OAAM,kBAAkB,IAAIA,OAAM,UAAUA,OAAM,gBAAgBA,OAAM,SAAS,MAAMA,OAAM,QAC/F;AACA,cAAM,sBAAsBA,OAAM,QAAQA,OAAM,KAAK;AACrD,YAAIA,OAAM,WAAW,KAAKA,OAAM,MAAO,aAAY,IAAI;AAAA,YAClD,cAAa,IAAI;AACtB,eAAO;AAAA,MACT;AACA,MAAAC,KAAI,cAAcA,IAAGD,MAAK;AAG1B,UAAIC,OAAM,KAAKD,OAAM,OAAO;AAC1B,YAAIA,OAAM,WAAW,EAAG,aAAY,IAAI;AACxC,eAAO;AAAA,MACT;AAyBA,UAAI,UAAUA,OAAM,QAAQ,mBAAmB;AAC/C,YAAM,iBAAiB,MAAM;AAG7B,UAAIA,OAAM,WAAW,KAAKA,OAAM,SAASC,KAAID,OAAM,eAAe;AAChE,iBAAS;AACT,cAAM,8BAA8B,MAAM;AAAA,MAC5C;AAKA,UAAIA,OAAM,SAASA,OAAM,WAAWA,OAAM,aAAaA,OAAM,WAAW,CAACA,OAAM,aAAa;AAC1F,iBAAS;AACT,cAAM,kCAAkC,MAAM;AAAA,MAChD,WAAW,QAAQ;AACjB,cAAM,SAAS;AACf,QAAAA,OAAM,SAAS,WAAW;AAE1B,YAAIA,OAAM,WAAW,EAAG,CAAAA,OAAM,SAAS;AAGvC,YAAI;AACF,eAAK,MAAMA,OAAM,aAAa;AAAA,QAChC,SAAS,KAAK;AACZ,yBAAe,MAAM,GAAG;AAAA,QAC1B;AACA,QAAAA,OAAM,SAAS,CAAC;AAIhB,YAAI,CAACA,OAAM,QAAS,CAAAC,KAAI,cAAc,OAAOD,MAAK;AAAA,MACpD;AACA,UAAI;AACJ,UAAIC,KAAI,EAAG,OAAM,SAASA,IAAGD,MAAK;AAAA,UAC7B,OAAM;AACX,UAAI,QAAQ,MAAM;AAChB,QAAAA,OAAM,eAAeA,OAAM,UAAUA,OAAM;AAC3C,QAAAC,KAAI;AAAA,MACN,OAAO;AACL,QAAAD,OAAM,UAAUC;AAChB,YAAID,OAAM,iBAAiB;AACzB,UAAAA,OAAM,kBAAkB,MAAM;AAAA,QAChC,OAAO;AACL,UAAAA,OAAM,oBAAoB;AAAA,QAC5B;AAAA,MACF;AACA,UAAIA,OAAM,WAAW,GAAG;AAGtB,YAAI,CAACA,OAAM,MAAO,CAAAA,OAAM,eAAe;AAGvC,YAAI,UAAUC,MAAKD,OAAM,MAAO,aAAY,IAAI;AAAA,MAClD;AACA,UAAI,QAAQ,QAAQ,CAACA,OAAM,gBAAgB,CAACA,OAAM,cAAc;AAC9D,QAAAA,OAAM,cAAc;AACpB,aAAK,KAAK,QAAQ,GAAG;AAAA,MACvB;AACA,aAAO;AAAA,IACT;AACA,aAAS,WAAW,QAAQA,QAAO;AACjC,YAAM,YAAY;AAClB,UAAIA,OAAM,MAAO;AACjB,UAAIA,OAAM,SAAS;AACjB,cAAMD,SAAQC,OAAM,QAAQ,IAAI;AAChC,YAAID,UAASA,OAAM,QAAQ;AACzB,UAAAC,OAAM,OAAO,KAAKD,MAAK;AACvB,UAAAC,OAAM,UAAUA,OAAM,aAAa,IAAID,OAAM;AAAA,QAC/C;AAAA,MACF;AACA,MAAAC,OAAM,QAAQ;AACd,UAAIA,OAAM,MAAM;AAId,qBAAa,MAAM;AAAA,MACrB,OAAO;AAEL,QAAAA,OAAM,eAAe;AACrB,QAAAA,OAAM,kBAAkB;AAGxB,sBAAc,MAAM;AAAA,MACtB;AAAA,IACF;AAKA,aAAS,aAAa,QAAQ;AAC5B,YAAMA,SAAQ,OAAO;AACrB,YAAM,gBAAgBA,OAAM,cAAcA,OAAM,eAAe;AAC/D,MAAAA,OAAM,eAAe;AACrB,UAAI,CAACA,OAAM,iBAAiB;AAC1B,cAAM,gBAAgBA,OAAM,OAAO;AACnC,QAAAA,OAAM,kBAAkB;AACxB,QAAAV,UAAQ,SAAS,eAAe,MAAM;AAAA,MACxC;AAAA,IACF;AACA,aAAS,cAAc,QAAQ;AAC7B,YAAMU,SAAQ,OAAO;AACrB,YAAM,iBAAiBA,OAAM,WAAWA,OAAM,QAAQA,OAAM,KAAK;AACjE,UAAI,CAACA,OAAM,aAAa,CAACA,OAAM,YAAYA,OAAM,UAAUA,OAAM,QAAQ;AACvE,eAAO,KAAK,UAAU;AACtB,QAAAA,OAAM,kBAAkB;AAAA,MAC1B;AAQA,MAAAA,OAAM,eAAe,CAACA,OAAM,WAAW,CAACA,OAAM,SAASA,OAAM,UAAUA,OAAM;AAC7E,WAAK,MAAM;AAAA,IACb;AAQA,aAAS,cAAc,QAAQA,QAAO;AACpC,UAAI,CAACA,OAAM,eAAeA,OAAM,aAAa;AAC3C,QAAAA,OAAM,cAAc;AACpB,QAAAV,UAAQ,SAAS,gBAAgB,QAAQU,MAAK;AAAA,MAChD;AAAA,IACF;AACA,aAAS,eAAe,QAAQA,QAAO;AAwBrC,aACE,CAACA,OAAM,WACP,CAACA,OAAM,UACNA,OAAM,SAASA,OAAM,iBAAkBA,OAAM,WAAWA,OAAM,WAAW,IAC1E;AACA,cAAM,MAAMA,OAAM;AAClB,cAAM,sBAAsB;AAC5B,eAAO,KAAK,CAAC;AACb,YAAI,QAAQA,OAAM;AAEhB;AAAA,MACJ;AACA,MAAAA,OAAM,cAAc;AAAA,IACtB;AAMA,IAAAP,UAAS,UAAU,QAAQ,SAAUQ,IAAG;AACtC,YAAM,IAAI,2BAA2B,SAAS;AAAA,IAChD;AACA,IAAAR,UAAS,UAAU,OAAO,SAAU,MAAM,UAAU;AAClD,YAAM,MAAM;AACZ,YAAMO,SAAQ,KAAK;AACnB,UAAIA,OAAM,MAAM,WAAW,GAAG;AAC5B,YAAI,CAACA,OAAM,iBAAiB;AAC1B,UAAAA,OAAM,kBAAkB;AACxB,UAAAA,OAAM,oBAAoB,IAAI,QAAQA,OAAM,oBAAoB,CAACA,OAAM,iBAAiB,IAAI,CAAC,CAAC;AAAA,QAChG;AAAA,MACF;AACA,MAAAA,OAAM,MAAM,KAAK,IAAI;AACrB,YAAM,yBAAyBA,OAAM,MAAM,QAAQ,QAAQ;AAC3D,YAAM,SAAS,CAAC,YAAY,SAAS,QAAQ,UAAU,SAASV,UAAQ,UAAU,SAASA,UAAQ;AACnG,YAAM,QAAQ,QAAQ,QAAQ;AAC9B,UAAIU,OAAM,WAAY,CAAAV,UAAQ,SAAS,KAAK;AAAA,UACvC,KAAI,KAAK,OAAO,KAAK;AAC1B,WAAK,GAAG,UAAU,QAAQ;AAC1B,eAAS,SAASY,WAAU,YAAY;AACtC,cAAM,UAAU;AAChB,YAAIA,cAAa,KAAK;AACpB,cAAI,cAAc,WAAW,eAAe,OAAO;AACjD,uBAAW,aAAa;AACxB,oBAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AACA,eAAS,QAAQ;AACf,cAAM,OAAO;AACb,aAAK,IAAI;AAAA,MACX;AACA,UAAI;AACJ,UAAI,YAAY;AAChB,eAAS,UAAU;AACjB,cAAM,SAAS;AAEf,aAAK,eAAe,SAAS,OAAO;AACpC,aAAK,eAAe,UAAU,QAAQ;AACtC,YAAI,SAAS;AACX,eAAK,eAAe,SAAS,OAAO;AAAA,QACtC;AACA,aAAK,eAAe,SAAS,OAAO;AACpC,aAAK,eAAe,UAAU,QAAQ;AACtC,YAAI,eAAe,OAAO,KAAK;AAC/B,YAAI,eAAe,OAAO,MAAM;AAChC,YAAI,eAAe,QAAQ,MAAM;AACjC,oBAAY;AAOZ,YAAI,WAAWF,OAAM,sBAAsB,CAAC,KAAK,kBAAkB,KAAK,eAAe,WAAY,SAAQ;AAAA,MAC7G;AACA,eAAS,QAAQ;AAKf,YAAI,CAAC,WAAW;AACd,cAAIA,OAAM,MAAM,WAAW,KAAKA,OAAM,MAAM,CAAC,MAAM,MAAM;AACvD,kBAAM,+BAA+B,CAAC;AACtC,YAAAA,OAAM,oBAAoB;AAC1B,YAAAA,OAAM,kBAAkB;AAAA,UAC1B,WAAWA,OAAM,MAAM,SAAS,KAAKA,OAAM,MAAM,SAAS,IAAI,GAAG;AAC/D,kBAAM,+BAA+BA,OAAM,kBAAkB,IAAI;AACjE,YAAAA,OAAM,kBAAkB,IAAI,IAAI;AAAA,UAClC;AACA,cAAI,MAAM;AAAA,QACZ;AACA,YAAI,CAAC,SAAS;AAKZ,oBAAU,YAAY,KAAK,IAAI;AAC/B,eAAK,GAAG,SAAS,OAAO;AAAA,QAC1B;AAAA,MACF;AACA,UAAI,GAAG,QAAQ,MAAM;AACrB,eAAS,OAAOD,QAAO;AACrB,cAAM,QAAQ;AACd,cAAM,MAAM,KAAK,MAAMA,MAAK;AAC5B,cAAM,cAAc,GAAG;AACvB,YAAI,QAAQ,OAAO;AACjB,gBAAM;AAAA,QACR;AAAA,MACF;AAIA,eAAS,QAAQ,IAAI;AACnB,cAAM,WAAW,EAAE;AACnB,eAAO;AACP,aAAK,eAAe,SAAS,OAAO;AACpC,YAAI,KAAK,cAAc,OAAO,MAAM,GAAG;AACrC,gBAAM,IAAI,KAAK,kBAAkB,KAAK;AACtC,cAAI,KAAK,CAAC,EAAE,cAAc;AAExB,2BAAe,MAAM,EAAE;AAAA,UACzB,OAAO;AACL,iBAAK,KAAK,SAAS,EAAE;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAGA,sBAAgB,MAAM,SAAS,OAAO;AAGtC,eAAS,UAAU;AACjB,aAAK,eAAe,UAAU,QAAQ;AACtC,eAAO;AAAA,MACT;AACA,WAAK,KAAK,SAAS,OAAO;AAC1B,eAAS,WAAW;AAClB,cAAM,UAAU;AAChB,aAAK,eAAe,SAAS,OAAO;AACpC,eAAO;AAAA,MACT;AACA,WAAK,KAAK,UAAU,QAAQ;AAC5B,eAAS,SAAS;AAChB,cAAM,QAAQ;AACd,YAAI,OAAO,IAAI;AAAA,MACjB;AAGA,WAAK,KAAK,QAAQ,GAAG;AAIrB,UAAI,KAAK,sBAAsB,MAAM;AACnC,cAAM;AAAA,MACR,WAAW,CAACC,OAAM,SAAS;AACzB,cAAM,aAAa;AACnB,YAAI,OAAO;AAAA,MACb;AACA,aAAO;AAAA,IACT;AACA,aAAS,YAAY,KAAK,MAAM;AAC9B,aAAO,SAAS,4BAA4B;AAC1C,cAAMA,SAAQ,IAAI;AAKlB,YAAIA,OAAM,sBAAsB,MAAM;AACpC,gBAAM,eAAe,CAAC;AACtB,UAAAA,OAAM,oBAAoB;AAAA,QAC5B,WAAWA,OAAM,iBAAiB;AAChC,gBAAM,eAAeA,OAAM,kBAAkB,IAAI;AACjD,UAAAA,OAAM,kBAAkB,OAAO,IAAI;AAAA,QACrC;AACA,aAAK,CAACA,OAAM,qBAAqBA,OAAM,kBAAkB,SAAS,MAAM,IAAI,cAAc,MAAM,GAAG;AACjG,cAAI,OAAO;AAAA,QACb;AAAA,MACF;AAAA,IACF;AACA,IAAAP,UAAS,UAAU,SAAS,SAAU,MAAM;AAC1C,YAAMO,SAAQ,KAAK;AACnB,YAAM,aAAa;AAAA,QACjB,YAAY;AAAA,MACd;AAGA,UAAIA,OAAM,MAAM,WAAW,EAAG,QAAO;AACrC,UAAI,CAAC,MAAM;AAET,cAAM,QAAQA,OAAM;AACpB,QAAAA,OAAM,QAAQ,CAAC;AACf,aAAK,MAAM;AACX,iBAASG,KAAI,GAAGA,KAAI,MAAM,QAAQA;AAChC,gBAAMA,EAAC,EAAE,KAAK,UAAU,MAAM;AAAA,YAC5B,YAAY;AAAA,UACd,CAAC;AACH,eAAO;AAAA,MACT;AAGA,YAAMC,SAAQ,sBAAsBJ,OAAM,OAAO,IAAI;AACrD,UAAII,WAAU,GAAI,QAAO;AACzB,MAAAJ,OAAM,MAAM,OAAOI,QAAO,CAAC;AAC3B,UAAIJ,OAAM,MAAM,WAAW,EAAG,MAAK,MAAM;AACzC,WAAK,KAAK,UAAU,MAAM,UAAU;AACpC,aAAO;AAAA,IACT;AAIA,IAAAP,UAAS,UAAU,KAAK,SAAU,IAAI,IAAI;AACxC,YAAM,MAAM,OAAO,UAAU,GAAG,KAAK,MAAM,IAAI,EAAE;AACjD,YAAMO,SAAQ,KAAK;AACnB,UAAI,OAAO,QAAQ;AAGjB,QAAAA,OAAM,oBAAoB,KAAK,cAAc,UAAU,IAAI;AAG3D,YAAIA,OAAM,YAAY,MAAO,MAAK,OAAO;AAAA,MAC3C,WAAW,OAAO,YAAY;AAC5B,YAAI,CAACA,OAAM,cAAc,CAACA,OAAM,mBAAmB;AACjD,UAAAA,OAAM,oBAAoBA,OAAM,eAAe;AAC/C,UAAAA,OAAM,UAAU;AAChB,UAAAA,OAAM,kBAAkB;AACxB,gBAAM,eAAeA,OAAM,QAAQA,OAAM,OAAO;AAChD,cAAIA,OAAM,QAAQ;AAChB,yBAAa,IAAI;AAAA,UACnB,WAAW,CAACA,OAAM,SAAS;AACzB,YAAAV,UAAQ,SAAS,kBAAkB,IAAI;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,IAAAG,UAAS,UAAU,cAAcA,UAAS,UAAU;AACpD,IAAAA,UAAS,UAAU,iBAAiB,SAAU,IAAI,IAAI;AACpD,YAAM,MAAM,OAAO,UAAU,eAAe,KAAK,MAAM,IAAI,EAAE;AAC7D,UAAI,OAAO,YAAY;AAOrB,QAAAH,UAAQ,SAAS,yBAAyB,IAAI;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AACA,IAAAG,UAAS,UAAU,MAAMA,UAAS,UAAU;AAC5C,IAAAA,UAAS,UAAU,qBAAqB,SAAU,IAAI;AACpD,YAAM,MAAM,OAAO,UAAU,mBAAmB,MAAM,MAAM,SAAS;AACrE,UAAI,OAAO,cAAc,OAAO,QAAW;AAOzC,QAAAH,UAAQ,SAAS,yBAAyB,IAAI;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AACA,aAAS,wBAAwBe,OAAM;AACrC,YAAML,SAAQK,MAAK;AACnB,MAAAL,OAAM,oBAAoBK,MAAK,cAAc,UAAU,IAAI;AAC3D,UAAIL,OAAM,mBAAmBA,OAAM,OAAO,MAAM,OAAO;AAGrD,QAAAA,OAAM,UAAU;AAAA,MAGlB,WAAWK,MAAK,cAAc,MAAM,IAAI,GAAG;AACzC,QAAAA,MAAK,OAAO;AAAA,MACd,WAAW,CAACL,OAAM,mBAAmB;AACnC,QAAAA,OAAM,UAAU;AAAA,MAClB;AAAA,IACF;AACA,aAAS,iBAAiBK,OAAM;AAC9B,YAAM,0BAA0B;AAChC,MAAAA,MAAK,KAAK,CAAC;AAAA,IACb;AAIA,IAAAZ,UAAS,UAAU,SAAS,WAAY;AACtC,YAAMO,SAAQ,KAAK;AACnB,UAAI,CAACA,OAAM,SAAS;AAClB,cAAM,QAAQ;AAId,QAAAA,OAAM,UAAU,CAACA,OAAM;AACvB,eAAO,MAAMA,MAAK;AAAA,MACpB;AACA,MAAAA,OAAM,OAAO,IAAI;AACjB,aAAO;AAAA,IACT;AACA,aAAS,OAAO,QAAQA,QAAO;AAC7B,UAAI,CAACA,OAAM,iBAAiB;AAC1B,QAAAA,OAAM,kBAAkB;AACxB,QAAAV,UAAQ,SAAS,SAAS,QAAQU,MAAK;AAAA,MACzC;AAAA,IACF;AACA,aAAS,QAAQ,QAAQA,QAAO;AAC9B,YAAM,UAAUA,OAAM,OAAO;AAC7B,UAAI,CAACA,OAAM,SAAS;AAClB,eAAO,KAAK,CAAC;AAAA,MACf;AACA,MAAAA,OAAM,kBAAkB;AACxB,aAAO,KAAK,QAAQ;AACpB,WAAK,MAAM;AACX,UAAIA,OAAM,WAAW,CAACA,OAAM,QAAS,QAAO,KAAK,CAAC;AAAA,IACpD;AACA,IAAAP,UAAS,UAAU,QAAQ,WAAY;AACrC,YAAM,yBAAyB,KAAK,eAAe,OAAO;AAC1D,UAAI,KAAK,eAAe,YAAY,OAAO;AACzC,cAAM,OAAO;AACb,aAAK,eAAe,UAAU;AAC9B,aAAK,KAAK,OAAO;AAAA,MACnB;AACA,WAAK,eAAe,OAAO,IAAI;AAC/B,aAAO;AAAA,IACT;AACA,aAAS,KAAK,QAAQ;AACpB,YAAMO,SAAQ,OAAO;AACrB,YAAM,QAAQA,OAAM,OAAO;AAC3B,aAAOA,OAAM,WAAW,OAAO,KAAK,MAAM,KAAK;AAAA,IACjD;AAKA,IAAAP,UAAS,UAAU,OAAO,SAAU,QAAQ;AAC1C,UAAI,SAAS;AAMb,aAAO,GAAG,QAAQ,CAACM,WAAU;AAC3B,YAAI,CAAC,KAAK,KAAKA,MAAK,KAAK,OAAO,OAAO;AACrC,mBAAS;AACT,iBAAO,MAAM;AAAA,QACf;AAAA,MACF,CAAC;AACD,aAAO,GAAG,OAAO,MAAM;AACrB,aAAK,KAAK,IAAI;AAAA,MAChB,CAAC;AACD,aAAO,GAAG,SAAS,CAAC,QAAQ;AAC1B,uBAAe,MAAM,GAAG;AAAA,MAC1B,CAAC;AACD,aAAO,GAAG,SAAS,MAAM;AACvB,aAAK,QAAQ;AAAA,MACf,CAAC;AACD,aAAO,GAAG,WAAW,MAAM;AACzB,aAAK,QAAQ;AAAA,MACf,CAAC;AACD,WAAK,QAAQ,MAAM;AACjB,YAAI,UAAU,OAAO,QAAQ;AAC3B,mBAAS;AACT,iBAAO,OAAO;AAAA,QAChB;AAAA,MACF;AAGA,YAAM,aAAa,WAAW,MAAM;AACpC,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,cAAMI,KAAI,WAAW,CAAC;AACtB,YAAI,KAAKA,EAAC,MAAM,UAAa,OAAO,OAAOA,EAAC,MAAM,YAAY;AAC5D,eAAKA,EAAC,IAAI,OAAOA,EAAC,EAAE,KAAK,MAAM;AAAA,QACjC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,IAAAV,UAAS,UAAU,mBAAmB,IAAI,WAAY;AACpD,aAAO,sBAAsB,IAAI;AAAA,IACnC;AACA,IAAAA,UAAS,UAAU,WAAW,SAAU,SAAS;AAC/C,UAAI,YAAY,QAAW;AACzB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,aAAO,sBAAsB,MAAM,OAAO;AAAA,IAC5C;AACA,aAAS,sBAAsB,QAAQ,SAAS;AAC9C,UAAI,OAAO,OAAO,SAAS,YAAY;AACrC,iBAASA,UAAS,KAAK,QAAQ;AAAA,UAC7B,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AACA,YAAM,OAAO,oBAAoB,QAAQ,OAAO;AAChD,WAAK,SAAS;AACd,aAAO;AAAA,IACT;AACA,oBAAgB,oBAAoB,QAAQ,SAAS;AACnD,UAAI,WAAW;AACf,eAAS,KAAK,SAAS;AACrB,YAAI,SAAS,QAAQ;AACnB,mBAAS;AACT,qBAAW;AAAA,QACb,OAAO;AACL,qBAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO,GAAG,YAAY,IAAI;AAC1B,UAAI;AACJ,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,UACE,UAAU;AAAA,QACZ;AAAA,QACA,CAAC,QAAQ;AACP,kBAAQ,MAAM,mBAAmB,OAAO,GAAG,IAAI;AAC/C,mBAAS;AACT,qBAAW;AAAA,QACb;AAAA,MACF;AACA,UAAI;AACF,eAAO,MAAM;AACX,gBAAMM,SAAQ,OAAO,YAAY,OAAO,OAAO,KAAK;AACpD,cAAIA,WAAU,MAAM;AAClB,kBAAMA;AAAA,UACR,WAAW,OAAO;AAChB,kBAAM;AAAA,UACR,WAAW,UAAU,MAAM;AACzB;AAAA,UACF,OAAO;AACL,kBAAM,IAAIR,SAAQ,IAAI;AAAA,UACxB;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,mBAAmB,OAAO,GAAG;AACrC,cAAM;AAAA,MACR,UAAE;AACA,aACG,UAAU,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,qBAAqB,WAC/F,UAAU,UAAa,OAAO,eAAe,cAC9C;AACA,sBAAY,UAAU,QAAQ,IAAI;AAAA,QACpC,OAAO;AACL,iBAAO,IAAI,YAAY,IAAI;AAC3B,kBAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAKA,2BAAuBE,UAAS,WAAW;AAAA,MACzC,UAAU;AAAA,QACR,WAAW;AAAA,QACX,MAAM;AACJ,gBAAM,IAAI,KAAK;AAKf,iBAAO,CAAC,CAAC,KAAK,EAAE,aAAa,SAAS,CAAC,EAAE,aAAa,CAAC,EAAE,gBAAgB,CAAC,EAAE;AAAA,QAC9E;AAAA,QACA,IAAI,KAAK;AAEP,cAAI,KAAK,gBAAgB;AACvB,iBAAK,eAAe,WAAW,CAAC,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,CAAC,EACN,KAAK,eAAe,aAAa,UAChC,KAAK,eAAe,aAAa,KAAK,eAAe,YACtD,CAAC,KAAK,eAAe;AAAA,QAEzB;AAAA,MACF;AAAA,MACA,uBAAuB;AAAA,QACrB,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,QACpD;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QACA,KAAK,SAAUO,QAAO;AACpB,cAAI,KAAK,gBAAgB;AACvB,iBAAK,eAAe,UAAUA;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,oBAAoB;AAAA,QAClB,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,QAChE;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,QAChB,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,WAAW;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,UAAU;AAAA,QAC7D;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,QAC/D;AAAA,QACA,IAAI,OAAO;AAGT,cAAI,CAAC,KAAK,gBAAgB;AACxB;AAAA,UACF;AAIA,eAAK,eAAe,YAAY;AAAA,QAClC;AAAA,MACF;AAAA,MACA,eAAe;AAAA,QACb,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,QAChE;AAAA,MACF;AAAA,IACF,CAAC;AACD,2BAAuB,cAAc,WAAW;AAAA;AAAA,MAE9C,YAAY;AAAA,QACV,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,MAAM;AAAA,QACpB;AAAA,MACF;AAAA;AAAA,MAEA,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,OAAO,MAAM;AAAA,QAC3B;AAAA,QACA,IAAI,OAAO;AACT,eAAK,OAAO,IAAI,CAAC,CAAC;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AAGD,IAAAP,UAAS,YAAY;AAMrB,aAAS,SAASQ,IAAGD,QAAO;AAE1B,UAAIA,OAAM,WAAW,EAAG,QAAO;AAC/B,UAAI;AACJ,UAAIA,OAAM,WAAY,OAAMA,OAAM,OAAO,MAAM;AAAA,eACtC,CAACC,MAAKA,MAAKD,OAAM,QAAQ;AAEhC,YAAIA,OAAM,QAAS,OAAMA,OAAM,OAAO,KAAK,EAAE;AAAA,iBACpCA,OAAM,OAAO,WAAW,EAAG,OAAMA,OAAM,OAAO,MAAM;AAAA,YACxD,OAAMA,OAAM,OAAO,OAAOA,OAAM,MAAM;AAC3C,QAAAA,OAAM,OAAO,MAAM;AAAA,MACrB,OAAO;AAEL,cAAMA,OAAM,OAAO,QAAQC,IAAGD,OAAM,OAAO;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AACA,aAAS,YAAY,QAAQ;AAC3B,YAAMA,SAAQ,OAAO;AACrB,YAAM,eAAeA,OAAM,UAAU;AACrC,UAAI,CAACA,OAAM,YAAY;AACrB,QAAAA,OAAM,QAAQ;AACd,QAAAV,UAAQ,SAAS,eAAeU,QAAO,MAAM;AAAA,MAC/C;AAAA,IACF;AACA,aAAS,cAAcA,QAAO,QAAQ;AACpC,YAAM,iBAAiBA,OAAM,YAAYA,OAAM,MAAM;AAGrD,UAAI,CAACA,OAAM,WAAW,CAACA,OAAM,gBAAgB,CAACA,OAAM,cAAcA,OAAM,WAAW,GAAG;AACpF,QAAAA,OAAM,aAAa;AACnB,eAAO,KAAK,KAAK;AACjB,YAAI,OAAO,YAAY,OAAO,kBAAkB,OAAO;AACrD,UAAAV,UAAQ,SAAS,eAAe,MAAM;AAAA,QACxC,WAAWU,OAAM,aAAa;AAG5B,gBAAM,SAAS,OAAO;AACtB,gBAAM,cACJ,CAAC,UACA,OAAO;AAAA;AAAA,WAGL,OAAO,YAAY,OAAO,aAAa;AAC5C,cAAI,aAAa;AACf,mBAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,aAAS,cAAc,QAAQ;AAC7B,YAAMM,YAAW,OAAO,YAAY,CAAC,OAAO,iBAAiB,CAAC,OAAO;AACrE,UAAIA,WAAU;AACZ,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AACA,IAAAb,UAAS,OAAO,SAAU,UAAU,MAAM;AACxC,aAAO,KAAKA,WAAU,UAAU,IAAI;AAAA,IACtC;AACA,QAAI;AAGJ,aAAS,iBAAiB;AACxB,UAAI,uBAAuB,OAAW,sBAAqB,CAAC;AAC5D,aAAO;AAAA,IACT;AACA,IAAAA,UAAS,UAAU,SAAU,gBAAgB,SAAS;AACpD,aAAO,eAAe,EAAE,oCAAoC,gBAAgB,OAAO;AAAA,IACrF;AACA,IAAAA,UAAS,QAAQ,SAAU,gBAAgB,SAAS;AAClD,aAAO,eAAe,EAAE,oCAAoC,gBAAgB,OAAO;AAAA,IACrF;AACA,IAAAA,UAAS,OAAO,SAAU,KAAK,SAAS;AACtC,UAAI,MAAM;AACV,aAAO,IAAIA,UAAS;AAAA,QAClB,aACG,QACE,wBAAwB,IAAI,wBAAwB,QAAQ,0BAA0B,SACnF,wBACA,IAAI,gBAAgB,QAAQ,SAAS,SACvC,OACA;AAAA,QACN,GAAG;AAAA,QACH,QAAQ,KAAK,UAAU;AACrB,sBAAY,UAAU,KAAK,GAAG;AAC9B,mBAAS,GAAG;AAAA,QACd;AAAA,MACF,CAAC,EAAE,KAAK,GAAG;AAAA,IACb;AAAA;AAAA;;;ACzwCA;AAAA,kEAAAc,UAAAC,SAAA;AAAA;AA6BA,QAAMC,YAAU;AAIhB,QAAM;AAAA,MACJ;AAAA,MACA,OAAAC;AAAA,MACA;AAAA,MACA,sBAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,IACF,IAAI;AACJ,IAAAJ,QAAO,UAAUK;AACjB,IAAAA,UAAS,gBAAgB;AACzB,QAAM,EAAE,cAAc,GAAG,IAAI,QAAQ,QAAQ;AAC7C,QAAM,SAAS,iBAAoB;AACnC,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,cAAc;AACpB,QAAM,EAAE,eAAe,IAAI;AAC3B,QAAM,EAAE,kBAAAC,mBAAkB,yBAAAC,yBAAwB,IAAI;AACtD,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,iBAA6B;AACjC,QAAM,EAAE,eAAe,IAAI;AAC3B,yBAAqBH,UAAS,WAAW,OAAO,SAAS;AACzD,yBAAqBA,WAAU,MAAM;AACrC,aAAS,MAAM;AAAA,IAAC;AAChB,QAAM,cAAcD,QAAO,aAAa;AACxC,aAAS,cAAc,SAAS,QAAQ,UAAU;AAMhD,UAAI,OAAO,aAAa,UAAW,YAAW,kBAAkB;AAIhE,WAAK,aAAa,CAAC,EAAE,WAAW,QAAQ;AACxC,UAAI,SAAU,MAAK,aAAa,KAAK,cAAc,CAAC,EAAE,WAAW,QAAQ;AAKzE,WAAK,gBAAgB,UACjBG,kBAAiB,MAAM,SAAS,yBAAyB,QAAQ,IACjEC,yBAAwB,KAAK;AAGjC,WAAK,cAAc;AAGnB,WAAK,YAAY;AAEjB,WAAK,SAAS;AAEd,WAAK,QAAQ;AAEb,WAAK,WAAW;AAGhB,WAAK,YAAY;AAKjB,YAAM,WAAW,CAAC,EAAE,WAAW,QAAQ,kBAAkB;AACzD,WAAK,gBAAgB,CAAC;AAKtB,WAAK,kBAAmB,WAAW,QAAQ,mBAAoB;AAK/D,WAAK,SAAS;AAGd,WAAK,UAAU;AAGf,WAAK,SAAS;AAMd,WAAK,OAAO;AAKZ,WAAK,mBAAmB;AAGxB,WAAK,UAAU,QAAQ,KAAK,QAAW,MAAM;AAG7C,WAAK,UAAU;AAGf,WAAK,WAAW;AAIhB,WAAK,qBAAqB;AAC1B,kBAAY,IAAI;AAIhB,WAAK,YAAY;AAMjB,WAAK,cAAc;AAInB,WAAK,cAAc;AAGnB,WAAK,eAAe;AAGpB,WAAK,YAAY,CAAC,WAAW,QAAQ,cAAc;AAGnD,WAAK,cAAc,CAAC,WAAW,QAAQ,gBAAgB;AAKvD,WAAK,UAAU;AAGf,WAAK,SAAS;AAId,WAAK,eAAe;AACpB,WAAK,WAAW,IAAI,CAAC;AAAA,IACvB;AACA,aAAS,YAAYC,QAAO;AAC1B,MAAAA,OAAM,WAAW,CAAC;AAClB,MAAAA,OAAM,gBAAgB;AACtB,MAAAA,OAAM,aAAa;AACnB,MAAAA,OAAM,UAAU;AAAA,IAClB;AACA,kBAAc,UAAU,YAAY,SAAS,YAAY;AACvD,aAAO,oBAAoB,KAAK,UAAU,KAAK,aAAa;AAAA,IAC9D;AACA,IAAAN,sBAAqB,cAAc,WAAW,wBAAwB;AAAA,MACpE,WAAW;AAAA,MACX,MAAM;AACJ,eAAO,KAAK,SAAS,SAAS,KAAK;AAAA,MACrC;AAAA,IACF,CAAC;AACD,aAASE,UAAS,SAAS;AAWzB,YAAM,WAAW,gBAAgB;AACjC,UAAI,CAAC,YAAY,CAAC,mCAAmCA,WAAU,IAAI,EAAG,QAAO,IAAIA,UAAS,OAAO;AACjG,WAAK,iBAAiB,IAAI,cAAc,SAAS,MAAM,QAAQ;AAC/D,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAC/D,YAAI,OAAO,QAAQ,WAAW,WAAY,MAAK,UAAU,QAAQ;AACjE,YAAI,OAAO,QAAQ,YAAY,WAAY,MAAK,WAAW,QAAQ;AACnE,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAC/D,YAAI,OAAO,QAAQ,cAAc,WAAY,MAAK,aAAa,QAAQ;AACvE,YAAI,QAAQ,OAAQ,gBAAe,QAAQ,QAAQ,IAAI;AAAA,MACzD;AACA,aAAO,KAAK,MAAM,OAAO;AACzB,kBAAY,UAAU,MAAM,MAAM;AAChC,cAAMI,SAAQ,KAAK;AACnB,YAAI,CAACA,OAAM,SAAS;AAClB,sBAAY,MAAMA,MAAK;AAAA,QACzB;AACA,oBAAY,MAAMA,MAAK;AAAA,MACzB,CAAC;AAAA,IACH;AACA,IAAAN,sBAAqBE,WAAU,mBAAmB;AAAA,MAChD,WAAW;AAAA,MACX,OAAO,SAAU,QAAQ;AACvB,YAAI,mCAAmC,MAAM,MAAM,EAAG,QAAO;AAC7D,YAAI,SAASA,UAAU,QAAO;AAC9B,eAAO,UAAU,OAAO,0BAA0B;AAAA,MACpD;AAAA,IACF,CAAC;AAGD,IAAAA,UAAS,UAAU,OAAO,WAAY;AACpC,qBAAe,MAAM,IAAI,uBAAuB,CAAC;AAAA,IACnD;AACA,aAAS,OAAO,QAAQK,QAAO,UAAU,IAAI;AAC3C,YAAMD,SAAQ,OAAO;AACrB,UAAI,OAAO,aAAa,YAAY;AAClC,aAAK;AACL,mBAAWA,OAAM;AAAA,MACnB,OAAO;AACL,YAAI,CAAC,SAAU,YAAWA,OAAM;AAAA,iBACvB,aAAa,YAAY,CAACH,QAAO,WAAW,QAAQ,EAAG,OAAM,IAAI,qBAAqB,QAAQ;AACvG,YAAI,OAAO,OAAO,WAAY,MAAK;AAAA,MACrC;AACA,UAAII,WAAU,MAAM;AAClB,cAAM,IAAI,uBAAuB;AAAA,MACnC,WAAW,CAACD,OAAM,YAAY;AAC5B,YAAI,OAAOC,WAAU,UAAU;AAC7B,cAAID,OAAM,kBAAkB,OAAO;AACjC,YAAAC,SAAQJ,QAAO,KAAKI,QAAO,QAAQ;AACnC,uBAAW;AAAA,UACb;AAAA,QACF,WAAWA,kBAAiBJ,SAAQ;AAClC,qBAAW;AAAA,QACb,WAAW,OAAO,cAAcI,MAAK,GAAG;AACtC,UAAAA,SAAQ,OAAO,oBAAoBA,MAAK;AACxC,qBAAW;AAAA,QACb,OAAO;AACL,gBAAM,IAAI,qBAAqB,SAAS,CAAC,UAAU,UAAU,YAAY,GAAGA,MAAK;AAAA,QACnF;AAAA,MACF;AACA,UAAI;AACJ,UAAID,OAAM,QAAQ;AAChB,cAAM,IAAI,2BAA2B;AAAA,MACvC,WAAWA,OAAM,WAAW;AAC1B,cAAM,IAAI,qBAAqB,OAAO;AAAA,MACxC;AACA,UAAI,KAAK;AACP,QAAAR,UAAQ,SAAS,IAAI,GAAG;AACxB,uBAAe,QAAQ,KAAK,IAAI;AAChC,eAAO;AAAA,MACT;AACA,MAAAQ,OAAM;AACN,aAAO,cAAc,QAAQA,QAAOC,QAAO,UAAU,EAAE;AAAA,IACzD;AACA,IAAAL,UAAS,UAAU,QAAQ,SAAUK,QAAO,UAAU,IAAI;AACxD,aAAO,OAAO,MAAMA,QAAO,UAAU,EAAE,MAAM;AAAA,IAC/C;AACA,IAAAL,UAAS,UAAU,OAAO,WAAY;AACpC,WAAK,eAAe;AAAA,IACtB;AACA,IAAAA,UAAS,UAAU,SAAS,WAAY;AACtC,YAAMI,SAAQ,KAAK;AACnB,UAAIA,OAAM,QAAQ;AAChB,QAAAA,OAAM;AACN,YAAI,CAACA,OAAM,QAAS,aAAY,MAAMA,MAAK;AAAA,MAC7C;AAAA,IACF;AACA,IAAAJ,UAAS,UAAU,qBAAqB,SAAS,mBAAmB,UAAU;AAE5E,UAAI,OAAO,aAAa,SAAU,YAAW,2BAA2B,QAAQ;AAChF,UAAI,CAACC,QAAO,WAAW,QAAQ,EAAG,OAAM,IAAI,qBAAqB,QAAQ;AACzE,WAAK,eAAe,kBAAkB;AACtC,aAAO;AAAA,IACT;AAKA,aAAS,cAAc,QAAQG,QAAOC,QAAO,UAAU,UAAU;AAC/D,YAAM,MAAMD,OAAM,aAAa,IAAIC,OAAM;AACzC,MAAAD,OAAM,UAAU;AAGhB,YAAM,MAAMA,OAAM,SAASA,OAAM;AAEjC,UAAI,CAAC,IAAK,CAAAA,OAAM,YAAY;AAC5B,UAAIA,OAAM,WAAWA,OAAM,UAAUA,OAAM,WAAW,CAACA,OAAM,aAAa;AACxE,QAAAA,OAAM,SAAS,KAAK;AAAA,UAClB,OAAAC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,YAAID,OAAM,cAAc,aAAa,UAAU;AAC7C,UAAAA,OAAM,aAAa;AAAA,QACrB;AACA,YAAIA,OAAM,WAAW,aAAa,KAAK;AACrC,UAAAA,OAAM,UAAU;AAAA,QAClB;AAAA,MACF,OAAO;AACL,QAAAA,OAAM,WAAW;AACjB,QAAAA,OAAM,UAAU;AAChB,QAAAA,OAAM,UAAU;AAChB,QAAAA,OAAM,OAAO;AACb,eAAO,OAAOC,QAAO,UAAUD,OAAM,OAAO;AAC5C,QAAAA,OAAM,OAAO;AAAA,MACf;AAIA,aAAO,OAAO,CAACA,OAAM,WAAW,CAACA,OAAM;AAAA,IACzC;AACA,aAAS,QAAQ,QAAQA,QAAO,QAAQ,KAAKC,QAAO,UAAU,IAAI;AAChE,MAAAD,OAAM,WAAW;AACjB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,OAAO;AACb,UAAIA,OAAM,UAAW,CAAAA,OAAM,QAAQ,IAAI,qBAAqB,OAAO,CAAC;AAAA,eAC3D,OAAQ,QAAO,QAAQC,QAAOD,OAAM,OAAO;AAAA,UAC/C,QAAO,OAAOC,QAAO,UAAUD,OAAM,OAAO;AACjD,MAAAA,OAAM,OAAO;AAAA,IACf;AACA,aAAS,aAAa,QAAQA,QAAO,IAAI,IAAI;AAC3C,QAAEA,OAAM;AACR,SAAG,EAAE;AAKL,kBAAYA,MAAK;AAEjB,qBAAe,QAAQ,EAAE;AAAA,IAC3B;AACA,aAAS,QAAQ,QAAQ,IAAI;AAC3B,YAAMA,SAAQ,OAAO;AACrB,YAAM,OAAOA,OAAM;AACnB,YAAM,KAAKA,OAAM;AACjB,UAAI,OAAO,OAAO,YAAY;AAC5B,uBAAe,QAAQ,IAAI,sBAAsB,CAAC;AAClD;AAAA,MACF;AACA,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAU;AAChB,MAAAA,OAAM,UAAUA,OAAM;AACtB,MAAAA,OAAM,WAAW;AACjB,UAAI,IAAI;AAEN,WAAG;AAEH,YAAI,CAACA,OAAM,SAAS;AAClB,UAAAA,OAAM,UAAU;AAAA,QAClB;AAIA,YAAI,OAAO,kBAAkB,CAAC,OAAO,eAAe,SAAS;AAC3D,iBAAO,eAAe,UAAU;AAAA,QAClC;AACA,YAAI,MAAM;AACR,UAAAR,UAAQ,SAAS,cAAc,QAAQQ,QAAO,IAAI,EAAE;AAAA,QACtD,OAAO;AACL,uBAAa,QAAQA,QAAO,IAAI,EAAE;AAAA,QACpC;AAAA,MACF,OAAO;AACL,YAAIA,OAAM,SAAS,SAASA,OAAM,eAAe;AAC/C,sBAAY,QAAQA,MAAK;AAAA,QAC3B;AACA,YAAI,MAAM;AAKR,cAAIA,OAAM,uBAAuB,QAAQA,OAAM,mBAAmB,OAAO,IAAI;AAC3E,YAAAA,OAAM,mBAAmB;AAAA,UAC3B,OAAO;AACL,YAAAA,OAAM,qBAAqB;AAAA,cACzB,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,OAAAA;AAAA,YACF;AACA,YAAAR,UAAQ,SAAS,gBAAgBQ,OAAM,kBAAkB;AAAA,UAC3D;AAAA,QACF,OAAO;AACL,qBAAW,QAAQA,QAAO,GAAG,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AACA,aAAS,eAAe,EAAE,QAAQ,OAAAA,QAAO,OAAAE,QAAO,GAAG,GAAG;AACpD,MAAAF,OAAM,qBAAqB;AAC3B,aAAO,WAAW,QAAQA,QAAOE,QAAO,EAAE;AAAA,IAC5C;AACA,aAAS,WAAW,QAAQF,QAAOE,QAAO,IAAI;AAC5C,YAAM,YAAY,CAACF,OAAM,UAAU,CAAC,OAAO,aAAaA,OAAM,WAAW,KAAKA,OAAM;AACpF,UAAI,WAAW;AACb,QAAAA,OAAM,YAAY;AAClB,eAAO,KAAK,OAAO;AAAA,MACrB;AACA,aAAOE,WAAU,GAAG;AAClB,QAAAF,OAAM;AACN,WAAG;AAAA,MACL;AACA,UAAIA,OAAM,WAAW;AACnB,oBAAYA,MAAK;AAAA,MACnB;AACA,kBAAY,QAAQA,MAAK;AAAA,IAC3B;AAGA,aAAS,YAAYA,QAAO;AAC1B,UAAIA,OAAM,SAAS;AACjB;AAAA,MACF;AACA,eAASG,KAAIH,OAAM,eAAeG,KAAIH,OAAM,SAAS,QAAQ,EAAEG,IAAG;AAChE,YAAI;AACJ,cAAM,EAAE,OAAAF,QAAO,SAAS,IAAID,OAAM,SAASG,EAAC;AAC5C,cAAM,MAAMH,OAAM,aAAa,IAAIC,OAAM;AACzC,QAAAD,OAAM,UAAU;AAChB;AAAA,WACG,iBAAiBA,OAAM,aAAa,QAAQ,mBAAmB,SAC5D,iBACA,IAAI,qBAAqB,OAAO;AAAA,QACtC;AAAA,MACF;AACA,YAAM,oBAAoBA,OAAM,WAAW,EAAE,OAAO,CAAC;AACrD,eAASI,KAAI,GAAGA,KAAI,kBAAkB,QAAQA,MAAK;AACjD,YAAI;AACJ,0BAAkBA,EAAC;AAAA,WAChB,kBAAkBJ,OAAM,aAAa,QAAQ,oBAAoB,SAC9D,kBACA,IAAI,qBAAqB,KAAK;AAAA,QACpC;AAAA,MACF;AACA,kBAAYA,MAAK;AAAA,IACnB;AAGA,aAAS,YAAY,QAAQA,QAAO;AAClC,UAAIA,OAAM,UAAUA,OAAM,oBAAoBA,OAAM,aAAa,CAACA,OAAM,aAAa;AACnF;AAAA,MACF;AACA,YAAM,EAAE,UAAU,eAAe,WAAW,IAAIA;AAChD,YAAM,iBAAiB,SAAS,SAAS;AACzC,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAII,KAAI;AACR,MAAAJ,OAAM,mBAAmB;AACzB,UAAI,iBAAiB,KAAK,OAAO,SAAS;AACxC,QAAAA,OAAM,aAAa,iBAAiB;AACpC,cAAM,WAAWA,OAAM,UACnB,MACA,CAAC,QAAQ;AACP,mBAASG,KAAIC,IAAGD,KAAI,SAAS,QAAQ,EAAEA,IAAG;AACxC,qBAASA,EAAC,EAAE,SAAS,GAAG;AAAA,UAC1B;AAAA,QACF;AAGJ,cAAM,SAASH,OAAM,WAAWI,OAAM,IAAI,WAAW,oBAAoB,UAAUA,EAAC;AACpF,eAAO,aAAaJ,OAAM;AAC1B,gBAAQ,QAAQA,QAAO,MAAMA,OAAM,QAAQ,QAAQ,IAAI,QAAQ;AAC/D,oBAAYA,MAAK;AAAA,MACnB,OAAO;AACL,WAAG;AACD,gBAAM,EAAE,OAAAC,QAAO,UAAU,SAAS,IAAI,SAASG,EAAC;AAChD,mBAASA,IAAG,IAAI;AAChB,gBAAM,MAAM,aAAa,IAAIH,OAAM;AACnC,kBAAQ,QAAQD,QAAO,OAAO,KAAKC,QAAO,UAAU,QAAQ;AAAA,QAC9D,SAASG,KAAI,SAAS,UAAU,CAACJ,OAAM;AACvC,YAAII,OAAM,SAAS,QAAQ;AACzB,sBAAYJ,MAAK;AAAA,QACnB,WAAWI,KAAI,KAAK;AAClB,mBAAS,OAAO,GAAGA,EAAC;AACpB,UAAAJ,OAAM,gBAAgB;AAAA,QACxB,OAAO;AACL,UAAAA,OAAM,gBAAgBI;AAAA,QACxB;AAAA,MACF;AACA,MAAAJ,OAAM,mBAAmB;AAAA,IAC3B;AACA,IAAAJ,UAAS,UAAU,SAAS,SAAUK,QAAO,UAAU,IAAI;AACzD,UAAI,KAAK,SAAS;AAChB,aAAK;AAAA,UACH;AAAA,YACE;AAAA,cACE,OAAAA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,IAAI,2BAA2B,UAAU;AAAA,MACjD;AAAA,IACF;AACA,IAAAL,UAAS,UAAU,UAAU;AAC7B,IAAAA,UAAS,UAAU,MAAM,SAAUK,QAAO,UAAU,IAAI;AACtD,YAAMD,SAAQ,KAAK;AACnB,UAAI,OAAOC,WAAU,YAAY;AAC/B,aAAKA;AACL,QAAAA,SAAQ;AACR,mBAAW;AAAA,MACb,WAAW,OAAO,aAAa,YAAY;AACzC,aAAK;AACL,mBAAW;AAAA,MACb;AACA,UAAI;AACJ,UAAIA,WAAU,QAAQA,WAAU,QAAW;AACzC,cAAM,MAAM,OAAO,MAAMA,QAAO,QAAQ;AACxC,YAAI,eAAeR,QAAO;AACxB,gBAAM;AAAA,QACR;AAAA,MACF;AAGA,UAAIO,OAAM,QAAQ;AAChB,QAAAA,OAAM,SAAS;AACf,aAAK,OAAO;AAAA,MACd;AACA,UAAI,KAAK;AAAA,MAET,WAAW,CAACA,OAAM,WAAW,CAACA,OAAM,QAAQ;AAO1C,QAAAA,OAAM,SAAS;AACf,oBAAY,MAAMA,QAAO,IAAI;AAC7B,QAAAA,OAAM,QAAQ;AAAA,MAChB,WAAWA,OAAM,UAAU;AACzB,cAAM,IAAI,4BAA4B,KAAK;AAAA,MAC7C,WAAWA,OAAM,WAAW;AAC1B,cAAM,IAAI,qBAAqB,KAAK;AAAA,MACtC;AACA,UAAI,OAAO,OAAO,YAAY;AAC5B,YAAI,OAAOA,OAAM,UAAU;AACzB,UAAAR,UAAQ,SAAS,IAAI,GAAG;AAAA,QAC1B,OAAO;AACL,UAAAQ,OAAM,WAAW,EAAE,KAAK,EAAE;AAAA,QAC5B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,aAAS,WAAWA,QAAO;AACzB,aACEA,OAAM,UACN,CAACA,OAAM,aACPA,OAAM,eACNA,OAAM,WAAW,KACjB,CAACA,OAAM,WACPA,OAAM,SAAS,WAAW,KAC1B,CAACA,OAAM,YACP,CAACA,OAAM,WACP,CAACA,OAAM,gBACP,CAACA,OAAM;AAAA,IAEX;AACA,aAAS,UAAU,QAAQA,QAAO;AAChC,UAAI,SAAS;AACb,eAAS,SAAS,KAAK;AACrB,YAAI,QAAQ;AACV,yBAAe,QAAQ,QAAQ,QAAQ,QAAQ,SAAY,MAAM,sBAAsB,CAAC;AACxF;AAAA,QACF;AACA,iBAAS;AACT,QAAAA,OAAM;AACN,YAAI,KAAK;AACP,gBAAM,oBAAoBA,OAAM,WAAW,EAAE,OAAO,CAAC;AACrD,mBAASI,KAAI,GAAGA,KAAI,kBAAkB,QAAQA,MAAK;AACjD,8BAAkBA,EAAC,EAAE,GAAG;AAAA,UAC1B;AACA,yBAAe,QAAQ,KAAKJ,OAAM,IAAI;AAAA,QACxC,WAAW,WAAWA,MAAK,GAAG;AAC5B,UAAAA,OAAM,cAAc;AACpB,iBAAO,KAAK,WAAW;AAIvB,UAAAA,OAAM;AACN,UAAAR,UAAQ,SAAS,QAAQ,QAAQQ,MAAK;AAAA,QACxC;AAAA,MACF;AACA,MAAAA,OAAM,OAAO;AACb,MAAAA,OAAM;AACN,UAAI;AACF,eAAO,OAAO,QAAQ;AAAA,MACxB,SAAS,KAAK;AACZ,iBAAS,GAAG;AAAA,MACd;AACA,MAAAA,OAAM,OAAO;AAAA,IACf;AACA,aAAS,UAAU,QAAQA,QAAO;AAChC,UAAI,CAACA,OAAM,eAAe,CAACA,OAAM,aAAa;AAC5C,YAAI,OAAO,OAAO,WAAW,cAAc,CAACA,OAAM,WAAW;AAC3D,UAAAA,OAAM,cAAc;AACpB,oBAAU,QAAQA,MAAK;AAAA,QACzB,OAAO;AACL,UAAAA,OAAM,cAAc;AACpB,iBAAO,KAAK,WAAW;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACA,aAAS,YAAY,QAAQA,QAAO,MAAM;AACxC,UAAI,WAAWA,MAAK,GAAG;AACrB,kBAAU,QAAQA,MAAK;AACvB,YAAIA,OAAM,cAAc,GAAG;AACzB,cAAI,MAAM;AACR,YAAAA,OAAM;AACN,YAAAR,UAAQ;AAAA,cACN,CAACa,SAAQL,WAAU;AACjB,oBAAI,WAAWA,MAAK,GAAG;AACrB,yBAAOK,SAAQL,MAAK;AAAA,gBACtB,OAAO;AACL,kBAAAA,OAAM;AAAA,gBACR;AAAA,cACF;AAAA,cACA;AAAA,cACAA;AAAA,YACF;AAAA,UACF,WAAW,WAAWA,MAAK,GAAG;AAC5B,YAAAA,OAAM;AACN,mBAAO,QAAQA,MAAK;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,aAAS,OAAO,QAAQA,QAAO;AAC7B,MAAAA,OAAM;AACN,MAAAA,OAAM,WAAW;AACjB,YAAM,oBAAoBA,OAAM,WAAW,EAAE,OAAO,CAAC;AACrD,eAASI,KAAI,GAAGA,KAAI,kBAAkB,QAAQA,MAAK;AACjD,0BAAkBA,EAAC,EAAE;AAAA,MACvB;AACA,aAAO,KAAK,QAAQ;AACpB,UAAIJ,OAAM,aAAa;AAGrB,cAAM,SAAS,OAAO;AACtB,cAAM,cACJ,CAAC,UACA,OAAO;AAAA;AAAA,SAGL,OAAO,cAAc,OAAO,aAAa;AAC9C,YAAI,aAAa;AACf,iBAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AACA,2BAAuBJ,UAAS,WAAW;AAAA,MACzC,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,QAC/D;AAAA,QACA,IAAI,OAAO;AAET,cAAI,KAAK,gBAAgB;AACvB,iBAAK,eAAe,YAAY;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,MAAM;AACJ,gBAAM,IAAI,KAAK;AAKf,iBAAO,CAAC,CAAC,KAAK,EAAE,aAAa,SAAS,CAAC,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE;AAAA,QACtF;AAAA,QACA,IAAI,KAAK;AAEP,cAAI,KAAK,gBAAgB;AACvB,iBAAK,eAAe,WAAW,CAAC,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,QAChB,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,WAAW;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,oBAAoB;AAAA,QAClB,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,aAAa;AAAA,QAChE;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,kBAAkB,KAAK,eAAe,UAAU;AAAA,QAC9D;AAAA,MACF;AAAA,MACA,eAAe;AAAA,QACb,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,mBAAmB;AAAA,QACjB,WAAW;AAAA,QACX,MAAM;AACJ,gBAAM,SAAS,KAAK;AACpB,cAAI,CAAC,OAAQ,QAAO;AACpB,iBAAO,CAAC,OAAO,aAAa,CAAC,OAAO,UAAU,OAAO;AAAA,QACvD;AAAA,MACF;AAAA,MACA,uBAAuB;AAAA,QACrB,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,QACpD;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,MAAM;AACJ,iBAAO,KAAK,kBAAkB,KAAK,eAAe;AAAA,QACpD;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO,KAAK,iBAAiB,KAAK,eAAe,UAAU;AAAA,QAC7D;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,KAAK,WAAY;AACf,iBAAO,CAAC,EACN,KAAK,eAAe,aAAa,UAChC,KAAK,eAAe,aAAa,KAAK,eAAe,YACtD,CAAC,KAAK,eAAe;AAAA,QAEzB;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAM,UAAU,YAAY;AAC5B,IAAAA,UAAS,UAAU,UAAU,SAAU,KAAK,IAAI;AAC9C,YAAMI,SAAQ,KAAK;AAGnB,UAAI,CAACA,OAAM,cAAcA,OAAM,gBAAgBA,OAAM,SAAS,UAAUA,OAAM,WAAW,EAAE,SAAS;AAClG,QAAAR,UAAQ,SAAS,aAAaQ,MAAK;AAAA,MACrC;AACA,cAAQ,KAAK,MAAM,KAAK,EAAE;AAC1B,aAAO;AAAA,IACT;AACA,IAAAJ,UAAS,UAAU,aAAa,YAAY;AAC5C,IAAAA,UAAS,UAAU,WAAW,SAAU,KAAK,IAAI;AAC/C,SAAG,GAAG;AAAA,IACR;AACA,IAAAA,UAAS,UAAU,GAAG,sBAAsB,IAAI,SAAU,KAAK;AAC7D,WAAK,QAAQ,GAAG;AAAA,IAClB;AACA,QAAI;AAGJ,aAAS,iBAAiB;AACxB,UAAI,uBAAuB,OAAW,sBAAqB,CAAC;AAC5D,aAAO;AAAA,IACT;AACA,IAAAA,UAAS,UAAU,SAAU,gBAAgB,SAAS;AACpD,aAAO,eAAe,EAAE,oCAAoC,gBAAgB,OAAO;AAAA,IACrF;AACA,IAAAA,UAAS,QAAQ,SAAU,gBAAgB;AACzC,aAAO,eAAe,EAAE,oCAAoC,cAAc;AAAA,IAC5E;AAAA;AAAA;;;AClzBA;AAAA,mEAAAU,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAU;AAKhB,QAAM,eAAe,QAAQ,QAAQ;AACrC,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAAC;AAAA,MACA,kBAAAC;AAAA,IACF,IAAI;AACJ,QAAM,MAAM;AACZ,QAAM;AAAA,MACJ;AAAA,MACA,OAAO,EAAE,sBAAsB,yBAAyB;AAAA,IAC1D,IAAI;AACJ,QAAM,EAAE,UAAU,IAAI;AACtB,QAAMC,UAAS;AACf,QAAMC,YAAW;AACjB,QAAMC,YAAW;AACjB,QAAM,EAAE,sBAAsB,IAAI;AAClC,QAAM,OAAO;AACb,QAAM,OAAO,WAAW,QAAQ,aAAa;AAC7C,QAAM,SACJ,OAAO,SAAS,cACZ,SAASC,QAAO,GAAG;AACjB,aAAO,aAAa;AAAA,IACtB,IACA,SAASA,QAAO,GAAG;AACjB,aAAO;AAAA,IACT;AACN,QAAMC,mBAAkB,WAAW,mBAAmB,2BAA4B;AAClF,QAAM,EAAE,sBAAsB,IAAI;AAGlC,QAAM,YAAN,cAAwBJ,QAAO;AAAA,MAC7B,YAAY,SAAS;AACnB,cAAM,OAAO;AAIb,aAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,cAAc,OAAO;AACxF,eAAK,eAAe,WAAW;AAC/B,eAAK,eAAe,QAAQ;AAC5B,eAAK,eAAe,aAAa;AAAA,QACnC;AACA,aAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,cAAc,OAAO;AACxF,eAAK,eAAe,WAAW;AAC/B,eAAK,eAAe,SAAS;AAC7B,eAAK,eAAe,QAAQ;AAC5B,eAAK,eAAe,WAAW;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AACA,IAAAJ,QAAO,UAAU,SAAS,UAAU,MAAM,MAAM;AAC9C,UAAI,mBAAmB,IAAI,GAAG;AAC5B,eAAO;AAAA,MACT;AACA,UAAI,qBAAqB,IAAI,GAAG;AAC9B,eAAO,WAAW;AAAA,UAChB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,UAAI,qBAAqB,IAAI,GAAG;AAC9B,eAAO,WAAW;AAAA,UAChB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,UAAI,aAAa,IAAI,GAAG;AACtB,eAAO,WAAW;AAAA,UAChB,UAAU;AAAA,UACV,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,UAAIE,kBAAiB,IAAI,GAAG;AAC1B,eAAO,WAAW;AAAA,UAChB,UAAUG,UAAS,QAAQ,IAAI;AAAA,QACjC,CAAC;AAAA,MACH;AACA,UAAIF,kBAAiB,IAAI,GAAG;AAC1B,eAAO,WAAW;AAAA,UAChB,UAAUG,UAAS,QAAQ,IAAI;AAAA,QACjC,CAAC;AAAA,MACH;AACA,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAM,EAAE,OAAO,OAAO,OAAO,QAAQ,IAAI,aAAa,IAAI;AAC1D,YAAI,WAAW,KAAK,GAAG;AACrB,iBAAO,KAAK,WAAW,OAAO;AAAA;AAAA,YAE5B,YAAY;AAAA,YACZ;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAMG,QAAO,UAAU,QAAQ,UAAU,SAAY,SAAY,MAAM;AACvE,YAAI,OAAOA,UAAS,YAAY;AAC9B,cAAI;AACJ,gBAAM,UAAU;AAAA,YACdA;AAAA,YACA;AAAA,YACA,CAAC,QAAQ;AACP,kBAAI,OAAO,MAAM;AACf,sBAAM,IAAI,yBAAyB,SAAS,QAAQ,GAAG;AAAA,cACzD;AAAA,YACF;AAAA,YACA,CAAC,QAAQ;AACP,wBAAU,GAAG,GAAG;AAAA,YAClB;AAAA,UACF;AACA,iBAAQ,IAAI,IAAI,UAAU;AAAA;AAAA,YAExB,YAAY;AAAA,YACZ,UAAU;AAAA,YACV;AAAA,YACA,MAAM,IAAI;AACR,oBAAM,YAAY;AAChB,oBAAI;AACF,wBAAM;AACN,kBAAAR,UAAQ,SAAS,IAAI,IAAI;AAAA,gBAC3B,SAAS,KAAK;AACZ,kBAAAA,UAAQ,SAAS,IAAI,GAAG;AAAA,gBAC1B;AAAA,cACF,CAAC;AAAA,YACH;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,IAAI,yBAAyB,4CAA4C,MAAM,KAAK;AAAA,MAC5F;AACA,UAAI,OAAO,IAAI,GAAG;AAChB,eAAO,UAAU,KAAK,YAAY,CAAC;AAAA,MACrC;AACA,UAAI,WAAW,IAAI,GAAG;AACpB,eAAO,KAAK,WAAW,MAAM;AAAA;AAAA,UAE3B,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,UACEC,kBAAiB,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,QAAQ,KAChFC,kBAAiB,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,QAAQ,GAChF;AACA,eAAO,UAAU,QAAQ,IAAI;AAAA,MAC/B;AACA,UACE,QAAQ,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,cAAc,YAC7E,QAAQ,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,cAAc,UAC7E;AACA,cAAMO,YACJ,SAAS,QAAQ,SAAS,UAAa,KAAK,WACxC,qBAAqB,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,QAAQ,IAClF,SAAS,QAAQ,SAAS,SACxB,SACA,KAAK,WACP,UAAU,KAAK,QAAQ,IACzB;AACN,cAAMC,YACJ,SAAS,QAAQ,SAAS,UAAa,KAAK,WACxC,qBAAqB,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,QAAQ,IAClF,SAAS,QAAQ,SAAS,SACxB,SACA,KAAK,WACP,UAAU,KAAK,QAAQ,IACzB;AACN,eAAO,WAAW;AAAA,UAChB,UAAAD;AAAA,UACA,UAAAC;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,OAAO,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK;AACpE,UAAI,OAAO,SAAS,YAAY;AAC9B,YAAI;AACJ;AAAA,UACE;AAAA,UACA;AAAA,UACA,CAAC,QAAQ;AACP,gBAAI,OAAO,MAAM;AACf,gBAAE,KAAK,GAAG;AAAA,YACZ;AACA,cAAE,KAAK,IAAI;AAAA,UACb;AAAA,UACA,CAAC,QAAQ;AACP,sBAAU,GAAG,GAAG;AAAA,UAClB;AAAA,QACF;AACA,eAAQ,IAAI,IAAI,UAAU;AAAA,UACxB,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAO;AAAA,UAAC;AAAA,QACV,CAAC;AAAA,MACH;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,aAAS,aAAa,IAAI;AACxB,UAAI,EAAE,SAAS,QAAQ,IAAI,sBAAsB;AACjD,YAAM,KAAK,IAAIH,iBAAgB;AAC/B,YAAM,SAAS,GAAG;AAClB,YAAM,QAAQ;AAAA,SACX,mBAAmB;AAClB,iBAAO,MAAM;AACX,kBAAM,WAAW;AACjB,sBAAU;AACV,kBAAM,EAAE,OAAAI,QAAO,MAAM,GAAG,IAAI,MAAM;AAClC,YAAAX,UAAQ,SAAS,EAAE;AACnB,gBAAI,KAAM;AACV,gBAAI,OAAO;AACT,oBAAM,IAAI,WAAW,QAAW;AAAA,gBAC9B,OAAO,OAAO;AAAA,cAChB,CAAC;AACF,aAAC,EAAE,SAAS,QAAQ,IAAI,sBAAsB;AAC/C,kBAAMW;AAAA,UACR;AAAA,QACF,GAAG;AAAA,QACH;AAAA,UACE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA,MAAMA,QAAO,UAAU,IAAI;AACzB,gBAAM,WAAW;AACjB,oBAAU;AACV,mBAAS;AAAA,YACP,OAAAA;AAAA,YACA,MAAM;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,MAAM,IAAI;AACR,gBAAM,WAAW;AACjB,oBAAU;AACV,mBAAS;AAAA,YACP,MAAM;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,QAAQ,KAAK,IAAI;AACf,aAAG,MAAM;AACT,aAAG,GAAG;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,aAAS,WAAW,MAAM;AACxB,YAAM,IAAI,KAAK,YAAY,OAAO,KAAK,SAAS,SAAS,aAAaP,UAAS,KAAK,KAAK,QAAQ,IAAI,KAAK;AAC1G,YAAM,IAAI,KAAK;AACf,UAAIK,YAAW,CAAC,CAAC,WAAW,CAAC;AAC7B,UAAIC,YAAW,CAAC,CAAC,WAAW,CAAC;AAC7B,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,eAAS,WAAW,KAAK;AACvB,cAAM,KAAK;AACX,kBAAU;AACV,YAAI,IAAI;AACN,aAAG,GAAG;AAAA,QACR,WAAW,KAAK;AACd,YAAE,QAAQ,GAAG;AAAA,QACf;AAAA,MACF;AAKA,UAAI,IAAI,UAAU;AAAA;AAAA,QAEhB,oBAAoB,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAa,EAAE;AAAA,QAC1D,oBAAoB,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAa,EAAE;AAAA,QAC1D,UAAAD;AAAA,QACA,UAAAC;AAAA,MACF,CAAC;AACD,UAAIA,WAAU;AACZ,YAAI,GAAG,CAAC,QAAQ;AACd,UAAAA,YAAW;AACX,cAAI,KAAK;AACP,sBAAU,GAAG,GAAG;AAAA,UAClB;AACA,qBAAW,GAAG;AAAA,QAChB,CAAC;AACD,UAAE,SAAS,SAAUC,QAAO,UAAU,UAAU;AAC9C,cAAI,EAAE,MAAMA,QAAO,QAAQ,GAAG;AAC5B,qBAAS;AAAA,UACX,OAAO;AACL,sBAAU;AAAA,UACZ;AAAA,QACF;AACA,UAAE,SAAS,SAAU,UAAU;AAC7B,YAAE,IAAI;AACN,qBAAW;AAAA,QACb;AACA,UAAE,GAAG,SAAS,WAAY;AACxB,cAAI,SAAS;AACX,kBAAM,KAAK;AACX,sBAAU;AACV,eAAG;AAAA,UACL;AAAA,QACF,CAAC;AACD,UAAE,GAAG,UAAU,WAAY;AACzB,cAAI,UAAU;AACZ,kBAAM,KAAK;AACX,uBAAW;AACX,eAAG;AAAA,UACL;AAAA,QACF,CAAC;AAAA,MACH;AACA,UAAIF,WAAU;AACZ,YAAI,GAAG,CAAC,QAAQ;AACd,UAAAA,YAAW;AACX,cAAI,KAAK;AACP,sBAAU,GAAG,GAAG;AAAA,UAClB;AACA,qBAAW,GAAG;AAAA,QAChB,CAAC;AACD,UAAE,GAAG,YAAY,WAAY;AAC3B,cAAI,YAAY;AACd,kBAAM,KAAK;AACX,yBAAa;AACb,eAAG;AAAA,UACL;AAAA,QACF,CAAC;AACD,UAAE,GAAG,OAAO,WAAY;AACtB,YAAE,KAAK,IAAI;AAAA,QACb,CAAC;AACD,UAAE,QAAQ,WAAY;AACpB,iBAAO,MAAM;AACX,kBAAM,MAAM,EAAE,KAAK;AACnB,gBAAI,QAAQ,MAAM;AAChB,2BAAa,EAAE;AACf;AAAA,YACF;AACA,gBAAI,CAAC,EAAE,KAAK,GAAG,GAAG;AAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,QAAE,WAAW,SAAU,KAAK,UAAU;AACpC,YAAI,CAAC,OAAO,YAAY,MAAM;AAC5B,gBAAM,IAAI,WAAW;AAAA,QACvB;AACA,qBAAa;AACb,kBAAU;AACV,mBAAW;AACX,YAAI,YAAY,MAAM;AACpB,mBAAS,GAAG;AAAA,QACd,OAAO;AACL,oBAAU;AACV,oBAAU,GAAG,GAAG;AAChB,oBAAU,GAAG,GAAG;AAAA,QAClB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACzXA;AAAA,gEAAAG,UAAAC,SAAA;AAAA;AA4BA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,IAAAA,QAAO,UAAUC;AACjB,QAAMC,YAAW;AACjB,QAAMC,YAAW;AACjB,yBAAqBF,QAAO,WAAWC,UAAS,SAAS;AACzD,yBAAqBD,SAAQC,SAAQ;AACrC;AACE,YAAM,OAAO,WAAWC,UAAS,SAAS;AAE1C,eAASC,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACpC,cAAM,SAAS,KAAKA,EAAC;AACrB,YAAI,CAACH,QAAO,UAAU,MAAM,EAAG,CAAAA,QAAO,UAAU,MAAM,IAAIE,UAAS,UAAU,MAAM;AAAA,MACrF;AAAA,IACF;AACA,aAASF,QAAO,SAAS;AACvB,UAAI,EAAE,gBAAgBA,SAAS,QAAO,IAAIA,QAAO,OAAO;AACxD,MAAAC,UAAS,KAAK,MAAM,OAAO;AAC3B,MAAAC,UAAS,KAAK,MAAM,OAAO;AAC3B,UAAI,SAAS;AACX,aAAK,gBAAgB,QAAQ,kBAAkB;AAC/C,YAAI,QAAQ,aAAa,OAAO;AAC9B,eAAK,eAAe,WAAW;AAC/B,eAAK,eAAe,QAAQ;AAC5B,eAAK,eAAe,aAAa;AAAA,QACnC;AACA,YAAI,QAAQ,aAAa,OAAO;AAC9B,eAAK,eAAe,WAAW;AAC/B,eAAK,eAAe,SAAS;AAC7B,eAAK,eAAe,QAAQ;AAC5B,eAAK,eAAe,WAAW;AAAA,QACjC;AAAA,MACF,OAAO;AACL,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AACA,2BAAuBF,QAAO,WAAW;AAAA,MACvC,UAAU;AAAA,QACR,WAAW;AAAA,QACX,GAAG,+BAA+BE,UAAS,WAAW,UAAU;AAAA,MAClE;AAAA,MACA,uBAAuB;AAAA,QACrB,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,uBAAuB;AAAA,MAC/E;AAAA,MACA,oBAAoB;AAAA,QAClB,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,oBAAoB;AAAA,MAC5E;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,gBAAgB;AAAA,MACxE;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,gBAAgB;AAAA,MACxE;AAAA,MACA,kBAAkB;AAAA,QAChB,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,kBAAkB;AAAA,MAC1E;AAAA,MACA,gBAAgB;AAAA,QACd,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,gBAAgB;AAAA,MACxE;AAAA,MACA,eAAe;AAAA,QACb,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,eAAe;AAAA,MACvE;AAAA,MACA,mBAAmB;AAAA,QACjB,WAAW;AAAA,QACX,GAAG,+BAA+BA,UAAS,WAAW,mBAAmB;AAAA,MAC3E;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AACJ,cAAI,KAAK,mBAAmB,UAAa,KAAK,mBAAmB,QAAW;AAC1E,mBAAO;AAAA,UACT;AACA,iBAAO,KAAK,eAAe,aAAa,KAAK,eAAe;AAAA,QAC9D;AAAA,QACA,IAAI,OAAO;AAGT,cAAI,KAAK,kBAAkB,KAAK,gBAAgB;AAC9C,iBAAK,eAAe,YAAY;AAChC,iBAAK,eAAe,YAAY;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI;AAGJ,aAAS,iBAAiB;AACxB,UAAI,uBAAuB,OAAW,sBAAqB,CAAC;AAC5D,aAAO;AAAA,IACT;AACA,IAAAF,QAAO,UAAU,SAAU,MAAM,SAAS;AACxC,aAAO,eAAe,EAAE,wCAAwC,MAAM,OAAO;AAAA,IAC/E;AACA,IAAAA,QAAO,QAAQ,SAAUI,SAAQ;AAC/B,aAAO,eAAe,EAAE,kCAAkCA,OAAM;AAAA,IAClE;AACA,QAAI;AACJ,IAAAJ,QAAO,OAAO,SAAU,MAAM;AAC5B,UAAI,CAAC,WAAW;AACd,oBAAY;AAAA,MACd;AACA,aAAO,UAAU,MAAM,MAAM;AAAA,IAC/B;AAAA;AAAA;;;AC9IA;AAAA,mEAAAK,UAAAC,SAAA;AAAA;AAiEA,QAAM,EAAE,sBAAsB,QAAAC,QAAO,IAAI;AACzC,IAAAD,QAAO,UAAUE;AACjB,QAAM,EAAE,2BAA2B,IAAI,iBAA6B;AACpE,QAAMC,UAAS;AACf,QAAM,EAAE,kBAAAC,kBAAiB,IAAI;AAC7B,yBAAqBF,WAAU,WAAWC,QAAO,SAAS;AAC1D,yBAAqBD,YAAWC,OAAM;AACtC,QAAM,YAAYF,QAAO,WAAW;AACpC,aAASC,WAAU,SAAS;AAC1B,UAAI,EAAE,gBAAgBA,YAAY,QAAO,IAAIA,WAAU,OAAO;AAK9D,YAAM,wBAAwB,UAAUE,kBAAiB,MAAM,SAAS,yBAAyB,IAAI,IAAI;AACzG,UAAI,0BAA0B,GAAG;AAI/B,kBAAU;AAAA,UACR,GAAG;AAAA,UACH,eAAe;AAAA,UACf;AAAA;AAAA;AAAA;AAAA;AAAA,UAKA,uBAAuB,QAAQ,yBAAyB;AAAA,QAC1D;AAAA,MACF;AACA,MAAAD,QAAO,KAAK,MAAM,OAAO;AAKzB,WAAK,eAAe,OAAO;AAC3B,WAAK,SAAS,IAAI;AAClB,UAAI,SAAS;AACX,YAAI,OAAO,QAAQ,cAAc,WAAY,MAAK,aAAa,QAAQ;AACvE,YAAI,OAAO,QAAQ,UAAU,WAAY,MAAK,SAAS,QAAQ;AAAA,MACjE;AAMA,WAAK,GAAG,aAAa,SAAS;AAAA,IAChC;AACA,aAAS,MAAM,IAAI;AACjB,UAAI,OAAO,KAAK,WAAW,cAAc,CAAC,KAAK,WAAW;AACxD,aAAK,OAAO,CAAC,IAAI,SAAS;AACxB,cAAI,IAAI;AACN,gBAAI,IAAI;AACN,iBAAG,EAAE;AAAA,YACP,OAAO;AACL,mBAAK,QAAQ,EAAE;AAAA,YACjB;AACA;AAAA,UACF;AACA,cAAI,QAAQ,MAAM;AAChB,iBAAK,KAAK,IAAI;AAAA,UAChB;AACA,eAAK,KAAK,IAAI;AACd,cAAI,IAAI;AACN,eAAG;AAAA,UACL;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,aAAK,KAAK,IAAI;AACd,YAAI,IAAI;AACN,aAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AACA,aAAS,YAAY;AACnB,UAAI,KAAK,WAAW,OAAO;AACzB,cAAM,KAAK,IAAI;AAAA,MACjB;AAAA,IACF;AACA,IAAAD,WAAU,UAAU,SAAS;AAC7B,IAAAA,WAAU,UAAU,aAAa,SAAUG,QAAO,UAAU,UAAU;AACpE,YAAM,IAAI,2BAA2B,cAAc;AAAA,IACrD;AACA,IAAAH,WAAU,UAAU,SAAS,SAAUG,QAAO,UAAU,UAAU;AAChE,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,OAAO;AACtB,WAAK,WAAWA,QAAO,UAAU,CAAC,KAAK,QAAQ;AAC7C,YAAI,KAAK;AACP,mBAAS,GAAG;AACZ;AAAA,QACF;AACA,YAAI,OAAO,MAAM;AACf,eAAK,KAAK,GAAG;AAAA,QACf;AACA,YACE,OAAO;AAAA,QAEP,WAAW,OAAO;AAAA,QAElB,OAAO,SAAS,OAAO,eACvB;AACA,mBAAS;AAAA,QACX,OAAO;AACL,eAAK,SAAS,IAAI;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AACA,IAAAH,WAAU,UAAU,QAAQ,WAAY;AACtC,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,WAAW,KAAK,SAAS;AAC/B,aAAK,SAAS,IAAI;AAClB,iBAAS;AAAA,MACX;AAAA,IACF;AAAA;AAAA;;;ACnLA,IAAAI,uBAAA;AAAA,qEAAAC,UAAAC,SAAA;AAAA;AA2BA,QAAM,EAAE,qBAAqB,IAAI;AACjC,IAAAA,QAAO,UAAUC;AACjB,QAAMC,aAAY;AAClB,yBAAqBD,aAAY,WAAWC,WAAU,SAAS;AAC/D,yBAAqBD,cAAaC,UAAS;AAC3C,aAASD,aAAY,SAAS;AAC5B,UAAI,EAAE,gBAAgBA,cAAc,QAAO,IAAIA,aAAY,OAAO;AAClE,MAAAC,WAAU,KAAK,MAAM,OAAO;AAAA,IAC9B;AACA,IAAAD,aAAY,UAAU,aAAa,SAAUE,QAAO,UAAU,IAAI;AAChE,SAAG,MAAMA,MAAK;AAAA,IAChB;AAAA;AAAA;;;ACtCA;AAAA,kEAAAC,UAAAC,SAAA;AAAA;AAEA,QAAMC,YAAU;AAOhB,QAAM,EAAE,cAAc,SAAAC,UAAS,qBAAqB,cAAc,IAAI;AACtE,QAAM,MAAM;AACZ,QAAM,EAAE,MAAAC,OAAK,IAAI;AACjB,QAAM,cAAc;AACpB,QAAMC,UAAS;AACf,QAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,kBAAkB,oBAAoB,IAAI;AAClD,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,kBAAAC;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAMC,mBAAkB,WAAW,mBAAmB,2BAA4B;AAClF,QAAIC;AACJ,QAAIC;AACJ,QAAIC;AACJ,aAAS,UAAU,QAAQ,SAAS,SAAS;AAC3C,UAAIC,YAAW;AACf,aAAO,GAAG,SAAS,MAAM;AACvB,QAAAA,YAAW;AAAA,MACb,CAAC;AACD,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,UACE,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,CAAC,QAAQ;AACP,UAAAA,YAAW,CAAC;AAAA,QACd;AAAA,MACF;AACA,aAAO;AAAA,QACL,SAAS,CAAC,QAAQ;AAChB,cAAIA,UAAU;AACd,UAAAA,YAAW;AACX,sBAAY,UAAU,QAAQ,OAAO,IAAI,qBAAqB,MAAM,CAAC;AAAA,QACvE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,aAAS,YAAY,SAAS;AAI5B,uBAAiB,QAAQ,QAAQ,SAAS,CAAC,GAAG,4BAA4B;AAC1E,aAAO,QAAQ,IAAI;AAAA,IACrB;AACA,aAAS,kBAAkB,KAAK;AAC9B,UAAI,WAAW,GAAG,GAAG;AACnB,eAAO;AAAA,MACT,WAAW,qBAAqB,GAAG,GAAG;AAEpC,eAAO,aAAa,GAAG;AAAA,MACzB;AACA,YAAM,IAAI,qBAAqB,OAAO,CAAC,YAAY,YAAY,eAAe,GAAG,GAAG;AAAA,IACtF;AACA,oBAAgB,aAAa,KAAK;AAChC,UAAI,CAACF,WAAU;AACb,QAAAA,YAAW;AAAA,MACb;AACA,aAAOA,UAAS,UAAU,mBAAmB,EAAE,KAAK,GAAG;AAAA,IACzD;AACA,mBAAe,WAAW,UAAUG,WAAU,QAAQ,EAAE,IAAI,GAAG;AAC7D,UAAI;AACJ,UAAI,YAAY;AAChB,YAAM,SAAS,CAAC,QAAQ;AACtB,YAAI,KAAK;AACP,kBAAQ;AAAA,QACV;AACA,YAAI,WAAW;AACb,gBAAM,WAAW;AACjB,sBAAY;AACZ,mBAAS;AAAA,QACX;AAAA,MACF;AACA,YAAM,OAAO,MACX,IAAIX,SAAQ,CAAC,SAASY,YAAW;AAC/B,YAAI,OAAO;AACT,UAAAA,QAAO,KAAK;AAAA,QACd,OAAO;AACL,sBAAY,MAAM;AAChB,gBAAI,OAAO;AACT,cAAAA,QAAO,KAAK;AAAA,YACd,OAAO;AACL,sBAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACH,MAAAD,UAAS,GAAG,SAAS,MAAM;AAC3B,YAAM,UAAU;AAAA,QACdA;AAAA,QACA;AAAA,UACE,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AACA,UAAI;AACF,YAAIA,UAAS,mBAAmB;AAC9B,gBAAM,KAAK;AAAA,QACb;AACA,yBAAiBE,UAAS,UAAU;AAClC,cAAI,CAACF,UAAS,MAAME,MAAK,GAAG;AAC1B,kBAAM,KAAK;AAAA,UACb;AAAA,QACF;AACA,YAAI,KAAK;AACP,UAAAF,UAAS,IAAI;AACb,gBAAM,KAAK;AAAA,QACb;AACA,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,eAAO,UAAU,MAAM,mBAAmB,OAAO,GAAG,IAAI,GAAG;AAAA,MAC7D,UAAE;AACA,gBAAQ;AACR,QAAAA,UAAS,IAAI,SAAS,MAAM;AAAA,MAC9B;AAAA,IACF;AACA,mBAAe,UAAUG,WAAUH,WAAU,QAAQ,EAAE,IAAI,GAAG;AAC5D,UAAIR,mBAAkBQ,SAAQ,GAAG;AAC/B,QAAAA,YAAWA,UAAS;AAAA,MACtB;AAEA,YAAM,SAASA,UAAS,UAAU;AAClC,UAAI;AACF,yBAAiBE,UAASC,WAAU;AAClC,gBAAM,OAAO;AACb,iBAAO,MAAMD,MAAK,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QACpC;AACA,cAAM,OAAO;AACb,YAAI,KAAK;AACP,gBAAM,OAAO,MAAM;AAAA,QACrB;AACA,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,YAAI;AACF,gBAAM,OAAO,MAAM,GAAG;AACtB,iBAAO,GAAG;AAAA,QACZ,SAASE,MAAK;AACZ,iBAAOA,IAAG;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AACA,aAASC,aAAY,SAAS;AAC5B,aAAO,aAAa,SAASf,OAAK,YAAY,OAAO,CAAC,CAAC;AAAA,IACzD;AACA,aAAS,aAAa,SAAS,UAAU,MAAM;AAC7C,UAAI,QAAQ,WAAW,KAAK,aAAa,QAAQ,CAAC,CAAC,GAAG;AACpD,kBAAU,QAAQ,CAAC;AAAA,MACrB;AACA,UAAI,QAAQ,SAAS,GAAG;AACtB,cAAM,IAAI,iBAAiB,SAAS;AAAA,MACtC;AACA,YAAM,KAAK,IAAIK,iBAAgB;AAC/B,YAAM,SAAS,GAAG;AAClB,YAAM,cAAc,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK;AAI3E,YAAM,oBAAoB,CAAC;AAC3B,0BAAoB,aAAa,gBAAgB;AACjD,eAAS,QAAQ;AACf,mBAAW,IAAI,WAAW,CAAC;AAAA,MAC7B;AACA,MAAAG,oBAAmBA,qBAAoB,gBAA2B;AAClE,UAAI;AACJ,UAAI,aAAa;AACf,qBAAaA,kBAAiB,aAAa,KAAK;AAAA,MAClD;AACA,UAAI;AACJ,UAAI;AACJ,YAAM,WAAW,CAAC;AAClB,UAAI,cAAc;AAClB,eAAS,OAAO,KAAK;AACnB,mBAAW,KAAK,EAAE,gBAAgB,CAAC;AAAA,MACrC;AACA,eAAS,WAAW,KAAK,OAAO;AAC9B,YAAI;AACJ,YAAI,QAAQ,CAAC,SAAS,MAAM,SAAS,+BAA+B;AAClE,kBAAQ;AAAA,QACV;AACA,YAAI,CAAC,SAAS,CAAC,OAAO;AACpB;AAAA,QACF;AACA,eAAO,SAAS,QAAQ;AACtB,mBAAS,MAAM,EAAE,KAAK;AAAA,QACxB;AACA;AAAC,SAAC,cAAc,gBAAgB,QAAQ,gBAAgB,SAAY,SAAY,YAAY,aAAa,EAAE;AAC3G,WAAG,MAAM;AACT,YAAI,OAAO;AACT,cAAI,CAAC,OAAO;AACV,8BAAkB,QAAQ,CAAC,OAAO,GAAG,CAAC;AAAA,UACxC;AACA,UAAAV,UAAQ,SAAS,UAAU,OAAO,KAAK;AAAA,QACzC;AAAA,MACF;AACA,UAAI;AACJ,eAASkB,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACvC,cAAM,SAAS,QAAQA,EAAC;AACxB,cAAM,UAAUA,KAAI,QAAQ,SAAS;AACrC,cAAM,UAAUA,KAAI;AACpB,cAAM,MAAM,YAAY,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,SAAS;AACxF,cAAM,eAAeA,OAAM,QAAQ,SAAS;AAC5C,YAAI,aAAa,MAAM,GAAG;AAUxB,cAASC,WAAT,SAAiB,KAAK;AACpB,gBAAI,OAAO,IAAI,SAAS,gBAAgB,IAAI,SAAS,8BAA8B;AACjF,qBAAO,GAAG;AAAA,YACZ;AAAA,UACF;AAJS,wBAAAA;AATT,cAAI,KAAK;AACP,kBAAM,EAAE,SAAS,QAAQ,IAAI,UAAU,QAAQ,SAAS,OAAO;AAC/D,qBAAS,KAAK,OAAO;AACrB,gBAAI,WAAW,MAAM,KAAK,cAAc;AACtC,gCAAkB,KAAK,OAAO;AAAA,YAChC;AAAA,UACF;AAQA,iBAAO,GAAG,SAASA,QAAO;AAC1B,cAAI,WAAW,MAAM,KAAK,cAAc;AACtC,8BAAkB,KAAK,MAAM;AAC3B,qBAAO,eAAe,SAASA,QAAO;AAAA,YACxC,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAID,OAAM,GAAG;AACX,cAAI,OAAO,WAAW,YAAY;AAChC,kBAAM,OAAO;AAAA,cACX;AAAA,YACF,CAAC;AACD,gBAAI,CAAC,WAAW,GAAG,GAAG;AACpB,oBAAM,IAAI,yBAAyB,qCAAqC,UAAU,GAAG;AAAA,YACvF;AAAA,UACF,WAAW,WAAW,MAAM,KAAK,qBAAqB,MAAM,KAAKd,mBAAkB,MAAM,GAAG;AAC1F,kBAAM;AAAA,UACR,OAAO;AACL,kBAAMD,QAAO,KAAK,MAAM;AAAA,UAC1B;AAAA,QACF,WAAW,OAAO,WAAW,YAAY;AACvC,cAAIC,mBAAkB,GAAG,GAAG;AAC1B,gBAAI;AACJ,kBAAM,mBAAmB,OAAO,SAAS,QAAQ,SAAS,SAAY,SAAY,KAAK,QAAQ;AAAA,UACjG,OAAO;AACL,kBAAM,kBAAkB,GAAG;AAAA,UAC7B;AACA,gBAAM,OAAO,KAAK;AAAA,YAChB;AAAA,UACF,CAAC;AACD,cAAI,SAAS;AACX,gBAAI,CAAC,WAAW,KAAK,IAAI,GAAG;AAC1B,oBAAM,IAAI,yBAAyB,iBAAiB,aAAac,KAAI,CAAC,KAAK,GAAG;AAAA,YAChF;AAAA,UACF,OAAO;AACL,gBAAI;AACJ,gBAAI,CAACV,cAAa;AAChB,cAAAA,eAAc;AAAA,YAChB;AAOA,kBAAM,KAAK,IAAIA,aAAY;AAAA,cACzB,YAAY;AAAA,YACd,CAAC;AAID,kBAAM,QAAQ,QAAQ,SAAS,QAAQ,UAAU,SAAY,SAAY,MAAM;AAC/E,gBAAI,OAAO,SAAS,YAAY;AAC9B;AACA,mBAAK;AAAA,gBACH;AAAA,gBACA,CAAC,QAAQ;AACP,0BAAQ;AACR,sBAAI,OAAO,MAAM;AACf,uBAAG,MAAM,GAAG;AAAA,kBACd;AACA,sBAAI,KAAK;AACP,uBAAG,IAAI;AAAA,kBACT;AACA,kBAAAR,UAAQ,SAAS,MAAM;AAAA,gBACzB;AAAA,gBACA,CAAC,QAAQ;AACP,qBAAG,QAAQ,GAAG;AACd,kBAAAA,UAAQ,SAAS,QAAQ,GAAG;AAAA,gBAC9B;AAAA,cACF;AAAA,YACF,WAAW,WAAW,KAAK,IAAI,GAAG;AAChC;AACA,yBAAW,KAAK,IAAI,QAAQ;AAAA,gBAC1B;AAAA,cACF,CAAC;AAAA,YACH,WAAWM,kBAAiB,GAAG,KAAKF,mBAAkB,GAAG,GAAG;AAC1D,oBAAM,SAAS,IAAI,YAAY;AAC/B;AACA,yBAAW,QAAQ,IAAI,QAAQ;AAAA,gBAC7B;AAAA,cACF,CAAC;AAAA,YACH,OAAO;AACL,oBAAM,IAAI,yBAAyB,4BAA4B,eAAe,GAAG;AAAA,YACnF;AACA,kBAAM;AACN,kBAAM,EAAE,SAAS,QAAQ,IAAI,UAAU,KAAK,OAAO,IAAI;AACvD,qBAAS,KAAK,OAAO;AACrB,gBAAI,cAAc;AAChB,gCAAkB,KAAK,OAAO;AAAA,YAChC;AAAA,UACF;AAAA,QACF,WAAW,aAAa,MAAM,GAAG;AAC/B,cAAI,qBAAqB,GAAG,GAAG;AAC7B,2BAAe;AACf,kBAAM,UAAU,KAAK,KAAK,QAAQ,QAAQ;AAAA,cACxC;AAAA,YACF,CAAC;AACD,gBAAI,WAAW,MAAM,KAAK,cAAc;AACtC,gCAAkB,KAAK,OAAO;AAAA,YAChC;AAAA,UACF,WAAWA,mBAAkB,GAAG,KAAKE,kBAAiB,GAAG,GAAG;AAC1D,kBAAM,SAAS,IAAI,YAAY;AAC/B;AACA,uBAAW,QAAQ,QAAQ,QAAQ;AAAA,cACjC;AAAA,YACF,CAAC;AAAA,UACH,WAAW,WAAW,GAAG,GAAG;AAC1B;AACA,uBAAW,KAAK,QAAQ,QAAQ;AAAA,cAC9B;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,CAAC,YAAY,YAAY,iBAAiB,kBAAkB,iBAAiB;AAAA,cAC7E;AAAA,YACF;AAAA,UACF;AACA,gBAAM;AAAA,QACR,WAAWD,aAAY,MAAM,GAAG;AAC9B,cAAI,qBAAqB,GAAG,GAAG;AAC7B;AACA,sBAAU,kBAAkB,GAAG,GAAG,QAAQ,QAAQ;AAAA,cAChD;AAAA,YACF,CAAC;AAAA,UACH,WAAWC,kBAAiB,GAAG,KAAK,WAAW,GAAG,GAAG;AACnD;AACA,sBAAU,KAAK,QAAQ,QAAQ;AAAA,cAC7B;AAAA,YACF,CAAC;AAAA,UACH,WAAWF,mBAAkB,GAAG,GAAG;AACjC;AACA,sBAAU,IAAI,UAAU,QAAQ,QAAQ;AAAA,cACtC;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,CAAC,YAAY,YAAY,iBAAiB,kBAAkB,iBAAiB;AAAA,cAC7E;AAAA,YACF;AAAA,UACF;AACA,gBAAM;AAAA,QACR,OAAO;AACL,gBAAMD,QAAO,KAAK,MAAM;AAAA,QAC1B;AAAA,MACF;AACA,UACG,WAAW,QAAQ,WAAW,UAAa,OAAO,WAClD,gBAAgB,QAAQ,gBAAgB,UAAa,YAAY,SAClE;AACA,QAAAH,UAAQ,SAAS,KAAK;AAAA,MACxB;AACA,aAAO;AAAA,IACT;AACA,aAAS,KAAK,KAAK,KAAK,QAAQ,EAAE,IAAI,GAAG;AACvC,UAAI,QAAQ;AACZ,UAAI,GAAG,SAAS,MAAM;AACpB,YAAI,CAAC,OAAO;AAEV,iBAAO,IAAI,2BAA2B,CAAC;AAAA,QACzC;AAAA,MACF,CAAC;AACD,UAAI,KAAK,KAAK;AAAA,QACZ,KAAK;AAAA,MACP,CAAC;AAED,UAAI,KAAK;AAKP,YAASoB,SAAT,WAAiB;AACf,kBAAQ;AACR,cAAI,IAAI;AAAA,QACV;AAHS,oBAAAA;AAIT,YAAI,mBAAmB,GAAG,GAAG;AAE3B,UAAApB,UAAQ,SAASoB,MAAK;AAAA,QACxB,OAAO;AACL,cAAI,KAAK,OAAOA,MAAK;AAAA,QACvB;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AACA;AAAA,QACE;AAAA,QACA;AAAA,UACE,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,CAAC,QAAQ;AACP,gBAAM,SAAS,IAAI;AACnB,cACE,OACA,IAAI,SAAS,gCACb,UACA,OAAO,SACP,CAAC,OAAO,WACR,CAAC,OAAO,cACR;AASA,gBAAI,KAAK,OAAO,MAAM,EAAE,KAAK,SAAS,MAAM;AAAA,UAC9C,OAAO;AACL,mBAAO,GAAG;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAArB,QAAO,UAAU;AAAA,MACf;AAAA,MACA,UAAAkB;AAAA,IACF;AAAA;AAAA;;;ACtdA;AAAA,iEAAAI,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,QAAMC,UAAS;AACf,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,kBAAAC;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ;AAAA,MACA,OAAO,EAAE,uBAAuB,iBAAiB;AAAA,IACnD,IAAI;AACJ,QAAM,MAAM;AACZ,IAAAN,QAAO,UAAU,SAASO,YAAW,SAAS;AAC5C,UAAI,QAAQ,WAAW,GAAG;AACxB,cAAM,IAAI,iBAAiB,SAAS;AAAA,MACtC;AACA,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAOL,QAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,MAC/B;AACA,YAAM,aAAa,CAAC,GAAG,OAAO;AAC9B,UAAI,OAAO,QAAQ,CAAC,MAAM,YAAY;AACpC,gBAAQ,CAAC,IAAIA,QAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,MACrC;AACA,UAAI,OAAO,QAAQ,QAAQ,SAAS,CAAC,MAAM,YAAY;AACrD,cAAM,MAAM,QAAQ,SAAS;AAC7B,gBAAQ,GAAG,IAAIA,QAAO,KAAK,QAAQ,GAAG,CAAC;AAAA,MACzC;AACA,eAASM,KAAI,GAAGA,KAAI,QAAQ,QAAQ,EAAEA,IAAG;AACvC,YAAI,CAAC,aAAa,QAAQA,EAAC,CAAC,KAAK,CAACL,aAAY,QAAQK,EAAC,CAAC,GAAG;AAEzD;AAAA,QACF;AACA,YACEA,KAAI,QAAQ,SAAS,KACrB,EAAE,WAAW,QAAQA,EAAC,CAAC,KAAKF,kBAAiB,QAAQE,EAAC,CAAC,KAAKJ,mBAAkB,QAAQI,EAAC,CAAC,IACxF;AACA,gBAAM,IAAI,sBAAsB,WAAWA,EAAC,KAAK,WAAWA,EAAC,GAAG,kBAAkB;AAAA,QACpF;AACA,YAAIA,KAAI,KAAK,EAAE,WAAW,QAAQA,EAAC,CAAC,KAAKH,kBAAiB,QAAQG,EAAC,CAAC,KAAKJ,mBAAkB,QAAQI,EAAC,CAAC,IAAI;AACvG,gBAAM,IAAI,sBAAsB,WAAWA,EAAC,KAAK,WAAWA,EAAC,GAAG,kBAAkB;AAAA,QACpF;AAAA,MACF;AACA,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,eAAS,WAAW,KAAK;AACvB,cAAM,KAAK;AACX,kBAAU;AACV,YAAI,IAAI;AACN,aAAG,GAAG;AAAA,QACR,WAAW,KAAK;AACd,YAAE,QAAQ,GAAG;AAAA,QACf,WAAW,CAACC,aAAY,CAACC,WAAU;AACjC,YAAE,QAAQ;AAAA,QACZ;AAAA,MACF;AACA,YAAM,OAAO,QAAQ,CAAC;AACtB,YAAM,OAAOT,UAAS,SAAS,UAAU;AACzC,YAAMS,YAAW,CAAC,EAAE,WAAW,IAAI,KAAKL,kBAAiB,IAAI,KAAKD,mBAAkB,IAAI;AACxF,YAAMK,YAAW,CAAC,EAAE,WAAW,IAAI,KAAKH,kBAAiB,IAAI,KAAKF,mBAAkB,IAAI;AAKxF,UAAI,IAAIF,QAAO;AAAA;AAAA,QAEb,oBAAoB,CAAC,EAAE,SAAS,QAAQ,SAAS,UAAa,KAAK;AAAA,QACnE,oBAAoB,CAAC,EAAE,SAAS,QAAQ,SAAS,UAAa,KAAK;AAAA,QACnE,UAAAQ;AAAA,QACA,UAAAD;AAAA,MACF,CAAC;AACD,UAAIC,WAAU;AACZ,YAAI,aAAa,IAAI,GAAG;AACtB,YAAE,SAAS,SAAUC,QAAO,UAAU,UAAU;AAC9C,gBAAI,KAAK,MAAMA,QAAO,QAAQ,GAAG;AAC/B,uBAAS;AAAA,YACX,OAAO;AACL,wBAAU;AAAA,YACZ;AAAA,UACF;AACA,YAAE,SAAS,SAAU,UAAU;AAC7B,iBAAK,IAAI;AACT,uBAAW;AAAA,UACb;AACA,eAAK,GAAG,SAAS,WAAY;AAC3B,gBAAI,SAAS;AACX,oBAAM,KAAK;AACX,wBAAU;AACV,iBAAG;AAAA,YACL;AAAA,UACF,CAAC;AAAA,QACH,WAAWR,aAAY,IAAI,GAAG;AAC5B,gBAAMO,YAAWN,mBAAkB,IAAI,IAAI,KAAK,WAAW;AAC3D,gBAAM,SAASM,UAAS,UAAU;AAClC,YAAE,SAAS,eAAgBC,QAAO,UAAU,UAAU;AACpD,gBAAI;AACF,oBAAM,OAAO;AACb,qBAAO,MAAMA,MAAK,EAAE,MAAM,MAAM;AAAA,cAAC,CAAC;AAClC,uBAAS;AAAA,YACX,SAAS,KAAK;AACZ,uBAAS,GAAG;AAAA,YACd;AAAA,UACF;AACA,YAAE,SAAS,eAAgB,UAAU;AACnC,gBAAI;AACF,oBAAM,OAAO;AACb,qBAAO,MAAM,EAAE,MAAM,MAAM;AAAA,cAAC,CAAC;AAC7B,yBAAW;AAAA,YACb,SAAS,KAAK;AACZ,uBAAS,GAAG;AAAA,YACd;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAASP,mBAAkB,IAAI,IAAI,KAAK,WAAW;AACzD,YAAI,QAAQ,MAAM;AAChB,cAAI,UAAU;AACZ,kBAAM,KAAK;AACX,uBAAW;AACX,eAAG;AAAA,UACL;AAAA,QACF,CAAC;AAAA,MACH;AACA,UAAIK,WAAU;AACZ,YAAI,aAAa,IAAI,GAAG;AACtB,eAAK,GAAG,YAAY,WAAY;AAC9B,gBAAI,YAAY;AACd,oBAAM,KAAK;AACX,2BAAa;AACb,iBAAG;AAAA,YACL;AAAA,UACF,CAAC;AACD,eAAK,GAAG,OAAO,WAAY;AACzB,cAAE,KAAK,IAAI;AAAA,UACb,CAAC;AACD,YAAE,QAAQ,WAAY;AACpB,mBAAO,MAAM;AACX,oBAAM,MAAM,KAAK,KAAK;AACtB,kBAAI,QAAQ,MAAM;AAChB,6BAAa,EAAE;AACf;AAAA,cACF;AACA,kBAAI,CAAC,EAAE,KAAK,GAAG,GAAG;AAChB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAWN,aAAY,IAAI,GAAG;AAC5B,gBAAMM,YAAWL,mBAAkB,IAAI,IAAI,KAAK,WAAW;AAC3D,gBAAM,SAASK,UAAS,UAAU;AAClC,YAAE,QAAQ,iBAAkB;AAC1B,mBAAO,MAAM;AACX,kBAAI;AACF,sBAAM,EAAE,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK;AAC1C,oBAAI,CAAC,EAAE,KAAK,KAAK,GAAG;AAClB;AAAA,gBACF;AACA,oBAAI,MAAM;AACR,oBAAE,KAAK,IAAI;AACX;AAAA,gBACF;AAAA,cACF,QAAQ;AACN;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,QAAE,WAAW,SAAU,KAAK,UAAU;AACpC,YAAI,CAAC,OAAO,YAAY,MAAM;AAC5B,gBAAM,IAAI,WAAW;AAAA,QACvB;AACA,qBAAa;AACb,kBAAU;AACV,mBAAW;AACX,YAAI,YAAY,MAAM;AACpB,mBAAS,GAAG;AAAA,QACd,OAAO;AACL,oBAAU;AACV,cAAI,aAAa,IAAI,GAAG;AACtB,sBAAU,MAAM,GAAG;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACjMA;AAAA,mEAAAG,UAAAC,SAAA;AAAA;AAEA,QAAMC,mBAAkB,WAAW,mBAAmB,2BAA4B;AAClF,QAAM;AAAA,MACJ,OAAO,EAAE,uBAAuB,sBAAsB,kBAAkB,iBAAiB;AAAA,MACzF;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,qBAAqB,iBAAiB,eAAe,IAAI;AACjE,QAAM,eAAe,sBAAkC,OAAO,OAAO;AACrE,QAAM,yBAAyB,sBAAkC,OAAO,wBAAwB;AAChG,QAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,QAAM,gBAAgB;AACtB,QAAM,EAAE,yBAAyB,IAAI;AACrC,QAAM,EAAE,YAAY,aAAa,IAAI;AACrC,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM;AAAA,MACJ;AAAA,MACA,SAAAC;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA,SAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,IACF,IAAI;AACJ,QAAM,SAASA,QAAO,QAAQ;AAC9B,QAAM,OAAOA,QAAO,MAAM;AAC1B,aAASC,SAAQ,QAAQ,SAAS;AAChC,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,UAAI,aAAa,MAAM,KAAK,CAAC,WAAW,MAAM,GAAG;AAC/C,cAAM,IAAI,sBAAsB,UAAU,QAAQ,kBAAkB;AAAA,MACtE;AACA,YAAM,iBAAiB,cAAc,MAAM,MAAM;AACjD,UAAI,YAAY,QAAQ,YAAY,UAAa,QAAQ,QAAQ;AAE/D,iCAAyB,QAAQ,QAAQ,cAAc;AAAA,MACzD;AACA,aAAO;AAAA,IACT;AACA,aAASC,KAAI,IAAI,SAAS;AACxB,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,qBAAqB,MAAM,CAAC,YAAY,eAAe,GAAG,EAAE;AAAA,MACxE;AACA,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,UAAI,cAAc;AAClB,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,gBAAgB,MAAM;AACzF,sBAAc,UAAU,QAAQ,WAAW;AAAA,MAC7C;AACA,UAAI,gBAAgB,cAAc;AAClC,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,kBAAkB,MAAM;AAC3F,wBAAgB,UAAU,QAAQ,aAAa;AAAA,MACjD;AACA,sBAAgB,aAAa,uBAAuB,CAAC;AACrD,sBAAgB,eAAe,yBAAyB,CAAC;AACzD,uBAAiB;AACjB,aAAO,gBAAgBA,OAAM;AAC3B,cAAM,SAAS,gBAA2B;AAAA,UACxC,CAAC,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,MAAM,EAAE,OAAOL,QAAO;AAAA,QACzF;AACA,cAAM,SAAS;AACf,cAAMM,SAAQ,CAAC;AACf,cAAM,YAAY;AAAA,UAChB;AAAA,QACF;AACA,YAAI;AACJ,YAAI;AACJ,YAAI,OAAO;AACX,YAAI,MAAM;AACV,iBAAS,UAAU;AACjB,iBAAO;AACP,6BAAmB;AAAA,QACrB;AACA,iBAAS,qBAAqB;AAC5B,iBAAO;AACP,sBAAY;AAAA,QACd;AACA,iBAAS,cAAc;AACrB,cAAI,UAAU,CAAC,QAAQ,MAAM,eAAeA,OAAM,SAAS,eAAe;AACxE,mBAAO;AACP,qBAAS;AAAA,UACX;AAAA,QACF;AACA,uBAAe,OAAO;AACpB,cAAI;AACF,2BAAe,OAAO,QAAQ;AAC5B,kBAAI,MAAM;AACR;AAAA,cACF;AACA,kBAAI,OAAO,SAAS;AAClB,sBAAM,IAAI,WAAW;AAAA,cACvB;AACA,kBAAI;AACF,sBAAM,GAAG,KAAK,SAAS;AACvB,oBAAI,QAAQ,QAAQ;AAClB;AAAA,gBACF;AACA,sBAAM,eAAe,GAAG;AAAA,cAC1B,SAAS,KAAK;AACZ,sBAAM,cAAc,GAAG;AAAA,cACzB;AACA,qBAAO;AACP,mCAAqB,KAAK,oBAAoB,OAAO;AACrD,cAAAA,OAAM,KAAK,GAAG;AACd,kBAAI,MAAM;AACR,qBAAK;AACL,uBAAO;AAAA,cACT;AACA,kBAAI,CAAC,SAASA,OAAM,UAAU,iBAAiB,OAAO,cAAc;AAClE,sBAAM,IAAIJ,SAAQ,CAAC,YAAY;AAC7B,2BAAS;AAAA,gBACX,CAAC;AAAA,cACH;AAAA,YACF;AACA,YAAAI,OAAM,KAAK,IAAI;AAAA,UACjB,SAAS,KAAK;AACZ,kBAAM,MAAM,cAAc,GAAG;AAC7B,iCAAqB,KAAK,oBAAoB,OAAO;AACrD,YAAAA,OAAM,KAAK,GAAG;AAAA,UAChB,UAAE;AACA,mBAAO;AACP,gBAAI,MAAM;AACR,mBAAK;AACL,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,aAAK;AACL,YAAI;AACF,iBAAO,MAAM;AACX,mBAAOA,OAAM,SAAS,GAAG;AACvB,oBAAM,MAAM,MAAMA,OAAM,CAAC;AACzB,kBAAI,QAAQ,MAAM;AAChB;AAAA,cACF;AACA,kBAAI,OAAO,SAAS;AAClB,sBAAM,IAAI,WAAW;AAAA,cACvB;AACA,kBAAI,QAAQ,QAAQ;AAClB,sBAAM;AAAA,cACR;AACA,cAAAA,OAAM,MAAM;AACZ,0BAAY;AAAA,YACd;AACA,kBAAM,IAAIJ,SAAQ,CAAC,YAAY;AAC7B,qBAAO;AAAA,YACT,CAAC;AAAA,UACH;AAAA,QACF,UAAE;AACA,iBAAO;AACP,cAAI,QAAQ;AACV,mBAAO;AACP,qBAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,aAAS,eAAe,UAAU,QAAW;AAC3C,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,aAAO,gBAAgBK,kBAAiB;AACtC,YAAIC,SAAQ;AACZ,yBAAiB,OAAO,MAAM;AAC5B,cAAI;AACJ,cACE,YAAY,QACZ,YAAY,WACX,kBAAkB,QAAQ,YAAY,QACvC,oBAAoB,UACpB,gBAAgB,SAChB;AACA,kBAAM,IAAI,WAAW;AAAA,cACnB,OAAO,QAAQ,OAAO;AAAA,YACxB,CAAC;AAAA,UACH;AACA,gBAAM,CAACA,UAAS,GAAG;AAAA,QACrB;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,mBAAeC,MAAK,IAAI,UAAU,QAAW;AAC3C,uBAAiB,UAAUC,QAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AACzD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,mBAAeC,OAAM,IAAI,UAAU,QAAW;AAC5C,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,qBAAqB,MAAM,CAAC,YAAY,eAAe,GAAG,EAAE;AAAA,MACxE;AAEA,aAAO,CAAE,MAAMF,MAAK;AAAA,QAClB;AAAA,QACA,UAAU,SAAS;AACjB,iBAAO,CAAE,MAAM,GAAG,GAAG,IAAI;AAAA,QAC3B;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,mBAAe,KAAK,IAAI,SAAS;AAC/B,uBAAiB,UAAUC,QAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AACzD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,mBAAe,QAAQ,IAAI,SAAS;AAClC,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,qBAAqB,MAAM,CAAC,YAAY,eAAe,GAAG,EAAE;AAAA,MACxE;AACA,qBAAe,UAAU,OAAOE,UAAS;AACvC,cAAM,GAAG,OAAOA,QAAO;AACvB,eAAO;AAAA,MACT;AAEA,uBAAiB,UAAUP,KAAI,KAAK,MAAM,WAAW,OAAO,EAAE;AAAA,IAChE;AACA,aAASK,QAAO,IAAI,SAAS;AAC3B,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,qBAAqB,MAAM,CAAC,YAAY,eAAe,GAAG,EAAE;AAAA,MACxE;AACA,qBAAe,SAAS,OAAOE,UAAS;AACtC,YAAI,MAAM,GAAG,OAAOA,QAAO,GAAG;AAC5B,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,aAAOP,KAAI,KAAK,MAAM,UAAU,OAAO;AAAA,IACzC;AAIA,QAAM,4BAAN,cAAwC,iBAAiB;AAAA,MACvD,cAAc;AACZ,cAAM,QAAQ;AACd,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AACA,mBAAeQ,QAAO,SAAS,cAAc,SAAS;AACpD,UAAI;AACJ,UAAI,OAAO,YAAY,YAAY;AACjC,cAAM,IAAI,qBAAqB,WAAW,CAAC,YAAY,eAAe,GAAG,OAAO;AAAA,MAClF;AACA,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,UAAI,kBAAkB,UAAU,SAAS;AACzC,UACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,cAAM,MAAM,IAAI,WAAW,QAAW;AAAA,UACpC,OAAO,QAAQ,OAAO;AAAA,QACxB,CAAC;AACD,aAAK,KAAK,SAAS,MAAM;AAAA,QAAC,CAAC;AAC3B,cAAMd,UAAS,KAAK,QAAQ,GAAG,CAAC;AAChC,cAAM;AAAA,MACR;AACA,YAAM,KAAK,IAAID,iBAAgB;AAC/B,YAAM,SAAS,GAAG;AAClB,UAAI,YAAY,QAAQ,YAAY,UAAa,QAAQ,QAAQ;AAC/D,cAAM,OAAO;AAAA,UACX,MAAM;AAAA,UACN,CAAC,YAAY,GAAG;AAAA,UAChB,CAAC,sBAAsB,GAAG;AAAA,QAC5B;AACA,gBAAQ,OAAO,iBAAiB,SAAS,MAAM,GAAG,MAAM,GAAG,IAAI;AAAA,MACjE;AACA,UAAI,uBAAuB;AAC3B,UAAI;AACF,yBAAiB,SAAS,MAAM;AAC9B,cAAI;AACJ,iCAAuB;AACvB,cACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,kBAAM,IAAI,WAAW;AAAA,UACvB;AACA,cAAI,CAAC,iBAAiB;AACpB,2BAAe;AACf,8BAAkB;AAAA,UACpB,OAAO;AACL,2BAAe,MAAM,QAAQ,cAAc,OAAO;AAAA,cAChD;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,CAAC,wBAAwB,CAAC,iBAAiB;AAC7C,gBAAM,IAAI,0BAA0B;AAAA,QACtC;AAAA,MACF,UAAE;AACA,WAAG,MAAM;AAAA,MACX;AACA,aAAO;AAAA,IACT;AACA,mBAAe,QAAQ,SAAS;AAC9B,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,YAAM,SAAS,CAAC;AAChB,uBAAiB,OAAO,MAAM;AAC5B,YAAI;AACJ,YACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,gBAAM,IAAI,WAAW,QAAW;AAAA,YAC9B,OAAO,QAAQ,OAAO;AAAA,UACxB,CAAC;AAAA,QACH;AACA,2BAAmB,QAAQ,GAAG;AAAA,MAChC;AACA,aAAO;AAAA,IACT;AACA,aAAS,QAAQ,IAAI,SAAS;AAC5B,YAAM,SAASO,KAAI,KAAK,MAAM,IAAI,OAAO;AACzC,aAAO,gBAAgBS,WAAU;AAC/B,yBAAiB,OAAO,QAAQ;AAC9B,iBAAO;AAAA,QACT;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,aAAS,oBAAoB,QAAQ;AAGnC,eAASb,QAAO,MAAM;AACtB,UAAI,YAAY,MAAM,GAAG;AACvB,eAAO;AAAA,MACT;AACA,UAAI,SAAS,GAAG;AACd,cAAM,IAAI,iBAAiB,UAAU,QAAQ,MAAM;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AACA,aAAS,KAAK,QAAQ,UAAU,QAAW;AACzC,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,eAAS,oBAAoB,MAAM;AACnC,aAAO,gBAAgBc,QAAO;AAC5B,YAAI;AACJ,YACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,gBAAM,IAAI,WAAW;AAAA,QACvB;AACA,yBAAiB,OAAO,MAAM;AAC5B,cAAI;AACJ,cACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,kBAAM,IAAI,WAAW;AAAA,UACvB;AACA,cAAI,YAAY,GAAG;AACjB,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,aAAS,KAAK,QAAQ,UAAU,QAAW;AACzC,UAAI,WAAW,MAAM;AACnB,uBAAe,SAAS,SAAS;AAAA,MACnC;AACA,WAAK,YAAY,QAAQ,YAAY,SAAY,SAAY,QAAQ,WAAW,MAAM;AACpF,4BAAoB,QAAQ,QAAQ,gBAAgB;AAAA,MACtD;AACA,eAAS,oBAAoB,MAAM;AACnC,aAAO,gBAAgBC,QAAO;AAC5B,YAAI;AACJ,YACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,gBAAM,IAAI,WAAW;AAAA,QACvB;AACA,yBAAiB,OAAO,MAAM;AAC5B,cAAI;AACJ,cACE,YAAY,QACZ,YAAY,WACX,mBAAmB,QAAQ,YAAY,QACxC,qBAAqB,UACrB,iBAAiB,SACjB;AACA,kBAAM,IAAI,WAAW;AAAA,UACvB;AACA,cAAI,WAAW,GAAG;AAChB,kBAAM;AAAA,UACR;AAGA,cAAI,UAAU,GAAG;AACf;AAAA,UACF;AAAA,QACF;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,IAAAnB,QAAO,QAAQ,2BAA2B;AAAA,MACxC,gBAAgB,UAAU,gBAAgB,8DAA8D;AAAA,MACxG;AAAA,MACA,QAAAa;AAAA,MACA;AAAA,MACA,KAAAL;AAAA,MACA;AAAA,MACA,SAAAD;AAAA,IACF;AACA,IAAAP,QAAO,QAAQ,4BAA4B;AAAA,MACzC,OAAAc;AAAA,MACA;AAAA,MACA,QAAAE;AAAA,MACA;AAAA,MACA,MAAAJ;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;ACxcA;AAAA,wDAAAQ,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,mBAAmB,SAAAC,SAAQ,IAAI;AACvC,QAAM,EAAE,YAAY,cAAc,aAAAC,aAAY,IAAI;AAClD,QAAM,EAAE,cAAc,GAAG,IAAI;AAC7B,QAAM,EAAE,UAAAC,UAAS,IAAI;AACrB;AACA,aAASC,aAAY,SAAS;AAC5B,aAAO,IAAIH,SAAQ,CAAC,SAASI,YAAW;AACtC,YAAI;AACJ,YAAI;AACJ,cAAM,UAAU,QAAQ,QAAQ,SAAS,CAAC;AAC1C,YACE,WACA,OAAO,YAAY,YACnB,CAAC,aAAa,OAAO,KACrB,CAAC,WAAW,OAAO,KACnB,CAACH,aAAY,OAAO,GACpB;AACA,gBAAM,UAAU,kBAAkB,OAAO;AACzC,mBAAS,QAAQ;AACjB,gBAAM,QAAQ;AAAA,QAChB;AACA;AAAA,UACE;AAAA,UACA,CAAC,KAAK,UAAU;AACd,gBAAI,KAAK;AACP,cAAAG,QAAO,GAAG;AAAA,YACZ,OAAO;AACL,sBAAQ,KAAK;AAAA,YACf;AAAA,UACF;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,IAAAL,QAAO,UAAU;AAAA,MACf,UAAAG;AAAA,MACA,UAAAC;AAAA,IACF;AAAA;AAAA;;;AC1CA,IAAAE,kBAAA;AAAA,+CAAAC,UAAAC,SAAA;AAAA;AAyBA,QAAM,EAAE,QAAAC,QAAO,IAAI,QAAQ,QAAQ;AAInC,QAAM,EAAE,sBAAAC,uBAAsB,YAAY,aAAa,IAAI;AAC3D,QAAM;AAAA,MACJ,WAAW,EAAE,QAAQ,gBAAgB;AAAA,IACvC,IAAI;AACJ,QAAM,EAAE,0BAA0B,0BAA0B,IAAI;AAChE,QAAM;AAAA,MACJ,OAAO,EAAE,wBAAwB;AAAA,IACnC,IAAI;AACJ,QAAMC,WAAU;AAChB,QAAM,EAAE,yBAAyB,yBAAAC,yBAAwB,IAAI;AAC7D,QAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,MAAM;AAEZ,QAAM,WAAW;AACjB,QAAM,QAAQ;AACd,QAAM,SAAUL,QAAO,UAAU,iBAAqC;AACtE,WAAO,cAAc,MAAM;AAC3B,WAAO,cAAc,MAAM;AAC3B,WAAO,YAAY,MAAM;AACzB,WAAO,aAAa,MAAM;AAC1B,WAAO,aAAa,MAAM;AAC1B,WAAO,WAAW;AAClB,eAAW,OAAO,WAAW,wBAAwB,GAAG;AAEtD,UAAS,KAAT,YAAe,MAAM;AACnB,YAAI,YAAY;AACd,gBAAM,wBAAwB;AAAA,QAChC;AACA,eAAO,OAAO,SAAS,KAAK,aAAa,IAAI,MAAM,IAAI,CAAC;AAAA,MAC1D;AANA,YAAM,KAAK,yBAAyB,GAAG;AAOvC,MAAAE,sBAAqB,IAAI,QAAQ;AAAA,QAC/B,WAAW;AAAA,QACX,OAAO,GAAG;AAAA,MACZ,CAAC;AACD,MAAAA,sBAAqB,IAAI,UAAU;AAAA,QACjC,WAAW;AAAA,QACX,OAAO,GAAG;AAAA,MACZ,CAAC;AACD,MAAAA,sBAAqB,OAAO,SAAS,WAAW,KAAK;AAAA,QACnD,WAAW;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,eAAW,OAAO,WAAW,yBAAyB,GAAG;AAEvD,UAAS,KAAT,YAAe,MAAM;AACnB,YAAI,YAAY;AACd,gBAAM,wBAAwB;AAAA,QAChC;AACA,eAAO,aAAa,IAAI,MAAM,IAAI;AAAA,MACpC;AANA,YAAM,KAAK,0BAA0B,GAAG;AAOxC,MAAAA,sBAAqB,IAAI,QAAQ;AAAA,QAC/B,WAAW;AAAA,QACX,OAAO,GAAG;AAAA,MACZ,CAAC;AACD,MAAAA,sBAAqB,IAAI,UAAU;AAAA,QACjC,WAAW;AAAA,QACX,OAAO,GAAG;AAAA,MACZ,CAAC;AACD,MAAAA,sBAAqB,OAAO,SAAS,WAAW,KAAK;AAAA,QACnD,WAAW;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,WAAO,WAAW;AAClB,WAAO,SAAS;AAChB,WAAO,YAAY;AACnB,WAAO,cAAc;AACrB,WAAO,WAAWG;AAClB,QAAM,EAAE,eAAe,IAAI;AAC3B,WAAO,iBAAiB;AACxB,WAAO,WAAW;AAClB,WAAO,UAAU;AACjB,WAAO,UAAUF;AACjB,WAAO,0BAA0B;AACjC,WAAO,0BAA0BC;AACjC,IAAAF,sBAAqB,QAAQ,YAAY;AAAA,MACvC,WAAW;AAAA,MACX,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAA,sBAAqBG,WAAU,iBAAiB;AAAA,MAC9C,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,SAAS;AAAA,MAClB;AAAA,IACF,CAAC;AACD,IAAAH,sBAAqB,KAAK,iBAAiB;AAAA,MACzC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AACJ,eAAO,SAAS;AAAA,MAClB;AAAA,IACF,CAAC;AAGD,WAAO,SAAS;AAChB,WAAO,gBAAgB,SAASI,cAAa,OAAO;AAClD,aAAO,iBAAiB;AAAA,IAC1B;AACA,WAAO,sBAAsB,SAAS,oBAAoBC,QAAO;AAC/D,aAAON,QAAO,KAAKM,OAAM,QAAQA,OAAM,YAAYA,OAAM,UAAU;AAAA,IACrE;AAAA;AAAA;;;AC9IA;AAAA,mDAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,SAAS,QAAQ,QAAQ;AAC/B,QAAI,UAAU,QAAQ,IAAI,oBAAoB,WAAW;AACvD,YAAM,WAAW,OAAO;AAGxB,MAAAA,QAAO,QAAQ,sBAAsB,OAAO;AAC5C,MAAAA,QAAO,QAAQ,gBAAgB,OAAO;AACtC,MAAAA,QAAO,QAAQ,cAAc,OAAO;AACpC,MAAAA,QAAO,QAAQ,YAAY,OAAO;AAClC,MAAAA,QAAO,QAAQ,aAAa,OAAO;AACnC,MAAAA,QAAO,QAAQ,WAAW,OAAO;AACjC,MAAAA,QAAO,QAAQ,WAAW,OAAO;AACjC,MAAAA,QAAO,QAAQ,SAAS,OAAO;AAC/B,MAAAA,QAAO,QAAQ,YAAY,OAAO;AAClC,MAAAA,QAAO,QAAQ,cAAc,OAAO;AACpC,MAAAA,QAAO,QAAQ,iBAAiB,OAAO;AACvC,MAAAA,QAAO,QAAQ,WAAW,OAAO;AACjC,MAAAA,QAAO,QAAQ,UAAU,OAAO;AAChC,MAAAA,QAAO,QAAQ,WAAW,OAAO;AACjC,MAAAA,QAAO,QAAQ,UAAU,OAAO;AAChC,aAAO,eAAe,QAAQ,YAAY;AAAA,QACxC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AACD,MAAAA,QAAO,QAAQ,SAAS,OAAO;AAAA,IACjC,OAAO;AACL,YAAM,eAAe;AACrB,YAAM,WAAW;AACjB,YAAM,kBAAkB,aAAa,SAAS;AAC9C,MAAAA,QAAO,UAAU,aAAa;AAG9B,MAAAA,QAAO,QAAQ,sBAAsB,aAAa;AAClD,MAAAA,QAAO,QAAQ,gBAAgB,aAAa;AAC5C,MAAAA,QAAO,QAAQ,cAAc,aAAa;AAC1C,MAAAA,QAAO,QAAQ,YAAY,aAAa;AACxC,MAAAA,QAAO,QAAQ,aAAa,aAAa;AACzC,MAAAA,QAAO,QAAQ,WAAW,aAAa;AACvC,MAAAA,QAAO,QAAQ,WAAW,aAAa;AACvC,MAAAA,QAAO,QAAQ,SAAS,aAAa;AACrC,MAAAA,QAAO,QAAQ,YAAY,aAAa;AACxC,MAAAA,QAAO,QAAQ,cAAc,aAAa;AAC1C,MAAAA,QAAO,QAAQ,iBAAiB,aAAa;AAC7C,MAAAA,QAAO,QAAQ,WAAW,aAAa;AACvC,MAAAA,QAAO,QAAQ,UAAU,aAAa;AACtC,MAAAA,QAAO,QAAQ,UAAU;AACzB,MAAAA,QAAO,QAAQ,WAAW,aAAa;AACvC,MAAAA,QAAO,QAAQ,UAAU,aAAa;AACtC,aAAO,eAAe,cAAc,YAAY;AAAA,QAC9C,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,MAAM;AACJ,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AACD,MAAAA,QAAO,QAAQ,SAAS,aAAa;AAAA,IACvC;AAGA,IAAAA,QAAO,QAAQ,UAAUA,QAAO;AAAA;AAAA;;;AChEhC;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAQA,aAAS,UAAU,OAAO,QAAQ;AAChC,UAAIC,SAAQ,IACR,SAAS,OAAO,QAChB,SAAS,MAAM;AAEnB,aAAO,EAAEA,SAAQ,QAAQ;AACvB,cAAM,SAASA,MAAK,IAAI,OAAOA,MAAK;AAAA,MACtC;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,0CAAAE,UAAAC,SAAA;AAAA;AAAA,QAAIC,UAAS;AAAb,QACI,cAAc;AADlB,QAEI,UAAU;AAGd,QAAI,mBAAmBA,UAASA,QAAO,qBAAqB;AAS5D,aAAS,cAAc,OAAO;AAC5B,aAAO,QAAQ,KAAK,KAAK,YAAY,KAAK,KACxC,CAAC,EAAE,oBAAoB,SAAS,MAAM,gBAAgB;AAAA,IAC1D;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,wCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,gBAAgB;AAapB,aAAS,YAAY,OAAO,OAAO,WAAW,UAAU,QAAQ;AAC9D,UAAIC,SAAQ,IACR,SAAS,MAAM;AAEnB,oBAAc,YAAY;AAC1B,iBAAW,SAAS,CAAC;AAErB,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,QAAQ,MAAMA,MAAK;AACvB,YAAI,QAAQ,KAAK,UAAU,KAAK,GAAG;AACjC,cAAI,QAAQ,GAAG;AAEb,wBAAY,OAAO,QAAQ,GAAG,WAAW,UAAU,MAAM;AAAA,UAC3D,OAAO;AACL,sBAAU,QAAQ,KAAK;AAAA,UACzB;AAAA,QACF,WAAW,CAAC,UAAU;AACpB,iBAAO,OAAO,MAAM,IAAI;AAAA,QAC1B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACrCjB;AAAA,mCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc;AAgBlB,aAAS,QAAQ,OAAO;AACtB,UAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,aAAO,SAAS,YAAY,OAAO,CAAC,IAAI,CAAC;AAAA,IAC3C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAGhB,QAAI,eAAe,UAAU,QAAQ,QAAQ;AAE7C,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA,sCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AASnB,aAAS,YAAY;AACnB,WAAK,WAAW,eAAe,aAAa,IAAI,IAAI,CAAC;AACrD,WAAK,OAAO;AAAA,IACd;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAUA,aAAS,WAAW,KAAK;AACvB,UAAI,SAAS,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,GAAG;AACtD,WAAK,QAAQ,SAAS,IAAI;AAC1B,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,iBAAiB;AAGrB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAWjC,aAAS,QAAQ,KAAK;AACpB,UAAI,OAAO,KAAK;AAChB,UAAI,cAAc;AAChB,YAAI,SAAS,KAAK,GAAG;AACrB,eAAO,WAAW,iBAAiB,SAAY;AAAA,MACjD;AACA,aAAO,eAAe,KAAK,MAAM,GAAG,IAAI,KAAK,GAAG,IAAI;AAAA,IACtD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,cAAc,OAAO;AAGzB,QAAI,iBAAiB,YAAY;AAWjC,aAAS,QAAQ,KAAK;AACpB,UAAI,OAAO,KAAK;AAChB,aAAO,eAAgB,KAAK,GAAG,MAAM,SAAa,eAAe,KAAK,MAAM,GAAG;AAAA,IACjF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,iBAAiB;AAYrB,aAAS,QAAQ,KAAK,OAAO;AAC3B,UAAI,OAAO,KAAK;AAChB,WAAK,QAAQ,KAAK,IAAI,GAAG,IAAI,IAAI;AACjC,WAAK,GAAG,IAAK,gBAAgB,UAAU,SAAa,iBAAiB;AACrE,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA,iCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,aAAa;AADjB,QAEI,UAAU;AAFd,QAGI,UAAU;AAHd,QAII,UAAU;AASd,aAAS,KAAK,SAAS;AACrB,UAAIC,SAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQA,MAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,SAAK,UAAU,QAAQ;AACvB,SAAK,UAAU,QAAQ,IAAI;AAC3B,SAAK,UAAU,MAAM;AACrB,SAAK,UAAU,MAAM;AACrB,SAAK,UAAU,MAAM;AAErB,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AAOA,aAAS,iBAAiB;AACxB,WAAK,WAAW,CAAC;AACjB,WAAK,OAAO;AAAA,IACd;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,KAAK;AAUT,aAAS,aAAa,OAAO,KAAK;AAChC,UAAI,SAAS,MAAM;AACnB,aAAO,UAAU;AACf,YAAI,GAAG,MAAM,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG;AAC7B,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA,4CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAGnB,QAAI,aAAa,MAAM;AAGvB,QAAI,SAAS,WAAW;AAWxB,aAAS,gBAAgB,KAAK;AAC5B,UAAI,OAAO,KAAK,UACZC,SAAQ,aAAa,MAAM,GAAG;AAElC,UAAIA,SAAQ,GAAG;AACb,eAAO;AAAA,MACT;AACA,UAAI,YAAY,KAAK,SAAS;AAC9B,UAAIA,UAAS,WAAW;AACtB,aAAK,IAAI;AAAA,MACX,OAAO;AACL,eAAO,KAAK,MAAMA,QAAO,CAAC;AAAA,MAC5B;AACA,QAAE,KAAK;AACP,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA,yCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAWnB,aAAS,aAAa,KAAK;AACzB,UAAI,OAAO,KAAK,UACZC,SAAQ,aAAa,MAAM,GAAG;AAElC,aAAOA,SAAQ,IAAI,SAAY,KAAKA,MAAK,EAAE,CAAC;AAAA,IAC9C;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA,yCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAWnB,aAAS,aAAa,KAAK;AACzB,aAAO,aAAa,KAAK,UAAU,GAAG,IAAI;AAAA,IAC5C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,eAAe;AAYnB,aAAS,aAAa,KAAK,OAAO;AAChC,UAAI,OAAO,KAAK,UACZC,SAAQ,aAAa,MAAM,GAAG;AAElC,UAAIA,SAAQ,GAAG;AACb,UAAE,KAAK;AACP,aAAK,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,MACxB,OAAO;AACL,aAAKA,MAAK,EAAE,CAAC,IAAI;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,iBAAiB;AAArB,QACI,kBAAkB;AADtB,QAEI,eAAe;AAFnB,QAGI,eAAe;AAHnB,QAII,eAAe;AASnB,aAAS,UAAU,SAAS;AAC1B,UAAIC,SAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQA,MAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,cAAU,UAAU,QAAQ;AAC5B,cAAU,UAAU,QAAQ,IAAI;AAChC,cAAU,UAAU,MAAM;AAC1B,cAAU,UAAU,MAAM;AAC1B,cAAU,UAAU,MAAM;AAE1B,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA,gCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,OAAM,UAAU,MAAM,KAAK;AAE/B,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACNjB;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,OAAO;AAAX,QACI,YAAY;AADhB,QAEIC,OAAM;AASV,aAAS,gBAAgB;AACvB,WAAK,OAAO;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ,IAAI;AAAA,QACZ,OAAO,KAAKA,QAAO;AAAA,QACnB,UAAU,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAOA,aAAS,UAAU,OAAO;AACxB,UAAI,OAAO,OAAO;AAClB,aAAQ,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YAAY,QAAQ,YACvE,UAAU,cACV,UAAU;AAAA,IACjB;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAUhB,aAAS,WAAWC,MAAK,KAAK;AAC5B,UAAI,OAAOA,KAAI;AACf,aAAO,UAAU,GAAG,IAChB,KAAK,OAAO,OAAO,WAAW,WAAW,MAAM,IAC/C,KAAK;AAAA,IACX;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,2CAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,eAAe,KAAK;AAC3B,UAAI,SAAS,WAAW,MAAM,GAAG,EAAE,QAAQ,EAAE,GAAG;AAChD,WAAK,QAAQ,SAAS,IAAI;AAC1B,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,YAAY,KAAK;AACxB,aAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,IACtC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAWjB,aAAS,YAAY,KAAK;AACxB,aAAO,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA,IACtC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAYjB,aAAS,YAAY,KAAK,OAAO;AAC/B,UAAI,OAAO,WAAW,MAAM,GAAG,GAC3B,OAAO,KAAK;AAEhB,WAAK,IAAI,KAAK,KAAK;AACnB,WAAK,QAAQ,KAAK,QAAQ,OAAO,IAAI;AACrC,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,gBAAgB;AAApB,QACI,iBAAiB;AADrB,QAEI,cAAc;AAFlB,QAGI,cAAc;AAHlB,QAII,cAAc;AASlB,aAAS,SAAS,SAAS;AACzB,UAAIC,SAAQ,IACR,SAAS,WAAW,OAAO,IAAI,QAAQ;AAE3C,WAAK,MAAM;AACX,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,QAAQ,QAAQA,MAAK;AACzB,aAAK,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,aAAS,UAAU,QAAQ;AAC3B,aAAS,UAAU,QAAQ,IAAI;AAC/B,aAAS,UAAU,MAAM;AACzB,aAAS,UAAU,MAAM;AACzB,aAAS,UAAU,MAAM;AAEzB,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA,wCAAAE,UAAAC,SAAA;AAAA;AACA,QAAI,iBAAiB;AAYrB,aAAS,YAAY,OAAO;AAC1B,WAAK,SAAS,IAAI,OAAO,cAAc;AACvC,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AASA,aAAS,YAAY,OAAO;AAC1B,aAAO,KAAK,SAAS,IAAI,KAAK;AAAA,IAChC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACbjB;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,cAAc;AADlB,QAEI,cAAc;AAUlB,aAAS,SAAS,QAAQ;AACxB,UAAIC,SAAQ,IACR,SAAS,UAAU,OAAO,IAAI,OAAO;AAEzC,WAAK,WAAW,IAAI;AACpB,aAAO,EAAEA,SAAQ,QAAQ;AACvB,aAAK,IAAI,OAAOA,MAAK,CAAC;AAAA,MACxB;AAAA,IACF;AAGA,aAAS,UAAU,MAAM,SAAS,UAAU,OAAO;AACnD,aAAS,UAAU,MAAM;AAEzB,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA,0CAAAE,UAAAC,SAAA;AAAA;AAWA,aAAS,cAAc,OAAO,WAAW,WAAW,WAAW;AAC7D,UAAI,SAAS,MAAM,QACfC,SAAQ,aAAa,YAAY,IAAI;AAEzC,aAAQ,YAAYA,WAAU,EAAEA,SAAQ,QAAS;AAC/C,YAAI,UAAU,MAAMA,MAAK,GAAGA,QAAO,KAAK,GAAG;AACzC,iBAAOA;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACvBjB;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAOA,aAAS,UAAU,OAAO;AACxB,aAAO,UAAU;AAAA,IACnB;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACXjB;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAUA,aAAS,cAAc,OAAO,OAAO,WAAW;AAC9C,UAAIC,SAAQ,YAAY,GACpB,SAAS,MAAM;AAEnB,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,MAAMA,MAAK,MAAM,OAAO;AAC1B,iBAAOA;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACtBjB;AAAA,wCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,gBAAgB;AAApB,QACI,YAAY;AADhB,QAEI,gBAAgB;AAWpB,aAAS,YAAY,OAAO,OAAO,WAAW;AAC5C,aAAO,UAAU,QACb,cAAc,OAAO,OAAO,SAAS,IACrC,cAAc,OAAO,WAAW,SAAS;AAAA,IAC/C;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,0CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc;AAWlB,aAAS,cAAc,OAAO,OAAO;AACnC,UAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,aAAO,CAAC,CAAC,UAAU,YAAY,OAAO,OAAO,CAAC,IAAI;AAAA,IACpD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AASA,aAAS,kBAAkB,OAAO,OAAO,YAAY;AACnD,UAAIC,SAAQ,IACR,SAAS,SAAS,OAAO,IAAI,MAAM;AAEvC,aAAO,EAAEA,SAAQ,QAAQ;AACvB,YAAI,WAAW,OAAO,MAAMA,MAAK,CAAC,GAAG;AACnC,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACrBjB;AAAA,qCAAAE,UAAAC,SAAA;AAAA;AASA,aAAS,SAAS,OAAO,UAAU;AACjC,UAAIC,SAAQ,IACR,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,SAAS,MAAM,MAAM;AAEzB,aAAO,EAAEA,SAAQ,QAAQ;AACvB,eAAOA,MAAK,IAAI,SAAS,MAAMA,MAAK,GAAGA,QAAO,KAAK;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA,qCAAAE,UAAAC,SAAA;AAAA;AAQA,aAAS,SAAS,OAAO,KAAK;AAC5B,aAAO,MAAM,IAAI,GAAG;AAAA,IACtB;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,gBAAgB;AADpB,QAEI,oBAAoB;AAFxB,QAGI,WAAW;AAHf,QAII,YAAY;AAJhB,QAKI,WAAW;AAGf,QAAI,mBAAmB;AAavB,aAAS,eAAe,OAAO,QAAQ,UAAU,YAAY;AAC3D,UAAIC,SAAQ,IACR,WAAW,eACX,WAAW,MACX,SAAS,MAAM,QACf,SAAS,CAAC,GACV,eAAe,OAAO;AAE1B,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,MACT;AACA,UAAI,UAAU;AACZ,iBAAS,SAAS,QAAQ,UAAU,QAAQ,CAAC;AAAA,MAC/C;AACA,UAAI,YAAY;AACd,mBAAW;AACX,mBAAW;AAAA,MACb,WACS,OAAO,UAAU,kBAAkB;AAC1C,mBAAW;AACX,mBAAW;AACX,iBAAS,IAAI,SAAS,MAAM;AAAA,MAC9B;AACA;AACA,eAAO,EAAEA,SAAQ,QAAQ;AACvB,cAAI,QAAQ,MAAMA,MAAK,GACnB,WAAW,YAAY,OAAO,QAAQ,SAAS,KAAK;AAExD,kBAAS,cAAc,UAAU,IAAK,QAAQ;AAC9C,cAAI,YAAY,aAAa,UAAU;AACrC,gBAAI,cAAc;AAClB,mBAAO,eAAe;AACpB,kBAAI,OAAO,WAAW,MAAM,UAAU;AACpC,yBAAS;AAAA,cACX;AAAA,YACF;AACA,mBAAO,KAAK,KAAK;AAAA,UACnB,WACS,CAAC,SAAS,QAAQ,UAAU,UAAU,GAAG;AAChD,mBAAO,KAAK,KAAK;AAAA,UACnB;AAAA,QACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClEjB;AAAA,6CAAAE,UAAAC,SAAA;AAAA;AAAA,QAAIC,eAAc;AAAlB,QACI,eAAe;AA2BnB,aAAS,kBAAkB,OAAO;AAChC,aAAO,aAAa,KAAK,KAAKA,aAAY,KAAK;AAAA,IACjD;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,iBAAiB;AAArB,QACI,cAAc;AADlB,QAEI,WAAW;AAFf,QAGI,oBAAoB;AAuBxB,QAAI,aAAa,SAAS,SAAS,OAAO,QAAQ;AAChD,aAAO,kBAAkB,KAAK,IAC1B,eAAe,OAAO,YAAY,QAAQ,GAAG,mBAAmB,IAAI,CAAC,IACrE,CAAC;AAAA,IACP,CAAC;AAED,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA,gCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AAAhB,QACI,OAAO;AAGX,QAAIC,OAAM,UAAU,MAAM,KAAK;AAE/B,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACNjB;AAAA,gCAAAC,UAAAC,SAAA;AAAA;AAYA,aAASC,QAAO;AAAA,IAEhB;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AChBjB;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAOA,aAAS,WAAW,KAAK;AACvB,UAAIC,SAAQ,IACR,SAAS,MAAM,IAAI,IAAI;AAE3B,UAAI,QAAQ,SAAS,OAAO;AAC1B,eAAO,EAAEA,MAAK,IAAI;AAAA,MACpB,CAAC;AACD,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAIC,OAAM;AAAV,QACIC,QAAO;AADX,QAEI,aAAa;AAGjB,QAAI,WAAW,IAAI;AASnB,QAAI,YAAY,EAAED,QAAQ,IAAI,WAAW,IAAIA,KAAI,CAAC,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAM,YAAYC,QAAO,SAAS,QAAQ;AAClG,aAAO,IAAID,KAAI,MAAM;AAAA,IACvB;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClBjB;AAAA,qCAAAG,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAAf,QACI,gBAAgB;AADpB,QAEI,oBAAoB;AAFxB,QAGI,WAAW;AAHf,QAII,YAAY;AAJhB,QAKI,aAAa;AAGjB,QAAI,mBAAmB;AAWvB,aAAS,SAAS,OAAO,UAAU,YAAY;AAC7C,UAAIC,SAAQ,IACR,WAAW,eACX,SAAS,MAAM,QACf,WAAW,MACX,SAAS,CAAC,GACV,OAAO;AAEX,UAAI,YAAY;AACd,mBAAW;AACX,mBAAW;AAAA,MACb,WACS,UAAU,kBAAkB;AACnC,YAAI,MAAM,WAAW,OAAO,UAAU,KAAK;AAC3C,YAAI,KAAK;AACP,iBAAO,WAAW,GAAG;AAAA,QACvB;AACA,mBAAW;AACX,mBAAW;AACX,eAAO,IAAI;AAAA,MACb,OACK;AACH,eAAO,WAAW,CAAC,IAAI;AAAA,MACzB;AACA;AACA,eAAO,EAAEA,SAAQ,QAAQ;AACvB,cAAI,QAAQ,MAAMA,MAAK,GACnB,WAAW,WAAW,SAAS,KAAK,IAAI;AAE5C,kBAAS,cAAc,UAAU,IAAK,QAAQ;AAC9C,cAAI,YAAY,aAAa,UAAU;AACrC,gBAAI,YAAY,KAAK;AACrB,mBAAO,aAAa;AAClB,kBAAI,KAAK,SAAS,MAAM,UAAU;AAChC,yBAAS;AAAA,cACX;AAAA,YACF;AACA,gBAAI,UAAU;AACZ,mBAAK,KAAK,QAAQ;AAAA,YACpB;AACA,mBAAO,KAAK,KAAK;AAAA,UACnB,WACS,CAAC,SAAS,MAAM,UAAU,UAAU,GAAG;AAC9C,gBAAI,SAAS,QAAQ;AACnB,mBAAK,KAAK,QAAQ;AAAA,YACpB;AACA,mBAAO,KAAK,KAAK;AAAA,UACnB;AAAA,QACF;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACvEjB;AAAA,iCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc;AAAlB,QACI,WAAW;AADf,QAEI,WAAW;AAFf,QAGI,oBAAoB;AAkBxB,QAAI,QAAQ,SAAS,SAAS,QAAQ;AACpC,aAAO,SAAS,YAAY,QAAQ,GAAG,mBAAmB,IAAI,CAAC;AAAA,IACjE,CAAC;AAED,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAQA,aAAS,QAAQ,MAAMC,YAAW;AAChC,aAAO,SAAS,KAAK;AACnB,eAAO,KAAKA,WAAU,GAAG,CAAC;AAAA,MAC5B;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACdjB;AAAA,yCAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU;AAGd,QAAI,eAAe,QAAQ,OAAO,gBAAgB,MAAM;AAExD,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,aAAa;AAAjB,QACI,eAAe;AADnB,QAEI,eAAe;AAGnB,QAAI,YAAY;AAGhB,QAAI,YAAY,SAAS;AAAzB,QACI,cAAc,OAAO;AAGzB,QAAI,eAAe,UAAU;AAG7B,QAAI,iBAAiB,YAAY;AAGjC,QAAI,mBAAmB,aAAa,KAAK,MAAM;AA8B/C,aAASC,eAAc,OAAO;AAC5B,UAAI,CAAC,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW;AAC1D,eAAO;AAAA,MACT;AACA,UAAI,QAAQ,aAAa,KAAK;AAC9B,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,eAAe,KAAK,OAAO,aAAa,KAAK,MAAM;AAC9D,aAAO,OAAO,QAAQ,cAAc,gBAAgB,QAClD,aAAa,KAAK,IAAI,KAAK;AAAA,IAC/B;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;;;;;;AC7DjB,QAAM,qBAAqB,OAAO;AAC3B,QAAM,qBAA6C,CACxD,YAC6B;AAC7B,UAAI,OAAO,YAAY,UAAU;AAC/B,cAAM,IAAI,UAAU,iBAAiB;MACvC;AAEA,UAAI,QAAQ,SAAS,oBAAoB;AACvC,cAAM,IAAI,UAAU,qBAAqB;MAC3C;IACF;AAVa,IAAAC,SAAA,qBAAkB;;;;;;;;;;ACG/B,QAAM,eAAsE;MAC1E,aAAa,CAAC,wBAAwB,IAAI;MAC1C,aAAa,CAAC,iBAAiB,IAAI;MACnC,aAAa,CAAC,eAAyB,KAAK;MAC5C,aAAa,CAAC,cAAc,IAAI;MAChC,aAAa,CAAC,WAAW,IAAI;MAC7B,aAAa,CAAC,WAAW,IAAI;MAC7B,aAAa,CAAC,gBAAgB,MAAM,IAAI;MACxC,aAAa,CAAC,WAAW,IAAI;MAC7B,aAAa,CAAC,UAAU,IAAI;MAC5B,aAAa,CAAC,UAAU,IAAI;MAC5B,aAAa,CAAC,yBAAyB,IAAI;MAC3C,aAAa,CAAC,WAAW,IAAI;MAC7B,YAAY,CAAC,+BAA+B,IAAI;MAChD,cAAc,CAAC,aAAa,KAAK;;AAKnC,QAAM,cAAc,CAAC,MAAc,EAAE,QAAQ,aAAa,MAAM;AAEhE,QAAM,eAAe,CAAC,MACpB,EAAE,QAAQ,4BAA4B,MAAM;AAG9C,QAAM,iBAAiB,CAAC,WAA6B,OAAO,KAAK,EAAE;AAe5D,QAAM,aAAa,CACxB,MACA,aACoB;AACpB,YAAM,MAAM;AAEZ,UAAI,KAAK,OAAO,GAAG,MAAM,KAAK;AAC5B,cAAM,IAAI,MAAM,2BAA2B;MAC7C;AAEA,YAAM,SAAmB,CAAA;AACzB,YAAM,OAAiB,CAAA;AAEvB,UAAIC,KAAI,MAAM;AACd,UAAI,WAAW;AACf,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI,SAAS;AACb,UAAI,SAAS;AACb,UAAI,aAAa;AACjB,YAAO,QAAOA,KAAI,KAAK,QAAQ;AAC7B,cAAMC,KAAI,KAAK,OAAOD,EAAC;AACvB,aAAKC,OAAM,OAAOA,OAAM,QAAQD,OAAM,MAAM,GAAG;AAC7C,mBAAS;AACT,UAAAA;AACA;QACF;AAEA,YAAIC,OAAM,OAAO,YAAY,CAAC,UAAU;AACtC,mBAASD,KAAI;AACb;QACF;AAEA,mBAAW;AACX,YAAIC,OAAM,MAAM;AACd,cAAI,CAAC,UAAU;AACb,uBAAW;AACX,YAAAD;AACA;UACF;QAEF;AACA,YAAIC,OAAM,OAAO,CAAC,UAAU;AAE1B,qBAAW,CAAC,KAAK,CAAC,MAAMC,IAAG,GAAG,CAAC,KAAK,OAAO,QAAQ,YAAY,GAAG;AAChE,gBAAI,KAAK,WAAW,KAAKF,EAAC,GAAG;AAE3B,kBAAI,YAAY;AACd,uBAAO,CAAC,MAAM,OAAO,KAAK,SAAS,KAAK,IAAI;cAC9C;AACA,cAAAA,MAAK,IAAI;AACT,kBAAI;AAAK,qBAAK,KAAK,IAAI;;AAClB,uBAAO,KAAK,IAAI;AACrB,sBAAQ,SAASE;AACjB,uBAAS;YACX;UACF;QACF;AAGA,mBAAW;AACX,YAAI,YAAY;AAGd,cAAID,KAAI,YAAY;AAClB,mBAAO,KAAK,YAAY,UAAU,IAAI,MAAM,YAAYA,EAAC,CAAC;UAC5D,WAAWA,OAAM,YAAY;AAC3B,mBAAO,KAAK,YAAYA,EAAC,CAAC;UAC5B;AACA,uBAAa;AACb,UAAAD;AACA;QACF;AAIA,YAAI,KAAK,WAAW,MAAMA,KAAI,CAAC,GAAG;AAChC,iBAAO,KAAK,YAAYC,KAAI,GAAG,CAAC;AAChC,UAAAD,MAAK;AACL;QACF;AACA,YAAI,KAAK,WAAW,KAAKA,KAAI,CAAC,GAAG;AAC/B,uBAAaC;AACb,UAAAD,MAAK;AACL;QACF;AAGA,eAAO,KAAK,YAAYC,EAAC,CAAC;AAC1B,QAAAD;MACF;AAEA,UAAI,SAASA,IAAG;AAGd,eAAO,CAAC,IAAI,OAAO,GAAG,KAAK;MAC7B;AAIA,UAAI,CAAC,OAAO,UAAU,CAAC,KAAK,QAAQ;AAClC,eAAO,CAAC,MAAM,OAAO,KAAK,SAAS,KAAK,IAAI;MAC9C;AAMA,UACE,KAAK,WAAW,KAChB,OAAO,WAAW,KAClB,SAAS,KAAK,OAAO,CAAC,CAAC,KACvB,CAAC,QACD;AACA,cAAM,IAAI,OAAO,CAAC,EAAE,WAAW,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC;AACjE,eAAO,CAAC,aAAa,CAAC,GAAG,OAAO,SAAS,KAAK,KAAK;MACrD;AAEA,YAAM,UAAU,OAAO,SAAS,MAAM,MAAM,eAAe,MAAM,IAAI;AACrE,YAAM,QAAQ,OAAO,SAAS,KAAK,OAAO,eAAe,IAAI,IAAI;AACjE,YAAM,OACJ,OAAO,UAAU,KAAK,SAClB,MAAM,UAAU,MAAM,QAAQ,MAC9B,OAAO,SACP,UACA;AAEN,aAAO,CAAC,MAAM,OAAO,SAAS,KAAK,IAAI;IACzC;AAhIa,IAAAG,SAAA,aAAU;;;;;;;;;;AC7BhB,QAAM,WAAW,CACtB,GACA,EACE,uBAAuB,MAAK,IACsB,CAAA,MAClD;AACF,aAAO,uBACH,EAAE,QAAQ,kBAAkB,IAAI,IAChC,EAAE,QAAQ,6BAA6B,MAAM,EAAE,QAAQ,cAAc,IAAI;IAC/E;AATa,IAAAC,SAAA,WAAQ;;;;;;;;;;;ACbrB,QAAA,yBAAA;AAEA,QAAA,gBAAA;AAwCA,QAAM,QAAQ,oBAAI,IAAiB,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAC5D,QAAM,gBAAgB,CAACC,OACrB,MAAM,IAAIA,EAAgB;AAC5B,QAAM,eAAe,CAACA,OACpB,cAAcA,GAAE,IAAI;AAEtB,QAAM,cAAc,oBAAI,IAAgC;MACtD,CAAC,KAAK,CAAC,GAAG,CAAC;MACX,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;MAChB,CAAC,KAAK,CAAC,GAAG,CAAC;MACX,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;MAC1B,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;KACjB;AAED,QAAM,uBAAuB,oBAAI,IAAgC;MAC/D,CAAC,KAAK,CAAC,GAAG,CAAC;MACX,CAAC,KAAK,CAAC,GAAG,CAAC;MACX,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;KACjB;AAED,QAAM,iBAAiB,oBAAI,IAAgC;MACzD,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;MAChB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;MAChB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;MAChB,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;MAC1B,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;KAC3B;AAED,QAAM,WAAW,oBAAI,IAA8D;MACjF,CAAC,KAAK,oBAAI,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;MAC3B,CAAC,KAAK,oBAAI,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;MACvC,CAAC,KAAK,oBAAI,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;MAC3E,CAAC,KAAK,oBAAI,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;KACxC;AAMD,QAAM,mBAAmB;AACzB,QAAM,aAAa;AAKnB,QAAM,kBAAkB,oBAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAE1C,QAAM,WAAW,oBAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACpC,QAAM,aAAa,IAAI,IAAI,iBAAiB;AAC5C,QAAM,eAAe,CAAC,MACpB,EAAE,QAAQ,4BAA4B,MAAM;AAG9C,QAAM,QAAQ;AAGd,QAAM,OAAO,QAAQ;AAGrB,QAAM,cAAc,QAAQ;AAK5B,QAAa,MAAb,MAAgB;MACd;MACS;MAET;MACA,SAAkB;MAClB,SAA2B,CAAA;MAC3B;MACA;MACA;MACA,cAAuB;MACvB;MACA;;;MAGA,YAAqB;MAErB,YACE,MACAC,SACA,UAA4B,CAAA,GAAE;AAE9B,aAAK,OAAO;AAEZ,YAAI;AAAM,eAAK,YAAY;AAC3B,aAAK,UAAUA;AACf,aAAK,QAAQ,KAAK,UAAU,KAAK,QAAQ,QAAQ;AACjD,aAAK,WAAW,KAAK,UAAU,OAAO,UAAU,KAAK,MAAM;AAC3D,aAAK,QAAQ,KAAK,UAAU,OAAO,CAAA,IAAK,KAAK,MAAM;AACnD,YAAI,SAAS,OAAO,CAAC,KAAK,MAAM;AAAa,eAAK,MAAM,KAAK,IAAI;AACjE,aAAK,eAAe,KAAK,UAAU,KAAK,QAAQ,OAAO,SAAS;MAClE;MAEA,IAAI,WAAQ;AAEV,YAAI,KAAK,cAAc;AAAW,iBAAO,KAAK;AAE9C,mBAAW,KAAK,KAAK,QAAQ;AAC3B,cAAI,OAAO,MAAM;AAAU;AAC3B,cAAI,EAAE,QAAQ,EAAE;AAAU,mBAAQ,KAAK,YAAY;QACrD;AAEA,eAAO,KAAK;MACd;;MAGA,WAAQ;AACN,YAAI,KAAK,cAAc;AAAW,iBAAO,KAAK;AAC9C,YAAI,CAAC,KAAK,MAAM;AACd,iBAAQ,KAAK,YAAY,KAAK,OAAO,IAAI,OAAK,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE;QAClE,OAAO;AACL,iBAAQ,KAAK,YACX,KAAK,OAAO,MAAM,KAAK,OAAO,IAAI,OAAK,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;QAClE;MACF;MAEA,YAAS;AAEP,YAAI,SAAS,KAAK;AAAO,gBAAM,IAAI,MAAM,0BAA0B;AACnE,YAAI,KAAK;AAAa,iBAAO;AAI7B,aAAK,SAAQ;AACb,aAAK,cAAc;AACnB,YAAIC;AACJ,eAAQA,KAAI,KAAK,MAAM,IAAG,GAAK;AAC7B,cAAIA,GAAE,SAAS;AAAK;AAEpB,cAAI,IAAqBA;AACzB,cAAI,KAAK,EAAE;AACX,iBAAO,IAAI;AACT,qBACMC,KAAI,EAAE,eAAe,GACzB,CAAC,GAAG,QAAQA,KAAI,GAAG,OAAO,QAC1BA,MACA;AACA,yBAAW,QAAQD,GAAE,QAAQ;AAE3B,oBAAI,OAAO,SAAS,UAAU;AAC5B,wBAAM,IAAI,MAAM,8BAA8B;gBAChD;AAEA,qBAAK,OAAO,GAAG,OAAOC,EAAC,CAAC;cAC1B;YACF;AACA,gBAAI;AACJ,iBAAK,EAAE;UACT;QACF;AACA,eAAO;MACT;MAEA,QAAQ,OAAuB;AAC7B,mBAAW,KAAK,OAAO;AACrB,cAAI,MAAM;AAAI;AAEd,cAAI,OAAO,MAAM,YAAY,EAAE,aAAa,MAAO,EAAE,YAAY,OAAO;AACtE,kBAAM,IAAI,MAAM,mBAAmB,CAAC;UACtC;AAEA,eAAK,OAAO,KAAK,CAAC;QACpB;MACF;MAEA,SAAM;AACJ,cAAM,MACJ,KAAK,SAAS,OACV,KAAK,OAAO,MAAK,EAAG,IAAI,OAAM,OAAO,MAAM,WAAW,IAAI,EAAE,OAAM,CAAG,IACrE,CAAC,KAAK,MAAM,GAAG,KAAK,OAAO,IAAI,OAAM,EAAU,OAAM,CAAE,CAAC;AAC9D,YAAI,KAAK,QAAO,KAAM,CAAC,KAAK;AAAM,cAAI,QAAQ,CAAA,CAAE;AAChD,YACE,KAAK,MAAK,MACT,SAAS,KAAK,SACZ,KAAK,MAAM,eAAe,KAAK,SAAS,SAAS,MACpD;AACA,cAAI,KAAK,CAAA,CAAE;QACb;AACA,eAAO;MACT;MAEA,UAAO;AACL,YAAI,KAAK,UAAU;AAAM,iBAAO;AAEhC,YAAI,CAAC,KAAK,SAAS,QAAO;AAAI,iBAAO;AACrC,YAAI,KAAK,iBAAiB;AAAG,iBAAO;AAEpC,cAAM,IAAI,KAAK;AACf,iBAASA,KAAI,GAAGA,KAAI,KAAK,cAAcA,MAAK;AAC1C,gBAAM,KAAK,EAAE,OAAOA,EAAC;AACrB,cAAI,EAAE,cAAc,MAAO,GAAG,SAAS,MAAM;AAC3C,mBAAO;UACT;QACF;AACA,eAAO;MACT;MAEA,QAAK;AACH,YAAI,KAAK,UAAU;AAAM,iBAAO;AAChC,YAAI,KAAK,SAAS,SAAS;AAAK,iBAAO;AACvC,YAAI,CAAC,KAAK,SAAS,MAAK;AAAI,iBAAO;AACnC,YAAI,CAAC,KAAK;AAAM,iBAAO,KAAK,SAAS,MAAK;AAG1C,cAAM,KAAK,KAAK,UAAU,KAAK,QAAQ,OAAO,SAAS;AAEvD,eAAO,KAAK,iBAAiB,KAAK;MACpC;MAEA,OAAO,MAAkB;AACvB,YAAI,OAAO,SAAS;AAAU,eAAK,KAAK,IAAI;;AACvC,eAAK,KAAK,KAAK,MAAM,IAAI,CAAC;MACjC;MAEA,MAAMF,SAAW;AACf,cAAMD,KAAI,IAAI,GAAI,KAAK,MAAMC,OAAM;AACnC,mBAAW,KAAK,KAAK,QAAQ;AAC3B,UAAAD,GAAE,OAAO,CAAC;QACZ;AACA,eAAOA;MACT;MAEA,OAAO,UACL,KACA,KACA,KACA,KACA,UAAgB;AAEhB,cAAM,WAAW,IAAI,uBAAuB;AAC5C,YAAI,WAAW;AACf,YAAI,UAAU;AACd,YAAI,aAAa;AACjB,YAAI,WAAW;AACf,YAAI,IAAI,SAAS,MAAM;AAErB,cAAIG,KAAI;AACR,cAAIC,OAAM;AACV,iBAAOD,KAAI,IAAI,QAAQ;AACrB,kBAAMH,KAAI,IAAI,OAAOG,IAAG;AAGxB,gBAAI,YAAYH,OAAM,MAAM;AAC1B,yBAAW,CAAC;AACZ,cAAAI,QAAOJ;AACP;YACF;AAEA,gBAAI,SAAS;AACX,kBAAIG,OAAM,aAAa,GAAG;AACxB,oBAAIH,OAAM,OAAOA,OAAM,KAAK;AAC1B,6BAAW;gBACb;cACF,WAAWA,OAAM,OAAO,EAAEG,OAAM,aAAa,KAAK,WAAW;AAC3D,0BAAU;cACZ;AACA,cAAAC,QAAOJ;AACP;YACF,WAAWA,OAAM,KAAK;AACpB,wBAAU;AACV,2BAAaG;AACb,yBAAW;AACX,cAAAC,QAAOJ;AACP;YACF;AAEA,kBAAM,YACJ,CAAC,IAAI,SACL,cAAcA,EAAC,KACf,IAAI,OAAOG,EAAC,MAAM,OAClB,YAAY;AACd,gBAAI,WAAW;AACb,kBAAI,KAAKC,IAAG;AACZ,cAAAA,OAAM;AACN,oBAAM,MAAM,IAAI,GAAIJ,IAAG,GAAG;AAC1B,cAAAG,KAAI,GAAI,UAAU,KAAK,KAAKA,IAAG,KAAK,WAAW,CAAC;AAChD,kBAAI,KAAK,GAAG;AACZ;YACF;AACA,YAAAC,QAAOJ;UACT;AACA,cAAI,KAAKI,IAAG;AACZ,iBAAOD;QACT;AAIA,YAAIA,KAAI,MAAM;AACd,YAAI,OAAO,IAAI,GAAI,MAAM,GAAG;AAC5B,cAAM,QAAe,CAAA;AACrB,YAAI,MAAM;AACV,eAAOA,KAAI,IAAI,QAAQ;AACrB,gBAAMH,KAAI,IAAI,OAAOG,IAAG;AAGxB,cAAI,YAAYH,OAAM,MAAM;AAC1B,uBAAW,CAAC;AACZ,mBAAOA;AACP;UACF;AAEA,cAAI,SAAS;AACX,gBAAIG,OAAM,aAAa,GAAG;AACxB,kBAAIH,OAAM,OAAOA,OAAM,KAAK;AAC1B,2BAAW;cACb;YACF,WAAWA,OAAM,OAAO,EAAEG,OAAM,aAAa,KAAK,WAAW;AAC3D,wBAAU;YACZ;AACA,mBAAOH;AACP;UACF,WAAWA,OAAM,KAAK;AACpB,sBAAU;AACV,yBAAaG;AACb,uBAAW;AACX,mBAAOH;AACP;UACF;AAEA,gBAAM,YACJ,cAAcA,EAAC,KACf,IAAI,OAAOG,EAAC,MAAM;WAEjB,YAAY,YAAa,OAAO,IAAI,cAAcH,EAAC;AAEtD,cAAI,WAAW;AACb,kBAAM,WAAW,OAAO,IAAI,cAAcA,EAAC,IAAI,IAAI;AACnD,iBAAK,KAAK,GAAG;AACb,kBAAM;AACN,kBAAM,MAAM,IAAI,GAAIA,IAAG,IAAI;AAC3B,iBAAK,KAAK,GAAG;AACb,YAAAG,KAAI,GAAI,UAAU,KAAK,KAAKA,IAAG,KAAK,WAAW,QAAQ;AACvD;UACF;AACA,cAAIH,OAAM,KAAK;AACb,iBAAK,KAAK,GAAG;AACb,kBAAM;AACN,kBAAM,KAAK,IAAI;AACf,mBAAO,IAAI,GAAI,MAAM,GAAG;AACxB;UACF;AACA,cAAIA,OAAM,KAAK;AACb,gBAAI,QAAQ,MAAM,IAAI,OAAO,WAAW,GAAG;AACzC,kBAAI,YAAY;YAClB;AACA,iBAAK,KAAK,GAAG;AACb,kBAAM;AACN,gBAAI,KAAK,GAAG,OAAO,IAAI;AACvB,mBAAOG;UACT;AACA,iBAAOH;QACT;AAKA,YAAI,OAAO;AACX,YAAI,YAAY;AAChB,YAAI,SAAS,CAAC,IAAI,UAAU,MAAM,CAAC,CAAC;AACpC,eAAOG;MACT;MAEA,mBAAmB,OAAoB;AAIrC,eAAO,KAAK,UAAU,OAAO,oBAAoB;MACnD;MAEA,UACE,OACAE,OAAuC,aAAW;AAKlD,YACE,CAAC,SACD,OAAO,UAAU,YACjB,MAAM,SAAS,QACf,MAAM,OAAO,WAAW,KACxB,KAAK,SAAS,MACd;AACA,iBAAO;QACT;AACA,cAAM,KAAK,MAAM,OAAO,CAAC;AACzB,YAAI,CAAC,MAAM,OAAO,OAAO,YAAY,GAAG,SAAS,MAAM;AACrD,iBAAO;QACT;AACA,eAAQ,KAAqC,cAC3C,GAAG,MACHA,IAAG;MAEP;MAEA,cACEL,IACAK,OAAuC,gBAAc;AAErD,eAAO,CAAC,CAACA,KAAI,IAAI,KAAK,IAAmB,GAAG,SAASL,EAAgB;MACvE;MAEA,gBAEE,OACAM,QAAa;AAEb,cAAM,KAAK,MAAM,OAAO,CAAC;AACzB,cAAM,QAAQ,IAAI,GAAI,MAAM,IAAI,KAAK,OAAO;AAC5C,cAAM,OAAO,KAAK,EAAE;AACpB,WAAG,KAAK,KAAK;AACb,aAAK,OAAO,OAAOA,MAAK;MAC1B;MAEA,OAAO,OAA6BA,QAAa;AAC/C,cAAM,KAAK,MAAM,OAAO,CAAC;AACzB,aAAK,OAAO,OAAOA,QAAO,GAAG,GAAG,GAAG,MAAM;AACzC,mBAAW,KAAK,GAAG,QAAQ;AACzB,cAAI,OAAO,MAAM;AAAU,cAAE,UAAU;QACzC;AACA,aAAK,YAAY;MACnB;MAEA,cAAcN,IAAS;AACrB,cAAM,IAAI,SAAS,IAAI,KAAK,IAAmB;AAC/C,eAAO,CAAC,CAAE,GAAG,IAAIA,EAAgB;MACnC;MAEA,UAAU,OAAoB;AAI5B,YACE,CAAC,SACD,OAAO,UAAU,YACjB,MAAM,SAAS,QACf,MAAM,OAAO,WAAW,KACxB,KAAK,SAAS,QACd,KAAK,OAAO,WAAW,GACvB;AACA,iBAAO;QACT;AACA,cAAM,KAAK,MAAM,OAAO,CAAC;AACzB,YAAI,CAAC,MAAM,OAAO,OAAO,YAAY,GAAG,SAAS,MAAM;AACrD,iBAAO;QACT;AACA,eAAQ,KAAqC,cAAc,GAAG,IAAI;MACpE;MAEA,OAA0C,OAA2B;AACnE,cAAM,IAAI,SAAS,IAAI,KAAK,IAAmB;AAC/C,cAAM,KAAK,MAAM,OAAO,CAAC;AACzB,cAAM,KAAK,GAAG,IAAI,GAAG,IAAI;AAEzB,YAAI,CAAC;AAAI,iBAAO;AAEhB,aAAK,SAAS,GAAG;AACjB,mBAAW,KAAK,KAAK,QAAQ;AAC3B,cAAI,OAAO,MAAM;AAAU,cAAE,UAAU;QACzC;AACA,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,YAAY;MACnB;MAEA,WAAQ;AACN,YAAI,CAAC,aAAa,IAAI,GAAG;AACvB,qBAAW,KAAK,KAAK,QAAQ;AAC3B,gBAAI,OAAO,MAAM;AAAU,gBAAE,SAAQ;UACvC;QACF,OAAO;AACL,cAAI,aAAa;AACjB,cAAI,OAAO;AACX,aAAG;AACD,mBAAO;AACP,qBAASG,KAAI,GAAGA,KAAI,KAAK,OAAO,QAAQA,MAAK;AAC3C,oBAAMH,KAAI,KAAK,OAAOG,EAAC;AACvB,kBAAI,OAAOH,OAAM,UAAU;AACzB,gBAAAA,GAAE,SAAQ;AACV,oBAAI,KAAK,UAAUA,EAAC,GAAG;AACrB,yBAAO;AACP,uBAAK,OAAOA,IAAGG,EAAC;gBAClB,WAAW,KAAK,mBAAmBH,EAAC,GAAG;AACrC,yBAAO;AACP,uBAAK,gBAAgBA,IAAGG,EAAC;gBAC3B,WAAW,KAAK,UAAUH,EAAC,GAAG;AAC5B,yBAAO;AACP,uBAAK,OAAOA,EAAC;gBACf;cACF;YACF;UACF,SAAS,CAAC,QAAQ,EAAE,aAAa;QACnC;AACA,aAAK,YAAY;MACnB;MAEA,OAAO,SAAS,SAAiB,UAA4B,CAAA,GAAE;AAC7D,cAAM,MAAM,IAAI,GAAI,MAAM,QAAW,OAAO;AAC5C,WAAI,UAAU,SAAS,KAAK,GAAG,SAAS,CAAC;AACzC,eAAO;MACT;;;MAIA,cAAW;AAGT,YAAI,SAAS,KAAK;AAAO,iBAAO,KAAK,MAAM,YAAW;AAEtD,cAAM,OAAO,KAAK,SAAQ;AAC1B,cAAM,CAAC,IAAI,MAAM,UAAU,KAAK,IAAI,KAAK,eAAc;AAIvD,cAAM,WACJ,YACA,KAAK,aACJ,KAAK,SAAS,UACb,CAAC,KAAK,SAAS,mBACf,KAAK,YAAW,MAAO,KAAK,YAAW;AAC3C,YAAI,CAAC,UAAU;AACb,iBAAO;QACT;AAEA,cAAM,SAAS,KAAK,SAAS,SAAS,MAAM,OAAO,QAAQ,MAAM;AACjE,eAAO,OAAO,OAAO,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,GAAG;UACjD,MAAM;UACN,OAAO;SACR;MACH;MAEA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEA,eACE,UAAkB;AAElB,cAAM,MAAM,YAAY,CAAC,CAAC,KAAK,SAAS;AACxC,YAAI,KAAK,UAAU,MAAM;AACvB,eAAK,SAAQ;AACb,eAAK,UAAS;QAChB;AACA,YAAI,CAAC,aAAa,IAAI,GAAG;AACvB,gBAAM,UAAU,KAAK,QAAO,KAAM,KAAK,MAAK;AAC5C,gBAAM,MAAM,KAAK,OACd,IAAI,OAAI;AACP,kBAAM,CAAC,IAAIO,IAAG,UAAU,KAAK,IAC3B,OAAO,MAAM,WACT,GAAI,WAAW,GAAG,KAAK,WAAW,OAAO,IACzC,EAAE,eAAe,QAAQ;AAC/B,iBAAK,YAAY,KAAK,aAAa;AACnC,iBAAK,SAAS,KAAK,UAAU;AAC7B,mBAAO;UACT,CAAC,EACA,KAAK,EAAE;AAEV,cAAIC,SAAQ;AACZ,cAAI,KAAK,QAAO,GAAI;AAClB,gBAAI,OAAO,KAAK,OAAO,CAAC,MAAM,UAAU;AAMtC,oBAAM,iBACJ,KAAK,OAAO,WAAW,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,CAAC;AACzD,kBAAI,CAAC,gBAAgB;AACnB,sBAAM,MAAM;AAGZ,sBAAM;;kBAEH,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;kBAE5B,IAAI,WAAW,KAAK,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;kBAE9C,IAAI,WAAW,QAAQ,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;;AAGpD,sBAAM,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAE5D,gBAAAA,SAAQ,aAAa,mBAAmB,YAAY,aAAa;cACnE;YACF;UACF;AAGA,cAAI,MAAM;AACV,cACE,KAAK,MAAK,KACV,KAAK,MAAM,eACX,KAAK,SAAS,SAAS,KACvB;AACA,kBAAM;UACR;AACA,gBAAMC,SAAQD,SAAQ,MAAM;AAC5B,iBAAO;YACLC;aACA,GAAA,cAAA,UAAS,GAAG;YACX,KAAK,YAAY,CAAC,CAAC,KAAK;YACzB,KAAK;;QAET;AAMA,cAAM,WAAW,KAAK,SAAS,OAAO,KAAK,SAAS;AAEpD,cAAM,QAAQ,KAAK,SAAS,MAAM,cAAc;AAChD,YAAI,OAAO,KAAK,eAAe,GAAG;AAElC,YAAI,KAAK,QAAO,KAAM,KAAK,MAAK,KAAM,CAAC,QAAQ,KAAK,SAAS,KAAK;AAGhE,gBAAM,IAAI,KAAK,SAAQ;AACvB,gBAAM,KAAK;AACX,aAAG,SAAS,CAAC,CAAC;AACd,aAAG,OAAO;AACV,aAAG,YAAY;AACf,iBAAO,CAAC,IAAG,GAAA,cAAA,UAAS,KAAK,SAAQ,CAAE,GAAG,OAAO,KAAK;QACpD;AAGA,YAAI,iBACF,CAAC,YAAY,YAAY,OAAO,CAAC,aAC7B,KACA,KAAK,eAAe,IAAI;AAC9B,YAAI,mBAAmB,MAAM;AAC3B,2BAAiB;QACnB;AACA,YAAI,gBAAgB;AAClB,iBAAO,MAAM,IAAI,OAAO,cAAc;QACxC;AAGA,YAAI,QAAQ;AACZ,YAAI,KAAK,SAAS,OAAO,KAAK,WAAW;AACvC,mBAAS,KAAK,QAAO,KAAM,CAAC,MAAM,aAAa,MAAM;QACvD,OAAO;AACL,gBAAM,QACJ,KAAK,SAAS;;YAEV,QACC,KAAK,QAAO,KAAM,CAAC,OAAO,CAAC,WAAW,aAAa,MACpD,OACA;cACA,KAAK,SAAS,MACd,MACA,KAAK,SAAS,MACd,OACA,KAAK,SAAS,OAAO,iBACrB,MACA,KAAK,SAAS,OAAO,iBACrB,OACA,IAAI,KAAK,IAAI;AACnB,kBAAQ,QAAQ,OAAO;QACzB;AACA,eAAO;UACL;WACA,GAAA,cAAA,UAAS,IAAI;UACZ,KAAK,YAAY,CAAC,CAAC,KAAK;UACzB,KAAK;;MAET;MAEA,eAAe,KAAY;AACzB,eAAO,KAAK,OACT,IAAI,OAAI;AAGP,cAAI,OAAO,MAAM,UAAU;AACzB,kBAAM,IAAI,MAAM,8BAA8B;UAChD;AAGA,gBAAM,CAAC,IAAIF,IAAG,WAAW,KAAK,IAAI,EAAE,eAAe,GAAG;AACtD,eAAK,SAAS,KAAK,UAAU;AAC7B,iBAAO;QACT,CAAC,EACA,OAAO,OAAK,EAAE,KAAK,QAAO,KAAM,KAAK,MAAK,MAAO,CAAC,CAAC,CAAC,EACpD,KAAK,GAAG;MACb;MAEA,OAAO,WACL,MACA,UACA,UAAmB,OAAK;AAExB,YAAI,WAAW;AACf,YAAI,KAAK;AACT,YAAI,QAAQ;AAEZ,YAAI,SAAS;AACb,iBAASJ,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACpC,gBAAMH,KAAI,KAAK,OAAOG,EAAC;AACvB,cAAI,UAAU;AACZ,uBAAW;AACX,mBAAO,WAAW,IAAIH,EAAC,IAAI,OAAO,MAAMA;AACxC,qBAAS;AACT;UACF;AACA,cAAIA,OAAM,MAAM;AACd,gBAAIG,OAAM,KAAK,SAAS,GAAG;AACzB,oBAAM;YACR,OAAO;AACL,yBAAW;YACb;AACA;UACF;AACA,cAAIH,OAAM,KAAK;AACb,kBAAM,CAAC,KAAK,WAAW,UAAU,KAAK,KAAI,GAAA,uBAAA,YAAW,MAAMG,EAAC;AAC5D,gBAAI,UAAU;AACZ,oBAAM;AACN,sBAAQ,SAAS;AACjB,cAAAA,MAAK,WAAW;AAChB,yBAAW,YAAY;AACvB,uBAAS;AACT;YACF;UACF;AACA,cAAIH,OAAM,KAAK;AACb,gBAAI;AAAQ;AACZ,qBAAS;AACT,kBAAM,WAAW,SAAS,KAAK,IAAI,IAAI,cAAc;AACrD,uBAAW;AACX;UACF,OAAO;AACL,qBAAS;UACX;AACA,cAAIA,OAAM,KAAK;AACb,kBAAM;AACN,uBAAW;AACX;UACF;AACA,gBAAM,aAAaA,EAAC;QACtB;AACA,eAAO,CAAC,KAAI,GAAA,cAAA,UAAS,IAAI,GAAG,CAAC,CAAC,UAAU,KAAK;MAC/C;;AA7uBF,IAAAU,SAAA,MAAA;;;;;;;;;;;AClGO,QAAM,SAAS,CACpB,GACA,EACE,uBAAuB,MAAK,IACsB,CAAA,MAClD;AAIF,aAAO,uBACH,EAAE,QAAQ,cAAc,MAAM,IAC9B,EAAE,QAAQ,gBAAgB,MAAM;IACtC;AAZa,IAAAC,SAAA,SAAM;;;;;;;;;;;;;ACVnB,QAAA,oBAAA,gBAAA,yBAAA;AACA,QAAA,4BAAA;AACA,QAAA,WAAA;AACA,QAAA,cAAA;AACA,QAAA,gBAAA;AAwCO,QAAM,YAAY,CACvB,GACA,SACA,UAA4B,CAAA,MAC1B;AACF,OAAA,GAAA,0BAAA,oBAAmB,OAAO;AAG1B,UAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK;AACnD,eAAO;MACT;AAEA,aAAO,IAAI,UAAU,SAAS,OAAO,EAAE,MAAM,CAAC;IAChD;AAba,IAAAC,SAAA,YAAS;AAgBtB,QAAM,eAAe;AACrB,QAAM,iBAAiB,CAACC,SAAgB,CAAC,MACvC,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,SAASA,IAAG;AACtC,QAAM,oBAAoB,CAACA,SAAgB,CAAC,MAAc,EAAE,SAASA,IAAG;AACxE,QAAM,uBAAuB,CAACA,SAAe;AAC3C,MAAAA,OAAMA,KAAI,YAAW;AACrB,aAAO,CAAC,MAAc,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,YAAW,EAAG,SAASA,IAAG;IAC1E;AACA,QAAM,0BAA0B,CAACA,SAAe;AAC9C,MAAAA,OAAMA,KAAI,YAAW;AACrB,aAAO,CAAC,MAAc,EAAE,YAAW,EAAG,SAASA,IAAG;IACpD;AACA,QAAM,gBAAgB;AACtB,QAAM,kBAAkB,CAAC,MAAc,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,GAAG;AAC3E,QAAM,qBAAqB,CAAC,MAC1B,MAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,GAAG;AAC3C,QAAM,YAAY;AAClB,QAAM,cAAc,CAAC,MAAc,MAAM,OAAO,MAAM,QAAQ,EAAE,WAAW,GAAG;AAC9E,QAAM,SAAS;AACf,QAAM,WAAW,CAAC,MAAc,EAAE,WAAW,KAAK,CAAC,EAAE,WAAW,GAAG;AACnE,QAAM,cAAc,CAAC,MAAc,EAAE,WAAW,KAAK,MAAM,OAAO,MAAM;AACxE,QAAM,WAAW;AACjB,QAAM,mBAAmB,CAAC,CAAC,IAAIA,OAAM,EAAE,MAAuB;AAC5D,YAAM,QAAQ,gBAAgB,CAAC,EAAE,CAAC;AAClC,UAAI,CAACA;AAAK,eAAO;AACjB,MAAAA,OAAMA,KAAI,YAAW;AACrB,aAAO,CAAC,MAAc,MAAM,CAAC,KAAK,EAAE,YAAW,EAAG,SAASA,IAAG;IAChE;AACA,QAAM,sBAAsB,CAAC,CAAC,IAAIA,OAAM,EAAE,MAAuB;AAC/D,YAAM,QAAQ,mBAAmB,CAAC,EAAE,CAAC;AACrC,UAAI,CAACA;AAAK,eAAO;AACjB,MAAAA,OAAMA,KAAI,YAAW;AACrB,aAAO,CAAC,MAAc,MAAM,CAAC,KAAK,EAAE,YAAW,EAAG,SAASA,IAAG;IAChE;AACA,QAAM,gBAAgB,CAAC,CAAC,IAAIA,OAAM,EAAE,MAAuB;AACzD,YAAM,QAAQ,mBAAmB,CAAC,EAAE,CAAC;AACrC,aAAO,CAACA,OAAM,QAAQ,CAAC,MAAc,MAAM,CAAC,KAAK,EAAE,SAASA,IAAG;IACjE;AACA,QAAM,aAAa,CAAC,CAAC,IAAIA,OAAM,EAAE,MAAuB;AACtD,YAAM,QAAQ,gBAAgB,CAAC,EAAE,CAAC;AAClC,aAAO,CAACA,OAAM,QAAQ,CAAC,MAAc,MAAM,CAAC,KAAK,EAAE,SAASA,IAAG;IACjE;AACA,QAAM,kBAAkB,CAAC,CAAC,EAAE,MAAuB;AACjD,YAAM,MAAM,GAAG;AACf,aAAO,CAAC,MAAc,EAAE,WAAW,OAAO,CAAC,EAAE,WAAW,GAAG;IAC7D;AACA,QAAM,qBAAqB,CAAC,CAAC,EAAE,MAAuB;AACpD,YAAM,MAAM,GAAG;AACf,aAAO,CAAC,MAAc,EAAE,WAAW,OAAO,MAAM,OAAO,MAAM;IAC/D;AAGA,QAAM,kBACJ,OAAO,YAAY,YAAY,UAC1B,OAAO,QAAQ,QAAQ,YACtB,QAAQ,OACR,QAAQ,IAAI,kCACd,QAAQ,WACR;AAGN,QAAMC,SAAsC;MAC1C,OAAO,EAAE,KAAK,KAAI;MAClB,OAAO,EAAE,KAAK,IAAG;;AAIN,IAAAF,SAAA,MAAM,oBAAoB,UAAUE,OAAK,MAAM,MAAMA,OAAK,MAAM;AAC7E,IAAAF,SAAA,UAAU,MAAMA,SAAA;AAEH,IAAAA,SAAA,WAAW,uBAAO,aAAa;AAC5C,IAAAA,SAAA,UAAU,WAAWA,SAAA;AAIrB,QAAM,QAAQ;AAGd,QAAM,OAAO,QAAQ;AAKrB,QAAM,aAAa;AAInB,QAAM,eAAe;AAEd,QAAMG,UACX,CAAC,SAAiB,UAA4B,CAAA,MAC9C,CAAC,OACC,GAAAH,SAAA,WAAU,GAAG,SAAS,OAAO;AAHpB,IAAAA,SAAA,SAAMG;AAInB,IAAAH,SAAA,UAAU,SAASA,SAAA;AAEnB,QAAM,MAAM,CAACI,IAAqB,IAAsB,CAAA,MACtD,OAAO,OAAO,CAAA,GAAIA,IAAG,CAAC;AAEjB,QAAM,WAAW,CAAC,QAA2C;AAClE,UAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,KAAK,GAAG,EAAE,QAAQ;AAC/D,eAAOJ,SAAA;MACT;AAEA,YAAM,OAAOA,SAAA;AAEb,YAAM,IAAI,CAAC,GAAW,SAAiB,UAA4B,CAAA,MACjE,KAAK,GAAG,SAAS,IAAI,KAAK,OAAO,CAAC;AAEpC,aAAO,OAAO,OAAO,GAAG;QACtB,WAAW,MAAM,kBAAkB,KAAK,UAAS;UAC/C,YAAY,SAAiB,UAA4B,CAAA,GAAE;AACzD,kBAAM,SAAS,IAAI,KAAK,OAAO,CAAC;UAClC;UACA,OAAO,SAAS,SAAyB;AACvC,mBAAO,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,EAAE;UAC1C;;QAGF,KAAK,MAAM,YAAY,KAAK,IAAG;;UAE7B,YACE,MACAK,SACA,UAA4B,CAAA,GAAE;AAE9B,kBAAM,MAAMA,SAAQ,IAAI,KAAK,OAAO,CAAC;UACvC;;UAGA,OAAO,SAAS,SAAiB,UAA4B,CAAA,GAAE;AAC7D,mBAAO,KAAK,IAAI,SAAS,SAAS,IAAI,KAAK,OAAO,CAAC;UACrD;;QAGF,UAAU,CACR,GACA,UAA0D,CAAA,MACvD,KAAK,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC;QAEvC,QAAQ,CACN,GACA,UAA0D,CAAA,MACvD,KAAK,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC;QAErC,QAAQ,CAAC,SAAiB,UAA4B,CAAA,MACpD,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;QAExC,UAAU,CAAC,YAA8B,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC;QAExE,QAAQ,CAAC,SAAiB,UAA4B,CAAA,MACpD,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;QAExC,aAAa,CAAC,SAAiB,UAA4B,CAAA,MACzD,KAAK,YAAY,SAAS,IAAI,KAAK,OAAO,CAAC;QAE7C,OAAO,CAAC,MAAgB,SAAiB,UAA4B,CAAA,MACnE,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,OAAO,CAAC;QAE7C,KAAK,KAAK;QACV,UAAUL,SAAA;OACX;IACH;AA/Da,IAAAA,SAAA,WAAQ;AAgErB,IAAAA,SAAA,UAAU,WAAWA,SAAA;AAYd,QAAM,cAAc,CACzB,SACA,UAA4B,CAAA,MAC1B;AACF,OAAA,GAAA,0BAAA,oBAAmB,OAAO;AAI1B,UAAI,QAAQ,WAAW,CAAC,mBAAmB,KAAK,OAAO,GAAG;AAExD,eAAO,CAAC,OAAO;MACjB;AAEA,cAAO,GAAA,kBAAA,SAAO,OAAO;IACvB;AAda,IAAAA,SAAA,cAAW;AAexB,IAAAA,SAAA,UAAU,cAAcA,SAAA;AAcjB,QAAM,SAAS,CAAC,SAAiB,UAA4B,CAAA,MAClE,IAAI,UAAU,SAAS,OAAO,EAAE,OAAM;AAD3B,IAAAA,SAAA,SAAM;AAEnB,IAAAA,SAAA,UAAU,SAASA,SAAA;AAEZ,QAAM,QAAQ,CACnB,MACA,SACA,UAA4B,CAAA,MAC1B;AACF,YAAM,KAAK,IAAI,UAAU,SAAS,OAAO;AACzC,aAAO,KAAK,OAAO,OAAK,GAAG,MAAM,CAAC,CAAC;AACnC,UAAI,GAAG,QAAQ,UAAU,CAAC,KAAK,QAAQ;AACrC,aAAK,KAAK,OAAO;MACnB;AACA,aAAO;IACT;AAXa,IAAAA,SAAA,QAAK;AAYlB,IAAAA,SAAA,UAAU,QAAQA,SAAA;AAGlB,QAAM,YAAY;AAClB,QAAM,eAAe,CAAC,MACpB,EAAE,QAAQ,4BAA4B,MAAM;AAU9C,QAAa,YAAb,MAAsB;MACpB;MACA;MACA;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAEA;MACA;MACA;MACA;MAEA;MACA,YAAY,SAAiB,UAA4B,CAAA,GAAE;AACzD,SAAA,GAAA,0BAAA,oBAAmB,OAAO;AAE1B,kBAAU,WAAW,CAAA;AACrB,aAAK,UAAU;AACf,aAAK,uBAAuB,QAAQ,wBAAwB;AAC5D,aAAK,UAAU;AACf,aAAK,WAAW,QAAQ,YAAY;AACpC,aAAK,YAAY,KAAK,aAAa;AACnC,aAAK,uBACH,CAAC,CAAC,QAAQ,wBAAwB,QAAQ,uBAAuB;AACnE,YAAI,KAAK,sBAAsB;AAC7B,eAAK,UAAU,KAAK,QAAQ,QAAQ,OAAO,GAAG;QAChD;AACA,aAAK,0BAA0B,CAAC,CAAC,QAAQ;AACzC,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,WAAW,CAAC,CAAC,QAAQ;AAC1B,aAAK,UAAU;AACf,aAAK,QAAQ;AACb,aAAK,UAAU,CAAC,CAAC,QAAQ;AACzB,aAAK,SAAS,CAAC,CAAC,KAAK,QAAQ;AAC7B,aAAK,qBACH,QAAQ,uBAAuB,SAC3B,QAAQ,qBACR,CAAC,EAAE,KAAK,aAAa,KAAK;AAEhC,aAAK,UAAU,CAAA;AACf,aAAK,YAAY,CAAA;AACjB,aAAK,MAAM,CAAA;AAGX,aAAK,KAAI;MACX;MAEA,WAAQ;AACN,YAAI,KAAK,QAAQ,iBAAiB,KAAK,IAAI,SAAS,GAAG;AACrD,iBAAO;QACT;AACA,mBAAW,WAAW,KAAK,KAAK;AAC9B,qBAAW,QAAQ,SAAS;AAC1B,gBAAI,OAAO,SAAS;AAAU,qBAAO;UACvC;QACF;AACA,eAAO;MACT;MAEA,SAASM,IAAQ;MAAG;MAEpB,OAAI;AACF,cAAM,UAAU,KAAK;AACrB,cAAM,UAAU,KAAK;AAGrB,YAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK;AACnD,eAAK,UAAU;AACf;QACF;AAEA,YAAI,CAAC,SAAS;AACZ,eAAK,QAAQ;AACb;QACF;AAGA,aAAK,YAAW;AAGhB,aAAK,UAAU,CAAC,GAAG,IAAI,IAAY,KAAK,YAAW,CAAE,CAAC;AAEtD,YAAI,QAAQ,OAAO;AACjB,eAAK,QAAQ,IAAI,SAAgB,QAAQ,MAAM,GAAG,IAAI;QACxD;AAEA,aAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAWrC,cAAM,eAAe,KAAK,QAAQ,IAAI,OAAK,KAAK,WAAW,CAAC,CAAC;AAC7D,aAAK,YAAY,KAAK,WAAW,YAAY;AAC7C,aAAK,MAAM,KAAK,SAAS,KAAK,SAAS;AAGvC,YAAI,MAAM,KAAK,UAAU,IAAI,CAAC,GAAGA,IAAG,OAAM;AACxC,cAAI,KAAK,aAAa,KAAK,oBAAoB;AAE7C,kBAAM,QACJ,EAAE,CAAC,MAAM,MACT,EAAE,CAAC,MAAM,OACR,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,MACrC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;AACtB,kBAAM,UAAU,WAAW,KAAK,EAAE,CAAC,CAAC;AACpC,gBAAI,OAAO;AACT,qBAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,QAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YACnE,WAAW,SAAS;AAClB,qBAAO,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,QAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YACvD;UACF;AACA,iBAAO,EAAE,IAAI,QAAM,KAAK,MAAM,EAAE,CAAC;QACnC,CAAC;AAED,aAAK,MAAM,KAAK,SAAS,GAAG;AAG5B,aAAK,MAAM,IAAI,OACb,OAAK,EAAE,QAAQ,KAAK,MAAM,EAAE;AAI9B,YAAI,KAAK,WAAW;AAClB,mBAASC,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACxC,kBAAM,IAAI,KAAK,IAAIA,EAAC;AACpB,gBACE,EAAE,CAAC,MAAM,MACT,EAAE,CAAC,MAAM,MACT,KAAK,UAAUA,EAAC,EAAE,CAAC,MAAM,OACzB,OAAO,EAAE,CAAC,MAAM,YAChB,YAAY,KAAK,EAAE,CAAC,CAAC,GACrB;AACA,gBAAE,CAAC,IAAI;YACT;UACF;QACF;AAEA,aAAK,MAAM,KAAK,SAAS,KAAK,GAAG;MACnC;;;;;;MAOA,WAAW,WAAqB;AAE9B,YAAI,KAAK,QAAQ,YAAY;AAC3B,mBAASA,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,qBAAS,IAAI,GAAG,IAAI,UAAUA,EAAC,EAAE,QAAQ,KAAK;AAC5C,kBAAI,UAAUA,EAAC,EAAE,CAAC,MAAM,MAAM;AAC5B,0BAAUA,EAAC,EAAE,CAAC,IAAI;cACpB;YACF;UACF;QACF;AAEA,cAAM,EAAE,oBAAoB,EAAC,IAAK,KAAK;AAEvC,YAAI,qBAAqB,GAAG;AAE1B,sBAAY,KAAK,qBAAqB,SAAS;AAC/C,sBAAY,KAAK,sBAAsB,SAAS;QAClD,WAAW,qBAAqB,GAAG;AAEjC,sBAAY,KAAK,iBAAiB,SAAS;QAC7C,OAAO;AAEL,sBAAY,KAAK,0BAA0B,SAAS;QACtD;AAEA,eAAO;MACT;;MAGA,0BAA0B,WAAqB;AAC7C,eAAO,UAAU,IAAI,WAAQ;AAC3B,cAAI,KAAa;AACjB,iBAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;AAChD,gBAAIA,KAAI;AACR,mBAAO,MAAMA,KAAI,CAAC,MAAM,MAAM;AAC5B,cAAAA;YACF;AACA,gBAAIA,OAAM,IAAI;AACZ,oBAAM,OAAO,IAAIA,KAAI,EAAE;YACzB;UACF;AACA,iBAAO;QACT,CAAC;MACH;;MAGA,iBAAiB,WAAqB;AACpC,eAAO,UAAU,IAAI,WAAQ;AAC3B,kBAAQ,MAAM,OAAO,CAAC,KAAe,SAAQ;AAC3C,kBAAM,OAAO,IAAI,IAAI,SAAS,CAAC;AAC/B,gBAAI,SAAS,QAAQ,SAAS,MAAM;AAClC,qBAAO;YACT;AACA,gBAAI,SAAS,MAAM;AACjB,kBAAI,QAAQ,SAAS,QAAQ,SAAS,OAAO,SAAS,MAAM;AAC1D,oBAAI,IAAG;AACP,uBAAO;cACT;YACF;AACA,gBAAI,KAAK,IAAI;AACb,mBAAO;UACT,GAAG,CAAA,CAAE;AACL,iBAAO,MAAM,WAAW,IAAI,CAAC,EAAE,IAAI;QACrC,CAAC;MACH;MAEA,qBAAqB,OAAwB;AAC3C,YAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,kBAAQ,KAAK,WAAW,KAAK;QAC/B;AACA,YAAI,eAAwB;AAC5B,WAAG;AACD,yBAAe;AAEf,cAAI,CAAC,KAAK,yBAAyB;AACjC,qBAASA,KAAI,GAAGA,KAAI,MAAM,SAAS,GAAGA,MAAK;AACzC,oBAAM,IAAI,MAAMA,EAAC;AAEjB,kBAAIA,OAAM,KAAK,MAAM,MAAM,MAAM,CAAC,MAAM;AAAI;AAC5C,kBAAI,MAAM,OAAO,MAAM,IAAI;AACzB,+BAAe;AACf,sBAAM,OAAOA,IAAG,CAAC;AACjB,gBAAAA;cACF;YACF;AACA,gBACE,MAAM,CAAC,MAAM,OACb,MAAM,WAAW,MAChB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,KAClC;AACA,6BAAe;AACf,oBAAM,IAAG;YACX;UACF;AAGA,cAAI,KAAa;AACjB,iBAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;AAChD,kBAAM,IAAI,MAAM,KAAK,CAAC;AACtB,gBAAI,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM;AAC9C,6BAAe;AACf,oBAAM,OAAO,KAAK,GAAG,CAAC;AACtB,oBAAM;YACR;UACF;QACF,SAAS;AACT,eAAO,MAAM,WAAW,IAAI,CAAC,EAAE,IAAI;MACrC;;;;;;;;;;;;;;;;;;;MAoBA,qBAAqB,WAAqB;AACxC,YAAI,eAAe;AACnB,WAAG;AACD,yBAAe;AAEf,mBAAS,SAAS,WAAW;AAC3B,gBAAI,KAAa;AACjB,mBAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;AAChD,kBAAI,MAAc;AAClB,qBAAO,MAAM,MAAM,CAAC,MAAM,MAAM;AAE9B;cACF;AAGA,kBAAI,MAAM,IAAI;AACZ,sBAAM,OAAO,KAAK,GAAG,MAAM,EAAE;cAC/B;AAEA,kBAAI,OAAO,MAAM,KAAK,CAAC;AACvB,oBAAM,IAAI,MAAM,KAAK,CAAC;AACtB,oBAAM,KAAK,MAAM,KAAK,CAAC;AACvB,kBAAI,SAAS;AAAM;AACnB,kBACE,CAAC,KACD,MAAM,OACN,MAAM,QACN,CAAC,MACD,OAAO,OACP,OAAO,MACP;AACA;cACF;AACA,6BAAe;AAEf,oBAAM,OAAO,IAAI,CAAC;AAClB,oBAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,oBAAM,EAAE,IAAI;AACZ,wBAAU,KAAK,KAAK;AACpB;YACF;AAGA,gBAAI,CAAC,KAAK,yBAAyB;AACjC,uBAASA,KAAI,GAAGA,KAAI,MAAM,SAAS,GAAGA,MAAK;AACzC,sBAAM,IAAI,MAAMA,EAAC;AAEjB,oBAAIA,OAAM,KAAK,MAAM,MAAM,MAAM,CAAC,MAAM;AAAI;AAC5C,oBAAI,MAAM,OAAO,MAAM,IAAI;AACzB,iCAAe;AACf,wBAAM,OAAOA,IAAG,CAAC;AACjB,kBAAAA;gBACF;cACF;AACA,kBACE,MAAM,CAAC,MAAM,OACb,MAAM,WAAW,MAChB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,KAClC;AACA,+BAAe;AACf,sBAAM,IAAG;cACX;YACF;AAGA,gBAAI,KAAa;AACjB,mBAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;AAChD,oBAAM,IAAI,MAAM,KAAK,CAAC;AACtB,kBAAI,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM;AAC9C,+BAAe;AACf,sBAAM,UAAU,OAAO,KAAK,MAAM,KAAK,CAAC,MAAM;AAC9C,sBAAM,QAAQ,UAAU,CAAC,GAAG,IAAI,CAAA;AAChC,sBAAM,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK;AAChC,oBAAI,MAAM,WAAW;AAAG,wBAAM,KAAK,EAAE;AACrC,sBAAM;cACR;YACF;UACF;QACF,SAAS;AAET,eAAO;MACT;;;;;;;;MASA,sBAAsB,WAAqB;AACzC,iBAASA,KAAI,GAAGA,KAAI,UAAU,SAAS,GAAGA,MAAK;AAC7C,mBAAS,IAAIA,KAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC7C,kBAAM,UAAU,KAAK,WACnB,UAAUA,EAAC,GACX,UAAU,CAAC,GACX,CAAC,KAAK,uBAAuB;AAE/B,gBAAI,SAAS;AACX,wBAAUA,EAAC,IAAI,CAAA;AACf,wBAAU,CAAC,IAAI;AACf;YACF;UACF;QACF;AACA,eAAO,UAAU,OAAO,QAAM,GAAG,MAAM;MACzC;MAEA,WACEH,IACA,GACA,eAAwB,OAAK;AAE7B,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI,SAAmB,CAAA;AACvB,YAAI,QAAgB;AACpB,eAAO,KAAKA,GAAE,UAAU,KAAK,EAAE,QAAQ;AACrC,cAAIA,GAAE,EAAE,MAAM,EAAE,EAAE,GAAG;AACnB,mBAAO,KAAK,UAAU,MAAM,EAAE,EAAE,IAAIA,GAAE,EAAE,CAAC;AACzC;AACA;UACF,WAAW,gBAAgBA,GAAE,EAAE,MAAM,QAAQ,EAAE,EAAE,MAAMA,GAAE,KAAK,CAAC,GAAG;AAChE,mBAAO,KAAKA,GAAE,EAAE,CAAC;AACjB;UACF,WAAW,gBAAgB,EAAE,EAAE,MAAM,QAAQA,GAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;AAChE,mBAAO,KAAK,EAAE,EAAE,CAAC;AACjB;UACF,WACEA,GAAE,EAAE,MAAM,OACV,EAAE,EAAE,MACH,KAAK,QAAQ,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,GAAG,MAC1C,EAAE,EAAE,MAAM,MACV;AACA,gBAAI,UAAU;AAAK,qBAAO;AAC1B,oBAAQ;AACR,mBAAO,KAAKA,GAAE,EAAE,CAAC;AACjB;AACA;UACF,WACE,EAAE,EAAE,MAAM,OACVA,GAAE,EAAE,MACH,KAAK,QAAQ,OAAO,CAACA,GAAE,EAAE,EAAE,WAAW,GAAG,MAC1CA,GAAE,EAAE,MAAM,MACV;AACA,gBAAI,UAAU;AAAK,qBAAO;AAC1B,oBAAQ;AACR,mBAAO,KAAK,EAAE,EAAE,CAAC;AACjB;AACA;UACF,OAAO;AACL,mBAAO;UACT;QACF;AAGA,eAAOA,GAAE,WAAW,EAAE,UAAU;MAClC;MAEA,cAAW;AACT,YAAI,KAAK;AAAU;AAEnB,cAAM,UAAU,KAAK;AACrB,YAAI,SAAS;AACb,YAAI,eAAe;AAEnB,iBAASG,KAAI,GAAGA,KAAI,QAAQ,UAAU,QAAQ,OAAOA,EAAC,MAAM,KAAKA,MAAK;AACpE,mBAAS,CAAC;AACV;QACF;AAEA,YAAI;AAAc,eAAK,UAAU,QAAQ,MAAM,YAAY;AAC3D,aAAK,SAAS;MAChB;;;;;;MAOA,SACE,MACA,SACA,UAAmB,OAAK;AAExB,YAAI,iBAAiB;AACrB,YAAI,oBAAoB;AAKxB,YAAI,KAAK,WAAW;AAClB,gBAAM,YACJ,OAAO,KAAK,CAAC,MAAM,YAAY,YAAY,KAAK,KAAK,CAAC,CAAC;AACzD,gBAAM,UACJ,CAAC,aACD,KAAK,CAAC,MAAM,MACZ,KAAK,CAAC,MAAM,MACZ,KAAK,CAAC,MAAM,OACZ,YAAY,KAAK,KAAK,CAAC,CAAC;AAE1B,gBAAM,eACJ,OAAO,QAAQ,CAAC,MAAM,YAAY,YAAY,KAAK,QAAQ,CAAC,CAAC;AAC/D,gBAAM,aACJ,CAAC,gBACD,QAAQ,CAAC,MAAM,MACf,QAAQ,CAAC,MAAM,MACf,QAAQ,CAAC,MAAM,OACf,OAAO,QAAQ,CAAC,MAAM,YACtB,YAAY,KAAK,QAAQ,CAAC,CAAC;AAE7B,gBAAM,MAAM,UAAU,IAAI,YAAY,IAAI;AAC1C,gBAAM,MAAM,aAAa,IAAI,eAAe,IAAI;AAChD,cAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,kBAAM,CAAC,IAAI,EAAE,IAAsB;cACjC,KAAK,GAAG;cACR,QAAQ,GAAG;;AAEb,gBAAI,GAAG,YAAW,MAAO,GAAG,YAAW,GAAI;AACzC,sBAAQ,GAAG,IAAI;AACf,kCAAoB;AACpB,+BAAiB;YACnB;UACF;QACF;AAIA,cAAM,EAAE,oBAAoB,EAAC,IAAK,KAAK;AACvC,YAAI,qBAAqB,GAAG;AAC1B,iBAAO,KAAK,qBAAqB,IAAI;QACvC;AAEA,YAAI,QAAQ,SAASP,SAAA,QAAQ,GAAG;AAC9B,iBAAO,KAAK,eACV,MAAM,SAAS,SAAS,gBAAgB,iBAAiB;QAE7D;AAEA,eAAO,KAAK,UACV,MAAM,SAAS,SAAS,gBAAgB,iBAAiB;MAE7D;MAEA,eACE,MACA,SACA,SACA,WACA,cAAoB;AAEpB,cAAM,UAAU,QAAQ,QAAQA,SAAA,UAAU,YAAY;AACtD,cAAM,SAAS,QAAQ,YAAYA,SAAA,QAAQ;AAE3C,cAAM,CAAC,MAAM,MAAM,IAAI,IAAI,UAAU;UACnC,QAAQ,MAAM,cAAc,OAAO;UACnC,QAAQ,MAAM,UAAU,CAAC;UACzB,CAAA;YACE;UACF,QAAQ,MAAM,cAAc,OAAO;UACnC,QAAQ,MAAM,UAAU,GAAG,MAAM;UACjC,QAAQ,MAAM,SAAS,CAAC;;AAG1B,YAAI,KAAK,QAAQ;AACf,gBAAM,WAAW,KAAK,MAAM,WAAW,YAAY,KAAK,MAAM;AAC9D,cAAI,CAAC,KAAK,UAAU,UAAU,MAAM,SAAS,GAAG,CAAC;AAAG,mBAAO;AAC3D,uBAAa,KAAK;QACpB;AAEA,YAAI,gBAAwB;AAC5B,YAAI,KAAK,QAAQ;AACf,cAAI,KAAK,SAAS,YAAY,KAAK;AAAQ,mBAAO;AAClD,cAAI,YAAY,KAAK,SAAS,KAAK;AACnC,cAAI,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,CAAC,GAAG;AACrD,4BAAgB,KAAK;UACvB,OAAO;AACL,gBACE,KAAK,KAAK,SAAS,CAAC,MAAM,MAC1B,YAAY,KAAK,WAAW,KAAK,QACjC;AACA,qBAAO;YACT;AACA;AACA,gBAAI,CAAC,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,CAAC;AAAG,qBAAO;AAC/D,4BAAgB,KAAK,SAAS;UAChC;QACF;AAEA,YAAI,CAAC,KAAK,QAAQ;AAChB,cAAI,UAAU,CAAC,CAAC;AAChB,mBAASO,KAAI,WAAWA,KAAI,KAAK,SAAS,eAAeA,MAAK;AAC5D,kBAAM,IAAI,OAAO,KAAKA,EAAC,CAAC;AACxB,sBAAU;AACV,gBACE,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GACtC;AACA,qBAAO;YACT;UACF;AACA,iBAAO,WAAW;QACpB;AAEA,cAAM,eAA0C,CAAC,CAAC,CAAA,GAAI,CAAC,CAAC;AACxD,YAAI,cAAuC,aAAa,CAAC;AACzD,YAAI,aAAa;AACjB,cAAM,iBAA2B,CAAC,CAAC;AACnC,mBAAW,KAAK,MAAM;AACpB,cAAI,MAAMP,SAAA,UAAU;AAClB,2BAAe,KAAK,UAAU;AAC9B,0BAAc,CAAC,CAAA,GAAI,CAAC;AACpB,yBAAa,KAAK,WAAW;UAC/B,OAAO;AACL,wBAAY,CAAC,EAAE,KAAK,CAAC;AACrB;UACF;QACF;AACA,YAAIO,KAAI,aAAa,SAAS;AAC9B,cAAM,aAAa,KAAK,SAAS;AACjC,mBAAW,KAAK,cAAc;AAC5B,YAAE,CAAC,IAAI,cAAe,eAAeA,IAAG,IAAe,EAAE,CAAC,EAAE;QAC9D;AAEA,eAAO,CAAC,CAAC,KAAK,2BACZ,MAAM,cAAc,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC,aAAa;MAEjE;MAEA,2BACE,MACA,cACA,WACA,WACA,SACA,eACA,SAAgB;AAEhB,cAAM,KAAK,aAAa,SAAS;AACjC,YAAI,CAAC,IAAI;AACP,mBAASA,KAAI,WAAWA,KAAI,KAAK,QAAQA,MAAK;AAC5C,sBAAU;AACV,kBAAM,IAAI,KAAKA,EAAC;AAChB,gBACE,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GACtC;AACA,qBAAO;YACT;UACF;AACA,iBAAO;QACT;AAEA,cAAM,CAAC,MAAM,KAAK,IAAI;AACtB,eAAO,aAAa,OAAO;AACzB,gBAAM,IAAI,KAAK,UACb,KAAK,MAAM,GAAG,YAAY,KAAK,MAAM,GACrC,MAAM,SAAS,WAAW,CAAC;AAE7B,cAAI,KAAK,gBAAgB,KAAK,sBAAsB;AAClD,kBAAM,MAAM,KAAK,2BACf,MAAM,cAAc,YAAY,KAAK,QACrC,YAAY,GAAG,SAAS,gBAAgB,GAAG,OAAO;AAEpD,gBAAI,QAAQ;AAAO,qBAAO;UAC5B;AACA,gBAAM,IAAI,KAAK,SAAS;AACxB,cACE,MAAM,OAAO,MAAM,QAClB,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GACtC;AACA,mBAAO;UACT;AACA;QACF;AACA,eAAO,WAAW;MACpB;MAEA,UACE,MACA,SACA,SACA,WACA,cAAoB;AAEpB,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,aACE,KAAK,WAAW,KAAK,cACnB,KAAK,KAAK,QAAQ,KAAK,QAAQ,QACjC,KAAK,MAAM,KAAK,IAChB,MAAM,MACN;AACA,eAAK,MAAM,eAAe;AAC1B,cAAI,IAAI,QAAQ,EAAE;AAClB,cAAI,IAAI,KAAK,EAAE;AAEf,eAAK,MAAM,SAAS,GAAG,CAAC;AAGxB,cAAI,MAAM,SAAS,MAAMP,SAAA;AAAU,mBAAO;AAG1C,cAAI;AACJ,cAAI,OAAO,MAAM,UAAU;AACzB,kBAAM,MAAM;AACZ,iBAAK,MAAM,gBAAgB,GAAG,GAAG,GAAG;UACtC,OAAO;AACL,kBAAM,EAAE,KAAK,CAAC;AACd,iBAAK,MAAM,iBAAiB,GAAG,GAAG,GAAG;UACvC;AAEA,cAAI,CAAC;AAAK,mBAAO;QACnB;AAEA,YAAI,OAAO,MAAM,OAAO,IAAI;AAC1B,iBAAO;QACT,WAAW,OAAO,IAAI;AACpB,iBAAO;QACT,WAAW,OAAO,IAAI;AACpB,iBAAO,OAAO,KAAK,KAAK,KAAK,EAAE,MAAM;QAEvC,OAAO;AACL,gBAAM,IAAI,MAAM,MAAM;QACxB;MAEF;MAEA,cAAW;AACT,gBAAO,GAAAA,SAAA,aAAY,KAAK,SAAS,KAAK,OAAO;MAC/C;MAEA,MAAM,SAAe;AACnB,SAAA,GAAA,0BAAA,oBAAmB,OAAO;AAE1B,cAAM,UAAU,KAAK;AAGrB,YAAI,YAAY;AAAM,iBAAOA,SAAA;AAC7B,YAAI,YAAY;AAAI,iBAAO;AAI3B,YAAI;AACJ,YAAI,WAA4C;AAChD,YAAK,IAAI,QAAQ,MAAM,MAAM,GAAI;AAC/B,qBAAW,QAAQ,MAAM,cAAc;QACzC,WAAY,IAAI,QAAQ,MAAM,YAAY,GAAI;AAC5C,sBACE,QAAQ,SACJ,QAAQ,MACN,0BACA,uBACF,QAAQ,MACR,oBACA,gBACJ,EAAE,CAAC,CAAC;QACR,WAAY,IAAI,QAAQ,MAAM,QAAQ,GAAI;AACxC,sBACE,QAAQ,SACJ,QAAQ,MACN,sBACA,mBACF,QAAQ,MACR,gBACA,YACJ,CAAC;QACL,WAAY,IAAI,QAAQ,MAAM,aAAa,GAAI;AAC7C,qBAAW,QAAQ,MAAM,qBAAqB;QAChD,WAAY,IAAI,QAAQ,MAAM,SAAS,GAAI;AACzC,qBAAW;QACb;AAEA,cAAM,KAAK,SAAA,IAAI,SAAS,SAAS,KAAK,OAAO,EAAE,YAAW;AAC1D,YAAI,YAAY,OAAO,OAAO,UAAU;AAEtC,kBAAQ,eAAe,IAAI,QAAQ,EAAE,OAAO,SAAQ,CAAE;QACxD;AACA,eAAO;MACT;MAEA,SAAM;AACJ,YAAI,KAAK,UAAU,KAAK,WAAW;AAAO,iBAAO,KAAK;AAQtD,cAAM,MAAM,KAAK;AAEjB,YAAI,CAAC,IAAI,QAAQ;AACf,eAAK,SAAS;AACd,iBAAO,KAAK;QACd;AACA,cAAM,UAAU,KAAK;AAErB,cAAM,UAAU,QAAQ,aACpB,OACA,QAAQ,MACR,aACA;AACJ,cAAM,QAAQ,IAAI,IAAI,QAAQ,SAAS,CAAC,GAAG,IAAI,CAAA,CAAE;AAQjD,YAAI,KAAK,IACN,IAAI,aAAU;AACb,gBAAM,KAAmC,QAAQ,IAAI,OAAI;AACvD,gBAAI,aAAa,QAAQ;AACvB,yBAAW,KAAK,EAAE,MAAM,MAAM,EAAE;AAAG,sBAAM,IAAI,CAAC;YAChD;AACA,mBAAO,OAAO,MAAM,WAChB,aAAa,CAAC,IACd,MAAMA,SAAA,WACNA,SAAA,WACA,EAAE;UACR,CAAC;AACD,aAAG,QAAQ,CAAC,GAAGO,OAAK;AAClB,kBAAM,OAAO,GAAGA,KAAI,CAAC;AACrB,kBAAM,OAAO,GAAGA,KAAI,CAAC;AACrB,gBAAI,MAAMP,SAAA,YAAY,SAASA,SAAA,UAAU;AACvC;YACF;AACA,gBAAI,SAAS,QAAW;AACtB,kBAAI,SAAS,UAAa,SAASA,SAAA,UAAU;AAC3C,mBAAGO,KAAI,CAAC,IAAI,YAAY,UAAU,UAAU;cAC9C,OAAO;AACL,mBAAGA,EAAC,IAAI;cACV;YACF,WAAW,SAAS,QAAW;AAC7B,iBAAGA,KAAI,CAAC,IAAI,OAAO,YAAY,UAAU;YAC3C,WAAW,SAASP,SAAA,UAAU;AAC5B,iBAAGO,KAAI,CAAC,IAAI,OAAO,eAAe,UAAU,SAAS;AACrD,iBAAGA,KAAI,CAAC,IAAIP,SAAA;YACd;UACF,CAAC;AACD,iBAAO,GAAG,OAAO,OAAK,MAAMA,SAAA,QAAQ,EAAE,KAAK,GAAG;QAChD,CAAC,EACA,KAAK,GAAG;AAIX,cAAM,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAG7D,aAAK,MAAM,OAAO,KAAK,QAAQ;AAG/B,YAAI,KAAK;AAAQ,eAAK,SAAS,KAAK;AAEpC,YAAI;AACF,eAAK,SAAS,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;QAElD,SAAS,IAAI;AAEX,eAAK,SAAS;QAChB;AAEA,eAAO,KAAK;MACd;MAEA,WAAW,GAAS;AAKlB,YAAI,KAAK,yBAAyB;AAChC,iBAAO,EAAE,MAAM,GAAG;QACpB,WAAW,KAAK,aAAa,cAAc,KAAK,CAAC,GAAG;AAElD,iBAAO,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;QAC/B,OAAO;AACL,iBAAO,EAAE,MAAM,KAAK;QACtB;MACF;MAEA,MAAM,GAAW,UAAU,KAAK,SAAO;AACrC,aAAK,MAAM,SAAS,GAAG,KAAK,OAAO;AAGnC,YAAI,KAAK,SAAS;AAChB,iBAAO;QACT;AACA,YAAI,KAAK,OAAO;AACd,iBAAO,MAAM;QACf;AAEA,YAAI,MAAM,OAAO,SAAS;AACxB,iBAAO;QACT;AAEA,cAAM,UAAU,KAAK;AAGrB,YAAI,KAAK,WAAW;AAClB,cAAI,EAAE,MAAM,IAAI,EAAE,KAAK,GAAG;QAC5B;AAGA,cAAM,KAAK,KAAK,WAAW,CAAC;AAC5B,aAAK,MAAM,KAAK,SAAS,SAAS,EAAE;AAOpC,cAAM,MAAM,KAAK;AACjB,aAAK,MAAM,KAAK,SAAS,OAAO,GAAG;AAGnC,YAAI,WAAmB,GAAG,GAAG,SAAS,CAAC;AACvC,YAAI,CAAC,UAAU;AACb,mBAASO,KAAI,GAAG,SAAS,GAAG,CAAC,YAAYA,MAAK,GAAGA,MAAK;AACpD,uBAAW,GAAGA,EAAC;UACjB;QACF;AAEA,iBAASA,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,gBAAM,UAAU,IAAIA,EAAC;AACrB,cAAI,OAAO;AACX,cAAI,QAAQ,aAAa,QAAQ,WAAW,GAAG;AAC7C,mBAAO,CAAC,QAAQ;UAClB;AACA,gBAAM,MAAM,KAAK,SAAS,MAAM,SAAS,OAAO;AAChD,cAAI,KAAK;AACP,gBAAI,QAAQ,YAAY;AACtB,qBAAO;YACT;AACA,mBAAO,CAAC,KAAK;UACf;QACF;AAIA,YAAI,QAAQ,YAAY;AACtB,iBAAO;QACT;AACA,eAAO,KAAK;MACd;MAEA,OAAO,SAAS,KAAqB;AACnC,eAAOP,SAAA,UAAU,SAAS,GAAG,EAAE;MACjC;;AA56BF,IAAAA,SAAA,YAAA;AA+6BA,QAAA,WAAA;AAAS,WAAA,eAAAA,UAAA,OAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,SAAA;IAAG,EAAA,CAAA;AACZ,QAAA,cAAA;AAAS,WAAA,eAAAA,UAAA,UAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,YAAA;IAAM,EAAA,CAAA;AACf,QAAA,gBAAA;AAAS,WAAA,eAAAA,UAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,cAAA;IAAQ,EAAA,CAAA;AAEjB,IAAAA,SAAA,UAAU,MAAM,SAAA;AAChB,IAAAA,SAAA,UAAU,YAAY;AACtB,IAAAA,SAAA,UAAU,SAAS,YAAA;AACnB,IAAAA,SAAA,UAAU,WAAW,cAAA;;;;;;;;;;ACttCrB,QAAM,OACJ,OAAO,gBAAgB,YACvB,eACA,OAAO,YAAY,QAAQ,aACvB,cACA;AAEN,QAAM,SAAS,oBAAI,IAAG;AAMtB,QAAM,UACJ,OAAO,YAAY,YAAY,CAAC,CAAC,UAAU,UAAU,CAAA;AAIvD,QAAM,cAAc,CAClB,KACA,MACA,MACA,OACE;AACF,aAAO,QAAQ,gBAAgB,aAC3B,QAAQ,YAAY,KAAK,MAAM,MAAM,EAAE,IACvC,QAAQ,MAAM,IAAI,IAAI,KAAK,IAAI,KAAK,GAAG,EAAE;IAC/C;AAEA,QAAI,KAAK,WAAW;AACpB,QAAI,KAAK,WAAW;AAGpB,QAAI,OAAO,OAAO,aAAa;AAE7B,WAAK,MAAM,YAAW;QACpB;QACA,WAAqC,CAAA;QACrC;QACA,UAAmB;QACnB,iBAAiBQ,IAAW,IAAwB;AAClD,eAAK,SAAS,KAAK,EAAE;QACvB;;AAGF,WAAK,MAAM,gBAAe;QACxB,cAAA;AACE,yBAAc;QAChB;QACA,SAAS,IAAI,GAAE;QACf,MAAM,QAAW;AACf,cAAI,KAAK,OAAO;AAAS;AAEzB,eAAK,OAAO,SAAS;AAErB,eAAK,OAAO,UAAU;AAEtB,qBAAW,MAAM,KAAK,OAAO,UAAU;AACrC,eAAG,MAAM;;AAEX,eAAK,OAAO,UAAU,MAAM;QAC9B;;AAEF,UAAI,yBACF,QAAQ,KAAK,gCAAgC;AAC/C,YAAM,iBAAiB,MAAK;AAC1B,YAAI,CAAC;AAAwB;AAC7B,iCAAyB;AACzB,oBACE,oaAOA,uBACA,WACA,cAAc;MAElB;;AAIF,QAAM,aAAa,CAAC,SAAiB,CAAC,OAAO,IAAI,IAAI;AAMrD,QAAM,WAAW,CAACC,OAChBA,MAAKA,OAAM,KAAK,MAAMA,EAAC,KAAKA,KAAI,KAAK,SAASA,EAAC;AAcjD,QAAM,eAAe,CAAC,QACpB,CAAC,SAAS,GAAG,IACT,OACA,OAAO,KAAK,IAAI,GAAG,CAAC,IACpB,aACA,OAAO,KAAK,IAAI,GAAG,EAAE,IACrB,cACA,OAAO,KAAK,IAAI,GAAG,EAAE,IACrB,cACA,OAAO,OAAO,mBACd,YACA;AAGN,QAAM,YAAN,cAAwB,MAAa;MACnC,YAAY,MAAY;AACtB,cAAM,IAAI;AACV,aAAK,KAAK,CAAC;MACb;;AAMF,QAAM,QAAN,MAAM,OAAK;MACT;MACA;;MAEA,OAAO,gBAAyB;MAChC,OAAO,OAAO,KAAW;AACvB,cAAM,UAAU,aAAa,GAAG;AAChC,YAAI,CAAC;AAAS,iBAAO,CAAA;AACrB,eAAM,gBAAgB;AACtB,cAAM,IAAI,IAAI,OAAM,KAAK,OAAO;AAChC,eAAM,gBAAgB;AACtB,eAAO;MACT;MACA,YACE,KACA,SAAyC;AAGzC,YAAI,CAAC,OAAM,eAAe;AACxB,gBAAM,IAAI,UAAU,yCAAyC;;AAG/D,aAAK,OAAO,IAAI,QAAQ,GAAG;AAC3B,aAAK,SAAS;MAChB;MACA,KAAKA,IAAQ;AACX,aAAK,KAAK,KAAK,QAAQ,IAAIA;MAC7B;MACA,MAAG;AACD,eAAO,KAAK,KAAK,EAAE,KAAK,MAAM;MAChC;;AAu7BF,QAAa,WAAb,MAAa,UAAQ;;MAIV;MACA;MACA;MACA;MACA;MACA;;;;MAKT;;;;MAKA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAKA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;;;MAIA;;MAGA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAEA;MACA;MACA;;;;;;;;;;MAWA,OAAO,sBAILC,IAAqB;AACrB,eAAO;;UAEL,QAAQA,GAAE;UACV,MAAMA,GAAE;UACR,OAAOA,GAAE;UACT,QAAQA,GAAE;UACV,SAASA,GAAE;UACX,SAASA,GAAE;UACX,MAAMA,GAAE;UACR,MAAMA,GAAE;UACR,IAAI,OAAI;AACN,mBAAOA,GAAE;UACX;UACA,IAAI,OAAI;AACN,mBAAOA,GAAE;UACX;UACA,MAAMA,GAAE;;UAER,mBAAmB,CAAC,MAAWA,GAAE,mBAAmB,CAAC;UACrD,iBAAiB,CACf,GACAC,QACA,SACA,YAEAD,GAAE,iBACA,GACAC,QACA,SACA,OAAO;UAEX,YAAY,CAACA,WACXD,GAAE,YAAYC,MAAc;UAC9B,SAAS,CAAC,YACRD,GAAE,SAAS,OAAO;UACpB,UAAU,CAAC,YACTA,GAAE,UAAU,OAAO;UACrB,SAAS,CAACC,WACRD,GAAE,SAASC,MAAc;;MAE/B;;;;;MAOA,IAAI,MAAG;AACL,eAAO,KAAK;MACd;;;;MAIA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;;;;MAIA,IAAI,iBAAc;AAChB,eAAO,KAAK;MACd;;;;MAIA,IAAI,OAAI;AACN,eAAO,KAAK;MACd;;;;MAIA,IAAI,cAAW;AACb,eAAO,KAAK;MACd;MACA,IAAI,aAAU;AACZ,eAAO,KAAK;MACd;;;;MAIA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;;;;MAIA,IAAI,eAAY;AACd,eAAO,KAAK;MACd;MAEA,YACE,SAAwD;AAExD,cAAM,EACJ,MAAM,GACN,KACA,gBAAgB,GAChB,cACA,gBACA,gBACA,YACA,SACA,cACA,gBACA,aACA,UAAU,GACV,eAAe,GACf,iBACA,aACA,YACA,0BACA,oBACA,4BACA,wBACA,iBAAgB,IACd;AAEJ,YAAI,QAAQ,KAAK,CAAC,SAAS,GAAG,GAAG;AAC/B,gBAAM,IAAI,UAAU,0CAA0C;;AAGhE,cAAM,YAAY,MAAM,aAAa,GAAG,IAAI;AAC5C,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,wBAAwB,GAAG;;AAG7C,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,aAAK,eAAe,gBAAgB,KAAK;AACzC,aAAK,kBAAkB;AACvB,YAAI,KAAK,iBAAiB;AACxB,cAAI,CAAC,KAAK,YAAY,CAAC,KAAK,cAAc;AACxC,kBAAM,IAAI,UACR,oEAAoE;;AAGxE,cAAI,OAAO,KAAK,oBAAoB,YAAY;AAC9C,kBAAM,IAAI,UAAU,qCAAqC;;;AAI7D,YACE,eAAe,UACf,OAAO,eAAe,YACtB;AACA,gBAAM,IAAI,UAAU,0CAA0C;;AAEhE,aAAK,cAAc;AAEnB,YACE,gBAAgB,UAChB,OAAO,gBAAgB,YACvB;AACA,gBAAM,IAAI,UACR,6CAA6C;;AAGjD,aAAK,eAAe;AACpB,aAAK,kBAAkB,CAAC,CAAC;AAEzB,aAAK,UAAU,oBAAI,IAAG;AACtB,aAAK,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,MAAS;AAC7C,aAAK,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,MAAS;AAC7C,aAAK,QAAQ,IAAI,UAAU,GAAG;AAC9B,aAAK,QAAQ,IAAI,UAAU,GAAG;AAC9B,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,QAAQ,MAAM,OAAO,GAAG;AAC7B,aAAK,QAAQ;AACb,aAAK,kBAAkB;AAEvB,YAAI,OAAO,YAAY,YAAY;AACjC,eAAK,WAAW;;AAElB,YAAI,OAAO,iBAAiB,YAAY;AACtC,eAAK,gBAAgB;AACrB,eAAK,YAAY,CAAA;eACZ;AACL,eAAK,gBAAgB;AACrB,eAAK,YAAY;;AAEnB,aAAK,cAAc,CAAC,CAAC,KAAK;AAC1B,aAAK,mBAAmB,CAAC,CAAC,KAAK;AAE/B,aAAK,iBAAiB,CAAC,CAAC;AACxB,aAAK,cAAc,CAAC,CAAC;AACrB,aAAK,2BAA2B,CAAC,CAAC;AAClC,aAAK,6BAA6B,CAAC,CAAC;AACpC,aAAK,yBAAyB,CAAC,CAAC;AAChC,aAAK,mBAAmB,CAAC,CAAC;AAG1B,YAAI,KAAK,iBAAiB,GAAG;AAC3B,cAAI,KAAK,aAAa,GAAG;AACvB,gBAAI,CAAC,SAAS,KAAK,QAAQ,GAAG;AAC5B,oBAAM,IAAI,UACR,iDAAiD;;;AAIvD,cAAI,CAAC,SAAS,KAAK,YAAY,GAAG;AAChC,kBAAM,IAAI,UACR,sDAAsD;;AAG1D,eAAK,wBAAuB;;AAG9B,aAAK,aAAa,CAAC,CAAC;AACpB,aAAK,qBAAqB,CAAC,CAAC;AAC5B,aAAK,iBAAiB,CAAC,CAAC;AACxB,aAAK,iBAAiB,CAAC,CAAC;AACxB,aAAK,gBACH,SAAS,aAAa,KAAK,kBAAkB,IACzC,gBACA;AACN,aAAK,eAAe,CAAC,CAAC;AACtB,aAAK,MAAM,OAAO;AAClB,YAAI,KAAK,KAAK;AACZ,cAAI,CAAC,SAAS,KAAK,GAAG,GAAG;AACvB,kBAAM,IAAI,UACR,6CAA6C;;AAGjD,eAAK,uBAAsB;;AAI7B,YAAI,KAAK,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK,aAAa,GAAG;AAC5D,gBAAM,IAAI,UACR,kDAAkD;;AAGtD,YAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU;AACtD,gBAAM,OAAO;AACb,cAAI,WAAW,IAAI,GAAG;AACpB,mBAAO,IAAI,IAAI;AACf,kBAAM,MACJ;AAEF,wBAAY,KAAK,yBAAyB,MAAM,SAAQ;;;MAG9D;;;;;MAMA,gBAAgB,KAAM;AACpB,eAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,WAAW;MAC5C;MAEA,yBAAsB;AACpB,cAAM,OAAO,IAAI,UAAU,KAAK,IAAI;AACpC,cAAM,SAAS,IAAI,UAAU,KAAK,IAAI;AACtC,aAAK,QAAQ;AACb,aAAK,UAAU;AAEf,aAAK,cAAc,CAACA,QAAO,KAAK,QAAQ,KAAK,IAAG,MAAM;AACpD,iBAAOA,MAAK,IAAI,QAAQ,IAAI,QAAQ;AACpC,eAAKA,MAAK,IAAI;AACd,cAAI,QAAQ,KAAK,KAAK,cAAc;AAClC,kBAAM,IAAI,WAAW,MAAK;AACxB,kBAAI,KAAK,SAASA,MAAK,GAAG;AACxB,qBAAK,QAAQ,KAAK,SAASA,MAAK,GAAQ,QAAQ;;YAEpD,GAAG,MAAM,CAAC;AAGV,gBAAI,EAAE,OAAO;AACX,gBAAE,MAAK;;;QAIb;AAEA,aAAK,iBAAiB,CAAAA,WAAQ;AAC5B,iBAAOA,MAAK,IAAI,KAAKA,MAAK,MAAM,IAAI,KAAK,IAAG,IAAK;QACnD;AAEA,aAAK,aAAa,CAAC,QAAQA,WAAS;AAClC,cAAI,KAAKA,MAAK,GAAG;AACf,kBAAM,MAAM,KAAKA,MAAK;AACtB,kBAAM,QAAQ,OAAOA,MAAK;AAE1B,gBAAI,CAAC,OAAO,CAAC;AAAO;AACpB,mBAAO,MAAM;AACb,mBAAO,QAAQ;AACf,mBAAO,MAAM,aAAa,OAAM;AAChC,kBAAM,MAAM,OAAO,MAAM;AACzB,mBAAO,eAAe,MAAM;;QAEhC;AAIA,YAAI,YAAY;AAChB,cAAM,SAAS,MAAK;AAClB,gBAAMF,KAAI,KAAK,IAAG;AAClB,cAAI,KAAK,gBAAgB,GAAG;AAC1B,wBAAYA;AACZ,kBAAM,IAAI,WACR,MAAO,YAAY,GACnB,KAAK,aAAa;AAIpB,gBAAI,EAAE,OAAO;AACX,gBAAE,MAAK;;;AAIX,iBAAOA;QACT;AAEA,aAAK,kBAAkB,SAAM;AAC3B,gBAAME,SAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,cAAIA,WAAU,QAAW;AACvB,mBAAO;;AAET,gBAAM,MAAM,KAAKA,MAAK;AACtB,gBAAM,QAAQ,OAAOA,MAAK;AAC1B,cAAI,CAAC,OAAO,CAAC,OAAO;AAClB,mBAAO;;AAET,gBAAM,OAAO,aAAa,OAAM,KAAM;AACtC,iBAAO,MAAM;QACf;AAEA,aAAK,WAAW,CAAAA,WAAQ;AACtB,gBAAM,IAAI,OAAOA,MAAK;AACtB,gBAAM,IAAI,KAAKA,MAAK;AACpB,iBAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,aAAa,OAAM,KAAM,IAAI;QACrD;MACF;;MAGA,iBAAyC,MAAK;MAAE;MAChD,aACE,MAAK;MAAE;MACT,cAMY,MAAK;MAAE;;MAGnB,WAAsC,MAAM;MAE5C,0BAAuB;AACrB,cAAM,QAAQ,IAAI,UAAU,KAAK,IAAI;AACrC,aAAK,kBAAkB;AACvB,aAAK,SAAS;AACd,aAAK,kBAAkB,CAAAA,WAAQ;AAC7B,eAAK,mBAAmB,MAAMA,MAAK;AACnC,gBAAMA,MAAK,IAAI;QACjB;AACA,aAAK,eAAe,CAAC,GAAG,GAAG,MAAM,oBAAmB;AAGlD,cAAI,KAAK,mBAAmB,CAAC,GAAG;AAC9B,mBAAO;;AAET,cAAI,CAAC,SAAS,IAAI,GAAG;AACnB,gBAAI,iBAAiB;AACnB,kBAAI,OAAO,oBAAoB,YAAY;AACzC,sBAAM,IAAI,UAAU,oCAAoC;;AAE1D,qBAAO,gBAAgB,GAAG,CAAC;AAC3B,kBAAI,CAAC,SAAS,IAAI,GAAG;AACnB,sBAAM,IAAI,UACR,0DAA0D;;mBAGzD;AACL,oBAAM,IAAI,UACR,2HAEwB;;;AAI9B,iBAAO;QACT;AACA,aAAK,eAAe,CAClBA,QACA,MACA,WACE;AACF,gBAAMA,MAAK,IAAI;AACf,cAAI,KAAK,UAAU;AACjB,kBAAM,UAAU,KAAK,WAAY,MAAMA,MAAK;AAC5C,mBAAO,KAAK,kBAAkB,SAAS;AACrC,mBAAK,OAAO,IAAI;;;AAGpB,eAAK,mBAAmB,MAAMA,MAAK;AACnC,cAAI,QAAQ;AACV,mBAAO,YAAY;AACnB,mBAAO,sBAAsB,KAAK;;QAEtC;MACF;MAEA,kBAA0C,QAAK;MAAE;MACjD,eAIY,CAAC,IAAI,IAAI,QAAO;MAAE;MAC9B,eAKqB,CACnB,IACA,IACA,MACA,oBACE;AACF,YAAI,QAAQ,iBAAiB;AAC3B,gBAAM,IAAI,UACR,kEAAkE;;AAGtE,eAAO;MACT;MAEA,CAAC,SAAS,EAAE,aAAa,KAAK,WAAU,IAAK,CAAA,GAAE;AAC7C,YAAI,KAAK,OAAO;AACd,mBAASC,KAAI,KAAK,OAAO,QAAQ;AAC/B,gBAAI,CAAC,KAAK,cAAcA,EAAC,GAAG;AAC1B;;AAEF,gBAAI,cAAc,CAAC,KAAK,SAASA,EAAC,GAAG;AACnC,oBAAMA;;AAER,gBAAIA,OAAM,KAAK,OAAO;AACpB;mBACK;AACL,cAAAA,KAAI,KAAK,MAAMA,EAAC;;;;MAIxB;MAEA,CAAC,UAAU,EAAE,aAAa,KAAK,WAAU,IAAK,CAAA,GAAE;AAC9C,YAAI,KAAK,OAAO;AACd,mBAASA,KAAI,KAAK,OAAO,QAAQ;AAC/B,gBAAI,CAAC,KAAK,cAAcA,EAAC,GAAG;AAC1B;;AAEF,gBAAI,cAAc,CAAC,KAAK,SAASA,EAAC,GAAG;AACnC,oBAAMA;;AAER,gBAAIA,OAAM,KAAK,OAAO;AACpB;mBACK;AACL,cAAAA,KAAI,KAAK,MAAMA,EAAC;;;;MAIxB;MAEA,cAAcD,QAAY;AACxB,eACEA,WAAU,UACV,KAAK,QAAQ,IAAI,KAAK,SAASA,MAAK,CAAM,MAAMA;MAEpD;;;;;MAMA,CAAC,UAAO;AACN,mBAAWC,MAAK,KAAK,SAAQ,GAAI;AAC/B,cACE,KAAK,SAASA,EAAC,MAAM,UACrB,KAAK,SAASA,EAAC,MAAM,UACrB,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM,CAAC,KAAK,SAASA,EAAC,GAAG,KAAK,SAASA,EAAC,CAAC;;;MAG/C;;;;;;;MAQA,CAAC,WAAQ;AACP,mBAAWA,MAAK,KAAK,UAAS,GAAI;AAChC,cACE,KAAK,SAASA,EAAC,MAAM,UACrB,KAAK,SAASA,EAAC,MAAM,UACrB,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM,CAAC,KAAK,SAASA,EAAC,GAAG,KAAK,SAASA,EAAC,CAAC;;;MAG/C;;;;;MAMA,CAAC,OAAI;AACH,mBAAWA,MAAK,KAAK,SAAQ,GAAI;AAC/B,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,cACE,MAAM,UACN,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM;;;MAGZ;;;;;;;MAQA,CAAC,QAAK;AACJ,mBAAWA,MAAK,KAAK,UAAS,GAAI;AAChC,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,cACE,MAAM,UACN,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM;;;MAGZ;;;;;MAMA,CAAC,SAAM;AACL,mBAAWA,MAAK,KAAK,SAAQ,GAAI;AAC/B,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,cACE,MAAM,UACN,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM,KAAK,SAASA,EAAC;;;MAG3B;;;;;;;MAQA,CAAC,UAAO;AACN,mBAAWA,MAAK,KAAK,UAAS,GAAI;AAChC,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,cACE,MAAM,UACN,CAAC,KAAK,mBAAmB,KAAK,SAASA,EAAC,CAAC,GACzC;AACA,kBAAM,KAAK,SAASA,EAAC;;;MAG3B;;;;;MAMA,CAAC,OAAO,QAAQ,IAAC;AACf,eAAO,KAAK,QAAO;MACrB;;;;;;MAOA,CAAC,OAAO,WAAW,IAAI;;;;;MAMvB,KACE,IACA,aAA4C,CAAA,GAAE;AAE9C,mBAAWA,MAAK,KAAK,SAAQ,GAAI;AAC/B,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,gBAAM,QAAQ,KAAK,mBAAmB,CAAC,IACnC,EAAE,uBACF;AACJ,cAAI,UAAU;AAAW;AACzB,cAAI,GAAG,OAAO,KAAK,SAASA,EAAC,GAAQ,IAAI,GAAG;AAC1C,mBAAO,KAAK,IAAI,KAAK,SAASA,EAAC,GAAQ,UAAU;;;MAGvD;;;;;;;;;;;;MAaA,QACE,IACA,QAAa,MAAI;AAEjB,mBAAWA,MAAK,KAAK,SAAQ,GAAI;AAC/B,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,gBAAM,QAAQ,KAAK,mBAAmB,CAAC,IACnC,EAAE,uBACF;AACJ,cAAI,UAAU;AAAW;AACzB,aAAG,KAAK,OAAO,OAAO,KAAK,SAASA,EAAC,GAAQ,IAAI;;MAErD;;;;;MAMA,SACE,IACA,QAAa,MAAI;AAEjB,mBAAWA,MAAK,KAAK,UAAS,GAAI;AAChC,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,gBAAM,QAAQ,KAAK,mBAAmB,CAAC,IACnC,EAAE,uBACF;AACJ,cAAI,UAAU;AAAW;AACzB,aAAG,KAAK,OAAO,OAAO,KAAK,SAASA,EAAC,GAAQ,IAAI;;MAErD;;;;;MAMA,aAAU;AACR,YAAI,UAAU;AACd,mBAAWA,MAAK,KAAK,UAAU,EAAE,YAAY,KAAI,CAAE,GAAG;AACpD,cAAI,KAAK,SAASA,EAAC,GAAG;AACpB,iBAAK,QAAQ,KAAK,SAASA,EAAC,GAAQ,QAAQ;AAC5C,sBAAU;;;AAGd,eAAO;MACT;;;;;;;;;;;;;MAcA,KAAK,KAAM;AACT,cAAMA,KAAI,KAAK,QAAQ,IAAI,GAAG;AAC9B,YAAIA,OAAM;AAAW,iBAAO;AAC5B,cAAM,IAAI,KAAK,SAASA,EAAC;AACzB,cAAM,QAAuB,KAAK,mBAAmB,CAAC,IAClD,EAAE,uBACF;AACJ,YAAI,UAAU;AAAW,iBAAO;AAChC,cAAM,QAA2B,EAAE,MAAK;AACxC,YAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,gBAAM,MAAM,KAAK,MAAMA,EAAC;AACxB,gBAAM,QAAQ,KAAK,QAAQA,EAAC;AAC5B,cAAI,OAAO,OAAO;AAChB,kBAAM,SAAS,OAAO,KAAK,IAAG,IAAK;AACnC,kBAAM,MAAM;AACZ,kBAAM,QAAQ,KAAK,IAAG;;;AAG1B,YAAI,KAAK,QAAQ;AACf,gBAAM,OAAO,KAAK,OAAOA,EAAC;;AAE5B,eAAO;MACT;;;;;;;;;;;;;;MAeA,OAAI;AACF,cAAM,MAAgC,CAAA;AACtC,mBAAWA,MAAK,KAAK,SAAS,EAAE,YAAY,KAAI,CAAE,GAAG;AACnD,gBAAM,MAAM,KAAK,SAASA,EAAC;AAC3B,gBAAM,IAAI,KAAK,SAASA,EAAC;AACzB,gBAAM,QAAuB,KAAK,mBAAmB,CAAC,IAClD,EAAE,uBACF;AACJ,cAAI,UAAU,UAAa,QAAQ;AAAW;AAC9C,gBAAM,QAA2B,EAAE,MAAK;AACxC,cAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,kBAAM,MAAM,KAAK,MAAMA,EAAC;AAGxB,kBAAM,MAAM,KAAK,IAAG,IAAM,KAAK,QAAQA,EAAC;AACxC,kBAAM,QAAQ,KAAK,MAAM,KAAK,IAAG,IAAK,GAAG;;AAE3C,cAAI,KAAK,QAAQ;AACf,kBAAM,OAAO,KAAK,OAAOA,EAAC;;AAE5B,cAAI,QAAQ,CAAC,KAAK,KAAK,CAAC;;AAE1B,eAAO;MACT;;;;;;;;;;MAWA,KAAK,KAA6B;AAChC,aAAK,MAAK;AACV,mBAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC9B,cAAI,MAAM,OAAO;AAOf,kBAAM,MAAM,KAAK,IAAG,IAAK,MAAM;AAC/B,kBAAM,QAAQ,KAAK,IAAG,IAAK;;AAE7B,eAAK,IAAI,KAAK,MAAM,OAAO,KAAK;;MAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgCA,IACE,GACA,GACA,aAA4C,CAAA,GAAE;AAE9C,YAAI,MAAM,QAAW;AACnB,eAAK,OAAO,CAAC;AACb,iBAAO;;AAET,cAAM,EACJ,MAAM,KAAK,KACX,OACA,iBAAiB,KAAK,gBACtB,kBAAkB,KAAK,iBACvB,OAAM,IACJ;AACJ,YAAI,EAAE,cAAc,KAAK,YAAW,IAAK;AAEzC,cAAM,OAAO,KAAK,aAChB,GACA,GACA,WAAW,QAAQ,GACnB,eAAe;AAIjB,YAAI,KAAK,gBAAgB,OAAO,KAAK,cAAc;AACjD,cAAI,QAAQ;AACV,mBAAO,MAAM;AACb,mBAAO,uBAAuB;;AAGhC,eAAK,QAAQ,GAAG,KAAK;AACrB,iBAAO;;AAET,YAAID,SAAQ,KAAK,UAAU,IAAI,SAAY,KAAK,QAAQ,IAAI,CAAC;AAC7D,YAAIA,WAAU,QAAW;AAEvB,UAAAA,SACE,KAAK,UAAU,IACX,KAAK,QACL,KAAK,MAAM,WAAW,IACtB,KAAK,MAAM,IAAG,IACd,KAAK,UAAU,KAAK,OACpB,KAAK,OAAO,KAAK,IACjB,KAAK;AAEX,eAAK,SAASA,MAAK,IAAI;AACvB,eAAK,SAASA,MAAK,IAAI;AACvB,eAAK,QAAQ,IAAI,GAAGA,MAAK;AACzB,eAAK,MAAM,KAAK,KAAK,IAAIA;AACzB,eAAK,MAAMA,MAAK,IAAI,KAAK;AACzB,eAAK,QAAQA;AACb,eAAK;AACL,eAAK,aAAaA,QAAO,MAAM,MAAM;AACrC,cAAI;AAAQ,mBAAO,MAAM;AACzB,wBAAc;eACT;AAEL,eAAK,YAAYA,MAAK;AACtB,gBAAM,SAAS,KAAK,SAASA,MAAK;AAClC,cAAI,MAAM,QAAQ;AAChB,gBAAI,KAAK,mBAAmB,KAAK,mBAAmB,MAAM,GAAG;AAC3D,qBAAO,kBAAkB,MAAM,IAAI,MAAM,UAAU,CAAC;AACpD,oBAAM,EAAE,sBAAsB,EAAC,IAAK;AACpC,kBAAI,MAAM,UAAa,CAAC,gBAAgB;AACtC,oBAAI,KAAK,aAAa;AACpB,uBAAK,WAAW,GAAQ,GAAG,KAAK;;AAElC,oBAAI,KAAK,kBAAkB;AACzB,uBAAK,WAAW,KAAK,CAAC,GAAQ,GAAG,KAAK,CAAC;;;uBAGlC,CAAC,gBAAgB;AAC1B,kBAAI,KAAK,aAAa;AACpB,qBAAK,WAAW,QAAa,GAAG,KAAK;;AAEvC,kBAAI,KAAK,kBAAkB;AACzB,qBAAK,WAAW,KAAK,CAAC,QAAa,GAAG,KAAK,CAAC;;;AAGhD,iBAAK,gBAAgBA,MAAK;AAC1B,iBAAK,aAAaA,QAAO,MAAM,MAAM;AACrC,iBAAK,SAASA,MAAK,IAAI;AACvB,gBAAI,QAAQ;AACV,qBAAO,MAAM;AACb,oBAAM,WACJ,UAAU,KAAK,mBAAmB,MAAM,IACpC,OAAO,uBACP;AACN,kBAAI,aAAa;AAAW,uBAAO,WAAW;;qBAEvC,QAAQ;AACjB,mBAAO,MAAM;;;AAGjB,YAAI,QAAQ,KAAK,CAAC,KAAK,OAAO;AAC5B,eAAK,uBAAsB;;AAE7B,YAAI,KAAK,OAAO;AACd,cAAI,CAAC,aAAa;AAChB,iBAAK,YAAYA,QAAO,KAAK,KAAK;;AAEpC,cAAI;AAAQ,iBAAK,WAAW,QAAQA,MAAK;;AAE3C,YAAI,CAAC,kBAAkB,KAAK,oBAAoB,KAAK,WAAW;AAC9D,gBAAM,KAAK,KAAK;AAChB,cAAI;AACJ,iBAAQ,OAAO,IAAI,MAAK,GAAK;AAC3B,iBAAK,gBAAgB,GAAG,IAAI;;;AAGhC,eAAO;MACT;;;;;MAMA,MAAG;AACD,YAAI;AACF,iBAAO,KAAK,OAAO;AACjB,kBAAM,MAAM,KAAK,SAAS,KAAK,KAAK;AACpC,iBAAK,OAAO,IAAI;AAChB,gBAAI,KAAK,mBAAmB,GAAG,GAAG;AAChC,kBAAI,IAAI,sBAAsB;AAC5B,uBAAO,IAAI;;uBAEJ,QAAQ,QAAW;AAC5B,qBAAO;;;;AAIX,cAAI,KAAK,oBAAoB,KAAK,WAAW;AAC3C,kBAAM,KAAK,KAAK;AAChB,gBAAI;AACJ,mBAAQ,OAAO,IAAI,MAAK,GAAK;AAC3B,mBAAK,gBAAgB,GAAG,IAAI;;;;MAIpC;MAEA,OAAO,MAAa;AAClB,cAAM,OAAO,KAAK;AAClB,cAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,cAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,YAAI,KAAK,mBAAmB,KAAK,mBAAmB,CAAC,GAAG;AACtD,YAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC;mBACrC,KAAK,eAAe,KAAK,kBAAkB;AACpD,cAAI,KAAK,aAAa;AACpB,iBAAK,WAAW,GAAG,GAAG,OAAO;;AAE/B,cAAI,KAAK,kBAAkB;AACzB,iBAAK,WAAW,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC;;;AAGxC,aAAK,gBAAgB,IAAI;AAEzB,YAAI,MAAM;AACR,eAAK,SAAS,IAAI,IAAI;AACtB,eAAK,SAAS,IAAI,IAAI;AACtB,eAAK,MAAM,KAAK,IAAI;;AAEtB,YAAI,KAAK,UAAU,GAAG;AACpB,eAAK,QAAQ,KAAK,QAAQ;AAC1B,eAAK,MAAM,SAAS;eACf;AACL,eAAK,QAAQ,KAAK,MAAM,IAAI;;AAE9B,aAAK,QAAQ,OAAO,CAAC;AACrB,aAAK;AACL,eAAO;MACT;;;;;;;;;;;;;;;;;MAkBA,IAAI,GAAM,aAA4C,CAAA,GAAE;AACtD,cAAM,EAAE,iBAAiB,KAAK,gBAAgB,OAAM,IAClD;AACF,cAAMA,SAAQ,KAAK,QAAQ,IAAI,CAAC;AAChC,YAAIA,WAAU,QAAW;AACvB,gBAAM,IAAI,KAAK,SAASA,MAAK;AAC7B,cACE,KAAK,mBAAmB,CAAC,KACzB,EAAE,yBAAyB,QAC3B;AACA,mBAAO;;AAET,cAAI,CAAC,KAAK,SAASA,MAAK,GAAG;AACzB,gBAAI,gBAAgB;AAClB,mBAAK,eAAeA,MAAK;;AAE3B,gBAAI,QAAQ;AACV,qBAAO,MAAM;AACb,mBAAK,WAAW,QAAQA,MAAK;;AAE/B,mBAAO;qBACE,QAAQ;AACjB,mBAAO,MAAM;AACb,iBAAK,WAAW,QAAQA,MAAK;;mBAEtB,QAAQ;AACjB,iBAAO,MAAM;;AAEf,eAAO;MACT;;;;;;;;MASA,KAAK,GAAM,cAA8C,CAAA,GAAE;AACzD,cAAM,EAAE,aAAa,KAAK,WAAU,IAAK;AACzC,cAAMA,SAAQ,KAAK,QAAQ,IAAI,CAAC;AAChC,YACEA,WAAU,UACT,CAAC,cAAc,KAAK,SAASA,MAAK,GACnC;AACA;;AAEF,cAAM,IAAI,KAAK,SAASA,MAAK;AAE7B,eAAO,KAAK,mBAAmB,CAAC,IAAI,EAAE,uBAAuB;MAC/D;MAEA,iBACE,GACAA,QACA,SACA,SAAY;AAEZ,cAAM,IAAIA,WAAU,SAAY,SAAY,KAAK,SAASA,MAAK;AAC/D,YAAI,KAAK,mBAAmB,CAAC,GAAG;AAC9B,iBAAO;;AAGT,cAAM,KAAK,IAAI,GAAE;AACjB,cAAM,EAAE,OAAM,IAAK;AAEnB,gBAAQ,iBAAiB,SAAS,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG;UAC/D,QAAQ,GAAG;SACZ;AAED,cAAM,YAAY;UAChB,QAAQ,GAAG;UACX;UACA;;AAGF,cAAM,KAAK,CACTE,IACA,cAAc,UACG;AACjB,gBAAM,EAAE,SAAAC,SAAO,IAAK,GAAG;AACvB,gBAAM,cAAc,QAAQ,oBAAoBD,OAAM;AACtD,cAAI,QAAQ,QAAQ;AAClB,gBAAIC,YAAW,CAAC,aAAa;AAC3B,sBAAQ,OAAO,eAAe;AAC9B,sBAAQ,OAAO,aAAa,GAAG,OAAO;AACtC,kBAAI;AAAa,wBAAQ,OAAO,oBAAoB;mBAC/C;AACL,sBAAQ,OAAO,gBAAgB;;;AAGnC,cAAIA,YAAW,CAAC,eAAe,CAAC,aAAa;AAC3C,mBAAO,UAAU,GAAG,OAAO,MAAM;;AAGnC,gBAAMC,MAAK;AACX,cAAI,KAAK,SAASJ,MAAc,MAAM,GAAG;AACvC,gBAAIE,OAAM,QAAW;AACnB,kBAAIE,IAAG,sBAAsB;AAC3B,qBAAK,SAASJ,MAAc,IAAII,IAAG;qBAC9B;AACL,qBAAK,QAAQ,GAAG,OAAO;;mBAEpB;AACL,kBAAI,QAAQ;AAAQ,wBAAQ,OAAO,eAAe;AAClD,mBAAK,IAAI,GAAGF,IAAG,UAAU,OAAO;;;AAGpC,iBAAOA;QACT;AAEA,cAAM,KAAK,CAAC,OAAW;AACrB,cAAI,QAAQ,QAAQ;AAClB,oBAAQ,OAAO,gBAAgB;AAC/B,oBAAQ,OAAO,aAAa;;AAE9B,iBAAO,UAAU,EAAE;QACrB;AAEA,cAAM,YAAY,CAAC,OAA0B;AAC3C,gBAAM,EAAE,SAAAC,SAAO,IAAK,GAAG;AACvB,gBAAM,oBACJA,YAAW,QAAQ;AACrB,gBAAM,aACJ,qBAAqB,QAAQ;AAC/B,gBAAM,WAAW,cAAc,QAAQ;AACvC,gBAAMC,MAAK;AACX,cAAI,KAAK,SAASJ,MAAc,MAAM,GAAG;AAGvC,kBAAM,MAAM,CAAC,YAAYI,IAAG,yBAAyB;AACrD,gBAAI,KAAK;AACP,mBAAK,QAAQ,GAAG,OAAO;uBACd,CAAC,mBAAmB;AAK7B,mBAAK,SAASJ,MAAc,IAAII,IAAG;;;AAGvC,cAAI,YAAY;AACd,gBAAI,QAAQ,UAAUA,IAAG,yBAAyB,QAAW;AAC3D,sBAAQ,OAAO,gBAAgB;;AAEjC,mBAAOA,IAAG;qBACDA,IAAG,eAAeA,KAAI;AAC/B,kBAAM;;QAEV;AAEA,cAAM,QAAQ,CACZ,KACA,QACE;AACF,gBAAM,MAAM,KAAK,eAAe,GAAG,GAAG,SAAS;AAC/C,cAAI,OAAO,eAAe,SAAS;AACjC,gBAAI,KAAK,CAAAF,OAAK,IAAIA,OAAM,SAAY,SAAYA,EAAC,GAAG,GAAG;;AAKzD,aAAG,OAAO,iBAAiB,SAAS,MAAK;AACvC,gBACE,CAAC,QAAQ,oBACT,QAAQ,wBACR;AACA,kBAAI,MAAS;AAEb,kBAAI,QAAQ,wBAAwB;AAClC,sBAAM,CAAAA,OAAK,GAAGA,IAAG,IAAI;;;UAG3B,CAAC;QACH;AAEA,YAAI,QAAQ;AAAQ,kBAAQ,OAAO,kBAAkB;AACrD,cAAM,IAAI,IAAI,QAAQ,KAAK,EAAE,KAAK,IAAI,EAAE;AACxC,cAAM,KAAyB,OAAO,OAAO,GAAG;UAC9C,mBAAmB;UACnB,sBAAsB;UACtB,YAAY;SACb;AAED,YAAIF,WAAU,QAAW;AAEvB,eAAK,IAAI,GAAG,IAAI,EAAE,GAAG,UAAU,SAAS,QAAQ,OAAS,CAAE;AAC3D,UAAAA,SAAQ,KAAK,QAAQ,IAAI,CAAC;eACrB;AACL,eAAK,SAASA,MAAK,IAAI;;AAEzB,eAAO;MACT;MAEA,mBAAmB,GAAM;AACvB,YAAI,CAAC,KAAK;AAAiB,iBAAO;AAClC,cAAM,IAAI;AACV,eACE,CAAC,CAAC,KACF,aAAa,WACb,EAAE,eAAe,sBAAsB,KACvC,EAAE,6BAA6B;MAEnC;MA+GA,MAAM,MACJ,GACA,eAAgD,CAAA,GAAE;AAElD,cAAM;;UAEJ,aAAa,KAAK;UAClB,iBAAiB,KAAK;UACtB,qBAAqB,KAAK;;UAE1B,MAAM,KAAK;UACX,iBAAiB,KAAK;UACtB,OAAO;UACP,kBAAkB,KAAK;UACvB,cAAc,KAAK;;UAEnB,2BAA2B,KAAK;UAChC,6BAA6B,KAAK;UAClC,mBAAmB,KAAK;UACxB,yBAAyB,KAAK;UAC9B;UACA,eAAe;UACf;UACA;QAAM,IACJ;AAEJ,YAAI,CAAC,KAAK,iBAAiB;AACzB,cAAI;AAAQ,mBAAO,QAAQ;AAC3B,iBAAO,KAAK,IAAI,GAAG;YACjB;YACA;YACA;YACA;WACD;;AAGH,cAAM,UAAU;UACd;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;AAGF,YAAIA,SAAQ,KAAK,QAAQ,IAAI,CAAC;AAC9B,YAAIA,WAAU,QAAW;AACvB,cAAI;AAAQ,mBAAO,QAAQ;AAC3B,gBAAM,IAAI,KAAK,iBAAiB,GAAGA,QAAO,SAAS,OAAO;AAC1D,iBAAQ,EAAE,aAAa;eAClB;AAEL,gBAAM,IAAI,KAAK,SAASA,MAAK;AAC7B,cAAI,KAAK,mBAAmB,CAAC,GAAG;AAC9B,kBAAM,QACJ,cAAc,EAAE,yBAAyB;AAC3C,gBAAI,QAAQ;AACV,qBAAO,QAAQ;AACf,kBAAI;AAAO,uBAAO,gBAAgB;;AAEpC,mBAAO,QAAQ,EAAE,uBAAwB,EAAE,aAAa;;AAK1D,gBAAMK,WAAU,KAAK,SAASL,MAAK;AACnC,cAAI,CAAC,gBAAgB,CAACK,UAAS;AAC7B,gBAAI;AAAQ,qBAAO,QAAQ;AAC3B,iBAAK,YAAYL,MAAK;AACtB,gBAAI,gBAAgB;AAClB,mBAAK,eAAeA,MAAK;;AAE3B,gBAAI;AAAQ,mBAAK,WAAW,QAAQA,MAAK;AACzC,mBAAO;;AAKT,gBAAM,IAAI,KAAK,iBAAiB,GAAGA,QAAO,SAAS,OAAO;AAC1D,gBAAM,WAAW,EAAE,yBAAyB;AAC5C,gBAAM,WAAW,YAAY;AAC7B,cAAI,QAAQ;AACV,mBAAO,QAAQK,WAAU,UAAU;AACnC,gBAAI,YAAYA;AAAS,qBAAO,gBAAgB;;AAElD,iBAAO,WAAW,EAAE,uBAAwB,EAAE,aAAa;;MAE/D;MAoCA,MAAM,WACJ,GACA,eAAgD,CAAA,GAAE;AAElD,cAAM,IAAI,MAAM,KAAK,MACnB,GACA,YAI8C;AAEhD,YAAI,MAAM;AAAW,gBAAM,IAAI,MAAM,4BAA4B;AACjE,eAAO;MACT;MAqCA,KAAK,GAAM,cAA8C,CAAA,GAAE;AACzD,cAAM,aAAa,KAAK;AACxB,YAAI,CAAC,YAAY;AACf,gBAAM,IAAI,MAAM,uCAAuC;;AAEzD,cAAM,EAAE,SAAS,cAAc,GAAG,QAAO,IAAK;AAC9C,cAAM,IAAI,KAAK,IAAI,GAAG,OAAO;AAC7B,YAAI,CAAC,gBAAgB,MAAM;AAAW,iBAAO;AAC7C,cAAM,KAAK,WAAW,GAAG,GAAG;UAC1B;UACA;SACqC;AACvC,aAAK,IAAI,GAAG,IAAI,OAAO;AACvB,eAAO;MACT;;;;;;;MAQA,IAAI,GAAM,aAA4C,CAAA,GAAE;AACtD,cAAM,EACJ,aAAa,KAAK,YAClB,iBAAiB,KAAK,gBACtB,qBAAqB,KAAK,oBAC1B,OAAM,IACJ;AACJ,cAAML,SAAQ,KAAK,QAAQ,IAAI,CAAC;AAChC,YAAIA,WAAU,QAAW;AACvB,gBAAM,QAAQ,KAAK,SAASA,MAAK;AACjC,gBAAM,WAAW,KAAK,mBAAmB,KAAK;AAC9C,cAAI;AAAQ,iBAAK,WAAW,QAAQA,MAAK;AACzC,cAAI,KAAK,SAASA,MAAK,GAAG;AACxB,gBAAI;AAAQ,qBAAO,MAAM;AAEzB,gBAAI,CAAC,UAAU;AACb,kBAAI,CAAC,oBAAoB;AACvB,qBAAK,QAAQ,GAAG,QAAQ;;AAE1B,kBAAI,UAAU;AAAY,uBAAO,gBAAgB;AACjD,qBAAO,aAAa,QAAQ;mBACvB;AACL,kBACE,UACA,cACA,MAAM,yBAAyB,QAC/B;AACA,uBAAO,gBAAgB;;AAEzB,qBAAO,aAAa,MAAM,uBAAuB;;iBAE9C;AACL,gBAAI;AAAQ,qBAAO,MAAM;AAMzB,gBAAI,UAAU;AACZ,qBAAO,MAAM;;AAEf,iBAAK,YAAYA,MAAK;AACtB,gBAAI,gBAAgB;AAClB,mBAAK,eAAeA,MAAK;;AAE3B,mBAAO;;mBAEA,QAAQ;AACjB,iBAAO,MAAM;;MAEjB;MAEA,SAAS,GAAUF,IAAQ;AACzB,aAAK,MAAMA,EAAC,IAAI;AAChB,aAAK,MAAM,CAAC,IAAIA;MAClB;MAEA,YAAYE,QAAY;AAStB,YAAIA,WAAU,KAAK,OAAO;AACxB,cAAIA,WAAU,KAAK,OAAO;AACxB,iBAAK,QAAQ,KAAK,MAAMA,MAAK;iBACxB;AACL,iBAAK,SACH,KAAK,MAAMA,MAAK,GAChB,KAAK,MAAMA,MAAK,CAAU;;AAG9B,eAAK,SAAS,KAAK,OAAOA,MAAK;AAC/B,eAAK,QAAQA;;MAEjB;;;;;;MAOA,OAAO,GAAI;AACT,eAAO,KAAK,QAAQ,GAAG,QAAQ;MACjC;MAEA,QAAQ,GAAM,QAA8B;AAC1C,YAAI,UAAU;AACd,YAAI,KAAK,UAAU,GAAG;AACpB,gBAAMA,SAAQ,KAAK,QAAQ,IAAI,CAAC;AAChC,cAAIA,WAAU,QAAW;AACvB,sBAAU;AACV,gBAAI,KAAK,UAAU,GAAG;AACpB,mBAAK,OAAO,MAAM;mBACb;AACL,mBAAK,gBAAgBA,MAAK;AAC1B,oBAAM,IAAI,KAAK,SAASA,MAAK;AAC7B,kBAAI,KAAK,mBAAmB,CAAC,GAAG;AAC9B,kBAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC;yBACrC,KAAK,eAAe,KAAK,kBAAkB;AACpD,oBAAI,KAAK,aAAa;AACpB,uBAAK,WAAW,GAAQ,GAAG,MAAM;;AAEnC,oBAAI,KAAK,kBAAkB;AACzB,uBAAK,WAAW,KAAK,CAAC,GAAQ,GAAG,MAAM,CAAC;;;AAG5C,mBAAK,QAAQ,OAAO,CAAC;AACrB,mBAAK,SAASA,MAAK,IAAI;AACvB,mBAAK,SAASA,MAAK,IAAI;AACvB,kBAAIA,WAAU,KAAK,OAAO;AACxB,qBAAK,QAAQ,KAAK,MAAMA,MAAK;yBACpBA,WAAU,KAAK,OAAO;AAC/B,qBAAK,QAAQ,KAAK,MAAMA,MAAK;qBACxB;AACL,sBAAM,KAAK,KAAK,MAAMA,MAAK;AAC3B,qBAAK,MAAM,EAAE,IAAI,KAAK,MAAMA,MAAK;AACjC,sBAAM,KAAK,KAAK,MAAMA,MAAK;AAC3B,qBAAK,MAAM,EAAE,IAAI,KAAK,MAAMA,MAAK;;AAEnC,mBAAK;AACL,mBAAK,MAAM,KAAKA,MAAK;;;;AAI3B,YAAI,KAAK,oBAAoB,KAAK,WAAW,QAAQ;AACnD,gBAAM,KAAK,KAAK;AAChB,cAAI;AACJ,iBAAQ,OAAO,IAAI,MAAK,GAAK;AAC3B,iBAAK,gBAAgB,GAAG,IAAI;;;AAGhC,eAAO;MACT;;;;MAKA,QAAK;AACH,eAAO,KAAK,OAAO,QAAQ;MAC7B;MACA,OAAO,QAA8B;AACnC,mBAAWA,UAAS,KAAK,UAAU,EAAE,YAAY,KAAI,CAAE,GAAG;AACxD,gBAAM,IAAI,KAAK,SAASA,MAAK;AAC7B,cAAI,KAAK,mBAAmB,CAAC,GAAG;AAC9B,cAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC;iBACzC;AACL,kBAAM,IAAI,KAAK,SAASA,MAAK;AAC7B,gBAAI,KAAK,aAAa;AACpB,mBAAK,WAAW,GAAQ,GAAQ,MAAM;;AAExC,gBAAI,KAAK,kBAAkB;AACzB,mBAAK,WAAW,KAAK,CAAC,GAAQ,GAAQ,MAAM,CAAC;;;;AAKnD,aAAK,QAAQ,MAAK;AAClB,aAAK,SAAS,KAAK,MAAS;AAC5B,aAAK,SAAS,KAAK,MAAS;AAC5B,YAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,eAAK,MAAM,KAAK,CAAC;AACjB,eAAK,QAAQ,KAAK,CAAC;;AAErB,YAAI,KAAK,QAAQ;AACf,eAAK,OAAO,KAAK,CAAC;;AAEpB,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,MAAM,SAAS;AACpB,aAAK,kBAAkB;AACvB,aAAK,QAAQ;AACb,YAAI,KAAK,oBAAoB,KAAK,WAAW;AAC3C,gBAAM,KAAK,KAAK;AAChB,cAAI;AACJ,iBAAQ,OAAO,IAAI,MAAK,GAAK;AAC3B,iBAAK,gBAAgB,GAAG,IAAI;;;MAGlC;;AAvwDF,IAAAM,SAAA,WAAA;;;;;;;;;;;;;AC5lCA,QAAM,OACJ,OAAO,YAAY,YAAY,UAC3B,UACA;MACE,QAAQ;MACR,QAAQ;;AAEhB,QAAA,gBAAA,QAAA,QAAA;AACA,QAAA,gBAAA,gBAAA,QAAA,QAAA,CAAA;AACA,QAAA,wBAAA,QAAA,gBAAA;AAaO,QAAMC,YAAW,CACtB,MAEA,CAAC,CAAC,KACF,OAAO,MAAM,aACZ,aAAa,YACZ,aAAa,cAAA,YACb,GAAAC,SAAA,YAAW,CAAC,MACZ,GAAAA,SAAA,YAAW,CAAC;AARH,IAAAA,SAAA,WAAAD;AAaN,QAAM,aAAa,CAAC,MACzB,CAAC,CAAC,KACF,OAAO,MAAM,YACb,aAAa,cAAA,gBACb,OAAQ,EAAwB,SAAS;IAExC,EAAwB,SAAS,cAAA,QAAO,SAAS,UAAU;AANjD,IAAAC,SAAA,aAAA;AAWN,QAAM,aAAa,CAAC,MACzB,CAAC,CAAC,KACF,OAAO,MAAM,YACb,aAAa,cAAA,gBACb,OAAQ,EAAwB,UAAU,cAC1C,OAAQ,EAAwB,QAAQ;AAL7B,IAAAA,SAAA,aAAA;AAOb,QAAM,MAAM,uBAAO,KAAK;AACxB,QAAM,iBAAiB,uBAAO,cAAc;AAC5C,QAAM,cAAc,uBAAO,YAAY;AACvC,QAAM,eAAe,uBAAO,aAAa;AACzC,QAAM,gBAAgB,uBAAO,cAAc;AAC3C,QAAM,SAAS,uBAAO,QAAQ;AAC9B,QAAM,OAAO,uBAAO,MAAM;AAC1B,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,aAAa,uBAAO,YAAY;AACtC,QAAM,WAAW,uBAAO,UAAU;AAClC,QAAM,UAAU,uBAAO,SAAS;AAChC,QAAM,UAAU,uBAAO,SAAS;AAChC,QAAM,SAAS,uBAAO,QAAQ;AAC9B,QAAM,SAAS,uBAAO,QAAQ;AAC9B,QAAM,SAAS,uBAAO,QAAQ;AAC9B,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,eAAe,uBAAO,cAAc;AAC1C,QAAM,aAAa,uBAAO,YAAY;AACtC,QAAM,cAAc,uBAAO,aAAa;AACxC,QAAM,aAAa,uBAAO,YAAY;AAEtC,QAAM,YAAY,uBAAO,WAAW;AAEpC,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,WAAW,uBAAO,UAAU;AAClC,QAAM,UAAU,uBAAO,SAAS;AAChC,QAAM,WAAW,uBAAO,UAAU;AAClC,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,QAAQ,uBAAO,OAAO;AAC5B,QAAM,UAAU,uBAAO,SAAS;AAChC,QAAM,SAAS,uBAAO,QAAQ;AAC9B,QAAM,gBAAgB,uBAAO,eAAe;AAC5C,QAAM,YAAY,uBAAO,WAAW;AAEpC,QAAM,QAAQ,CAAC,OAA6B,QAAQ,QAAO,EAAG,KAAK,EAAE;AACrE,QAAM,UAAU,CAAC,OAA6B,GAAE;AAMhD,QAAM,WAAW,CAAC,OAChB,OAAO,SAAS,OAAO,YAAY,OAAO;AAE5C,QAAM,oBAAoB,CAAC,MACzB,aAAa,eACZ,CAAC,CAAC,KACD,OAAO,MAAM,YACb,EAAE,eACF,EAAE,YAAY,SAAS,iBACvB,EAAE,cAAc;AAEpB,QAAM,oBAAoB,CAAC,MACzB,CAAC,OAAO,SAAS,CAAC,KAAK,YAAY,OAAO,CAAC;AAqB7C,QAAM,OAAN,MAAU;MACR;MACA;MACA;MACA;MACA,YACE,KACA,MACA,MACA;AACA,aAAK,MAAM;AACX,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,UAAU,MAAM,IAAI,MAAM,EAAC;AAChC,aAAK,KAAK,GAAG,SAAS,KAAK,OAAO;MAAC;MAErC,SAAS;AACP,aAAK,KAAK,eAAe,SAAS,KAAK,OAAO;MAAC;;;MAIjD,YAAY,KAAU;MAAC;;MAEvB,MAAM;AACJ,aAAK,OAAM;AACX,YAAI,KAAK,KAAK;AAAK,eAAK,KAAK,IAAG;MAAE;;AAUtC,QAAM,kBAAN,cAAiC,KAAO;MACtC,SAAS;AACP,aAAK,IAAI,eAAe,SAAS,KAAK,WAAW;AACjD,cAAM,OAAM;MAAE;MAEhB,YACE,KACA,MACA,MACA;AACA,cAAM,KAAK,MAAM,IAAI;AACrB,aAAK,cAAc,CAAC,OAAc,KAAK,KAAK,KAAK,SAAS,EAAE;AAC5D,YAAI,GAAG,SAAS,KAAK,WAAW;MAAC;;AA+IrC,QAAM,sBAAsB,CAC1BC,OACoC,CAAC,CAACA,GAAE;AAE1C,QAAM,oBAAoB,CACxBA,OAEA,CAACA,GAAE,cAAc,CAAC,CAACA,GAAE,YAAYA,GAAE,aAAa;AAalD,QAAA,WAAA,cAOU,cAAA,aAAY;MAGpB,CAAC,OAAO,IAAa;MACrB,CAAC,MAAM,IAAa;MACpB,CAAC,KAAK,IAAmB,CAAA;MACzB,CAAC,MAAM,IAAa,CAAA;MACpB,CAAC,UAAU;MACX,CAAC,QAAQ;MACT,CAAC,KAAK;MACN,CAAC,OAAO;MACR,CAAC,GAAG,IAAa;MACjB,CAAC,WAAW,IAAa;MACzB,CAAC,YAAY,IAAa;MAC1B,CAAC,MAAM,IAAa;MACpB,CAAC,aAAa,IAAa;MAC3B,CAAC,YAAY,IAAY;MACzB,CAAC,SAAS,IAAa;MACvB,CAAC,MAAM;MACP,CAAC,OAAO,IAAa;MACrB,CAAC,aAAa,IAAY;MAC1B,CAAC,SAAS,IAAa;;;;MAKvB,WAAoB;;;;MAIpB,WAAoB;;;;;;;MAQpB,eACK,MAKH;AACA,cAAM,UAAoC,KAAK,CAAC,KAC9C,CAAA;AACF,cAAK;AACL,YAAI,QAAQ,cAAc,OAAO,QAAQ,aAAa,UAAU;AAC9D,gBAAM,IAAI,UACR,kDAAkD;QAEtD;AACA,YAAI,oBAAoB,OAAO,GAAG;AAChC,eAAK,UAAU,IAAI;AACnB,eAAK,QAAQ,IAAI;QACnB,WAAW,kBAAkB,OAAO,GAAG;AACrC,eAAK,QAAQ,IAAI,QAAQ;AACzB,eAAK,UAAU,IAAI;QACrB,OAAO;AACL,eAAK,UAAU,IAAI;AACnB,eAAK,QAAQ,IAAI;QACnB;AACA,aAAK,KAAK,IAAI,CAAC,CAAC,QAAQ;AACxB,aAAK,OAAO,IAAI,KAAK,QAAQ,IACxB,IAAI,sBAAA,cAAc,KAAK,QAAQ,CAAC,IACjC;AAGJ,YAAI,WAAW,QAAQ,sBAAsB,MAAM;AACjD,iBAAO,eAAe,MAAM,UAAU,EAAE,KAAK,MAAM,KAAK,MAAM,EAAC,CAAE;QACnE;AAEA,YAAI,WAAW,QAAQ,qBAAqB,MAAM;AAChD,iBAAO,eAAe,MAAM,SAAS,EAAE,KAAK,MAAM,KAAK,KAAK,EAAC,CAAE;QACjE;AAEA,cAAM,EAAE,OAAM,IAAK;AACnB,YAAI,QAAQ;AACV,eAAK,MAAM,IAAI;AACf,cAAI,OAAO,SAAS;AAClB,iBAAK,KAAK,EAAC;UACb,OAAO;AACL,mBAAO,iBAAiB,SAAS,MAAM,KAAK,KAAK,EAAC,CAAE;UACtD;QACF;MAAC;;;;;;;;;;MAYH,IAAI,eAAe;AACjB,eAAO,KAAK,YAAY;MAAC;;;;MAM3B,IAAI,WAAW;AACb,eAAO,KAAK,QAAQ;MAAC;;;;MAMvB,IAAI,SAAS,MAAM;AACjB,cAAM,IAAI,MAAM,4CAA4C;MAAC;;;;MAM/D,YAAY,MAAyB;AACnC,cAAM,IAAI,MAAM,4CAA4C;MAAC;;;;MAM/D,IAAI,aAAa;AACf,eAAO,KAAK,UAAU;MAAC;;;;MAMzB,IAAI,WAAW,KAAK;AAClB,cAAM,IAAI,MAAM,8CAA8C;MAAC;;;;MAMjE,KAAK,OAAO,IAAa;AACvB,eAAO,KAAK,KAAK;MAAC;;;;;;;;MASpB,KAAK,OAAO,EAAEC,IAAY;AACxB,aAAK,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,CAACA;MAAC;;MAIlC,CAAC,KAAK,IAAI;AACR,aAAK,OAAO,IAAI;AAChB,aAAK,KAAK,SAAS,KAAK,MAAM,GAAG,MAAM;AACvC,aAAK,QAAQ,KAAK,MAAM,GAAG,MAAM;MAAC;;;;MAMpC,IAAI,UAAU;AACZ,eAAO,KAAK,OAAO;MAAC;;;;;MAMtB,IAAI,QAAQC,IAAG;MAAC;MA0BhB,MACEC,QACA,UACA,IACS;AACT,YAAI,KAAK,OAAO;AAAG,iBAAO;AAC1B,YAAI,KAAK,GAAG;AAAG,gBAAM,IAAI,MAAM,iBAAiB;AAEhD,YAAI,KAAK,SAAS,GAAG;AACnB,eAAK,KACH,SACA,OAAO,OACL,IAAI,MAAM,gDAAgD,GAC1D,EAAE,MAAM,uBAAsB,CAAE,CACjC;AAEH,iBAAO;QACT;AAEA,YAAI,OAAO,aAAa,YAAY;AAClC,eAAK;AACL,qBAAW;QACb;AAEA,YAAI,CAAC;AAAU,qBAAW;AAE1B,cAAM,KAAK,KAAK,KAAK,IAAI,QAAQ;AAMjC,YAAI,CAAC,KAAK,UAAU,KAAK,CAAC,OAAO,SAASA,MAAK,GAAG;AAChD,cAAI,kBAAkBA,MAAK,GAAG;AAE5B,YAAAA,SAAQ,OAAO,KACbA,OAAM,QACNA,OAAM,YACNA,OAAM,UAAU;UAEpB,WAAW,kBAAkBA,MAAK,GAAG;AAEnC,YAAAA,SAAQ,OAAO,KAAKA,MAAK;UAC3B,WAAW,OAAOA,WAAU,UAAU;AACpC,kBAAM,IAAI,MACR,sDAAsD;UAE1D;QACF;AAIA,YAAI,KAAK,UAAU,GAAG;AAGpB,cAAI,KAAK,OAAO,KAAK,KAAK,YAAY,MAAM;AAAG,iBAAK,KAAK,EAAE,IAAI;AAG/D,cAAI,KAAK,OAAO;AAAG,iBAAK,KAAK,QAAQA,MAAyB;;AACzD,iBAAK,UAAU,EAAEA,MAAyB;AAE/C,cAAI,KAAK,YAAY,MAAM;AAAG,iBAAK,KAAK,UAAU;AAElD,cAAI;AAAI,eAAG,EAAE;AAEb,iBAAO,KAAK,OAAO;QACrB;AAIA,YAAI,CAAEA,OAAkC,QAAQ;AAC9C,cAAI,KAAK,YAAY,MAAM;AAAG,iBAAK,KAAK,UAAU;AAClD,cAAI;AAAI,eAAG,EAAE;AACb,iBAAO,KAAK,OAAO;QACrB;AAIA,YACE,OAAOA,WAAU;QAEjB,EAAE,aAAa,KAAK,QAAQ,KAAK,CAAC,KAAK,OAAO,GAAG,WACjD;AAEA,UAAAA,SAAQ,OAAO,KAAKA,QAAO,QAAQ;QACrC;AAEA,YAAI,OAAO,SAASA,MAAK,KAAK,KAAK,QAAQ,GAAG;AAE5C,UAAAA,SAAQ,KAAK,OAAO,EAAE,MAAMA,MAAK;QACnC;AAGA,YAAI,KAAK,OAAO,KAAK,KAAK,YAAY,MAAM;AAAG,eAAK,KAAK,EAAE,IAAI;AAE/D,YAAI,KAAK,OAAO;AAAG,eAAK,KAAK,QAAQA,MAAyB;;AACzD,eAAK,UAAU,EAAEA,MAAyB;AAE/C,YAAI,KAAK,YAAY,MAAM;AAAG,eAAK,KAAK,UAAU;AAElD,YAAI;AAAI,aAAG,EAAE;AAEb,eAAO,KAAK,OAAO;MAAC;;;;;;;;;;;;;;MAgBtB,KAAKC,IAAiC;AACpC,YAAI,KAAK,SAAS;AAAG,iBAAO;AAC5B,aAAK,SAAS,IAAI;AAElB,YACE,KAAK,YAAY,MAAM,KACvBA,OAAM,KACLA,MAAKA,KAAI,KAAK,YAAY,GAC3B;AACA,eAAK,cAAc,EAAC;AACpB,iBAAO;QACT;AAEA,YAAI,KAAK,UAAU;AAAG,UAAAA,KAAI;AAE1B,YAAI,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC,KAAK,UAAU,GAAG;AAGhD,eAAK,MAAM,IAAI;YACZ,KAAK,QAAQ,IACV,KAAK,MAAM,EAAE,KAAK,EAAE,IACpB,OAAO,OACL,KAAK,MAAM,GACX,KAAK,YAAY,CAAC;;QAG5B;AAEA,cAAM,MAAM,KAAK,IAAI,EAAEA,MAAK,MAAM,KAAK,MAAM,EAAE,CAAC,CAAU;AAC1D,aAAK,cAAc,EAAC;AACpB,eAAO;MAAG;MAGZ,CAAC,IAAI,EAAEA,IAAkBD,QAAc;AACrC,YAAI,KAAK,UAAU;AAAG,eAAK,WAAW,EAAC;aAClC;AACH,gBAAME,KAAIF;AACV,cAAIC,OAAMC,GAAE,UAAUD,OAAM;AAAM,iBAAK,WAAW,EAAC;mBAC1C,OAAOC,OAAM,UAAU;AAC9B,iBAAK,MAAM,EAAE,CAAC,IAAIA,GAAE,MAAMD,EAAC;AAC3B,YAAAD,SAAQE,GAAE,MAAM,GAAGD,EAAC;AACpB,iBAAK,YAAY,KAAKA;UACxB,OAAO;AACL,iBAAK,MAAM,EAAE,CAAC,IAAIC,GAAE,SAASD,EAAC;AAC9B,YAAAD,SAAQE,GAAE,SAAS,GAAGD,EAAC;AACvB,iBAAK,YAAY,KAAKA;UACxB;QACF;AAEA,aAAK,KAAK,QAAQD,MAAK;AAEvB,YAAI,CAAC,KAAK,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG;AAAG,eAAK,KAAK,OAAO;AAEzD,eAAOA;MAAK;MAWd,IACEA,QACA,UACA,IACM;AACN,YAAI,OAAOA,WAAU,YAAY;AAC/B,eAAKA;AACL,UAAAA,SAAQ;QACV;AACA,YAAI,OAAO,aAAa,YAAY;AAClC,eAAK;AACL,qBAAW;QACb;AACA,YAAIA,WAAU;AAAW,eAAK,MAAMA,QAAO,QAAQ;AACnD,YAAI;AAAI,eAAK,KAAK,OAAO,EAAE;AAC3B,aAAK,GAAG,IAAI;AACZ,aAAK,WAAW;AAMhB,YAAI,KAAK,OAAO,KAAK,CAAC,KAAK,MAAM;AAAG,eAAK,cAAc,EAAC;AACxD,eAAO;MAAI;;MAIb,CAAC,MAAM,IAAI;AACT,YAAI,KAAK,SAAS;AAAG;AAErB,YAAI,CAAC,KAAK,aAAa,KAAK,CAAC,KAAK,KAAK,EAAE,QAAQ;AAC/C,eAAK,SAAS,IAAI;QACpB;AACA,aAAK,MAAM,IAAI;AACf,aAAK,OAAO,IAAI;AAChB,aAAK,KAAK,QAAQ;AAClB,YAAI,KAAK,MAAM,EAAE;AAAQ,eAAK,KAAK,EAAC;iBAC3B,KAAK,GAAG;AAAG,eAAK,cAAc,EAAC;;AACnC,eAAK,KAAK,OAAO;MAAC;;;;;;;;;;MAYzB,SAAS;AACP,eAAO,KAAK,MAAM,EAAC;MAAE;;;;MAMvB,QAAQ;AACN,aAAK,OAAO,IAAI;AAChB,aAAK,MAAM,IAAI;AACf,aAAK,SAAS,IAAI;MAAK;;;;MAMzB,IAAI,YAAY;AACd,eAAO,KAAK,SAAS;MAAC;;;;;MAOxB,IAAI,UAAU;AACZ,eAAO,KAAK,OAAO;MAAC;;;;MAMtB,IAAI,SAAS;AACX,eAAO,KAAK,MAAM;MAAC;MAGrB,CAAC,UAAU,EAAEA,QAAc;AACzB,YAAI,KAAK,UAAU;AAAG,eAAK,YAAY,KAAK;;AACvC,eAAK,YAAY,KAAMA,OAAkC;AAC9D,aAAK,MAAM,EAAE,KAAKA,MAAK;MAAC;MAG1B,CAAC,WAAW,IAAW;AACrB,YAAI,KAAK,UAAU;AAAG,eAAK,YAAY,KAAK;;AAE1C,eAAK,YAAY,KACf,KAAK,MAAM,EAAE,CAAC,EACd;AACJ,eAAO,KAAK,MAAM,EAAE,MAAK;MAAW;MAGtC,CAAC,KAAK,EAAE,UAAmB,OAAO;AAChC,WAAG;QAAC,SACF,KAAK,UAAU,EAAE,KAAK,WAAW,EAAC,CAAE,KACpC,KAAK,MAAM,EAAE;AAGf,YAAI,CAAC,WAAW,CAAC,KAAK,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG;AAAG,eAAK,KAAK,OAAO;MAAC;MAGxE,CAAC,UAAU,EAAEA,QAAc;AACzB,aAAK,KAAK,QAAQA,MAAK;AACvB,eAAO,KAAK,OAAO;MAAC;;;;;;MAQtB,KAAkC,MAAS,MAAuB;AAChE,YAAI,KAAK,SAAS;AAAG,iBAAO;AAC5B,aAAK,SAAS,IAAI;AAElB,cAAM,QAAQ,KAAK,WAAW;AAC9B,eAAO,QAAQ,CAAA;AACf,YAAI,SAAS,KAAK,UAAU,SAAS,KAAK;AAAQ,eAAK,MAAM;;AACxD,eAAK,MAAM,KAAK,QAAQ;AAC7B,aAAK,cAAc,CAAC,CAAC,KAAK;AAG1B,YAAI,OAAO;AACT,cAAI,KAAK;AAAK,iBAAK,IAAG;QACxB,OAAO;AAGL,eAAK,KAAK,EAAE,KACV,CAAC,KAAK,cACF,IAAI,KAAY,MAAyB,MAAM,IAAI,IACnD,IAAI,gBAAuB,MAAyB,MAAM,IAAI,CAAC;AAErE,cAAI,KAAK,KAAK;AAAG,kBAAM,MAAM,KAAK,MAAM,EAAC,CAAE;;AACtC,iBAAK,MAAM,EAAC;QACnB;AAEA,eAAO;MAAI;;;;;;;;;MAWb,OAAoC,MAAS;AAC3C,cAAM,IAAI,KAAK,KAAK,EAAE,KAAK,CAAAG,OAAKA,GAAE,SAAS,IAAI;AAC/C,YAAI,GAAG;AACL,cAAI,KAAK,KAAK,EAAE,WAAW,GAAG;AAC5B,gBAAI,KAAK,OAAO,KAAK,KAAK,aAAa,MAAM,GAAG;AAC9C,mBAAK,OAAO,IAAI;YAClB;AACA,iBAAK,KAAK,IAAI,CAAA;UAChB;AAAO,iBAAK,KAAK,EAAE,OAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;AACnD,YAAE,OAAM;QACV;MAAC;;;;MAMH,YACE,IACA,SACM;AACN,eAAO,KAAK,GAAG,IAAI,OAAO;MAAC;;;;;;;;;;;;;;;;;;MAoB7B,GACE,IACA,SACM;AACN,cAAM,MAAM,MAAM,GAChB,IACA,OAA+B;AAEjC,YAAI,OAAO,QAAQ;AACjB,eAAK,SAAS,IAAI;AAClB,eAAK,aAAa;AAClB,cAAI,CAAC,KAAK,KAAK,EAAE,UAAU,CAAC,KAAK,OAAO,GAAG;AACzC,iBAAK,MAAM,EAAC;UACd;QACF,WAAW,OAAO,cAAc,KAAK,YAAY,MAAM,GAAG;AACxD,gBAAM,KAAK,UAAU;QACvB,WAAW,SAAS,EAAE,KAAK,KAAK,WAAW,GAAG;AAC5C,gBAAM,KAAK,EAAE;AACb,eAAK,mBAAmB,EAAE;QAC5B,WAAW,OAAO,WAAW,KAAK,aAAa,GAAG;AAChD,gBAAMC,KAAI;AACV,cAAI,KAAK,KAAK;AAAG,kBAAM,MAAMA,GAAE,KAAK,MAAM,KAAK,aAAa,CAAC,CAAC;;AACzD,YAAAA,GAAE,KAAK,MAAM,KAAK,aAAa,CAAC;QACvC;AACA,eAAO;MAAG;;;;MAMZ,eACE,IACA,SACA;AACA,eAAO,KAAK,IAAI,IAAI,OAAO;MAAC;;;;;;;;;MAW9B,IACE,IACA,SACA;AACA,cAAM,MAAM,MAAM,IAChB,IACA,OAA+B;AAKjC,YAAI,OAAO,QAAQ;AACjB,eAAK,aAAa,IAAI,KAAK,UAAU,MAAM,EAAE;AAC7C,cACE,KAAK,aAAa,MAAM,KACxB,CAAC,KAAK,SAAS,KACf,CAAC,KAAK,KAAK,EAAE,QACb;AACA,iBAAK,OAAO,IAAI;UAClB;QACF;AACA,eAAO;MAAG;;;;;;;;;MAWZ,mBAA+C,IAAY;AACzD,cAAM,MAAM,MAAM,mBAAmB,EAAiC;AACtE,YAAI,OAAO,UAAU,OAAO,QAAW;AACrC,eAAK,aAAa,IAAI;AACtB,cAAI,CAAC,KAAK,SAAS,KAAK,CAAC,KAAK,KAAK,EAAE,QAAQ;AAC3C,iBAAK,OAAO,IAAI;UAClB;QACF;AACA,eAAO;MAAG;;;;MAMZ,IAAI,aAAa;AACf,eAAO,KAAK,WAAW;MAAC;MAG1B,CAAC,cAAc,IAAI;AACjB,YACE,CAAC,KAAK,YAAY,KAClB,CAAC,KAAK,WAAW,KACjB,CAAC,KAAK,SAAS,KACf,KAAK,MAAM,EAAE,WAAW,KACxB,KAAK,GAAG,GACR;AACA,eAAK,YAAY,IAAI;AACrB,eAAK,KAAK,KAAK;AACf,eAAK,KAAK,WAAW;AACrB,eAAK,KAAK,QAAQ;AAClB,cAAI,KAAK,MAAM;AAAG,iBAAK,KAAK,OAAO;AACnC,eAAK,YAAY,IAAI;QACvB;MAAC;;;;;;;;;;;;;;;;;;;;;;;;;MA2BH,KACE,OACG,MACM;AACT,cAAM,OAAO,KAAK,CAAC;AAEnB,YACE,OAAO,WACP,OAAO,WACP,OAAO,aACP,KAAK,SAAS,GACd;AACA,iBAAO;QACT,WAAW,OAAO,QAAQ;AACxB,iBAAO,CAAC,KAAK,UAAU,KAAK,CAAC,OACzB,QACA,KAAK,KAAK,KACT,MAAM,MAAM,KAAK,QAAQ,EAAE,IAAa,CAAC,GAAG,QAC7C,KAAK,QAAQ,EAAE,IAAa;QAClC,WAAW,OAAO,OAAO;AACvB,iBAAO,KAAK,OAAO,EAAC;QACtB,WAAW,OAAO,SAAS;AACzB,eAAK,MAAM,IAAI;AAEf,cAAI,CAAC,KAAK,WAAW,KAAK,CAAC,KAAK,SAAS;AAAG,mBAAO;AACnD,gBAAMC,OAAM,MAAM,KAAK,OAAO;AAC9B,eAAK,mBAAmB,OAAO;AAC/B,iBAAOA;QACT,WAAW,OAAO,SAAS;AACzB,eAAK,aAAa,IAAI;AACtB,gBAAM,KAAK,OAAO,IAAI;AACtB,gBAAMA,OACJ,CAAC,KAAK,MAAM,KAAK,KAAK,UAAU,OAAO,EAAE,SACrC,MAAM,KAAK,SAAS,IAAI,IACxB;AACN,eAAK,cAAc,EAAC;AACpB,iBAAOA;QACT,WAAW,OAAO,UAAU;AAC1B,gBAAMA,OAAM,MAAM,KAAK,QAAQ;AAC/B,eAAK,cAAc,EAAC;AACpB,iBAAOA;QACT,WAAW,OAAO,YAAY,OAAO,aAAa;AAChD,gBAAMA,OAAM,MAAM,KAAK,EAAE;AACzB,eAAK,mBAAmB,EAAE;AAC1B,iBAAOA;QACT;AAGA,cAAM,MAAM,MAAM,KAAK,IAAc,GAAG,IAAI;AAC5C,aAAK,cAAc,EAAC;AACpB,eAAO;MAAG;MAGZ,CAAC,QAAQ,EAAE,MAAa;AACtB,mBAAW,KAAK,KAAK,KAAK,GAAG;AAC3B,cAAI,EAAE,KAAK,MAAM,IAAa,MAAM;AAAO,iBAAK,MAAK;QACvD;AACA,cAAM,MAAM,KAAK,SAAS,IAAI,QAAQ,MAAM,KAAK,QAAQ,IAAI;AAC7D,aAAK,cAAc,EAAC;AACpB,eAAO;MAAG;MAGZ,CAAC,OAAO,IAAI;AACV,YAAI,KAAK,WAAW;AAAG,iBAAO;AAE9B,aAAK,WAAW,IAAI;AACpB,aAAK,WAAW;AAChB,eAAO,KAAK,KAAK,KACZ,MAAM,MAAM,KAAK,QAAQ,EAAC,CAAE,GAAG,QAChC,KAAK,QAAQ,EAAC;MAAE;MAGtB,CAAC,QAAQ,IAAI;AACX,YAAI,KAAK,OAAO,GAAG;AACjB,gBAAM,OAAO,KAAK,OAAO,EAAE,IAAG;AAC9B,cAAI,MAAM;AACR,uBAAW,KAAK,KAAK,KAAK,GAAG;AAC3B,gBAAE,KAAK,MAAM,IAAa;YAC5B;AACA,gBAAI,CAAC,KAAK,SAAS;AAAG,oBAAM,KAAK,QAAQ,IAAI;UAC/C;QACF;AAEA,mBAAW,KAAK,KAAK,KAAK,GAAG;AAC3B,YAAE,IAAG;QACP;AACA,cAAM,MAAM,MAAM,KAAK,KAAK;AAC5B,aAAK,mBAAmB,KAAK;AAC7B,eAAO;MAAG;;;;;MAOZ,MAAM,UAAqD;AACzD,cAAM,MAAwC,OAAO,OAAO,CAAA,GAAI;UAC9D,YAAY;SACb;AACD,YAAI,CAAC,KAAK,UAAU;AAAG,cAAI,aAAa;AAGxC,cAAM,IAAI,KAAK,QAAO;AACtB,aAAK,GAAG,QAAQ,CAAAH,OAAK;AACnB,cAAI,KAAKA,EAAC;AACV,cAAI,CAAC,KAAK,UAAU;AAClB,gBAAI,cAAeA,GAA8B;QAAM,CAC1D;AACD,cAAM;AACN,eAAO;MAAG;;;;;;;MASZ,MAAM,SAAyB;AAC7B,YAAI,KAAK,UAAU,GAAG;AACpB,gBAAM,IAAI,MAAM,6BAA6B;QAC/C;AACA,cAAM,MAAM,MAAM,KAAK,QAAO;AAC9B,eACE,KAAK,QAAQ,IACT,IAAI,KAAK,EAAE,IACX,OAAO,OAAO,KAAiB,IAAI,UAAU;MACzC;;;;MAMZ,MAAM,UAAyB;AAC7B,eAAO,IAAI,QAAc,CAAC,SAASI,YAAW;AAC5C,eAAK,GAAG,WAAW,MAAMA,QAAO,IAAI,MAAM,kBAAkB,CAAC,CAAC;AAC9D,eAAK,GAAG,SAAS,QAAMA,QAAO,EAAE,CAAC;AACjC,eAAK,GAAG,OAAO,MAAM,QAAO,CAAE;QAAC,CAChC;MAAC;;;;;;MAQJ,CAAC,OAAO,aAAa,IAAuC;AAG1D,aAAK,SAAS,IAAI;AAClB,YAAI,UAAU;AACd,cAAM,OAAO,YAAiD;AAC5D,eAAK,MAAK;AACV,oBAAU;AACV,iBAAO,EAAE,OAAO,QAAW,MAAM,KAAI;QAAE;AAEzC,cAAM,OAAO,MAA4C;AACvD,cAAI;AAAS,mBAAO,KAAI;AACxB,gBAAM,MAAM,KAAK,KAAI;AACrB,cAAI,QAAQ;AAAM,mBAAO,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,IAAG,CAAE;AAEpE,cAAI,KAAK,GAAG;AAAG,mBAAO,KAAI;AAE1B,cAAI;AACJ,cAAIA;AACJ,gBAAM,QAAQ,CAAC,OAAgB;AAC7B,iBAAK,IAAI,QAAQ,MAAM;AACvB,iBAAK,IAAI,OAAO,KAAK;AACrB,iBAAK,IAAI,WAAW,SAAS;AAC7B,iBAAI;AACJ,YAAAA,QAAO,EAAE;UAAC;AAEZ,gBAAM,SAAS,CAAC,UAAiB;AAC/B,iBAAK,IAAI,SAAS,KAAK;AACvB,iBAAK,IAAI,OAAO,KAAK;AACrB,iBAAK,IAAI,WAAW,SAAS;AAC7B,iBAAK,MAAK;AACV,oBAAQ,EAAE,OAAO,MAAM,CAAC,CAAC,KAAK,GAAG,EAAC,CAAE;UAAC;AAEvC,gBAAM,QAAQ,MAAM;AAClB,iBAAK,IAAI,SAAS,KAAK;AACvB,iBAAK,IAAI,QAAQ,MAAM;AACvB,iBAAK,IAAI,WAAW,SAAS;AAC7B,iBAAI;AACJ,oBAAQ,EAAE,MAAM,MAAM,OAAO,OAAS,CAAE;UAAC;AAE3C,gBAAM,YAAY,MAAM,MAAM,IAAI,MAAM,kBAAkB,CAAC;AAC3D,iBAAO,IAAI,QAA+B,CAACC,MAAK,QAAQ;AACtD,YAAAD,UAAS;AACT,sBAAUC;AACV,iBAAK,KAAK,WAAW,SAAS;AAC9B,iBAAK,KAAK,SAAS,KAAK;AACxB,iBAAK,KAAK,OAAO,KAAK;AACtB,iBAAK,KAAK,QAAQ,MAAM;UAAC,CAC1B;QAAC;AAGJ,eAAO;UACL;UACA,OAAO;UACP,QAAQ;UACR,CAAC,OAAO,aAAa,IAAI;AACvB,mBAAO;UAAI;UAEb,CAAC,OAAO,YAAY,GAAG,YAAY;UAAC;;MACrC;;;;;;;MASH,CAAC,OAAO,QAAQ,IAAkC;AAGhD,aAAK,SAAS,IAAI;AAClB,YAAI,UAAU;AACd,cAAM,OAAO,MAAkC;AAC7C,eAAK,MAAK;AACV,eAAK,IAAI,OAAO,IAAI;AACpB,eAAK,IAAI,WAAW,IAAI;AACxB,eAAK,IAAI,OAAO,IAAI;AACpB,oBAAU;AACV,iBAAO,EAAE,MAAM,MAAM,OAAO,OAAS;QAAE;AAGzC,cAAM,OAAO,MAAmC;AAC9C,cAAI;AAAS,mBAAO,KAAI;AACxB,gBAAM,QAAQ,KAAK,KAAI;AACvB,iBAAO,UAAU,OAAO,KAAI,IAAK,EAAE,MAAM,OAAO,MAAK;QAAE;AAGzD,aAAK,KAAK,OAAO,IAAI;AACrB,aAAK,KAAK,OAAO,IAAI;AACrB,aAAK,KAAK,WAAW,IAAI;AAEzB,eAAO;UACL;UACA,OAAO;UACP,QAAQ;UACR,CAAC,OAAO,QAAQ,IAAI;AAClB,mBAAO;UAAI;UAEb,CAAC,OAAO,OAAO,GAAG,MAAM;UAAC;;MAC1B;;;;;;;;;;;;;MAeH,QAAQ,IAAc;AACpB,YAAI,KAAK,SAAS,GAAG;AACnB,cAAI;AAAI,iBAAK,KAAK,SAAS,EAAE;;AACxB,iBAAK,KAAK,SAAS;AACxB,iBAAO;QACT;AAEA,aAAK,SAAS,IAAI;AAClB,aAAK,SAAS,IAAI;AAGlB,aAAK,MAAM,EAAE,SAAS;AACtB,aAAK,YAAY,IAAI;AAErB,cAAM,KAAK;AAGX,YAAI,OAAO,GAAG,UAAU,cAAc,CAAC,KAAK,MAAM;AAAG,aAAG,MAAK;AAE7D,YAAI;AAAI,eAAK,KAAK,SAAS,EAAE;;AAExB,eAAK,KAAK,SAAS;AAExB,eAAO;MAAI;;;;;;;;MAUb,WAAW,WAAW;AACpB,eAAOX,SAAA;MAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACp0CnB,QAAA,cAAA;AACA,QAAA,cAAA,QAAA,MAAA;AAEA,QAAA,aAAA,QAAA,KAAA;AAEA,QAAA,OAAA,QAAA,IAAA;AAOA,QAAA,WAAA,aAAA,QAAA,IAAA,CAAA;AAEA,QAAMY,gBAAe,KAAA,aAAI;AAIzB,QAAA,aAAA,QAAA,aAAA;AAEA,QAAA,aAAA;AAqEA,QAAM,YAAqB;MACzB,WAAA,KAAA;MACA,SAAS,KAAA;MACT,aAAA,KAAA;MACA,cAAA,KAAA;MACA,cAAAA;MACA,UAAU;QACR,OAAA,WAAA;QACA,SAAA,WAAA;QACA,UAAA,WAAA;QACA,UAAA,WAAA;;;AAKJ,QAAM,eAAe,CAAC,aACpB,CAAC,YAAY,aAAa,aAAa,aAAa,WAClD,YACA;MACE,GAAG;MACH,GAAG;MACH,UAAU;QACR,GAAG,UAAU;QACb,GAAI,SAAS,YAAY,CAAA;;;AAKjC,QAAM,iBAAiB;AACvB,QAAM,aAAa,CAAC,aAClB,SAAS,QAAQ,OAAO,IAAI,EAAE,QAAQ,gBAAgB,MAAM;AAG9D,QAAM,YAAY;AAElB,QAAM,UAAU;AAChB,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,OAAO;AAab,QAAM,eAAe,CAAC;AAGtB,QAAM,iBAAiB;AAEvB,QAAM,eAAe;AAErB,QAAM,UAAU;AAGhB,QAAM,SAAS;AAGf,QAAM,cAAc;AAEpB,QAAM,cAAc;AAEpB,QAAM,WAAW,UAAU,SAAS;AACpC,QAAM,WAAW;AAEjB,QAAM,YAAY,CAAC,MACjB,EAAE,OAAM,IAAK,QACX,EAAE,YAAW,IAAK,QAClB,EAAE,eAAc,IAAK,QACrB,EAAE,kBAAiB,IAAK,QACxB,EAAE,cAAa,IAAK,QACpB,EAAE,SAAQ,IAAK,SACf,EAAE,OAAM,IAAK,QACb;AAGJ,QAAM,iBAAiB,oBAAI,IAAG;AAC9B,QAAM,YAAY,CAAC,MAAa;AAC9B,YAAMC,KAAI,eAAe,IAAI,CAAC;AAC9B,UAAIA;AAAG,eAAOA;AACd,YAAMC,KAAI,EAAE,UAAU,MAAM;AAC5B,qBAAe,IAAI,GAAGA,EAAC;AACvB,aAAOA;IACT;AAEA,QAAM,uBAAuB,oBAAI,IAAG;AACpC,QAAM,kBAAkB,CAAC,MAAa;AACpC,YAAMD,KAAI,qBAAqB,IAAI,CAAC;AACpC,UAAIA;AAAG,eAAOA;AACd,YAAMC,KAAI,UAAU,EAAE,YAAW,CAAE;AACnC,2BAAqB,IAAI,GAAGA,EAAC;AAC7B,aAAOA;IACT;AAoBA,QAAa,eAAb,cAAkC,YAAA,SAAwB;MACxD,cAAA;AACE,cAAM,EAAE,KAAK,IAAG,CAAE;MACpB;;AAHF,IAAAC,SAAA,eAAA;AAsBA,QAAa,gBAAb,cAAmC,YAAA,SAA4B;MAC7D,YAAY,UAAkB,KAAK,MAAI;AACrC,cAAM;UACJ;;UAEA,iBAAiB,CAAAC,OAAKA,GAAE,SAAS;SAClC;MACH;;AAPF,IAAAD,SAAA,gBAAA;AAiBA,QAAM,WAAW,uBAAO,qBAAqB;AAe7C,QAAsB,WAAtB,MAA8B;;;;;;;;;;MAU5B;;;;;;MAMA;;;;;;MAMA;;;;;;MAMA;;;;;MAKA;;;;;MAMA,QAAiB;;MAajB;;MAGA;MACA,IAAI,MAAG;AACL,eAAO,KAAK;MACd;MACA;MACA,IAAI,OAAI;AACN,eAAO,KAAK;MACd;MACA;MACA,IAAI,QAAK;AACP,eAAO,KAAK;MACd;MACA;MACA,IAAI,MAAG;AACL,eAAO,KAAK;MACd;MACA;MACA,IAAI,MAAG;AACL,eAAO,KAAK;MACd;MACA;MACA,IAAI,OAAI;AACN,eAAO,KAAK;MACd;MACA;MACA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;MACA;MACA,IAAI,MAAG;AACL,eAAO,KAAK;MACd;MACA;MACA,IAAI,OAAI;AACN,eAAO,KAAK;MACd;MACA;MACA,IAAI,SAAM;AACR,eAAO,KAAK;MACd;MACA;MACA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;MACA;MACA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;MACA;MACA,IAAI,UAAO;AACT,eAAO,KAAK;MACd;MACA;MACA,IAAI,cAAW;AACb,eAAO,KAAK;MACd;MACA;MACA,IAAI,QAAK;AACP,eAAO,KAAK;MACd;MACA;MACA,IAAI,QAAK;AACP,eAAO,KAAK;MACd;MACA;MACA,IAAI,QAAK;AACP,eAAO,KAAK;MACd;MACA;MACA,IAAI,YAAS;AACX,eAAO,KAAK;MACd;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;;;;;;MAQA,IAAI,aAAU;AACZ,gBAAQ,KAAK,UAAU,MAAM,SAAQ;MACvC;;;;;MAMA,IAAI,OAAI;AACN,eAAO,KAAK;MACd;;;;;;;MAQA,YACE,MACA,OAAe,SACf,MACA,OACA,QACA,UACA,MAAc;AAEd,aAAK,OAAO;AACZ,aAAK,aAAa,SAAS,gBAAgB,IAAI,IAAI,UAAU,IAAI;AACjE,aAAK,QAAQ,OAAO;AACpB,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,OAAO,QAAQ;AACpB,aAAK,YAAY;AACjB,aAAK,YAAY,KAAK;AACtB,aAAK,YAAY,KAAK;AACtB,aAAK,iBAAiB,KAAK;AAC3B,aAAK,SAAS,KAAK;AACnB,YAAI,KAAK,QAAQ;AACf,eAAK,MAAM,KAAK,OAAO;QACzB,OAAO;AACL,eAAK,MAAM,aAAa,KAAK,EAAE;QACjC;MACF;;;;;;MAOA,QAAK;AACH,YAAI,KAAK,WAAW;AAAW,iBAAO,KAAK;AAC3C,YAAI,CAAC,KAAK;AAAQ,iBAAQ,KAAK,SAAS;AACxC,eAAQ,KAAK,SAAS,KAAK,OAAO,MAAK,IAAK;MAC9C;;;;MAkBA,gBAAa;AACX,eAAO,KAAK;MACd;;;;MAKA,QAAQE,QAAa;AACnB,YAAI,CAACA,QAAM;AACT,iBAAO;QACT;AACA,cAAM,WAAW,KAAK,cAAcA,MAAI;AACxC,cAAMC,OAAMD,OAAK,UAAU,SAAS,MAAM;AAC1C,cAAM,WAAWC,KAAI,MAAM,KAAK,QAAQ;AACxC,cAAM,SACJ,WACE,KAAK,QAAQ,QAAQ,EAAE,cAAc,QAAQ,IAC7C,KAAK,cAAc,QAAQ;AAC/B,eAAO;MACT;MAEA,cAAc,UAAkB;AAC9B,YAAI,IAAc;AAClB,mBAAW,QAAQ,UAAU;AAC3B,cAAI,EAAE,MAAM,IAAI;QAClB;AACA,eAAO;MACT;;;;;;;;;MAUA,WAAQ;AACN,cAAMC,UAAS,KAAK,UAAU,IAAI,IAAI;AACtC,YAAIA,SAAQ;AACV,iBAAOA;QACT;AACA,cAAM,WAAqB,OAAO,OAAO,CAAA,GAAI,EAAE,aAAa,EAAC,CAAE;AAC/D,aAAK,UAAU,IAAI,MAAM,QAAQ;AACjC,aAAK,SAAS,CAAC;AACf,eAAO;MACT;;;;;;;;;;;;;;MAeA,MAAM,UAAkB,MAAe;AACrC,YAAI,aAAa,MAAM,aAAa,KAAK;AACvC,iBAAO;QACT;AACA,YAAI,aAAa,MAAM;AACrB,iBAAO,KAAK,UAAU;QACxB;AAGA,cAAM,WAAW,KAAK,SAAQ;AAC9B,cAAM,OACJ,KAAK,SAAS,gBAAgB,QAAQ,IAAI,UAAU,QAAQ;AAC9D,mBAAW,KAAK,UAAU;AACxB,cAAI,EAAE,eAAe,MAAM;AACzB,mBAAO;UACT;QACF;AAKA,cAAM,IAAI,KAAK,SAAS,KAAK,MAAM;AACnC,cAAM,WACJ,KAAK,YAAY,KAAK,YAAY,IAAI,WAAW;AACnD,cAAM,SAAS,KAAK,SAAS,UAAU,SAAS;UAC9C,GAAG;UACH,QAAQ;UACR;SACD;AAED,YAAI,CAAC,KAAK,WAAU,GAAI;AACtB,iBAAO,SAAS;QAClB;AAIA,iBAAS,KAAK,MAAM;AACpB,eAAO;MACT;;;;;MAMA,WAAQ;AACN,YAAI,KAAK;AAAO,iBAAO;AACvB,YAAI,KAAK,cAAc,QAAW;AAChC,iBAAO,KAAK;QACd;AACA,cAAM,OAAO,KAAK;AAClB,cAAM,IAAI,KAAK;AACf,YAAI,CAAC,GAAG;AACN,iBAAQ,KAAK,YAAY,KAAK;QAChC;AACA,cAAM,KAAK,EAAE,SAAQ;AACrB,eAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,KAAK,OAAO;MACnD;;;;;;;MAQA,gBAAa;AACX,YAAI,KAAK,QAAQ;AAAK,iBAAO,KAAK,SAAQ;AAC1C,YAAI,KAAK;AAAO,iBAAO;AACvB,YAAI,KAAK,mBAAmB;AAAW,iBAAO,KAAK;AACnD,cAAM,OAAO,KAAK;AAClB,cAAM,IAAI,KAAK;AACf,YAAI,CAAC,GAAG;AACN,iBAAQ,KAAK,iBAAiB,KAAK,cAAa;QAClD;AACA,cAAM,KAAK,EAAE,cAAa;AAC1B,eAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO;MAC9C;;;;MAKA,WAAQ;AACN,YAAI,KAAK,cAAc,QAAW;AAChC,iBAAO,KAAK;QACd;AACA,cAAM,OAAO,KAAK;AAClB,cAAM,IAAI,KAAK;AACf,YAAI,CAAC,GAAG;AACN,iBAAQ,KAAK,YAAY,KAAK;QAChC;AACA,cAAM,KAAK,EAAE,SAAQ;AACrB,cAAM,KAAK,MAAM,CAAC,EAAE,SAAS,KAAK,KAAK,OAAO;AAC9C,eAAQ,KAAK,YAAY;MAC3B;;;;;;;MAQA,gBAAa;AACX,YAAI,KAAK,mBAAmB;AAAW,iBAAO,KAAK;AACnD,YAAI,KAAK,QAAQ;AAAK,iBAAQ,KAAK,iBAAiB,KAAK,SAAQ;AACjE,YAAI,CAAC,KAAK,QAAQ;AAChB,gBAAMC,KAAI,KAAK,SAAQ,EAAG,QAAQ,OAAO,GAAG;AAC5C,cAAI,aAAa,KAAKA,EAAC,GAAG;AACxB,mBAAQ,KAAK,iBAAiB,OAAOA,EAAC;UACxC,OAAO;AACL,mBAAQ,KAAK,iBAAiBA;UAChC;QACF;AACA,cAAM,IAAI,KAAK;AACf,cAAM,OAAO,EAAE,cAAa;AAC5B,cAAM,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,KAAK,OAAO,KAAK;AAC1D,eAAQ,KAAK,iBAAiB;MAChC;;;;;;;;MASA,YAAS;AACP,gBAAQ,KAAK,QAAQ,UAAU;MACjC;MAEA,OAAO,MAAU;AACf,eAAO,KAAK,KAAK,IAAI,EAAE,EAAC;MAC1B;MAEA,UAAO;AACL,eACE,KAAK,UAAS,IAAK,YACjB,KAAK,YAAW,IAAK,cACrB,KAAK,OAAM,IAAK,SAChB,KAAK,eAAc,IAAK,iBACxB,KAAK,OAAM,IAAK,SAChB,KAAK,kBAAiB,IAAK,oBAC3B,KAAK,cAAa,IAAK;;UACD,KAAK,SAAQ,IAAK,WACxC;;MAGN;;;;MAKA,SAAM;AACJ,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,cAAW;AACT,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,oBAAiB;AACf,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,gBAAa;AACX,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,SAAM;AACJ,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,WAAQ;AACN,gBAAQ,KAAK,QAAQ,UAAU;MACjC;;;;MAKA,iBAAc;AACZ,gBAAQ,KAAK,QAAQ,WAAW;MAClC;;;;;;;;MASA,cAAW;AACT,eAAO,KAAK,QAAQ,eAAe,OAAO;MAC5C;;;;;;;;;MAUA,iBAAc;AACZ,eAAO,KAAK;MACd;;;;;;;;;MAUA,iBAAc;AACZ,eAAO,KAAK;MACd;;;;;;;;;MAUA,gBAAa;AACX,cAAM,WAAW,KAAK,SAAQ;AAC9B,eAAO,SAAS,MAAM,GAAG,SAAS,WAAW;MAC/C;;;;;;;;MASA,cAAW;AACT,YAAI,KAAK;AAAa,iBAAO;AAC7B,YAAI,CAAC,KAAK;AAAQ,iBAAO;AAEzB,cAAM,OAAO,KAAK,QAAQ;AAC1B,eAAO,EACJ,SAAS,WAAW,SAAS,SAC9B,KAAK,QAAQ,eACb,KAAK,QAAQ;MAEjB;;;;;MAMA,gBAAa;AACX,eAAO,CAAC,EAAE,KAAK,QAAQ;MACzB;;;;;;MAOA,WAAQ;AACN,eAAO,CAAC,EAAE,KAAK,QAAQ;MACzB;;;;;;;;;;;;MAaA,QAAQN,IAAS;AACf,eAAO,CAAC,KAAK,SACT,KAAK,eAAe,UAAUA,EAAC,IAC/B,KAAK,eAAe,gBAAgBA,EAAC;MAC3C;;;;;;;;;MAUA,MAAM,WAAQ;AACZ,cAAM,SAAS,KAAK;AACpB,YAAI,QAAQ;AACV,iBAAO;QACT;AACA,YAAI,CAAC,KAAK,YAAW,GAAI;AACvB,iBAAO;QACT;AAGA,YAAI,CAAC,KAAK,QAAQ;AAChB,iBAAO;QACT;AAEA,YAAI;AACF,gBAAM,OAAO,MAAM,KAAK,IAAI,SAAS,SAAS,KAAK,SAAQ,CAAE;AAC7D,gBAAM,cAAc,MAAM,KAAK,OAAO,SAAQ,IAAK,QAAQ,IAAI;AAC/D,cAAI,YAAY;AACd,mBAAQ,KAAK,cAAc;UAC7B;QACF,SAAS,IAAI;AACX,eAAK,cAAe,GAA6B,IAAI;AACrD,iBAAO;QACT;MACF;;;;MAKA,eAAY;AACV,cAAM,SAAS,KAAK;AACpB,YAAI,QAAQ;AACV,iBAAO;QACT;AACA,YAAI,CAAC,KAAK,YAAW,GAAI;AACvB,iBAAO;QACT;AAGA,YAAI,CAAC,KAAK,QAAQ;AAChB,iBAAO;QACT;AAEA,YAAI;AACF,gBAAM,OAAO,KAAK,IAAI,aAAa,KAAK,SAAQ,CAAE;AAClD,gBAAM,aAAa,KAAK,OAAO,aAAY,GAAI,QAAQ,IAAI;AAC3D,cAAI,YAAY;AACd,mBAAQ,KAAK,cAAc;UAC7B;QACF,SAAS,IAAI;AACX,eAAK,cAAe,GAA6B,IAAI;AACrD,iBAAO;QACT;MACF;MAEA,gBAAgB,UAAkB;AAEhC,aAAK,SAAS;AAEd,iBAAS,IAAI,SAAS,aAAa,IAAI,SAAS,QAAQ,KAAK;AAC3D,gBAAMD,KAAI,SAAS,CAAC;AACpB,cAAIA;AAAG,YAAAA,GAAE,YAAW;QACtB;MACF;MAEA,cAAW;AAET,YAAI,KAAK,QAAQ;AAAQ;AACzB,aAAK,SAAS,KAAK,QAAQ,UAAU;AACrC,aAAK,oBAAmB;MAC1B;MAEA,sBAAmB;AAEjB,cAAM,WAAW,KAAK,SAAQ;AAC9B,iBAAS,cAAc;AACvB,mBAAW,KAAK,UAAU;AACxB,YAAE,YAAW;QACf;MACF;MAEA,mBAAgB;AACd,aAAK,SAAS;AACd,aAAK,aAAY;MACnB;;MAGA,eAAY;AAMV,YAAI,KAAK,QAAQ;AAAS;AAE1B,YAAI,IAAI,KAAK;AAGb,aAAK,IAAI,UAAU;AAAO,eAAK;AAC/B,aAAK,QAAQ,IAAI;AACjB,aAAK,oBAAmB;MAC1B;MAEA,aAAa,OAAe,IAAE;AAE5B,YAAI,SAAS,aAAa,SAAS,SAAS;AAC1C,eAAK,aAAY;QACnB,WAAW,SAAS,UAAU;AAC5B,eAAK,YAAW;QAClB,OAAO;AACL,eAAK,SAAQ,EAAG,cAAc;QAChC;MACF;MAEA,WAAW,OAAe,IAAE;AAG1B,YAAI,SAAS,WAAW;AAEtB,gBAAM,IAAI,KAAK;AACf,YAAE,aAAY;QAChB,WAAW,SAAS,UAAU;AAE5B,eAAK,YAAW;QAClB;MACF;MAEA,cAAc,OAAe,IAAE;AAC7B,YAAI,MAAM,KAAK;AACf,eAAO;AACP,YAAI,SAAS;AAAU,iBAAO;AAE9B,YAAI,SAAS,YAAY,SAAS,WAAW;AAG3C,iBAAO;QACT;AACA,aAAK,QAAQ;AAIb,YAAI,SAAS,aAAa,KAAK,QAAQ;AACrC,eAAK,OAAO,aAAY;QAC1B;MAEF;MAEA,iBAAiB,GAAWA,IAAW;AACrC,eACE,KAAK,0BAA0B,GAAGA,EAAC,KACnC,KAAK,oBAAoB,GAAGA,EAAC;MAEjC;MAEA,oBAAoB,GAAWA,IAAW;AAExC,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,QAAQ,KAAK,SAAS,EAAE,MAAM,MAAM,EAAE,QAAQ,KAAI,CAAE;AAC1D,cAAM,OAAO,MAAM,QAAQ;AAC3B,YAAI,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS;AACxD,gBAAM,SAAS;QACjB;AACA,QAAAA,GAAE,QAAQ,KAAK;AACf,QAAAA,GAAE;AACF,eAAO;MACT;MAEA,0BAA0B,GAAWA,IAAW;AAC9C,iBAAS,IAAIA,GAAE,aAAa,IAAIA,GAAE,QAAQ,KAAK;AAC7C,gBAAM,SAASA,GAAE,CAAC;AAClB,gBAAM,OACJ,KAAK,SAAS,gBAAgB,EAAE,IAAI,IAAI,UAAU,EAAE,IAAI;AAC1D,cAAI,SAAS,OAAQ,YAAY;AAC/B;UACF;AAEA,iBAAO,KAAK,qBAAqB,GAAG,QAAS,GAAGA,EAAC;QACnD;MACF;MAEA,qBACE,GACA,GACAQ,QACAR,IAAW;AAEX,cAAM,IAAI,EAAE;AAEZ,UAAE,QAAS,EAAE,QAAQ,eAAgB,UAAU,CAAC;AAEhD,YAAI,MAAM,EAAE;AAAM,YAAE,OAAO,EAAE;AAI7B,YAAIQ,WAAUR,GAAE,aAAa;AAC3B,cAAIQ,WAAUR,GAAE,SAAS;AAAG,YAAAA,GAAE,IAAG;;AAC5B,YAAAA,GAAE,OAAOQ,QAAO,CAAC;AACtB,UAAAR,GAAE,QAAQ,CAAC;QACb;AACA,QAAAA,GAAE;AACF,eAAO;MACT;;;;;;;;;;;;;;;;MAiBA,MAAM,QAAK;AACT,aAAK,KAAK,QAAQ,YAAY,GAAG;AAC/B,cAAI;AACF,iBAAK,WAAW,MAAM,KAAK,IAAI,SAAS,MAAM,KAAK,SAAQ,CAAE,CAAC;AAC9D,mBAAO;UACT,SAAS,IAAI;AACX,iBAAK,WAAY,GAA6B,IAAI;UACpD;QACF;MACF;;;;MAKA,YAAS;AACP,aAAK,KAAK,QAAQ,YAAY,GAAG;AAC/B,cAAI;AACF,iBAAK,WAAW,KAAK,IAAI,UAAU,KAAK,SAAQ,CAAE,CAAC;AACnD,mBAAO;UACT,SAAS,IAAI;AACX,iBAAK,WAAY,GAA6B,IAAI;UACpD;QACF;MACF;MAEA,WAAW,IAAS;AAClB,cAAM,EACJ,OACA,SACA,WACA,aACA,SACA,QACA,OACA,SACA,KACA,KACA,KACA,MACA,OACA,SACA,OACA,MACA,MACA,IAAG,IACD;AACJ,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,aAAK,eAAe;AACpB,aAAK,WAAW;AAChB,aAAK,UAAU;AACf,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,OAAO;AACZ,cAAM,OAAO,UAAU,EAAE;AAEzB,aAAK,QAAS,KAAK,QAAQ,eAAgB,OAAO;AAClD,YAAI,SAAS,WAAW,SAAS,SAAS,SAAS,OAAO;AACxD,eAAK,SAAS;QAChB;MACF;MAEA,eAGc,CAAA;MACd,qBAA8B;MAC9B,iBAAiB,UAAgB;AAC/B,aAAK,qBAAqB;AAC1B,cAAM,MAAM,KAAK,aAAa,MAAK;AACnC,aAAK,aAAa,SAAS;AAC3B,YAAI,QAAQ,QAAM,GAAG,MAAM,QAAQ,CAAC;MACtC;;;;;;;;;;;;;;;;;MAkBA,UACE,IACA,aAAsB,OAAK;AAE3B,YAAI,CAAC,KAAK,WAAU,GAAI;AACtB,cAAI;AAAY,eAAG,MAAM,CAAA,CAAE;;AACtB,2BAAe,MAAM,GAAG,MAAM,CAAA,CAAE,CAAC;AACtC;QACF;AAEA,cAAM,WAAW,KAAK,SAAQ;AAC9B,YAAI,KAAK,cAAa,GAAI;AACxB,gBAAMA,KAAI,SAAS,MAAM,GAAG,SAAS,WAAW;AAChD,cAAI;AAAY,eAAG,MAAMA,EAAC;;AACrB,2BAAe,MAAM,GAAG,MAAMA,EAAC,CAAC;AACrC;QACF;AAGA,aAAK,aAAa,KAAK,EAAE;AACzB,YAAI,KAAK,oBAAoB;AAC3B;QACF;AACA,aAAK,qBAAqB;AAI1B,cAAM,WAAW,KAAK,SAAQ;AAC9B,aAAK,IAAI,QAAQ,UAAU,EAAE,eAAe,KAAI,GAAI,CAAC,IAAI,YAAW;AAClE,cAAI,IAAI;AACN,iBAAK,aAAc,GAA6B,IAAI;AACpD,qBAAS,cAAc;UACzB,OAAO;AAGL,uBAAW,KAAK,SAAS;AACvB,mBAAK,iBAAiB,GAAG,QAAQ;YACnC;AACA,iBAAK,gBAAgB,QAAQ;UAC/B;AACA,eAAK,iBAAiB,SAAS,MAAM,GAAG,SAAS,WAAW,CAAC;AAC7D;QACF,CAAC;MACH;MAEA;;;;;;;;;;MAWA,MAAM,UAAO;AACX,YAAI,CAAC,KAAK,WAAU,GAAI;AACtB,iBAAO,CAAA;QACT;AAEA,cAAM,WAAW,KAAK,SAAQ;AAC9B,YAAI,KAAK,cAAa,GAAI;AACxB,iBAAO,SAAS,MAAM,GAAG,SAAS,WAAW;QAC/C;AAIA,cAAM,WAAW,KAAK,SAAQ;AAC9B,YAAI,KAAK,uBAAuB;AAC9B,gBAAM,KAAK;QACb,OAAO;AAEL,cAAI,UAAsB,MAAK;UAAE;AAEjC,eAAK,wBAAwB,IAAI,QAC/B,SAAQ,UAAU,GAAI;AAExB,cAAI;AACF,uBAAW,KAAK,MAAM,KAAK,IAAI,SAAS,QAAQ,UAAU;cACxD,eAAe;aAChB,GAAG;AACF,mBAAK,iBAAiB,GAAG,QAAQ;YACnC;AACA,iBAAK,gBAAgB,QAAQ;UAC/B,SAAS,IAAI;AACX,iBAAK,aAAc,GAA6B,IAAI;AACpD,qBAAS,cAAc;UACzB;AACA,eAAK,wBAAwB;AAC7B,kBAAO;QACT;AACA,eAAO,SAAS,MAAM,GAAG,SAAS,WAAW;MAC/C;;;;MAKA,cAAW;AACT,YAAI,CAAC,KAAK,WAAU,GAAI;AACtB,iBAAO,CAAA;QACT;AAEA,cAAM,WAAW,KAAK,SAAQ;AAC9B,YAAI,KAAK,cAAa,GAAI;AACxB,iBAAO,SAAS,MAAM,GAAG,SAAS,WAAW;QAC/C;AAIA,cAAM,WAAW,KAAK,SAAQ;AAC9B,YAAI;AACF,qBAAW,KAAK,KAAK,IAAI,YAAY,UAAU;YAC7C,eAAe;WAChB,GAAG;AACF,iBAAK,iBAAiB,GAAG,QAAQ;UACnC;AACA,eAAK,gBAAgB,QAAQ;QAC/B,SAAS,IAAI;AACX,eAAK,aAAc,GAA6B,IAAI;AACpD,mBAAS,cAAc;QACzB;AACA,eAAO,SAAS,MAAM,GAAG,SAAS,WAAW;MAC/C;MAEA,aAAU;AACR,YAAI,KAAK,QAAQ;AAAU,iBAAO;AAClC,cAAM,OAAO,OAAO,KAAK;AAGzB,YAAI,EAAE,SAAS,WAAW,SAAS,SAAS,SAAS,QAAQ;AAC3D,iBAAO;QACT;AAEA,eAAO;MACT;MAEA,WACE,MACA,YAAqC;AAErC,gBACG,KAAK,QAAQ,WAAW,SACzB,EAAE,KAAK,QAAQ,aACf,CAAC,KAAK,IAAI,IAAI,MACb,CAAC,cAAc,WAAW,IAAI;MAEnC;;;;;;;;;;MAWA,MAAM,WAAQ;AACZ,YAAI,KAAK;AAAW,iBAAO,KAAK;AAChC,aAAK,cAAc,cAAc,UAAU,KAAK;AAAO,iBAAO;AAC9D,YAAI;AACF,gBAAM,KAAK,MAAM,KAAK,IAAI,SAAS,SAAS,KAAK,SAAQ,CAAE;AAC3D,iBAAQ,KAAK,YAAY,KAAK,QAAQ,EAAE;QAC1C,SAASS,IAAG;AACV,eAAK,iBAAgB;QACvB;MACF;;;;MAKA,eAAY;AACV,YAAI,KAAK;AAAW,iBAAO,KAAK;AAChC,aAAK,cAAc,cAAc,UAAU,KAAK;AAAO,iBAAO;AAC9D,YAAI;AACF,gBAAM,KAAK,KAAK,IAAI,aAAa,KAAK,SAAQ,CAAE;AAChD,iBAAQ,KAAK,YAAY,KAAK,QAAQ,EAAE;QAC1C,SAASA,IAAG;AACV,eAAK,iBAAgB;QACvB;MACF;;;;;;;MAQA,CAAC,QAAQ,EAAE,QAAgB;AACzB,YAAI,WAAW;AAAM;AACrB,eAAO,QAAQ;AACf,aAAK,QAAQ;AAEb,cAAM,UAAU,oBAAI,IAAc,CAAA,CAAE;AACpC,YAAI,KAAK,CAAA;AACT,YAAI,IAAc;AAClB,eAAO,KAAK,EAAE,QAAQ;AACpB,kBAAQ,IAAI,CAAC;AACb,YAAE,YAAY,GAAG,KAAK,KAAK,GAAG;AAC9B,YAAE,iBAAiB,GAAG,KAAK,GAAG;AAC9B,cAAI,EAAE;AACN,aAAG,KAAK,IAAI;QACd;AAEA,YAAI;AACJ,eAAO,KAAK,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAC,GAAG;AACvC,YAAE,YAAY;AACd,YAAE,iBAAiB;AACnB,cAAI,EAAE;QACR;MACF;;AAxlCF,IAAAP,SAAA,WAAA;AAimCA,QAAa,YAAb,MAAa,mBAAkB,SAAQ;;;;MAIrC,MAAY;;;;MAIZ,WAAmB;;;;;;;MAQnB,YACE,MACA,OAAe,SACf,MACA,OACA,QACA,UACA,MAAc;AAEd,cAAM,MAAM,MAAM,MAAM,OAAO,QAAQ,UAAU,IAAI;MACvD;;;;MAKA,SAAS,MAAc,OAAe,SAAS,OAAiB,CAAA,GAAE;AAChE,eAAO,IAAI,WACT,MACA,MACA,KAAK,MACL,KAAK,OACL,KAAK,QACL,KAAK,cAAa,GAClB,IAAI;MAER;;;;MAKA,cAAcE,QAAY;AACxB,eAAO,YAAA,MAAM,MAAMA,MAAI,EAAE;MAC3B;;;;MAKA,QAAQ,UAAgB;AACtB,mBAAW,WAAW,SAAS,YAAW,CAAE;AAC5C,YAAI,aAAa,KAAK,KAAK,MAAM;AAC/B,iBAAO,KAAK;QACd;AAEA,mBAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACxD,cAAI,KAAK,SAAS,UAAU,OAAO,GAAG;AACpC,mBAAQ,KAAK,MAAM,QAAQ,IAAI;UACjC;QACF;AAEA,eAAQ,KAAK,MAAM,QAAQ,IAAI,IAAI,gBACjC,UACA,IAAI,EACJ;MACJ;;;;MAKA,SAAS,UAAkB,UAAkB,KAAK,KAAK,MAAI;AAIzD,mBAAW,SACR,YAAW,EACX,QAAQ,OAAO,IAAI,EACnB,QAAQ,gBAAgB,MAAM;AACjC,eAAO,aAAa;MACtB;;AAnFF,IAAAF,SAAA,YAAA;AA2FA,QAAa,YAAb,MAAa,mBAAkB,SAAQ;;;;MAIrC,WAAgB;;;;MAIhB,MAAW;;;;;;;MAQX,YACE,MACA,OAAe,SACf,MACA,OACA,QACA,UACA,MAAc;AAEd,cAAM,MAAM,MAAM,MAAM,OAAO,QAAQ,UAAU,IAAI;MACvD;;;;MAKA,cAAcE,QAAY;AACxB,eAAOA,OAAK,WAAW,GAAG,IAAI,MAAM;MACtC;;;;MAKA,QAAQ,WAAiB;AACvB,eAAO,KAAK;MACd;;;;MAKA,SAAS,MAAc,OAAe,SAAS,OAAiB,CAAA,GAAE;AAChE,eAAO,IAAI,WACT,MACA,MACA,KAAK,MACL,KAAK,OACL,KAAK,QACL,KAAK,cAAa,GAClB,IAAI;MAER;;AAvDF,IAAAF,SAAA,YAAA;AAiGA,QAAsB,iBAAtB,MAAoC;;;;MAIlC;;;;MAIA;;;;MAIA;;;;MAIA;MACA;MACA;MACA;;;;;;MAMA;MASA;;;;;;;;MASA,YACE,MAAoB,QAAQ,IAAG,GAC/B,UACA,KACA,EACE,QACA,oBAAoB,KAAK,MACzB,IAAAQ,OAAK,UAAS,IACI,CAAA,GAAE;AAEtB,aAAK,MAAM,aAAaA,IAAE;AAC1B,YAAI,eAAe,OAAO,IAAI,WAAW,SAAS,GAAG;AACnD,iBAAM,GAAA,WAAA,eAAc,GAAG;QACzB;AAGA,cAAM,UAAU,SAAS,QAAQ,GAAG;AACpC,aAAK,QAAQ,uBAAO,OAAO,IAAI;AAC/B,aAAK,WAAW,KAAK,cAAc,OAAO;AAC1C,aAAK,gBAAgB,IAAI,aAAY;AACrC,aAAK,qBAAqB,IAAI,aAAY;AAC1C,aAAK,YAAY,IAAI,cAAc,iBAAiB;AAEpD,cAAM,QAAQ,QAAQ,UAAU,KAAK,SAAS,MAAM,EAAE,MAAM,GAAG;AAE/D,YAAI,MAAM,WAAW,KAAK,CAAC,MAAM,CAAC,GAAG;AACnC,gBAAM,IAAG;QACX;AAEA,YAAI,WAAW,QAAW;AACxB,gBAAM,IAAI,UACR,oDAAoD;QAExD;AAEA,aAAK,SAAS;AACd,aAAK,OAAO,KAAK,QAAQ,KAAK,GAAG;AACjC,aAAK,MAAM,KAAK,QAAQ,IAAI,KAAK;AACjC,YAAI,OAAiB,KAAK;AAC1B,YAAI,MAAM,MAAM,SAAS;AACzB,cAAM,UAAU,SAAS;AACzB,YAAI,MAAM,KAAK;AACf,YAAI,WAAW;AACf,mBAAW,QAAQ,OAAO;AACxB,gBAAM,IAAI;AACV,iBAAO,KAAK,MAAM,MAAM;YACtB,UAAU,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO;YAC9C,eAAe,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG;YAC/C,UAAW,QAAQ,WAAW,KAAK,WAAW;WAC/C;AACD,qBAAW;QACb;AACA,aAAK,MAAM;MACb;;;;MAKA,MAAMN,SAAsB,KAAK,KAAG;AAClC,YAAI,OAAOA,WAAS,UAAU;AAC5B,UAAAA,SAAO,KAAK,IAAI,QAAQA,MAAI;QAC9B;AACA,eAAOA,OAAK,MAAK;MACnB;;;;;;;MAyBA,gBAAa;AACX,eAAO,KAAK;MACd;;;;;;;;;;MAWA,WAAW,OAAe;AAGxB,YAAI,IAAI;AACR,iBAASO,KAAI,MAAM,SAAS,GAAGA,MAAK,GAAGA,MAAK;AAC1C,gBAAM,IAAI,MAAMA,EAAC;AACjB,cAAI,CAAC,KAAK,MAAM;AAAK;AACrB,cAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK;AACtB,cAAI,KAAK,WAAW,CAAC,GAAG;AACtB;UACF;QACF;AACA,cAAML,UAAS,KAAK,cAAc,IAAI,CAAC;AACvC,YAAIA,YAAW,QAAW;AACxB,iBAAOA;QACT;AACA,cAAM,SAAS,KAAK,IAAI,QAAQ,CAAC,EAAE,SAAQ;AAC3C,aAAK,cAAc,IAAI,GAAG,MAAM;AAChC,eAAO;MACT;;;;;;;;;;;;MAaA,gBAAgB,OAAe;AAG7B,YAAI,IAAI;AACR,iBAASK,KAAI,MAAM,SAAS,GAAGA,MAAK,GAAGA,MAAK;AAC1C,gBAAM,IAAI,MAAMA,EAAC;AACjB,cAAI,CAAC,KAAK,MAAM;AAAK;AACrB,cAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK;AACtB,cAAI,KAAK,WAAW,CAAC,GAAG;AACtB;UACF;QACF;AACA,cAAML,UAAS,KAAK,mBAAmB,IAAI,CAAC;AAC5C,YAAIA,YAAW,QAAW;AACxB,iBAAOA;QACT;AACA,cAAM,SAAS,KAAK,IAAI,QAAQ,CAAC,EAAE,cAAa;AAChD,aAAK,mBAAmB,IAAI,GAAG,MAAM;AACrC,eAAO;MACT;;;;MAKA,SAAS,QAA2B,KAAK,KAAG;AAC1C,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,eAAO,MAAM,SAAQ;MACvB;;;;;MAMA,cAAc,QAA2B,KAAK,KAAG;AAC/C,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,eAAO,MAAM,cAAa;MAC5B;;;;MAKA,SAAS,QAA2B,KAAK,KAAG;AAC1C,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,eAAO,MAAM;MACf;;;;MAKA,QAAQ,QAA2B,KAAK,KAAG;AACzC,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,gBAAQ,MAAM,UAAU,OAAO,SAAQ;MACzC;MAkCA,MAAM,QACJ,QAAwD,KAAK,KAC7D,OAAmC;QACjC,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EAAE,cAAa,IAAK;AAC1B,YAAI,CAAC,MAAM,WAAU,GAAI;AACvB,iBAAO,CAAA;QACT,OAAO;AACL,gBAAM,IAAI,MAAM,MAAM,QAAO;AAC7B,iBAAO,gBAAgB,IAAI,EAAE,IAAI,OAAK,EAAE,IAAI;QAC9C;MACF;MAsBA,YACE,QAAwD,KAAK,KAC7D,OAAmC;QACjC,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EAAE,gBAAgB,KAAI,IAAK;AACjC,YAAI,CAAC,MAAM,WAAU,GAAI;AACvB,iBAAO,CAAA;QACT,WAAW,eAAe;AACxB,iBAAO,MAAM,YAAW;QAC1B,OAAO;AACL,iBAAO,MAAM,YAAW,EAAG,IAAI,OAAK,EAAE,IAAI;QAC5C;MACF;;;;;;;;;;;;;;;;MAiBA,MAAM,MACJ,QAA2B,KAAK,KAAG;AAEnC,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,eAAO,MAAM,MAAK;MACpB;;;;MAKA,UAAU,QAA2B,KAAK,KAAG;AAC3C,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC;AACA,eAAO,MAAM,UAAS;MACxB;MAkCA,MAAM,SACJ,QAAwD,KAAK,KAC7D,EAAE,cAAa,IAAiC;QAC9C,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,0BAAgB,MAAM;AACtB,kBAAQ,KAAK;QACf;AACA,cAAM,IAAI,MAAM,MAAM,SAAQ;AAC9B,eAAO,gBAAgB,IAAI,GAAG,SAAQ;MACxC;MAuBA,aACE,QAAwD,KAAK,KAC7D,EAAE,cAAa,IAAiC;QAC9C,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,0BAAgB,MAAM;AACtB,kBAAQ,KAAK;QACf;AACA,cAAM,IAAI,MAAM,aAAY;AAC5B,eAAO,gBAAgB,IAAI,GAAG,SAAQ;MACxC;MAiCA,MAAM,SACJ,QAAwD,KAAK,KAC7D,EAAE,cAAa,IAAiC;QAC9C,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,0BAAgB,MAAM;AACtB,kBAAQ,KAAK;QACf;AACA,cAAM,IAAI,MAAM,MAAM,SAAQ;AAC9B,eAAO,gBAAgB,IAAI,GAAG,SAAQ;MACxC;MAoBA,aACE,QAAwD,KAAK,KAC7D,EAAE,cAAa,IAAiC;QAC9C,eAAe;SAChB;AAED,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,0BAAgB,MAAM;AACtB,kBAAQ,KAAK;QACf;AACA,cAAM,IAAI,MAAM,aAAY;AAC5B,eAAO,gBAAgB,IAAI,GAAG,SAAQ;MACxC;MA6BA,MAAM,KACJ,QAAyC,KAAK,KAC9C,OAAoB,CAAA,GAAE;AAEtB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EACJ,gBAAgB,MAChB,SAAS,OACT,QAAAM,SACA,WAAU,IACR;AACJ,cAAM,UAAiC,CAAA;AACvC,YAAI,CAACA,WAAUA,QAAO,KAAK,GAAG;AAC5B,kBAAQ,KAAK,gBAAgB,QAAQ,MAAM,SAAQ,CAAE;QACvD;AACA,cAAM,OAAO,oBAAI,IAAG;AACpB,cAAM,OAAO,CACXP,MACA,OACE;AACF,eAAK,IAAIA,IAAG;AACZ,UAAAA,KAAI,UAAU,CAAC,IAAI,YAAW;AAE5B,gBAAI,IAAI;AACN,qBAAO,GAAG,EAAE;YACd;AAEA,gBAAI,MAAM,QAAQ;AAClB,gBAAI,CAAC;AAAK,qBAAO,GAAE;AACnB,kBAAM,OAAO,MAAK;AAChB,kBAAI,EAAE,QAAQ,GAAG;AACf,mBAAE;cACJ;YACF;AACA,uBAAW,KAAK,SAAS;AACvB,kBAAI,CAACO,WAAUA,QAAO,CAAC,GAAG;AACxB,wBAAQ,KAAK,gBAAgB,IAAI,EAAE,SAAQ,CAAE;cAC/C;AACA,kBAAI,UAAU,EAAE,eAAc,GAAI;AAChC,kBAAE,SAAQ,EACP,KAAK,OAAM,GAAG,UAAS,IAAK,EAAE,MAAK,IAAK,CAAE,EAC1C,KAAK,OACJ,GAAG,WAAW,MAAM,UAAU,IAAI,KAAK,GAAG,IAAI,IAAI,KAAI,CAAE;cAE9D,OAAO;AACL,oBAAI,EAAE,WAAW,MAAM,UAAU,GAAG;AAClC,uBAAK,GAAG,IAAI;gBACd,OAAO;AACL,uBAAI;gBACN;cACF;YACF;UACF,GAAG,IAAI;QACT;AAEA,cAAM,QAAQ;AACd,eAAO,IAAI,QAA+B,CAAC,KAAK,QAAO;AACrD,eAAK,OAAO,QAAK;AAEf,gBAAI;AAAI,qBAAO,IAAI,EAAE;AAErB,gBAAI,OAAgC;UACtC,CAAC;QACH,CAAC;MACH;MA6BA,SACE,QAAyC,KAAK,KAC9C,OAAoB,CAAA,GAAE;AAEtB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EACJ,gBAAgB,MAChB,SAAS,OACT,QAAAA,SACA,WAAU,IACR;AACJ,cAAM,UAAiC,CAAA;AACvC,YAAI,CAACA,WAAUA,QAAO,KAAK,GAAG;AAC5B,kBAAQ,KAAK,gBAAgB,QAAQ,MAAM,SAAQ,CAAE;QACvD;AACA,cAAM,OAAO,oBAAI,IAAc,CAAC,KAAK,CAAC;AACtC,mBAAWP,QAAO,MAAM;AACtB,gBAAM,UAAUA,KAAI,YAAW;AAC/B,qBAAW,KAAK,SAAS;AACvB,gBAAI,CAACO,WAAUA,QAAO,CAAC,GAAG;AACxB,sBAAQ,KAAK,gBAAgB,IAAI,EAAE,SAAQ,CAAE;YAC/C;AACA,gBAAI,IAA0B;AAC9B,gBAAI,EAAE,eAAc,GAAI;AACtB,kBAAI,EAAE,WAAW,IAAI,EAAE,aAAY;AAAM;AACzC,kBAAI,EAAE,UAAS;AAAI,kBAAE,UAAS;YAChC;AACA,gBAAI,EAAE,WAAW,MAAM,UAAU,GAAG;AAClC,mBAAK,IAAI,CAAC;YACZ;UACF;QACF;AACA,eAAO;MACT;;;;;;;;;;MAWA,CAAC,OAAO,aAAa,IAAC;AACpB,eAAO,KAAK,QAAO;MACrB;MA+BA,QACE,QAAyC,KAAK,KAC9C,UAAuB,CAAA,GAAE;AAKzB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,oBAAU;AACV,kBAAQ,KAAK;QACf;AACA,eAAO,KAAK,OAAO,OAAO,OAAO,EAAE,OAAO,aAAa,EAAC;MAC1D;;;;;;MAOA,CAAC,OAAO,QAAQ,IAAC;AACf,eAAO,KAAK,YAAW;MACzB;MAuBA,CAAC,YACC,QAAyC,KAAK,KAC9C,OAAoB,CAAA,GAAE;AAEtB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EACJ,gBAAgB,MAChB,SAAS,OACT,QAAAA,SACA,WAAU,IACR;AACJ,YAAI,CAACA,WAAUA,QAAO,KAAK,GAAG;AAC5B,gBAAM,gBAAgB,QAAQ,MAAM,SAAQ;QAC9C;AACA,cAAM,OAAO,oBAAI,IAAc,CAAC,KAAK,CAAC;AACtC,mBAAWP,QAAO,MAAM;AACtB,gBAAM,UAAUA,KAAI,YAAW;AAC/B,qBAAW,KAAK,SAAS;AACvB,gBAAI,CAACO,WAAUA,QAAO,CAAC,GAAG;AACxB,oBAAM,gBAAgB,IAAI,EAAE,SAAQ;YACtC;AACA,gBAAI,IAA0B;AAC9B,gBAAI,EAAE,eAAc,GAAI;AACtB,kBAAI,EAAE,WAAW,IAAI,EAAE,aAAY;AAAM;AACzC,kBAAI,EAAE,UAAS;AAAI,kBAAE,UAAS;YAChC;AACA,gBAAI,EAAE,WAAW,MAAM,UAAU,GAAG;AAClC,mBAAK,IAAI,CAAC;YACZ;UACF;QACF;MACF;MA2BA,OACE,QAAyC,KAAK,KAC9C,OAAoB,CAAA,GAAE;AAEtB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EACJ,gBAAgB,MAChB,SAAS,OACT,QAAAA,SACA,WAAU,IACR;AACJ,cAAM,UAAU,IAAI,WAAA,SAA4B,EAAE,YAAY,KAAI,CAAE;AACpE,YAAI,CAACA,WAAUA,QAAO,KAAK,GAAG;AAC5B,kBAAQ,MAAM,gBAAgB,QAAQ,MAAM,SAAQ,CAAE;QACxD;AACA,cAAM,OAAO,oBAAI,IAAG;AACpB,cAAMC,SAAoB,CAAC,KAAK;AAChC,YAAI,aAAa;AACjB,cAAMC,YAAU,MAAK;AACnB,cAAI,SAAS;AACb,iBAAO,CAAC,QAAQ;AACd,kBAAMT,OAAMQ,OAAM,MAAK;AACvB,gBAAI,CAACR,MAAK;AACR,kBAAI,eAAe;AAAG,wBAAQ,IAAG;AACjC;YACF;AAEA;AACA,iBAAK,IAAIA,IAAG;AAEZ,kBAAM,YAAY,CAChB,IACA,SACA,eAAwB,UACtB;AAEF,kBAAI;AAAI,uBAAO,QAAQ,KAAK,SAAS,EAAE;AAEvC,kBAAI,UAAU,CAAC,cAAc;AAC3B,sBAAM,WAA4C,CAAA;AAClD,2BAAW,KAAK,SAAS;AACvB,sBAAI,EAAE,eAAc,GAAI;AACtB,6BAAS,KACP,EACG,SAAQ,EACR,KAAK,CAAC,MACL,GAAG,UAAS,IAAK,EAAE,MAAK,IAAK,CAAC,CAC/B;kBAEP;gBACF;AACA,oBAAI,SAAS,QAAQ;AACnB,0BAAQ,IAAI,QAAQ,EAAE,KAAK,MACzB,UAAU,MAAM,SAAS,IAAI,CAAC;AAEhC;gBACF;cACF;AAEA,yBAAW,KAAK,SAAS;AACvB,oBAAI,MAAM,CAACO,WAAUA,QAAO,CAAC,IAAI;AAC/B,sBAAI,CAAC,QAAQ,MAAM,gBAAgB,IAAI,EAAE,SAAQ,CAAE,GAAG;AACpD,6BAAS;kBACX;gBACF;cACF;AAEA;AACA,yBAAW,KAAK,SAAS;AACvB,sBAAM,IAAI,EAAE,eAAc,KAAM;AAChC,oBAAI,EAAE,WAAW,MAAM,UAAU,GAAG;AAClC,kBAAAC,OAAM,KAAK,CAAC;gBACd;cACF;AACA,kBAAI,UAAU,CAAC,QAAQ,SAAS;AAC9B,wBAAQ,KAAK,SAASC,SAAO;cAC/B,WAAW,CAAC,MAAM;AAChB,gBAAAA,UAAO;cACT;YACF;AAGA,gBAAI,OAAO;AACX,YAAAT,KAAI,UAAU,WAAW,IAAI;AAC7B,mBAAO;UACT;QACF;AACA,QAAAS,UAAO;AACP,eAAO;MACT;MA8BA,WACE,QAAyC,KAAK,KAC9C,OAAoB,CAAA,GAAE;AAEtB,YAAI,OAAO,UAAU,UAAU;AAC7B,kBAAQ,KAAK,IAAI,QAAQ,KAAK;QAChC,WAAW,EAAE,iBAAiB,WAAW;AACvC,iBAAO;AACP,kBAAQ,KAAK;QACf;AACA,cAAM,EACJ,gBAAgB,MAChB,SAAS,OACT,QAAAF,SACA,WAAU,IACR;AACJ,cAAM,UAAU,IAAI,WAAA,SAA4B,EAAE,YAAY,KAAI,CAAE;AACpE,cAAM,OAAO,oBAAI,IAAG;AACpB,YAAI,CAACA,WAAUA,QAAO,KAAK,GAAG;AAC5B,kBAAQ,MAAM,gBAAgB,QAAQ,MAAM,SAAQ,CAAE;QACxD;AACA,cAAMC,SAAoB,CAAC,KAAK;AAChC,YAAI,aAAa;AACjB,cAAMC,YAAU,MAAK;AACnB,cAAI,SAAS;AACb,iBAAO,CAAC,QAAQ;AACd,kBAAMT,OAAMQ,OAAM,MAAK;AACvB,gBAAI,CAACR,MAAK;AACR,kBAAI,eAAe;AAAG,wBAAQ,IAAG;AACjC;YACF;AACA;AACA,iBAAK,IAAIA,IAAG;AAEZ,kBAAM,UAAUA,KAAI,YAAW;AAC/B,uBAAW,KAAK,SAAS;AACvB,kBAAI,CAACO,WAAUA,QAAO,CAAC,GAAG;AACxB,oBAAI,CAAC,QAAQ,MAAM,gBAAgB,IAAI,EAAE,SAAQ,CAAE,GAAG;AACpD,2BAAS;gBACX;cACF;YACF;AACA;AACA,uBAAW,KAAK,SAAS;AACvB,kBAAI,IAA0B;AAC9B,kBAAI,EAAE,eAAc,GAAI;AACtB,oBAAI,EAAE,WAAW,IAAI,EAAE,aAAY;AAAM;AACzC,oBAAI,EAAE,UAAS;AAAI,oBAAE,UAAS;cAChC;AACA,kBAAI,EAAE,WAAW,MAAM,UAAU,GAAG;AAClC,gBAAAC,OAAM,KAAK,CAAC;cACd;YACF;UACF;AACA,cAAI,UAAU,CAAC,QAAQ;AAAS,oBAAQ,KAAK,SAASC,SAAO;QAC/D;AACA,QAAAA,UAAO;AACP,eAAO;MACT;MAEA,MAAMV,SAAsB,KAAK,KAAG;AAClC,cAAM,SAAS,KAAK;AACpB,aAAK,MAAM,OAAOA,WAAS,WAAW,KAAK,IAAI,QAAQA,MAAI,IAAIA;AAC/D,aAAK,IAAI,QAAQ,EAAE,MAAM;MAC3B;;AA7gCF,IAAAF,SAAA,iBAAA;AAqlCA,QAAa,kBAAb,cAAqC,eAAc;;;;MAIjD,MAAY;MAEZ,YACE,MAAoB,QAAQ,IAAG,GAC/B,OAAuB,CAAA,GAAE;AAEzB,cAAM,EAAE,SAAS,KAAI,IAAK;AAC1B,cAAM,KAAK,YAAA,OAAO,MAAM,EAAE,GAAG,MAAM,OAAM,CAAE;AAC3C,aAAK,SAAS;AACd,iBAAS,IAA0B,KAAK,KAAK,GAAG,IAAI,EAAE,QAAQ;AAC5D,YAAE,SAAS,KAAK;QAClB;MACF;;;;MAKA,cAAcG,MAAW;AAIvB,eAAO,YAAA,MAAM,MAAMA,IAAG,EAAE,KAAK,YAAW;MAC1C;;;;MAKA,QAAQK,MAAW;AACjB,eAAO,IAAI,UACT,KAAK,UACL,OACA,QACA,KAAK,OACL,KAAK,QACL,KAAK,cAAa,GAClB,EAAE,IAAAA,KAAE,CAAE;MAEV;;;;MAKA,WAAW,GAAS;AAClB,eACE,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,KAAK,kBAAkB,KAAK,CAAC;MAEvE;;AAlDF,IAAAR,SAAA,kBAAA;AA4DA,QAAa,kBAAb,cAAqC,eAAc;;;;MAIjD,MAAW;MACX,YACE,MAAoB,QAAQ,IAAG,GAC/B,OAAuB,CAAA,GAAE;AAEzB,cAAM,EAAE,SAAS,MAAK,IAAK;AAC3B,cAAM,KAAK,YAAA,OAAO,KAAK,EAAE,GAAG,MAAM,OAAM,CAAE;AAC1C,aAAK,SAAS;MAChB;;;;MAKA,cAAc,MAAY;AACxB,eAAO;MACT;;;;MAKA,QAAQQ,MAAW;AACjB,eAAO,IAAI,UACT,KAAK,UACL,OACA,QACA,KAAK,OACL,KAAK,QACL,KAAK,cAAa,GAClB,EAAE,IAAAA,KAAE,CAAE;MAEV;;;;MAKA,WAAW,GAAS;AAClB,eAAO,EAAE,WAAW,GAAG;MACzB;;AAzCF,IAAAR,SAAA,kBAAA;AAoDA,QAAa,mBAAb,cAAsC,gBAAe;MACnD,YACE,MAAoB,QAAQ,IAAG,GAC/B,OAAuB,CAAA,GAAE;AAEzB,cAAM,EAAE,SAAS,KAAI,IAAK;AAC1B,cAAM,KAAK,EAAE,GAAG,MAAM,OAAM,CAAE;MAChC;;AAPF,IAAAA,SAAA,mBAAA;AAea,IAAAA,SAAA,OAAO,QAAQ,aAAa,UAAU,YAAY;AASlD,IAAAA,SAAA,aAIX,QAAQ,aAAa,UAAU,kBAC7B,QAAQ,aAAa,WAAW,mBAChC;;;;;;;;;;ACxwFJ,QAAA,cAAA;AAgBA,QAAM,gBAAgB,CAAC,OACrB,GAAG,UAAU;AACf,QAAM,aAAa,CAAC,OAAiC,GAAG,UAAU;AAMlE,QAAa,UAAb,MAAa,SAAO;MACT;MACA;MACA;MACA;MACA;MACT;MACA;MACA;MACA;MACA;MACA,kBAA2B;MAE3B,YACE,aACA,UACAa,QACAC,WAAyB;AAEzB,YAAI,CAAC,cAAc,WAAW,GAAG;AAC/B,gBAAM,IAAI,UAAU,oBAAoB;QAC1C;AACA,YAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,gBAAM,IAAI,UAAU,iBAAiB;QACvC;AACA,YAAI,SAAS,WAAW,YAAY,QAAQ;AAC1C,gBAAM,IAAI,UAAU,+CAA+C;QACrE;AACA,aAAK,SAAS,YAAY;AAC1B,YAAID,SAAQ,KAAKA,UAAS,KAAK,QAAQ;AACrC,gBAAM,IAAI,UAAU,oBAAoB;QAC1C;AACA,aAAK,eAAe;AACpB,aAAK,YAAY;AACjB,aAAK,SAASA;AACd,aAAK,YAAYC;AAGjB,YAAI,KAAK,WAAW,GAAG;AASrB,cAAI,KAAK,MAAK,GAAI;AAEhB,kBAAM,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK;AACxC,kBAAM,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK;AACxC,gBAAI,MAAM,CAAC,MAAM,IAAI;AAEnB,oBAAM,MAAK;AACX,oBAAM,MAAK;YACb;AACA,kBAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,GAAG;AACvC,kBAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,GAAG;AACvC,iBAAK,eAAe,CAAC,GAAG,GAAG,KAAK;AAChC,iBAAK,YAAY,CAAC,GAAG,GAAG,KAAK;AAC7B,iBAAK,SAAS,KAAK,aAAa;UAClC,WAAW,KAAK,QAAO,KAAM,KAAK,WAAU,GAAI;AAC9C,kBAAM,CAAC,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,kBAAM,CAAC,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,gBAAI,MAAM,CAAC,MAAM,IAAI;AAEnB,oBAAM,MAAK;AACX,oBAAM,MAAK;YACb;AACA,kBAAM,IAAK,KAAgB;AAC3B,kBAAM,IAAI,KAAK;AACf,iBAAK,eAAe,CAAC,GAAG,GAAG,KAAK;AAChC,iBAAK,YAAY,CAAC,GAAG,GAAG,KAAK;AAC7B,iBAAK,SAAS,KAAK,aAAa;UAClC;QACF;MACF;;;;MAKA,UAAO;AACL,eAAO,KAAK,aAAa,KAAK,MAAM;MACtC;;;;MAKA,WAAQ;AACN,eAAO,OAAO,KAAK,aAAa,KAAK,MAAM,MAAM;MACnD;;;;MAIA,aAAU;AACR,eAAO,KAAK,aAAa,KAAK,MAAM,MAAM,YAAA;MAC5C;;;;MAIA,WAAQ;AACN,eAAO,KAAK,aAAa,KAAK,MAAM,aAAa;MACnD;;;;MAKA,aAAU;AACR,eAAQ,KAAK,cACX,KAAK,gBACJ,KAAK,WAAW,IACf,KAAK,WAAU,IACb,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,MAAM,CAAC,EAAE,KAAK,GAAG,IACpD,KAAK,UAAU,KAAK,GAAG,IACzB,KAAK,UAAU,MAAM,KAAK,MAAM,EAAE,KAAK,GAAG;MAChD;;;;MAKA,UAAO;AACL,eAAO,KAAK,SAAS,KAAK,SAAS;MACrC;;;;MAKA,OAAI;AACF,YAAI,KAAK,UAAU;AAAW,iBAAO,KAAK;AAC1C,YAAI,CAAC,KAAK,QAAO;AAAI,iBAAQ,KAAK,QAAQ;AAC1C,aAAK,QAAQ,IAAI,SACf,KAAK,cACL,KAAK,WACL,KAAK,SAAS,GACd,KAAK,SAAS;AAEhB,aAAK,MAAM,cAAc,KAAK;AAC9B,aAAK,MAAM,SAAS,KAAK;AACzB,aAAK,MAAM,WAAW,KAAK;AAC3B,eAAO,KAAK;MACd;;;;MAKA,QAAK;AACH,cAAM,KAAK,KAAK;AAChB,eAAO,KAAK,WAAW,SACnB,KAAK,SACJ,KAAK,SACJ,KAAK,cAAc,WACnB,KAAK,WAAW,KAChB,GAAG,CAAC,MAAM,MACV,GAAG,CAAC,MAAM,MACV,OAAO,GAAG,CAAC,MAAM,YACjB,CAAC,CAAC,GAAG,CAAC,KACN,OAAO,GAAG,CAAC,MAAM,YACjB,CAAC,CAAC,GAAG,CAAC;MACd;;;;;;;;;MAUA,UAAO;AACL,cAAM,KAAK,KAAK;AAChB,eAAO,KAAK,aAAa,SACrB,KAAK,WACJ,KAAK,WACJ,KAAK,cAAc,WACnB,KAAK,WAAW,KAChB,KAAK,SAAS,KACd,OAAO,GAAG,CAAC,MAAM,YACjB,YAAY,KAAK,GAAG,CAAC,CAAC;MAC9B;;;;;;;MAQA,aAAU;AACR,cAAM,KAAK,KAAK;AAChB,eAAO,KAAK,gBAAgB,SACxB,KAAK,cACJ,KAAK,cACH,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,KAC7B,KAAK,QAAO,KACZ,KAAK,MAAK;MAClB;;;;MAKA,OAAI;AACF,cAAM,IAAI,KAAK,aAAa,CAAC;AAC7B,eACI,OAAO,MAAM,YAAY,KAAK,WAAU,KAAM,KAAK,WAAW,IAE9D,IACA;MACN;;;;;MAMA,sBAAmB;AACjB,eAAO,EACL,KAAK,WAAW,KAChB,CAAC,KAAK,WAAU,KAChB,CAAC,KAAK;MAEV;;;;MAKA,qBAAkB;AAChB,YAAI,KAAK,WAAW,KAAK,CAAC,KAAK,WAAU,KAAM,CAAC,KAAK;AACnD,iBAAO;AACT,aAAK,kBAAkB;AACvB,eAAO;MACT;;AApOF,IAAAC,SAAA,UAAA;;;;;;;;;;ACrBA,QAAA,cAAA;AAEA,QAAA,eAAA;AASA,QAAM,kBAEF,OAAO,YAAY,YACnB,WACA,OAAO,QAAQ,aAAa,WAE5B,QAAQ,WACR;AAKJ,QAAa,SAAb,MAAmB;MACjB;MACA;MACA;MACA;MACA;MACA;MAEA,YACE,SACA,EACE,SACA,QACA,OACA,YACA,UAAAC,YAAW,gBAAe,GACX;AAEjB,aAAK,WAAW,CAAA;AAChB,aAAK,WAAW,CAAA;AAChB,aAAK,mBAAmB,CAAA;AACxB,aAAK,mBAAmB,CAAA;AACxB,aAAK,WAAWA;AAChB,aAAK,SAAS;UACZ,KAAK;UACL;UACA;UACA;UACA;UACA,mBAAmB;UACnB,UAAAA;UACA,WAAW;UACX,UAAU;;AAEZ,mBAAW,OAAO;AAAS,eAAK,IAAI,GAAG;MACzC;MAEA,IAAI,KAAW;AAab,cAAM,KAAK,IAAI,YAAA,UAAU,KAAK,KAAK,MAAM;AACzC,iBAASC,KAAI,GAAGA,KAAI,GAAG,IAAI,QAAQA,MAAK;AACtC,gBAAM,SAAS,GAAG,IAAIA,EAAC;AACvB,gBAAM,YAAY,GAAG,UAAUA,EAAC;AAEhC,cAAI,CAAC,UAAU,CAAC,WAAW;AACzB,kBAAM,IAAI,MAAM,wBAAwB;UAC1C;AAGA,iBAAO,OAAO,CAAC,MAAM,OAAO,UAAU,CAAC,MAAM,KAAK;AAChD,mBAAO,MAAK;AACZ,sBAAU,MAAK;UACjB;AAEA,gBAAM,IAAI,IAAI,aAAA,QAAQ,QAAQ,WAAW,GAAG,KAAK,QAAQ;AACzD,gBAAM,IAAI,IAAI,YAAA,UAAU,EAAE,WAAU,GAAI,KAAK,MAAM;AACnD,gBAAM,WAAW,UAAU,UAAU,SAAS,CAAC,MAAM;AACrD,gBAAM,WAAW,EAAE,WAAU;AAC7B,cAAI;AAAU,iBAAK,SAAS,KAAK,CAAC;;AAC7B,iBAAK,SAAS,KAAK,CAAC;AACzB,cAAI,UAAU;AACZ,gBAAI;AAAU,mBAAK,iBAAiB,KAAK,CAAC;;AACrC,mBAAK,iBAAiB,KAAK,CAAC;UACnC;QACF;MACF;MAEA,QAAQ,GAAO;AACb,cAAM,WAAW,EAAE,SAAQ;AAC3B,cAAM,YAAY,GAAG,QAAQ;AAC7B,cAAM,WAAW,EAAE,SAAQ,KAAM;AACjC,cAAM,YAAY,GAAG,QAAQ;AAC7B,mBAAW,KAAK,KAAK,UAAU;AAC7B,cAAI,EAAE,MAAM,QAAQ,KAAK,EAAE,MAAM,SAAS;AAAG,mBAAO;QACtD;AACA,mBAAW,KAAK,KAAK,UAAU;AAC7B,cAAI,EAAE,MAAM,QAAQ,KAAK,EAAE,MAAM,SAAS;AAAG,mBAAO;QACtD;AACA,eAAO;MACT;MAEA,gBAAgB,GAAO;AACrB,cAAM,WAAW,EAAE,SAAQ,IAAK;AAChC,cAAM,YAAY,EAAE,SAAQ,KAAM,OAAO;AACzC,mBAAW,KAAK,KAAK,kBAAkB;AACrC,cAAI,EAAE,MAAM,QAAQ;AAAG,mBAAO;QAChC;AACA,mBAAW,KAAK,KAAK,kBAAkB;AACrC,cAAI,EAAE,MAAM,QAAQ;AAAG,mBAAO;QAChC;AACA,eAAO;MACT;;AAtGF,IAAAC,SAAA,SAAA;;;;;;;;;;AC1BA,QAAA,cAAA;AAQA,QAAa,iBAAb,MAAa,gBAAc;MACzB;MACA,YAAY,QAAkC,oBAAI,IAAG,GAAE;AACrD,aAAK,QAAQ;MACf;MACA,OAAI;AACF,eAAO,IAAI,gBAAe,IAAI,IAAI,KAAK,KAAK,CAAC;MAC/C;MACA,UAAU,QAAc,SAAgB;AACtC,eAAO,KAAK,MAAM,IAAI,OAAO,SAAQ,CAAE,GAAG,IAAI,QAAQ,WAAU,CAAE;MACpE;MACA,YAAY,QAAc,SAAgB;AACxC,cAAM,WAAW,OAAO,SAAQ;AAChC,cAAMC,UAAS,KAAK,MAAM,IAAI,QAAQ;AACtC,YAAIA;AAAQ,UAAAA,QAAO,IAAI,QAAQ,WAAU,CAAE;;AACtC,eAAK,MAAM,IAAI,UAAU,oBAAI,IAAI,CAAC,QAAQ,WAAU,CAAE,CAAC,CAAC;MAC/D;;AAhBF,IAAAC,SAAA,iBAAA;AAwBA,QAAa,cAAb,MAAwB;MACtB,QAA2B,oBAAI,IAAG;MAClC,IAAI,QAAc,UAAmB,OAAc;AACjD,cAAMC,MAAK,WAAW,IAAI,MAAM,QAAQ,IAAI;AAC5C,cAAM,UAAU,KAAK,MAAM,IAAI,MAAM;AACrC,aAAK,MAAM,IAAI,QAAQ,YAAY,SAAYA,KAAIA,KAAI,OAAO;MAChE;;MAEA,UAAO;AACL,eAAO,CAAC,GAAG,KAAK,MAAM,QAAO,CAAE,EAAE,IAAI,CAAC,CAACC,QAAMD,EAAC,MAAM;UAClDC;UACA,CAAC,EAAED,KAAI;UACP,CAAC,EAAEA,KAAI;SACR;MACH;;AAdF,IAAAD,SAAA,cAAA;AAqBA,QAAa,WAAb,MAAqB;MACnB,QAA8B,oBAAI,IAAG;MACrC,IAAI,QAAc,SAAgB;AAChC,YAAI,CAAC,OAAO,WAAU,GAAI;AACxB;QACF;AACA,cAAM,OAAO,KAAK,MAAM,IAAI,MAAM;AAClC,YAAI,MAAM;AACR,cAAI,CAAC,KAAK,KAAK,OAAK,EAAE,WAAU,MAAO,QAAQ,WAAU,CAAE,GAAG;AAC5D,iBAAK,KAAK,OAAO;UACnB;QACF;AAAO,eAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC;MACzC;MACA,IAAI,QAAY;AACd,cAAM,OAAO,KAAK,MAAM,IAAI,MAAM;AAElC,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI,MAAM,iCAAiC;QACnD;AAEA,eAAO;MACT;MACA,UAAO;AACL,eAAO,KAAK,KAAI,EAAG,IAAI,OAAK,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,CAAc,CAAC;MACjE;MACA,OAAI;AACF,eAAO,CAAC,GAAG,KAAK,MAAM,KAAI,CAAE,EAAE,OAAO,OAAK,EAAE,WAAU,CAAE;MAC1D;;AA3BF,IAAAA,SAAA,WAAA;AAoCA,QAAa,YAAb,MAAa,WAAS;MACpB;MACA,UAAU,IAAI,YAAW;MACzB,WAAW,IAAI,SAAQ;MACvB;MACA;MACA;MACA;MAEA,YAAY,MAAsB,gBAA+B;AAC/D,aAAK,OAAO;AACZ,aAAK,SAAS,CAAC,CAAC,KAAK;AACrB,aAAK,MAAM,CAAC,CAAC,KAAK;AAClB,aAAK,iBACH,iBAAiB,eAAe,KAAI,IAAK,IAAI,eAAc;MAC/D;MAEA,gBAAgB,QAAc,UAAmB;AAC/C,aAAK,WAAW;AAChB,cAAM,gBAAmC,SAAS,IAAI,OAAK,CAAC,QAAQ,CAAC,CAAC;AAKtE,iBAAS,CAAC,GAAG,OAAO,KAAK,eAAe;AACtC,eAAK,eAAe,YAAY,GAAG,OAAO;AAE1C,gBAAM,OAAO,QAAQ,KAAI;AACzB,gBAAM,WAAW,QAAQ,WAAU,KAAM,KAAK,KAAK,aAAa;AAGhE,cAAI,MAAM;AACR,gBAAI,EAAE,QACJ,SAAS,OAAO,KAAK,KAAK,SAAS,SACjC,KAAK,KAAK,OACV,IAAI;AAER,kBAAMG,QAAO,QAAQ,KAAI;AACzB,gBAAI,CAACA,OAAM;AACT,mBAAK,QAAQ,IAAI,GAAG,MAAM,KAAK;AAC/B;YACF,OAAO;AACL,wBAAUA;YACZ;UACF;AAEA,cAAI,EAAE,SAAQ;AAAI;AAElB,cAAI;AACJ,cAAI;AACJ,cAAI,UAAU;AACd,iBACE,QAAQ,IAAI,QAAQ,QAAO,OAAQ,aAClC,OAAO,QAAQ,KAAI,IACpB;AACA,kBAAMC,KAAI,EAAE,QAAQ,CAAC;AACrB,gBAAIA;AACJ,sBAAU;AACV,sBAAU;UACZ;AACA,cAAI,QAAQ,QAAO;AACnB,iBAAO,QAAQ,KAAI;AACnB,cAAI,SAAS;AACX,gBAAI,KAAK,eAAe,UAAU,GAAG,OAAO;AAAG;AAC/C,iBAAK,eAAe,YAAY,GAAG,OAAO;UAC5C;AAKA,cAAI,OAAO,MAAM,UAAU;AAGzB,kBAAM,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM;AAC9C,iBAAK,QAAQ,IAAI,EAAE,QAAQ,CAAC,GAAG,UAAU,KAAK;AAC9C;UACF,WAAW,MAAM,YAAA,UAAU;AAMzB,gBACE,CAAC,EAAE,eAAc,KACjB,KAAK,UACL,QAAQ,oBAAmB,GAC3B;AACA,mBAAK,SAAS,IAAI,GAAG,OAAO;YAC9B;AACA,kBAAM,KAAK,MAAM,QAAO;AACxB,kBAAM,QAAQ,MAAM,KAAI;AACxB,gBAAI,CAAC,SAAU,OAAO,MAAM,OAAO,QAAQ,CAAC,OAAQ;AAGlD,mBAAK,QAAQ,IAAI,GAAG,UAAU,OAAO,MAAM,OAAO,GAAG;YACvD,OAAO;AACL,kBAAI,OAAO,MAAM;AAIf,sBAAM,KAAK,EAAE,UAAU;AAEvB,oBAAI,CAAC;AAAO,uBAAK,QAAQ,IAAI,IAAI,UAAU,IAAI;yBACtC,CAAC,KAAK,eAAe,UAAU,IAAI,KAAK,GAAG;AAClD,uBAAK,SAAS,IAAI,IAAI,KAAK;gBAC7B;cACF;YACF;UACF,WAAW,aAAa,QAAQ;AAC9B,iBAAK,SAAS,IAAI,GAAG,OAAO;UAC9B;QACF;AAEA,eAAO;MACT;MAEA,iBAAc;AACZ,eAAO,KAAK,SAAS,KAAI;MAC3B;MAEA,QAAK;AACH,eAAO,IAAI,WAAU,KAAK,MAAM,KAAK,cAAc;MACrD;;;;;MAMA,cAAcC,SAAc,SAAe;AACzC,cAAM,WAAW,KAAK,SAAS,IAAIA,OAAM;AAEzC,cAAM,UAAU,KAAK,MAAK;AAC1B,mBAAW,KAAK,SAAS;AACvB,qBAAW,WAAW,UAAU;AAC9B,kBAAM,WAAW,QAAQ,WAAU;AACnC,kBAAM,IAAI,QAAQ,QAAO;AACzB,kBAAM,OAAO,QAAQ,KAAI;AACzB,gBAAI,MAAM,YAAA,UAAU;AAClB,sBAAQ,aAAa,GAAG,SAAS,MAAM,QAAQ;YACjD,WAAW,aAAa,QAAQ;AAC9B,sBAAQ,WAAW,GAAG,GAAG,MAAM,QAAQ;YACzC,OAAO;AACL,sBAAQ,WAAW,GAAG,GAAG,MAAM,QAAQ;YACzC;UACF;QACF;AACA,eAAO;MACT;MAEA,aACE,GACA,SACA,MACA,UAAiB;AAEjB,YAAI,KAAK,OAAO,CAAC,EAAE,KAAK,WAAW,GAAG,GAAG;AACvC,cAAI,CAAC,QAAQ,QAAO,GAAI;AACtB,iBAAK,QAAQ,IAAI,GAAG,UAAU,KAAK;UACrC;AACA,cAAI,EAAE,WAAU,GAAI;AAMlB,gBAAI,KAAK,UAAU,CAAC,EAAE,eAAc,GAAI;AACtC,mBAAK,SAAS,IAAI,GAAG,OAAO;YAC9B,WAAW,EAAE,eAAc,GAAI;AAC7B,kBAAI,QAAQ,QAAQ,oBAAmB,GAAI;AACzC,qBAAK,SAAS,IAAI,GAAG,IAAI;cAC3B,WAAW,QAAQ,mBAAkB,GAAI;AACvC,qBAAK,SAAS,IAAI,GAAG,OAAO;cAC9B;YACF;UACF;QACF;AAGA,YAAI,MAAM;AACR,gBAAM,KAAK,KAAK,QAAO;AACvB,cACE,OAAO,OAAO;UAEd,OAAO,QACP,OAAO,MACP,OAAO,KACP;AACA,iBAAK,WAAW,GAAG,IAAI,KAAK,KAAI,GAAI,QAAQ;UAC9C,WAAW,OAAO,MAAM;AAEtB,kBAAM,KAAK,EAAE,UAAU;AAEvB,iBAAK,SAAS,IAAI,IAAI,IAAI;UAC5B,WAAW,cAAc,QAAQ;AAC/B,iBAAK,WAAW,GAAG,IAAI,KAAK,KAAI,GAAI,QAAQ;UAC9C;QACF;MACF;MAEA,WACE,GACA,GACA,MACA,UAAiB;AAEjB,YAAI,CAAC,EAAE,KAAK,EAAE,IAAI;AAAG;AACrB,YAAI,CAAC,MAAM;AACT,eAAK,QAAQ,IAAI,GAAG,UAAU,KAAK;QACrC,OAAO;AACL,eAAK,SAAS,IAAI,GAAG,IAAI;QAC3B;MACF;MAEA,WAAW,GAAS,GAAW,MAAsB,UAAiB;AAEpE,YAAI,CAAC,EAAE,QAAQ,CAAC;AAAG;AACnB,YAAI,CAAC,MAAM;AACT,eAAK,QAAQ,IAAI,GAAG,UAAU,KAAK;QACrC,OAAO;AACL,eAAK,SAAS,IAAI,GAAG,IAAI;QAC3B;MACF;;AA7NF,IAAAL,SAAA,YAAA;;;;;;;;;;ACrFA,QAAA,aAAA;AAEA,QAAA,cAAA;AAQA,QAAA,iBAAA;AA0DA,QAAM,aAAa,CACjB,QACA,SAEA,OAAO,WAAW,WAAW,IAAI,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI,IACpD,MAAM,QAAQ,MAAM,IAAI,IAAI,YAAA,OAAO,QAAQ,IAAI,IAC/C;AAKJ,QAAsB,WAAtB,MAA8B;MAC5B;MACA;MACA;MACA,OAAkB,oBAAI,IAAG;MACzB,SAAkB;MAClB,UAAmB;MACnB,YAA2B,CAAA;MAC3B;MACA;MACA;MACA;MACA;MAGA,YAAY,UAAqBM,QAAY,MAAO;AAClD,aAAK,WAAW;AAChB,aAAK,OAAOA;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO,CAAC,KAAK,SAAS,KAAK,aAAa,UAAU,OAAO;AAC9D,aAAK,sBAAsB,KAAK,wBAAwB;AACxD,YAAI,KAAK,UAAU,CAAC,KAAK,qBAAqB;AAC5C,eAAK,UAAU,WAAW,KAAK,UAAU,CAAA,GAAI,IAAI;AACjD,cACE,CAAC,KAAK,uBACN,OAAO,KAAK,QAAQ,QAAQ,YAC5B;AACA,kBAAM,IAAI;AACV,kBAAM,IAAI,MAAM,CAAC;UACnB;QACF;AAIA,aAAK,WAAW,KAAK,YAAY;AAEjC,YAAI,KAAK,QAAQ;AACf,eAAK,SAAS,KAAK;AACnB,eAAK,OAAO,iBAAiB,SAAS,MAAK;AACzC,iBAAK,UAAU,SAAS;UAC1B,CAAC;QACH;MACF;MAEA,SAASA,QAAU;AACjB,eAAO,KAAK,KAAK,IAAIA,MAAI,KAAK,CAAC,CAAC,KAAK,SAAS,UAAUA,MAAI;MAC9D;MACA,iBAAiBA,QAAU;AACzB,eAAO,CAAC,CAAC,KAAK,SAAS,kBAAkBA,MAAI;MAC/C;;MAGA,QAAK;AACH,aAAK,SAAS;MAChB;MACA,SAAM;AAEJ,YAAI,KAAK,QAAQ;AAAS;AAE1B,aAAK,SAAS;AACd,YAAI,KAA8B;AAClC,eAAO,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,MAAK,IAAK;AACpD,aAAE;QACJ;MACF;MACA,SAAS,IAAa;AACpB,YAAI,KAAK,QAAQ;AAAS;AAE1B,YAAI,CAAC,KAAK,QAAQ;AAChB,aAAE;QACJ,OAAO;AAEL,eAAK,UAAU,KAAK,EAAE;QACxB;MACF;;;MAIA,MAAM,WAAW,GAAS,OAAc;AACtC,YAAI,SAAS,KAAK,KAAK;AAAO,iBAAO;AACrC,YAAI;AACJ,YAAI,KAAK,KAAK,UAAU;AACtB,gBAAM,EAAE,eAAc,KAAO,MAAM,EAAE,SAAQ;AAC7C,cAAI,CAAC;AAAK,mBAAO;AACjB,cAAI;QACN;AACA,cAAM,WAAW,EAAE,UAAS,KAAM,KAAK,KAAK;AAC5C,cAAM,IAAI,WAAW,MAAM,EAAE,MAAK,IAAK;AACvC,YAAI,KAAK,KAAK,UAAU,KAAK,KAAK,SAAS,GAAG,eAAc,GAAI;AAC9D,gBAAM,SAAS,MAAM,EAAE,SAAQ;AAE/B,cAAI,WAAW,OAAO,UAAS,KAAM,KAAK,KAAK,OAAO;AACpD,kBAAM,OAAO,MAAK;UACpB;QAEF;AACA,eAAO,KAAK,eAAe,GAAG,KAAK;MACrC;MAEA,eAAe,GAAqB,OAAc;AAChD,eACI,MACG,KAAK,aAAa,YAAY,EAAE,MAAK,KAAM,KAAK,cAChD,CAAC,SAAS,EAAE,WAAU,OACtB,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,YAAW,OAClC,CAAC,KAAK,KAAK,SACV,CAAC,KAAK,KAAK,UACX,CAAC,EAAE,eAAc,KACjB,CAAC,EAAE,eAAc,GAAI,YAAW,MAClC,CAAC,KAAK,SAAS,CAAC,IAElB,IACA;MACN;MAEA,eAAe,GAAS,OAAc;AACpC,YAAI,SAAS,KAAK,KAAK;AAAO,iBAAO;AACrC,YAAI;AACJ,YAAI,KAAK,KAAK,UAAU;AACtB,gBAAM,EAAE,eAAc,KAAM,EAAE,aAAY;AAC1C,cAAI,CAAC;AAAK,mBAAO;AACjB,cAAI;QACN;AACA,cAAM,WAAW,EAAE,UAAS,KAAM,KAAK,KAAK;AAC5C,cAAM,IAAI,WAAW,EAAE,UAAS,IAAK;AACrC,YAAI,KAAK,KAAK,UAAU,KAAK,KAAK,SAAS,GAAG,eAAc,GAAI;AAC9D,gBAAM,SAAS,EAAE,aAAY;AAC7B,cAAI,WAAW,QAAQ,UAAS,KAAM,KAAK,KAAK,OAAO;AACrD,mBAAO,UAAS;UAClB;QACF;AACA,eAAO,KAAK,eAAe,GAAG,KAAK;MACrC;MAKA,YAAY,GAAS,UAAiB;AACpC,YAAI,KAAK,SAAS,CAAC;AAAG;AAEtB,YAAI,CAAC,KAAK,uBAAuB,KAAK,SAAS,KAAK;AAClD,gBAAM,MAAM,GAAG,EAAE,cAAa,CAAE;AAChC,eAAK,QAAQ,IAAI,GAAG;QACtB;AACA,cAAM,MACJ,KAAK,KAAK,aAAa,SAAY,WAAW,KAAK,KAAK;AAC1D,aAAK,KAAK,IAAI,CAAC;AACf,cAAM,OAAO,KAAK,KAAK,QAAQ,EAAE,YAAW,IAAK,KAAK,OAAO;AAE7D,YAAI,KAAK,KAAK,eAAe;AAC3B,eAAK,UAAU,CAAC;QAClB,WAAW,KAAK;AACd,gBAAMC,OAAM,KAAK,KAAK,QAAQ,EAAE,cAAa,IAAK,EAAE,SAAQ;AAC5D,eAAK,UAAUA,OAAM,IAAI;QAC3B,OAAO;AACL,gBAAM,MAAM,KAAK,KAAK,QAAQ,EAAE,cAAa,IAAK,EAAE,SAAQ;AAC5D,gBAAM,MACJ,KAAK,KAAK,eAAe,CAAC,IAAI,WAAW,OAAO,KAAK,IAAI,IACvD,MAAM,KAAK,OACX;AACJ,eAAK,UAAU,CAAC,MAAM,MAAM,OAAO,MAAM,MAAM,IAAI;QACrD;MACF;MAEA,MAAM,MAAM,GAAS,UAAmB,OAAc;AACpD,cAAM,IAAI,MAAM,KAAK,WAAW,GAAG,KAAK;AACxC,YAAI;AAAG,eAAK,YAAY,GAAG,QAAQ;MACrC;MAEA,UAAU,GAAS,UAAmB,OAAc;AAClD,cAAM,IAAI,KAAK,eAAe,GAAG,KAAK;AACtC,YAAI;AAAG,eAAK,YAAY,GAAG,QAAQ;MACrC;MAEA,OAAO,QAAc,UAAqB,IAAa;AAErD,YAAI,KAAK,QAAQ;AAAS,aAAE;AAE5B,aAAK,QAAQ,QAAQ,UAAU,IAAI,eAAA,UAAU,KAAK,IAAI,GAAG,EAAE;MAC7D;MAEA,QACE,QACA,UACA,WACA,IAAa;AAEb,YAAI,KAAK,iBAAiB,MAAM;AAAG,iBAAO,GAAE;AAC5C,YAAI,KAAK,QAAQ;AAAS,aAAE;AAC5B,YAAI,KAAK,QAAQ;AACf,eAAK,SAAS,MAAM,KAAK,QAAQ,QAAQ,UAAU,WAAW,EAAE,CAAC;AACjE;QACF;AACA,kBAAU,gBAAgB,QAAQ,QAAQ;AAK1C,YAAI,QAAQ;AACZ,cAAM,OAAO,MAAK;AAChB,cAAI,EAAE,UAAU;AAAG,eAAE;QACvB;AAEA,mBAAW,CAAC,GAAG,UAAU,KAAK,KAAK,UAAU,QAAQ,QAAO,GAAI;AAC9D,cAAI,KAAK,SAAS,CAAC;AAAG;AACtB;AACA,eAAK,MAAM,GAAG,UAAU,KAAK,EAAE,KAAK,MAAM,KAAI,CAAE;QAClD;AAEA,mBAAW,KAAK,UAAU,eAAc,GAAI;AAC1C,cAAI,KAAK,aAAa,YAAY,EAAE,MAAK,KAAM,KAAK,UAAU;AAC5D;UACF;AACA;AACA,gBAAM,iBAAiB,EAAE,cAAa;AACtC,cAAI,EAAE,cAAa;AACjB,iBAAK,QAAQ,GAAG,gBAAgB,WAAW,IAAI;eAC5C;AACH,cAAE,UACA,CAACC,IAAG,YAAY,KAAK,QAAQ,GAAG,SAAS,WAAW,IAAI,GACxD,IAAI;UAER;QACF;AAEA,aAAI;MACN;MAEA,QACE,QACA,SACA,WACA,IAAa;AAEb,oBAAY,UAAU,cAAc,QAAQ,OAAO;AAEnD,YAAI,QAAQ;AACZ,cAAM,OAAO,MAAK;AAChB,cAAI,EAAE,UAAU;AAAG,eAAE;QACvB;AAEA,mBAAW,CAAC,GAAG,UAAU,KAAK,KAAK,UAAU,QAAQ,QAAO,GAAI;AAC9D,cAAI,KAAK,SAAS,CAAC;AAAG;AACtB;AACA,eAAK,MAAM,GAAG,UAAU,KAAK,EAAE,KAAK,MAAM,KAAI,CAAE;QAClD;AACA,mBAAW,CAACC,SAAQ,QAAQ,KAAK,UAAU,SAAS,QAAO,GAAI;AAC7D;AACA,eAAK,QAAQA,SAAQ,UAAU,UAAU,MAAK,GAAI,IAAI;QACxD;AAEA,aAAI;MACN;MAEA,WAAW,QAAc,UAAqB,IAAa;AAEzD,YAAI,KAAK,QAAQ;AAAS,aAAE;AAE5B,aAAK,YAAY,QAAQ,UAAU,IAAI,eAAA,UAAU,KAAK,IAAI,GAAG,EAAE;MACjE;MAEA,YACE,QACA,UACA,WACA,IAAa;AAEb,YAAI,KAAK,iBAAiB,MAAM;AAAG,iBAAO,GAAE;AAC5C,YAAI,KAAK,QAAQ;AAAS,aAAE;AAC5B,YAAI,KAAK,QAAQ;AACf,eAAK,SAAS,MACZ,KAAK,YAAY,QAAQ,UAAU,WAAW,EAAE,CAAC;AAEnD;QACF;AACA,kBAAU,gBAAgB,QAAQ,QAAQ;AAK1C,YAAI,QAAQ;AACZ,cAAM,OAAO,MAAK;AAChB,cAAI,EAAE,UAAU;AAAG,eAAE;QACvB;AAEA,mBAAW,CAAC,GAAG,UAAU,KAAK,KAAK,UAAU,QAAQ,QAAO,GAAI;AAC9D,cAAI,KAAK,SAAS,CAAC;AAAG;AACtB,eAAK,UAAU,GAAG,UAAU,KAAK;QACnC;AAEA,mBAAW,KAAK,UAAU,eAAc,GAAI;AAC1C,cAAI,KAAK,aAAa,YAAY,EAAE,MAAK,KAAM,KAAK,UAAU;AAC5D;UACF;AACA;AACA,gBAAM,WAAW,EAAE,YAAW;AAC9B,eAAK,YAAY,GAAG,UAAU,WAAW,IAAI;QAC/C;AAEA,aAAI;MACN;MAEA,YACE,QACA,SACA,WACA,IAAa;AAEb,oBAAY,UAAU,cAAc,QAAQ,OAAO;AAEnD,YAAI,QAAQ;AACZ,cAAM,OAAO,MAAK;AAChB,cAAI,EAAE,UAAU;AAAG,eAAE;QACvB;AAEA,mBAAW,CAAC,GAAG,UAAU,KAAK,KAAK,UAAU,QAAQ,QAAO,GAAI;AAC9D,cAAI,KAAK,SAAS,CAAC;AAAG;AACtB,eAAK,UAAU,GAAG,UAAU,KAAK;QACnC;AACA,mBAAW,CAACA,SAAQ,QAAQ,KAAK,UAAU,SAAS,QAAO,GAAI;AAC7D;AACA,eAAK,YAAYA,SAAQ,UAAU,UAAU,MAAK,GAAI,IAAI;QAC5D;AAEA,aAAI;MACN;;AArUF,IAAAC,SAAA,WAAA;AAwUA,QAAa,aAAb,cAEU,SAAW;MACnB,UAAU,oBAAI,IAAG;MAEjB,YAAY,UAAqBJ,QAAY,MAAO;AAClD,cAAM,UAAUA,QAAM,IAAI;MAC5B;MAEA,UAAU,GAAY;AACpB,aAAK,QAAQ,IAAI,CAAC;MACpB;MAEA,MAAM,OAAI;AACR,YAAI,KAAK,QAAQ;AAAS,gBAAM,KAAK,OAAO;AAC5C,YAAI,KAAK,KAAK,UAAS,GAAI;AACzB,gBAAM,KAAK,KAAK,MAAK;QACvB;AACA,cAAM,IAAI,QAAQ,CAAC,KAAK,QAAO;AAC7B,eAAK,OAAO,KAAK,MAAM,KAAK,UAAU,MAAK;AACzC,gBAAI,KAAK,QAAQ,SAAS;AACxB,kBAAI,KAAK,OAAO,MAAM;YACxB,OAAO;AACL,kBAAI,KAAK,OAAO;YAClB;UACF,CAAC;QACH,CAAC;AACD,eAAO,KAAK;MACd;MAEA,WAAQ;AACN,YAAI,KAAK,QAAQ;AAAS,gBAAM,KAAK,OAAO;AAC5C,YAAI,KAAK,KAAK,UAAS,GAAI;AACzB,eAAK,KAAK,UAAS;QACrB;AAEA,aAAK,WAAW,KAAK,MAAM,KAAK,UAAU,MAAK;AAC7C,cAAI,KAAK,QAAQ;AAAS,kBAAM,KAAK,OAAO;QAC9C,CAAC;AACD,eAAO,KAAK;MACd;;AAxCF,IAAAI,SAAA,aAAA;AA2CA,QAAa,aAAb,cAEU,SAAW;MACnB;MAEA,YAAY,UAAqBJ,QAAY,MAAO;AAClD,cAAM,UAAUA,QAAM,IAAI;AAC1B,aAAK,UAAU,IAAI,WAAA,SAA+B;UAChD,QAAQ,KAAK;UACb,YAAY;SACb;AACD,aAAK,QAAQ,GAAG,SAAS,MAAM,KAAK,OAAM,CAAE;AAC5C,aAAK,QAAQ,GAAG,UAAU,MAAM,KAAK,OAAM,CAAE;MAC/C;MAEA,UAAU,GAAY;AACpB,aAAK,QAAQ,MAAM,CAAC;AACpB,YAAI,CAAC,KAAK,QAAQ;AAAS,eAAK,MAAK;MACvC;MAEA,SAAM;AACJ,cAAM,SAAS,KAAK;AACpB,YAAI,OAAO,UAAS,GAAI;AACtB,iBAAO,MAAK,EAAG,KAAK,MAAK;AACvB,iBAAK,OAAO,QAAQ,KAAK,UAAU,MAAM,KAAK,QAAQ,IAAG,CAAE;UAC7D,CAAC;QACH,OAAO;AACL,eAAK,OAAO,QAAQ,KAAK,UAAU,MAAM,KAAK,QAAQ,IAAG,CAAE;QAC7D;AACA,eAAO,KAAK;MACd;MAEA,aAAU;AACR,YAAI,KAAK,KAAK,UAAS,GAAI;AACzB,eAAK,KAAK,UAAS;QACrB;AACA,aAAK,WAAW,KAAK,MAAM,KAAK,UAAU,MAAM,KAAK,QAAQ,IAAG,CAAE;AAClE,eAAO,KAAK;MACd;;AAtCF,IAAAI,SAAA,aAAA;;;;;;;;;;ACxcA,QAAA,cAAA;AAEA,QAAA,aAAA,QAAA,KAAA;AACA,QAAA,gBAAA;AASA,QAAA,eAAA;AACA,QAAA,cAAA;AAOA,QAAM,kBAEF,OAAO,YAAY,YACnB,WACA,OAAO,QAAQ,aAAa,WAE5B,QAAQ,WACR;AA4VJ,QAAa,OAAb,MAAiB;MACf;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;;;MAKA;;;;MAKA;;;;;;;;;;;;;MAcA,YAAY,SAA4B,MAAU;AAEhD,YAAI,CAAC;AAAM,gBAAM,IAAI,UAAU,uBAAuB;AAEtD,aAAK,gBAAgB,CAAC,CAAC,KAAK;AAC5B,aAAK,SAAS,KAAK;AACnB,aAAK,SAAS,CAAC,CAAC,KAAK;AACrB,aAAK,MAAM,CAAC,CAAC,KAAK;AAClB,aAAK,cAAc,CAAC,CAAC,KAAK;AAC1B,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,OAAO,CAAC,CAAC,KAAK;AACnB,YAAI,CAAC,KAAK,KAAK;AACb,eAAK,MAAM;QACb,WAAW,KAAK,eAAe,OAAO,KAAK,IAAI,WAAW,SAAS,GAAG;AACpE,eAAK,OAAM,GAAA,WAAA,eAAc,KAAK,GAAG;QACnC;AACA,aAAK,MAAM,KAAK,OAAO;AACvB,aAAK,OAAO,KAAK;AACjB,aAAK,gBAAgB,CAAC,CAAC,KAAK;AAC5B,aAAK,UAAU,CAAC,CAAC,KAAK;AACtB,aAAK,QAAQ,CAAC,CAAC,KAAK;AACpB,aAAK,WAAW,CAAC,CAAC,KAAK;AACvB,aAAK,WAAW,KAAK;AACrB,aAAK,sBAAsB,KAAK,wBAAwB;AAExD,aAAK,aAAa,CAAC,CAAC,KAAK;AACzB,aAAK,YAAY,CAAC,CAAC,KAAK;AACxB,aAAK,WACH,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AACtD,aAAK,OAAO,CAAC,CAAC,KAAK;AACnB,aAAK,SAAS,KAAK;AAEnB,YAAI,KAAK,iBAAiB,KAAK,aAAa,QAAW;AACrD,gBAAM,IAAI,MAAM,4CAA4C;QAC9D;AAEA,YAAI,OAAO,YAAY,UAAU;AAC/B,oBAAU,CAAC,OAAO;QACpB;AAEA,aAAK,uBACH,CAAC,CAAC,KAAK,wBACN,KAA0C,uBACzC;AAEJ,YAAI,KAAK,sBAAsB;AAC7B,oBAAU,QAAQ,IAAI,OAAK,EAAE,QAAQ,OAAO,GAAG,CAAC;QAClD;AAEA,YAAI,KAAK,WAAW;AAClB,cAAI,KAAK,YAAY;AACnB,kBAAM,IAAI,UAAU,iCAAiC;UACvD;AACA,oBAAU,QAAQ,IAAI,OAAM,EAAE,SAAS,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAG;QAChE;AAEA,aAAK,UAAU;AAEf,aAAK,WAAW,KAAK,YAAY;AACjC,aAAK,OAAO,EAAE,GAAG,MAAM,UAAU,KAAK,SAAQ;AAC9C,YAAI,KAAK,QAAQ;AACf,eAAK,SAAS,KAAK;AACnB,cACE,KAAK,WAAW,UAChB,KAAK,WAAW,KAAK,OAAO,QAC5B;AACA,kBAAM,IAAI,MAAM,kDAAkD;UACpE;QACF,OAAO;AACL,gBAAM,SACJ,KAAK,aAAa,UAAU,cAAA,kBAC1B,KAAK,aAAa,WAAW,cAAA,mBAC7B,KAAK,WAAW,cAAA,kBAChB,cAAA;AACJ,eAAK,SAAS,IAAI,OAAO,KAAK,KAAK;YACjC,QAAQ,KAAK;YACb,IAAI,KAAK;WACV;QACH;AACA,aAAK,SAAS,KAAK,OAAO;AAM1B,cAAM,kBACJ,KAAK,aAAa,YAAY,KAAK,aAAa;AAElD,cAAM,MAAwB;;UAE5B,GAAG;UACH,KAAK,KAAK;UACV,WAAW,KAAK;UAChB,SAAS,KAAK;UACd,QAAQ,KAAK;UACb;UACA,WAAW;UACX,OAAO,KAAK;UACZ,UAAU;UACV,mBAAmB;UACnB,UAAU,KAAK;UACf,sBAAsB,KAAK;UAC3B,OAAO,CAAC,CAAC,KAAK,KAAK;;AAGrB,cAAM,MAAM,KAAK,QAAQ,IAAI,OAAK,IAAI,YAAA,UAAU,GAAG,GAAG,CAAC;AACvD,cAAM,CAAC,UAAU,SAAS,IAAI,IAAI,OAChC,CAAC,KAA4B,MAAK;AAChC,cAAI,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG;AACpB,cAAI,CAAC,EAAE,KAAK,GAAG,EAAE,SAAS;AAC1B,iBAAO;QACT,GACA,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC;AAEV,aAAK,WAAW,SAAS,IAAI,CAAC,KAAKC,OAAK;AACtC,gBAAM,IAAI,UAAUA,EAAC;AAErB,cAAI,CAAC;AAAG,kBAAM,IAAI,MAAM,wBAAwB;AAEhD,iBAAO,IAAI,aAAA,QAAQ,KAAK,GAAG,GAAG,KAAK,QAAQ;QAC7C,CAAC;MACH;MAMA,MAAM,OAAI;AAKR,eAAO;UACL,GAAI,MAAM,IAAI,YAAA,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK;YACvD,GAAG,KAAK;YACR,UACE,KAAK,aAAa,WAChB,KAAK,WAAW,KAAK,OAAO,IAAI,MAAK,IACrC;YACJ,UAAU,KAAK;YACf,QAAQ,KAAK;YACb,qBAAqB,KAAK;WAC3B,EAAE,KAAI;;MAEX;MAMA,WAAQ;AACN,eAAO;UACL,GAAG,IAAI,YAAA,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK;YAChD,GAAG,KAAK;YACR,UACE,KAAK,aAAa,WAChB,KAAK,WAAW,KAAK,OAAO,IAAI,MAAK,IACrC;YACJ,UAAU,KAAK;YACf,QAAQ,KAAK;YACb,qBAAqB,KAAK;WAC3B,EAAE,SAAQ;;MAEf;MAMA,SAAM;AACJ,eAAO,IAAI,YAAA,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK;UACpD,GAAG,KAAK;UACR,UACE,KAAK,aAAa,WAChB,KAAK,WAAW,KAAK,OAAO,IAAI,MAAK,IACrC;UACJ,UAAU,KAAK;UACf,QAAQ,KAAK;UACb,qBAAqB,KAAK;SAC3B,EAAE,OAAM;MACX;MAMA,aAAU;AACR,eAAO,IAAI,YAAA,WAAW,KAAK,UAAU,KAAK,OAAO,KAAK;UACpD,GAAG,KAAK;UACR,UACE,KAAK,aAAa,WAChB,KAAK,WAAW,KAAK,OAAO,IAAI,MAAK,IACrC;UACJ,UAAU,KAAK;UACf,QAAQ,KAAK;UACb,qBAAqB,KAAK;SAC3B,EAAE,WAAU;MACf;;;;;MAMA,cAAW;AACT,eAAO,KAAK,WAAU,EAAG,OAAO,QAAQ,EAAC;MAC3C;MACA,CAAC,OAAO,QAAQ,IAAC;AACf,eAAO,KAAK,YAAW;MACzB;;;;;MAMA,UAAO;AACL,eAAO,KAAK,OAAM,EAAG,OAAO,aAAa,EAAC;MAC5C;MACA,CAAC,OAAO,aAAa,IAAC;AACpB,eAAO,KAAK,QAAO;MACrB;;AA5QF,IAAAC,SAAA,OAAA;;;;;;;;;;ACvXA,QAAA,cAAA;AAcO,QAAM,WAAW,CACtB,SACA,UAAuB,CAAA,MACZ;AACX,UAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,kBAAU,CAAC,OAAO;MACpB;AACA,iBAAW,KAAK,SAAS;AACvB,YAAI,IAAI,YAAA,UAAU,GAAG,OAAO,EAAE,SAAQ;AAAI,iBAAO;MACnD;AACA,aAAO;IACT;AAXa,IAAAC,SAAA,WAAQ;;;;;;;;;;ACuCrB,IAAAC,SAAA,iBAAA;AA2BA,IAAAA,SAAA,aAAA;AA0BA,IAAAA,SAAA,WAAA;AAuDA,IAAAA,SAAA,kBAAA;AA0BA,IAAAA,SAAA,cAAA;AA3LA,QAAA,cAAA;AASA,QAAA,YAAA;AACA,QAAA,iBAAA;AAEA,QAAA,cAAA;AAAS,WAAA,eAAAA,UAAA,UAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,YAAA;IAAM,EAAA,CAAA;AAAE,WAAA,eAAAA,UAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,YAAA;IAAQ,EAAA,CAAA;AAQzB,QAAA,YAAA;AAAS,WAAA,eAAAA,UAAA,QAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,UAAA;IAAI,EAAA,CAAA;AAOb,QAAA,iBAAA;AAAS,WAAA,eAAAA,UAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,eAAA;IAAQ,EAAA,CAAA;AACjB,QAAA,cAAA;AAAS,WAAA,eAAAA,UAAA,UAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,YAAA;IAAM,EAAA,CAAA;AAyBf,aAAgB,eACd,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,WAAU;IAC9C;AAsBA,aAAgB,WACd,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,OAAM;IAC1C;AAqBA,aAAgB,SACd,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,SAAQ;IAC5C;AAwBA,mBAAe,MACb,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,KAAI;IACxC;AAqBA,aAAgB,gBACd,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,YAAW;IAC/C;AAqBA,aAAgB,YACd,SACA,UAAuB,CAAA,GAAE;AAEzB,aAAO,IAAI,UAAA,KAAK,SAAS,OAAO,EAAE,QAAO;IAC3C;AAGa,IAAAA,SAAA,aAAa;AACb,IAAAA,SAAA,SAAS,OAAO,OAAO,YAAY,EAAE,MAAM,eAAc,CAAE;AAC3D,IAAAA,SAAA,cAAc;AACd,IAAAA,SAAA,UAAU,OAAO,OAAO,aAAa;MAChD,MAAM;KACP;AACY,IAAAA,SAAA,OAAO,OAAO,OAAO,UAAU;MAC1C,QAAQ;MACR,SAAS;KACV;AAEY,IAAAA,SAAA,OAAO,OAAO,OAAO,OAAO;MACvC,MAAM;MACN;MACA,MAAAA,SAAA;MACA;MACA,QAAAA,SAAA;MACA;MACA,YAAAA,SAAA;MACA;MACA,SAAAA,SAAA;MACA;MACA,aAAAA,SAAA;MACA,MAAA,UAAA;MACA,UAAA,eAAA;MACA,QAAA,YAAA;MACA,UAAA,YAAA;KACD;AACD,IAAAA,SAAA,KAAK,OAAOA,SAAA;;;;;AC/NZ,IAAAC,gBAAA;AAAA,wCAAAC,UAAAC,SAAA;AAAA;AAOA,QAAIC,OAAK;AACT,QAAIC,SAAO,QAAQ,MAAM;AAEzB,QAAI,UAAU;AACd,QAAI,aAAa;AACjB,QAAI,QAAQ;AACZ,QAAIC,iBAAgB;AAEpB,QAAI,OAAO;AAEX,QAAI,OAAOH,QAAO,UAAU,CAAC;AAE7B,QAAI,kBAAkB;AAItB,QAAI,kBAAkB,SAAS,UAAU,IAAI;AAE3C,UAAI,SAAS,CAAC;AAEd,cAAQ,QAAQ,EAAE,QAAQ,SAAS,SAAS;AAE1C,YAAI,YAAY,QAAQ,QAAQ,GAAG,MAAM;AAEzC,YAAI,WAAW;AAAE,oBAAU,QAAQ,MAAM,CAAC;AAAA,QAAG;AAE7C,YAAI,UAAU,GAAG,OAAO;AACxB,YAAI,WAAW;AAEb,mBAAS,WAAW,QAAQ,OAAO;AAAA,QACrC,OAAO;AAEL,mBAAS,MAAM,QAAQ,OAAO;AAAA,QAChC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAGA,SAAK,SAAS,WAAW;AACvB,UAAI,WAAWE,OAAK,KAAK,MAAMA,QAAM,SAAS;AAC9C,aAAOD,KAAG,WAAW,QAAQ;AAAA,IAC/B;AAGA,SAAK,SAAS,YAAY,MAAM;AAG9B,UAAI,UAAUE,eAAc,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC;AAGvD,UAAI,WAAW,MAAM,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI;AAElD,UAAI,SAAS,WAAW,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAExC,UAAI,UAAU,gBAAgB,UAAU,SAAS,SAAS;AAExD,eAAO,KAAK,KAAK,SAAS,OAAO;AAAA,MACnC,CAAC;AAED,UAAI,QAAQ,QAAQ;AAClB,kBAAU,QAAQ,OAAO,SAAS,UAAU;AAC1C,qBAAWD,OAAK,KAAK,QAAQ,OAAO,IAAI,QAAQ;AAChD,cAAI;AACF,gBAAI,OAAO,QAAQ,WAAW,YAAY;AACxC,qBAAO,QAAQ,OAAO,QAAQ;AAAA,YAChC,OAAO;AAEL,qBAAOD,KAAG,SAAS,QAAQ,EAAE,QAAQ,MAAM,EAAE;AAAA,YAC/C;AAAA,UACF,SAAQ,GAAG;AAET,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAGA,SAAK,gBAAgB,SAAS,UAAU,UAAU,SAAS;AACzD,gBAAU,OAAO,OAAO;AAAA,QACtB,QAAQ,SAASG,WAAU,UAAU;AACnC,iBAAOF,OAAK,KAAKE,aAAY,IAAI,QAAQ;AAAA,QAC3C;AAAA,MACF,GAAG,OAAO;AACV,UAAI,QAAQ,CAAC;AACb,UAAI,aAAa,CAAC;AAElB,WAAK,OAAO,SAAS,QAAQ,EAAE,QAAQ,SAAS,KAAK;AACnD,YAAI,WAAW;AAEf,YAAI,QAAQ,SAAS;AACnB,qBAAWF,OAAK,SAAS,QAAQ;AAAA,QACnC;AAEA,YAAI,QAAQ,KAAK;AACf,qBAAW,SAAS,QAAQ,gBAAgB,QAAQ,GAAG;AAAA,QACzD;AAEA,YAAI,OAAO,QAAQ,OAAO,UAAU,UAAU,OAAO;AAErD,YAAI,QAAQ,KAAK;AAAE,gBAAMA,OAAK,KAAK,QAAQ,KAAK,GAAG;AAAA,QAAG;AAEtD,eAAO,KAAK,QAAQ,iBAAiB,GAAG;AACxC,cAAM,IAAI,QAAQ,iBAAiB,GAAG;AAEtC,YAAI,WAAW,IAAI,GAAG;AAEpB,qBAAW,IAAI,EAAE,IAAI,KAAK,GAAG;AAAA,QAC/B,OAAO;AAEL,gBAAM,KAAK;AAAA,YACT,KAAK,CAAC,GAAG;AAAA,YACT;AAAA,UACF,CAAC;AAED,qBAAW,IAAI,IAAI,MAAM,MAAM,SAAS,CAAC;AAAA,QAC3C;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAGA,SAAK,sBAAsB,SAAS,MAAM;AACxC,UAAI,QAAQ,CAAC;AAEb,WAAK,QAAQ,SAAS,KAAK;AACzB,YAAI;AACJ,YAAI,SAAS,OAAO,UAAU,KAAK;AACjC,gBAAM,KAAK,GAAG;AAAA,QAChB;AAAA,MACF,CAAC;AAED,UAAI,MAAM,WAAW,GAAG;AACtB,eAAO,CAAC;AAAA,MACV;AAEA,cAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAS,KAAK;AAC7C,YAAI,EAAE,SAAS,QAAQ,CAAC,IAAI,KAAK;AAAE;AAAA,QAAQ;AAE3C,YAAI,MAAM,QAAQ,IAAI,GAAG,GAAG;AAC1B,cAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,QAC3B,OAAO;AACL,cAAI,MAAM,CAAC,IAAI,GAAG;AAAA,QACpB;AAAA,MACF,CAAC,EAAE,IAAI,SAAS,KAAK;AAEnB,YAAI,gBAAgB,OAAO,OAAO,CAAC,GAAG,GAAG;AACzC,eAAO,cAAc;AACrB,eAAO,cAAc;AAGrB,YAAI,IAAI,QAAQ;AACd,iBAAO,KAAK,cAAc,IAAI,KAAK,IAAI,MAAM,aAAa,EAAE,IAAI,SAAS,QAAQ;AAE/E,gBAAIG,UAAS,OAAO,OAAO,CAAC,GAAG,GAAG;AAElC,YAAAA,QAAO,OAAO,OAAO,OAAO,CAAC,GAAG,GAAG;AAEnC,YAAAA,QAAO,MAAM,OAAO;AACpB,YAAAA,QAAO,OAAO,OAAO;AAErB,aAAC,UAAU,OAAO,WAAW,UAAU,KAAK,EAAE,QAAQ,SAAS,MAAM;AACnE,qBAAOA,QAAO,IAAI;AAAA,YACpB,CAAC;AACD,mBAAOA;AAAA,UACT,CAAC;AAAA,QACH;AAGA,YAAI,SAAS,OAAO,OAAO,CAAC,GAAG,GAAG;AAElC,eAAO,OAAO,OAAO,OAAO,CAAC,GAAG,GAAG;AAEnC,YAAI,SAAS,QAAQ;AAEnB,iBAAO,eAAe,QAAQ,OAAO;AAAA,YACnC,YAAY;AAAA,YACZ,KAAK,SAAS,KAAK;AACjB,kBAAI;AACJ,kBAAI,EAAE,YAAY,KAAK;AACrB,sBAAM,IAAI;AAEV,sBAAM,MAAM,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG;AAE9C,mBAAG,SAAS,KAAK,OAAO,eAAe,GAAG;AAAA,cAC5C;AACA,qBAAO,GAAG;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,UAAU,QAAQ;AACpB,iBAAO,OAAO,IAAI;AAAA,QACpB;AAEA,eAAO;AAAA,MACT,CAAC,EAAE,QAAQ,EAAE,MAAM;AAEnB,aAAO;AAAA,IACT;AAAA;AAAA;;;AChNA;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAOA,QAAIC,OAAK;AACT,QAAIC,SAAO,QAAQ,MAAM;AACzB,QAAIC,YAAW;AACf,QAAI,aAAa;AACjB,QAAI,gBAAgB;AACpB,QAAI,WAAW;AAEf,QAAI,SAAS,QAAQ,QAAQ,EAAE;AAC/B,QAAIC,eAAc,eAA2B;AAE7C,QAAI,QAAQJ,QAAO,UAAU,CAAC;AAC9B,UAAM,OAAO;AAEb,UAAM,gBAAgB,SAAS,QAAQ,UAAU;AAC/C,UAAI,aAAa,CAAC;AAClB,UAAI,OAAO;AAEX,aAAO,GAAG,SAAS,QAAQ;AAE3B,aAAO,GAAG,QAAQ,SAASK,QAAO;AAChC,mBAAW,KAAKA,MAAK;AACrB,gBAAQA,OAAM;AAAA,MAChB,CAAC;AAED,aAAO,GAAG,OAAO,WAAW;AAC1B,YAAI,MAAM,OAAO,MAAM,IAAI;AAC3B,YAAI,SAAS;AAEb,mBAAW,QAAQ,SAAS,MAAM;AAChC,eAAK,KAAK,KAAK,MAAM;AACrB,oBAAU,KAAK;AAAA,QACjB,CAAC;AAED,iBAAS,MAAM,GAAG;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,UAAM,UAAU,SAAS,SAAS;AAChC,gBAAU,WAAW,oBAAI,KAAK;AAE9B,UAAI,mBAAmB,MAAM;AAC3B,kBAAU;AAAA,MACZ,WAAW,OAAO,YAAY,UAAU;AACtC,kBAAU,IAAI,KAAK,OAAO;AAAA,MAC5B,OAAO;AACL,kBAAU,oBAAI,KAAK;AAAA,MACrB;AAEA,aAAO;AAAA,IACT;AAGA,UAAM,WAAW,SAAS,QAAQ,QAAQ,OAAO;AAC/C,UAAI,OAAO;AACX,WAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;AAEtB,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB;AAEA,UAAM,WAAW,SAAS,QAAQ;AAChC,aAAOF,UAAS,MAAM;AAAA,IACxB;AAEA,UAAM,iBAAiB,SAAS,UAAU;AACxC,aAAO,IAAI,WAAW,SAAS,WAAW;AACxC,eAAOF,KAAG,iBAAiB,QAAQ;AAAA,MACrC,CAAC;AAAA,IACH;AAEA,UAAM,uBAAuB,SAAS,QAAQ;AAC5C,UAAI,WAAW,MAAM;AACnB,eAAO,OAAO,MAAM,CAAC;AAAA,MACvB,WAAW,OAAO,WAAW,UAAU;AACrC,eAAO,OAAO,KAAK,MAAM;AAAA,MAC3B,WAAW,MAAM,SAAS,MAAM,GAAG;AAIjC,eAAO,OAAO,KAAK,IAAIG,aAAY,CAAC;AAAA,MACtC;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,SAAS,UAAU;AACtC,aAAO,cAAc,UAAU,KAAK,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,iBAAiB,EAAE;AAAA,IACxF;AAEA,UAAM,kBAAkB,SAAS,KAAK;AACpC,aAAO,IAAI,MAAM,EAAE,MAAM,MAAM,MAAM,MAAM;AAAA,IAC7C;AAEA,UAAM,cAAc,SAAS,UAAU;AACrC,aAAO,cAAc,UAAU,KAAK,EAAE,QAAQ,SAAS,EAAE;AAAA,IAC3D;AAEA,UAAM,UAAU,SAAS,SAAS,MAAM,UAAU;AAChD,UAAI,UAAU,CAAC;AAEf,UAAI,OAAO,SAAS,YAAY;AAC9B,mBAAW;AACX,eAAO;AAAA,MACT;AAEA,MAAAH,KAAG,QAAQ,SAAS,SAAS,KAAK,MAAM;AACtC,YAAIK,KAAI;AACR,YAAI;AACJ,YAAI;AAEJ,YAAI,KAAK;AACP,iBAAO,SAAS,GAAG;AAAA,QACrB;AAEA,SAAC,SAAS,OAAO;AACf,iBAAO,KAAKA,IAAG;AAEf,cAAI,CAAC,MAAM;AACT,mBAAO,SAAS,MAAM,OAAO;AAAA,UAC/B;AAEA,qBAAWJ,OAAK,KAAK,SAAS,IAAI;AAElC,UAAAD,KAAG,KAAK,UAAU,SAASM,MAAK,OAAO;AACrC,oBAAQ,KAAK;AAAA,cACX,MAAM;AAAA,cACN,UAAUL,OAAK,SAAS,MAAM,QAAQ,EAAE,QAAQ,OAAO,GAAG;AAAA,cAC1D;AAAA,YACF,CAAC;AAED,gBAAI,SAAS,MAAM,YAAY,GAAG;AAChC,oBAAM,QAAQ,UAAU,MAAM,SAASK,MAAK,KAAK;AACtD,oBAAGA,MAAI;AACL,yBAAO,SAASA,IAAG;AAAA,gBACrB;AAEO,oBAAI,QAAQ,SAAS,UAAU;AAC7B,0BAAQ,KAAK,QAAQ;AAAA,gBACvB,CAAC;AAED,qBAAK;AAAA,cACP,CAAC;AAAA,YACH,OAAO;AACL,mBAAK;AAAA,YACP;AAAA,UACF,CAAC;AAAA,QACH,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA;AAAA;;;AC1JA,IAAAC,iBAAA;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAQA,QAAIC,QAAO,QAAQ,MAAM;AAEzB,QAAM,cAAc;AAAA,MAClB,WAAW;AAAA,MACX,4BAA4B;AAAA,MAC5B,gCAAgC;AAAA,MAChC,qBAAqB;AAAA,MACrB,wBAAwB;AAAA,MACxB,cAAc;AAAA,MACd,eAAe;AAAA,MACf,eAAe;AAAA,MACf,yBAAyB;AAAA,MACzB,aAAa;AAAA,MACb,4BAA4B;AAAA,MAC5B,aAAa;AAAA,MACb,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,MAC3B,yBAAyB;AAAA,MACzB,qBAAqB;AAAA,IACvB;AAEA,aAAS,cAAc,MAAM,MAAM;AACjC,YAAM,kBAAkB,MAAM,KAAK,WAAW;AAE9C,WAAK,UAAU,YAAY,IAAI,KAAK;AACpC,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACd;AAEA,IAAAA,MAAK,SAAS,eAAe,KAAK;AAElC,IAAAF,WAAUC,QAAO,UAAU;AAAA;AAAA;;;ACvC3B;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAOA,QAAIC,OAAK,QAAQ,IAAI;AACrB,QAAI,OAAO;AACX,QAAI,QAAQ;AACZ,QAAIC,SAAO,QAAQ,MAAM;AACzB,QAAIC,QAAO;AAEX,QAAI,WAAW,QAAQ,MAAM,EAAE;AAC/B,QAAI,gBAAgB;AACpB,QAAIC,aAAY,eAA2B;AAE3C,QAAI,QAAQ,QAAQ,aAAa;AAOjC,QAAI,WAAW,SAASC,SAAQ,SAAS;AACvC,UAAI,EAAE,gBAAgB,WAAW;AAC/B,eAAO,IAAI,SAASA,SAAQ,OAAO;AAAA,MACrC;AAEA,UAAI,OAAOA,YAAW,UAAU;AAC9B,kBAAUA;AACV,QAAAA,UAAS;AAAA,MACX;AAEA,gBAAU,KAAK,UAAUF,MAAK,SAAS,SAAS;AAAA,QAC9C,eAAe,OAAO;AAAA,QACtB,iBAAiB;AAAA,MACnB,CAAC;AAED,MAAAC,WAAU,KAAK,MAAM,OAAO;AAE5B,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,WAAW;AAEhB,WAAK,gBAAgB;AACrB,WAAK,yBAAyB;AAC9B,WAAK,uBAAuB;AAC5B,WAAK,2BAA2B;AAEhC,WAAK,SAAS,MAAM,MAAM,KAAK,aAAa,KAAK,IAAI,GAAG,CAAC;AACzD,WAAK,OAAO,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;AAE/C,WAAK,aAAa,MAAM,MAAM,KAAK,iBAAiB,KAAK,IAAI,GAAG,QAAQ,eAAe;AACvF,WAAK,WAAW,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;AAEnD,WAAK,SAAS;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAEA,WAAK,WAAW,CAAC;AAAA,IACnB;AAEA,aAAS,UAAUA,UAAS;AAQ5B,aAAS,UAAU,SAAS,WAAW;AACrC,WAAK,OAAO,UAAU;AACtB,WAAK,OAAO,KAAK;AACjB,WAAK,WAAW,KAAK;AAErB,UAAI,KAAK,OAAO,KAAK,GAAG;AACtB,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAUA,aAAS,UAAU,UAAU,SAAS,UAAU,MAAM;AACpD,aAAO,QAAQ,CAAC;AAEhB,UAAI,OAAO;AAAA,QACT,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,MAAM;AACd,aAAK,OAAO;AAAA,MACd;AAEA,WAAK,aAAa;AAClB,WAAK,OAAO;AACZ,WAAK;AAEL,UAAI,KAAK,SAAS,KAAK,iBAAiBH,KAAG,OAAO;AAChD,eAAO,KAAK,0BAA0B,MAAM,KAAK,KAAK;AACtD,YAAI,MAAM;AACR,cAAI,KAAK,MAAM,MAAM;AACnB,iBAAK,wBAAwB,KAAK,MAAM;AAAA,UAC1C;AAEA,eAAK,OAAO,KAAK,IAAI;AAAA,QACvB;AAAA,MACF,OAAO;AACL,aAAK,WAAW,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAQA,aAAS,UAAU,YAAY,WAAW;AACxC,UAAI,KAAK,OAAO,cAAc,KAAK,OAAO,aAAa,KAAK,OAAO,SAAS;AAC1E;AAAA,MACF;AAEA,WAAK,OAAO,aAAa;AAEzB,WAAK,gBAAgB;AAErB,WAAK,OAAO,aAAa;AACzB,WAAK,OAAO,YAAY;AAAA,IAC1B;AAQA,aAAS,UAAU,iBAAiB,WAAW;AAC7C,UAAI,KAAK,OAAO,cAAc,KAAK,OAAO,aAAa,KAAK,OAAO,SAAS;AAC1E,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,OAAO,YAAY,KAAK,aAAa,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,WAAW,KAAK,GAAG;AAC/F,aAAK,UAAU;AACf,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAYA,aAAS,UAAU,gBAAgB,SAAS,QAAQ,MAAM,UAAU;AAClE,UAAI,KAAK,OAAO,SAAS;AACvB,iBAAS;AACT;AAAA,MACF;AAEA,WAAK,QAAQ,OAAO,QAAQ,MAAM,SAAS,KAAK;AAC9C,aAAK,QAAQ;AAEb,YAAI,KAAK,OAAO,SAAS;AACvB,eAAK,UAAU;AACf;AAAA,QACF;AAEA,YAAI,KAAK;AACP,eAAK,KAAK,SAAS,GAAG;AACtB,uBAAa,QAAQ;AACrB;AAAA,QACF;AAQA,aAAK,KAAK,SAAS,IAAI;AACvB,aAAK;AAEL,YAAI,KAAK,SAAS,KAAK,MAAM,MAAM;AACjC,eAAK,4BAA4B,KAAK,MAAM;AAAA,QAC9C;AAMA,aAAK,KAAK,YAAY;AAAA,UACpB,SAAS;AAAA,YACP,OAAO,KAAK;AAAA,YACZ,WAAW,KAAK;AAAA,UAClB;AAAA,UACA,IAAI;AAAA,YACF,YAAY,KAAK;AAAA,YACjB,gBAAgB,KAAK;AAAA,UACvB;AAAA,QACF,CAAC;AAED,qBAAa,QAAQ;AAAA,MACvB,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAQA,aAAS,UAAU,kBAAkB,WAAW;AAC9C,UAAI,OAAO,KAAK,QAAQ,aAAa,YAAY;AAC/C,aAAK,QAAQ,SAAS;AAAA,MACxB,WAAW,OAAO,KAAK,QAAQ,QAAQ,YAAY;AACjD,aAAK,QAAQ,IAAI;AAAA,MACnB,OAAO;AACL,aAAK,KAAK,SAAS,IAAI,cAAc,aAAa,CAAC;AAAA,MACrD;AAAA,IACF;AAQA,aAAS,UAAU,cAAc,WAAW;AAC1C,WAAK,QAAQ,GAAG,SAAS,KAAK,eAAe,KAAK,IAAI,CAAC;AACvD,WAAK,QAAQ,KAAK,IAAI;AACtB,WAAK,OAAO,cAAc;AAAA,IAC5B;AASA,aAAS,UAAU,kBAAkB,SAAS,KAAK;AACjD,UAAI,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,SAAS,GAAG,GAAG;AACzD,eAAO;AAAA,MACT;AAEA,aAAO,KAAK,QAAQ,SAAS,GAAG;AAAA,IAClC;AAQA,aAAS,UAAU,gBAAgB,WAAW;AAC5C,WAAK,QAAQ,OAAO,IAAI;AACxB,WAAK,OAAO,cAAc;AAAA,IAC5B;AAUA,aAAS,UAAU,sBAAsB,SAAS,MAAM,OAAO;AAC7D,aAAOE,MAAK,SAAS,MAAM;AAAA,QACzB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAED,UAAI,SAAS,KAAK,UAAU,OAAO;AACjC,aAAK,QAAQ;AAAA,MACf;AAEA,UAAI,QAAQ,KAAK,SAAS;AAE1B,UAAI,KAAK,MAAM;AACb,YAAI,OAAO,KAAK,WAAW,YAAY,OAAO,KAAK,QAAQ;AACzD,eAAK,OAAO,KAAK,SAAS,MAAM,KAAK;AACrC,eAAK,SAAS;AAAA,QAChB;AAEA,aAAK,OAAOA,MAAK,aAAa,KAAK,IAAI;AAEvC,YAAI,KAAK,SAAS,aAAa,KAAK,KAAK,MAAM,EAAE,MAAM,KAAK;AAC1D,kBAAQ;AACR,eAAK,OAAO;AAAA,QACd,WAAW,OAAO;AAChB,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAGA,UAAI,OAAO,KAAK,SAAS,UAAU;AACjC,YAAI,OAAO;AACT,eAAK,QAAQ;AAAA,QACf,OAAO;AACL,eAAK,QAAQ;AAAA,QACf;AAAA,MACF,WAAW,KAAK,SAAS,KAAK,SAAS,MAAM;AAC3C,YAAI,OAAO;AACT,eAAK,OAAO,KAAK,MAAM,OAAO;AAAA,QAChC,OAAO;AACL,eAAK,OAAO,KAAK,MAAM,OAAO;AAAA,QAChC;AAGA,YAAI,SAAS,OAAO;AAClB,eAAK,OAAO;AAAA,QACd;AAAA,MACF,WAAW,KAAK,SAAS,MAAM;AAC7B,aAAK,OAAO,QAAQ,MAAM;AAAA,MAC5B;AAEA,UAAI,KAAK,SAAS,KAAK,SAAS,MAAM;AACpC,aAAK,OAAO,KAAK,MAAM;AAAA,MACzB,OAAO;AACL,aAAK,OAAOA,MAAK,QAAQ,KAAK,IAAI;AAAA,MACpC;AAEA,aAAO;AAAA,IACT;AASA,aAAS,UAAU,iBAAiB,SAAS,KAAK;AAKhD,WAAK,KAAK,SAAS,GAAG;AAAA,IACxB;AASA,aAAS,UAAU,gBAAgB,WAAW;AAC5C,UAAI,KAAK,OAAO,cAAc,KAAK,OAAO,aAAa,KAAK,OAAO,SAAS;AAC1E;AAAA,MACF;AAEA,UAAI,KAAK,OAAO,YAAY,KAAK,aAAa,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,WAAW,KAAK,GAAG;AAC/F,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAUA,aAAS,UAAU,eAAe,SAAS,MAAM,UAAU;AACzD,UAAI,eAAe,MAAM;AACvB,YAAG,KAAK,KAAK,UAAU;AACrB,eAAK,KAAK,SAAS;AAAA,QACrB;AACA,iBAAS;AAAA,MACX;AAEA,UAAI,KAAK,OAAO,cAAc,KAAK,OAAO,aAAa,KAAK,OAAO,SAAS;AAC1E,qBAAa;AACb;AAAA,MACF;AAEA,WAAK,QAAQ;AACb,WAAK,cAAc,KAAK,QAAQ,KAAK,MAAM,YAAY;AAAA,IACzD;AAUA,aAAS,UAAU,mBAAmB,SAAS,MAAM,UAAU;AAC7D,UAAI,KAAK,OAAO,cAAc,KAAK,OAAO,aAAa,KAAK,OAAO,SAAS;AAC1E,iBAAS;AACT;AAAA,MACF;AAEA,MAAAF,KAAG,MAAM,KAAK,UAAU,SAAS,KAAK,OAAO;AAC3C,YAAI,KAAK,OAAO,SAAS;AACvB,uBAAa,QAAQ;AACrB;AAAA,QACF;AAEA,YAAI,KAAK;AACP,eAAK;AAML,eAAK,KAAK,WAAW,GAAG;AACxB,uBAAa,QAAQ;AACrB;AAAA,QACF;AAEA,eAAO,KAAK,0BAA0B,MAAM,KAAK;AAEjD,YAAI,MAAM;AACR,cAAI,MAAM,MAAM;AACd,iBAAK,wBAAwB,MAAM;AAAA,UACrC;AAEA,eAAK,OAAO,KAAK,IAAI;AAAA,QACvB;AAEA,qBAAa,QAAQ;AAAA,MACvB,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAQA,aAAS,UAAU,YAAY,WAAW;AACxC,WAAK,cAAc;AACnB,WAAK,IAAI;AAAA,IACX;AAWA,aAAS,UAAU,aAAa,SAASK,QAAO,UAAU,UAAU;AAClE,UAAIA,QAAO;AACT,aAAK,YAAYA,OAAM;AAAA,MACzB;AAEA,eAAS,MAAMA,MAAK;AAAA,IACtB;AAUA,aAAS,UAAU,4BAA4B,SAAS,MAAM,OAAO;AACnE,UAAI,MAAM,OAAO,GAAG;AAClB,aAAK,KAAK,OAAO;AACjB,aAAK,KAAK,aAAa;AACvB,aAAK,SAASH,MAAK,eAAe,KAAK,QAAQ;AAAA,MACjD,WAAW,MAAM,YAAY,KAAK,KAAK,gBAAgB,WAAW,GAAG;AACnE,aAAK,KAAK,OAAOA,MAAK,gBAAgB,KAAK,KAAK,IAAI;AACpD,aAAK,KAAK,OAAO;AACjB,aAAK,KAAK,aAAaA,MAAK,gBAAgB,KAAK,QAAQ;AACzD,aAAK,KAAK,aAAa;AACvB,aAAK,SAAS,OAAO,OAAO,CAAC,CAAC;AAAA,MAChC,WAAW,MAAM,eAAe,KAAK,KAAK,gBAAgB,SAAS,GAAG;AACpE,YAAI,WAAWF,KAAG,aAAa,KAAK,QAAQ;AAC5C,YAAI,UAAUC,OAAK,QAAQ,KAAK,QAAQ;AACxC,aAAK,KAAK,OAAO;AACjB,aAAK,KAAK,WAAWA,OAAK,SAAS,SAASA,OAAK,QAAQ,SAAS,QAAQ,CAAC;AAC3E,aAAK,KAAK,aAAa;AACvB,aAAK,SAAS,OAAO,OAAO,CAAC,CAAC;AAAA,MAChC,OAAO;AACL,YAAI,MAAM,YAAY,GAAG;AACvB,eAAK,KAAK,WAAW,IAAI,cAAc,yBAAyB,KAAK,IAAI,CAAC;AAAA,QAC5E,WAAW,MAAM,eAAe,GAAG;AACjC,eAAK,KAAK,WAAW,IAAI,cAAc,uBAAuB,KAAK,IAAI,CAAC;AAAA,QAC1E,OAAO;AACL,eAAK,KAAK,WAAW,IAAI,cAAc,qBAAqB,KAAK,IAAI,CAAC;AAAA,QACxE;AAEA,eAAO;AAAA,MACT;AAEA,WAAK,OAAO,KAAK,oBAAoB,KAAK,MAAM,KAAK;AAErD,aAAO;AAAA,IACT;AAcA,aAAS,UAAU,QAAQ,WAAW;AACpC,UAAI,KAAK,OAAO,WAAW,KAAK,OAAO,WAAW;AAChD,eAAO;AAAA,MACT;AAEA,WAAK,OAAO;AAEZ,aAAO;AAAA,IACT;AAaA,aAAS,UAAU,SAAS,SAAS,QAAQ,MAAM;AACjD,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,SAAS;AAC/C,aAAK,KAAK,SAAS,IAAI,cAAc,aAAa,CAAC;AACnD,eAAO;AAAA,MACT;AAEA,aAAO,KAAK,oBAAoB,IAAI;AAEpC,UAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,WAAW,GAAG;AAC3D,aAAK,KAAK,SAAS,IAAI,cAAc,mBAAmB,CAAC;AACzD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,eAAe,CAAC,KAAK,gBAAgB,WAAW,GAAG;AACnE,aAAK,KAAK,SAAS,IAAI,cAAc,yBAAyB,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;AAClF,eAAO;AAAA,MACT;AAEA,eAASC,MAAK,qBAAqB,MAAM;AAEzC,UAAI,OAAO,SAAS,MAAM,GAAG;AAC3B,aAAK,aAAa;AAAA,MACpB,WAAWA,MAAK,SAAS,MAAM,GAAG;AAChC,aAAK,aAAa;AAAA,MACpB,OAAO;AACL,aAAK,KAAK,SAAS,IAAI,cAAc,4BAA4B,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC;AACrF,eAAO;AAAA,MACT;AAEA,WAAK;AACL,WAAK,OAAO,KAAK;AAAA,QACf;AAAA,QACA;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAWA,aAAS,UAAU,YAAY,SAAS,SAAS,UAAU,MAAM;AAC/D,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,SAAS;AAC/C,aAAK,KAAK,SAAS,IAAI,cAAc,aAAa,CAAC;AACnD,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GAAG;AACvD,aAAK,KAAK,SAAS,IAAI,cAAc,0BAA0B,CAAC;AAChE,eAAO;AAAA,MACT;AAEA,WAAK;AAEL,UAAI,aAAa,OAAO;AACtB,mBAAW;AAAA,MACb,WAAW,OAAO,aAAa,UAAS;AACtC,mBAAW;AAAA,MACb;AAEA,UAAI,eAAe;AACnB,UAAI,OAAO,SAAS,YAAY;AAC9B,uBAAe;AACf,eAAO,CAAC;AAAA,MACV,WAAW,OAAO,SAAS,UAAU;AACnC,eAAO,CAAC;AAAA,MACV;AAEA,UAAI,cAAc;AAAA,QAChB,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,eAAS,YAAY;AACnB,aAAK;AACL,aAAK,eAAe;AAAA,MACtB;AAEA,eAAS,YAAY,KAAK;AACxB,aAAK,KAAK,SAAS,GAAG;AAAA,MACxB;AAEA,eAAS,YAAY,OAAM;AACzB,gBAAQ,MAAM;AAEd,YAAI,cAAc;AAClB,YAAI,YAAY,OAAO,OAAO,CAAC,GAAG,IAAI;AACtC,kBAAU,OAAO,MAAM;AACvB,kBAAU,SAAS;AACnB,kBAAU,QAAQ,MAAM;AACxB,kBAAU,WAAW,QAAQ,OAAO,KAAK,OAAO;AAEhD,YAAI;AACF,cAAI,cAAc;AAChB,wBAAY,aAAa,SAAS;AAElC,gBAAI,cAAc,OAAO;AACvB,4BAAc;AAAA,YAChB,WAAW,OAAO,cAAc,UAAU;AACxC,oBAAM,IAAI,cAAc,gCAAgC,EAAE,QAAiB,CAAC;AAAA,YAC9E;AAAA,UACF;AAAA,QACF,SAAQ,GAAG;AACT,eAAK,KAAK,SAAS,CAAC;AACpB;AAAA,QACF;AAEA,YAAI,aAAa;AACf,kBAAQ,OAAO;AACf;AAAA,QACF;AAEA,aAAK,QAAQ,MAAM,UAAU,SAAS;AAAA,MACxC;AAEA,UAAI,UAAU,KAAK,SAAS,WAAW;AACvC,cAAQ,GAAG,SAAS,YAAY,KAAK,IAAI,CAAC;AAC1C,cAAQ,GAAG,SAAS,YAAY,KAAK,IAAI,CAAC;AAC1C,cAAQ,GAAG,OAAO,UAAU,KAAK,IAAI,CAAC;AAEtC,aAAO;AAAA,IACT;AAeA,aAAS,UAAU,OAAO,SAAS,UAAU,MAAM;AACjD,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,SAAS;AAC/C,aAAK,KAAK,SAAS,IAAI,cAAc,aAAa,CAAC;AACnD,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,aAAa,YAAY,SAAS,WAAW,GAAG;AACzD,aAAK,KAAK,SAAS,IAAI,cAAc,sBAAsB,CAAC;AAC5D,eAAO;AAAA,MACT;AAEA,WAAK,QAAQ,UAAU,IAAI;AAE3B,aAAO;AAAA,IACT;AAWA,aAAS,UAAU,OAAO,SAAS,SAAS,SAAS,MAAM;AACzD,WAAK;AAEL,gBAAUA,MAAK,SAAS,SAAS;AAAA,QAC/B,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAED,eAAS,YAAY;AACnB,aAAK;AACL,aAAK,eAAe;AAAA,MACtB;AAEA,eAAS,YAAY,KAAK;AACxB,aAAK,KAAK,SAAS,GAAG;AAAA,MACxB;AAEA,eAAS,YAAY,OAAM;AACzB,gBAAQ,MAAM;AACd,YAAI,YAAY,OAAO,OAAO,CAAC,GAAG,IAAI;AACtC,kBAAU,WAAW,QAAQ,OAAO,KAAK,OAAO;AAChD,kBAAU,QAAQ,MAAM;AACxB,kBAAU,OAAO,MAAM;AAEvB,aAAK,QAAQ,MAAM,UAAU,SAAS;AAAA,MACxC;AAEA,UAAI,UAAU,KAAK,QAAQ,OAAO,KAAK,OAAO;AAC9C,cAAQ,GAAG,SAAS,YAAY,KAAK,IAAI,CAAC;AAC1C,cAAQ,GAAG,SAAS,YAAY,KAAK,IAAI,CAAC;AAC1C,cAAQ,GAAG,OAAO,UAAU,KAAK,IAAI,CAAC;AAEtC,aAAO;AAAA,IACT;AAYA,aAAS,UAAU,WAAW,WAAW;AACvC,UAAI,KAAK,OAAO,SAAS;AACvB,YAAI,eAAe,IAAI,cAAc,SAAS;AAC9C,aAAK,KAAK,SAAS,YAAY;AAC/B,eAAO,QAAQ,OAAO,YAAY;AAAA,MACpC;AAEA,UAAI,KAAK,OAAO,UAAU;AACxB,YAAI,kBAAkB,IAAI,cAAc,YAAY;AACpD,aAAK,KAAK,SAAS,eAAe;AAClC,eAAO,QAAQ,OAAO,eAAe;AAAA,MACvC;AAEA,WAAK,OAAO,WAAW;AAEvB,UAAI,KAAK,aAAa,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,WAAW,KAAK,GAAG;AACvE,aAAK,UAAU;AAAA,MACjB;AAEA,UAAII,QAAO;AAEX,aAAO,IAAI,QAAQ,SAAS,SAASC,SAAQ;AAC3C,YAAI;AAEJ,QAAAD,MAAK,QAAQ,GAAG,OAAO,WAAW;AAChC,cAAI,CAAC,SAAS;AACZ,oBAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAED,QAAAA,MAAK,QAAQ,GAAG,SAAS,SAAS,KAAK;AACrC,oBAAU;AACV,UAAAC,QAAO,GAAG;AAAA,QACZ,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAQA,aAAS,UAAU,YAAY,SAASH,SAAQ;AAC9C,UAAI,KAAK,SAAS;AAChB,aAAK,KAAK,SAAS,IAAI,cAAc,WAAW,CAAC;AACjD,eAAO;AAAA,MACT;AAEA,WAAK,UAAUA;AAEf,aAAO;AAAA,IACT;AAQA,aAAS,UAAU,YAAY,SAASL,SAAQ;AAC9C,UAAI,KAAK,OAAO,SAAS;AACvB,aAAK,KAAK,SAAS,IAAI,cAAc,SAAS,CAAC;AAC/C,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,OAAO,QAAQ;AACtB,aAAK,KAAK,SAAS,IAAI,cAAc,WAAW,CAAC;AACjD,eAAO;AAAA,MACT;AAEA,WAAK,UAAUA;AACf,WAAK,YAAY;AAEjB,aAAO;AAAA,IACT;AAYA,aAAS,UAAU,UAAU,SAAS,UAAU,QAAQ,MAAM;AAC5D,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,SAAS;AAC/C,aAAK,KAAK,SAAS,IAAI,cAAc,aAAa,CAAC;AACnD,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,aAAa,YAAY,SAAS,WAAW,GAAG;AACzD,aAAK,KAAK,SAAS,IAAI,cAAc,yBAAyB,CAAC;AAC/D,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,WAAW,YAAY,OAAO,WAAW,GAAG;AACrD,aAAK,KAAK,SAAS,IAAI,cAAc,yBAAyB,EAAE,SAAmB,CAAC,CAAC;AACrF,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,KAAK,gBAAgB,SAAS,GAAG;AACpC,aAAK,KAAK,SAAS,IAAI,cAAc,uBAAuB,EAAE,SAAmB,CAAC,CAAC;AACnF,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,CAAC;AACZ,WAAK,OAAO;AACZ,WAAK,OAAO,SAAS,QAAQ,OAAO,GAAG;AACvC,WAAK,WAAW,OAAO,QAAQ,OAAO,GAAG;AACzC,WAAK,aAAa;AAElB,UAAI,OAAO,SAAS,UAAU;AAC5B,aAAK,OAAO;AAAA,MACd;AAEA,WAAK;AACL,WAAK,OAAO,KAAK;AAAA,QACf;AAAA,QACA,QAAQ,OAAO,OAAO,CAAC,CAAC;AAAA,MAC1B,CAAC;AAED,aAAO;AAAA,IACT;AAOA,aAAS,UAAU,UAAU,WAAW;AACtC,aAAO,KAAK;AAAA,IACd;AASA,aAAS,UAAU,MAAM,SAAS,QAAQ;AACxC,WAAK,SAAS,KAAK,MAAM;AACzB,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACr5BjB;AAAA,iEAAAS,UAAAC,SAAA;AAAA;AAOA,QAAI,eAAeA,QAAO,UAAU,WAAW;AAAA,IAAC;AAEhD,iBAAa,UAAU,UAAU,WAAW;AAAA,IAAC;AAE7C,iBAAa,UAAU,UAAU,WAAW;AAAA,IAAC;AAE7C,iBAAa,UAAU,sBAAsB,WAAW;AAAA,IAAC;AAEzD,iBAAa,UAAU,cAAc,WAAW;AAAA,IAAC;AAAA;AAAA;;;ACfjD,IAAAC,gBAAA;AAAA,4DAAAC,UAAAC,SAAA;AAAA;AAOA,QAAIC,QAAOD,QAAO,UAAU,CAAC;AAE7B,IAAAC,MAAK,YAAY,SAAS,GAAG,gBAAgB;AAC3C,uBAAiB,kBAAkB;AAEnC,UAAI,OAAO,iBAAiB,EAAE,YAAY,IAAI,EAAE,eAAe;AAE/D,UAAI,OAAO,MAAM;AACf,eAAO;AAAA,MACT,WAAW,QAAQ,MAAM;AACvB,eAAO;AAAA,MACT;AAEA,UAAI,MAAM;AAAA,QACR;AAAA,QACA,OAAO,iBAAiB,EAAE,SAAS,IAAI,EAAE,YAAY;AAAA,QACrD,MAAM,iBAAiB,EAAE,QAAQ,IAAI,EAAE,WAAW;AAAA,QAClD,OAAO,iBAAiB,EAAE,SAAS,IAAI,EAAE,YAAY;AAAA,QACrD,SAAS,iBAAiB,EAAE,WAAW,IAAI,EAAE,cAAc;AAAA,QAC3D,SAAS,iBAAiB,EAAE,WAAW,IAAI,EAAE,cAAc;AAAA,MAC7D;AAEA,aAAS,IAAI,OAAO,QAAS,KAAQ,IAAI,QAAQ,KAAM,KAAO,IAAI,QAAQ,KACvE,IAAI,SAAS,KAAO,IAAI,WAAW,IAAM,IAAI,UAAU;AAAA,IAC5D;AAEA,IAAAA,MAAK,YAAY,SAAS,KAAK;AAC7B,aAAO,IAAI,MAAO,OAAO,KAAM,OAAQ,OAAQ,OAAO,KAAM,MAAQ,GAAI,OAAO,KAAM,IAAO,OAAO,KAAM,IAAO,OAAO,IAAK,KAAO,MAAM,OAAS,CAAC;AAAA,IACrJ;AAEA,IAAAA,MAAK,cAAc,SAAS,KAAK;AAC/B,aAAOA,MAAK,UAAU,IAAI,aAAa,CAAC,CAAC;AAAA,IAC3C;AAEA,IAAAA,MAAK,gBAAgB,SAAS,GAAG;AAC/B,UAAI,MAAM,OAAO,MAAM,CAAC;AACxB,UAAI,cAAc,IAAI,YAAc,CAAC;AACrC,UAAI,cAAe,IAAI,aAAgB,GAAG,CAAC;AAE3C,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,gBAAgB,SAAS,GAAG;AAC/B,UAAI,MAAM,OAAO,MAAM,CAAC;AACxB,UAAI,eAAe,IAAI,WAAY,GAAG,CAAC;AAEvC,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,qBAAqB,SAAS,KAAK,QAAQ;AAC9C,aAAO,IAAI,aAAa,MAAM;AAAA,IAChC;AAEA,IAAAA,MAAK,eAAe,SAAS,GAAG;AAC9B,UAAI,MAAM,OAAO,MAAM,CAAC;AACxB,UAAI,eAAe,IAAI,gBAAgB,GAAG,CAAC;AAE3C,aAAO;AAAA,IACT;AAEA,IAAAA,MAAK,oBAAoB,SAAS,KAAK,QAAQ;AAC7C,aAAO,IAAI,aAAa,MAAM;AAAA,IAChC;AAEA,IAAAA,MAAK,YAAY,SAAS,GAAG;AAC3B,aAAOA,MAAK,aAAaA,MAAK,UAAU,CAAC,CAAC;AAAA,IAC5C;AAAA;AAAA;;;ACzEA;AAAA,2EAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,UAAU;AAEd,QAAI,uBAAuB,KAAK;AAChC,QAAI,kBAAkB,KAAK;AAC3B,QAAI,oCAAoC,KAAK;AAC7C,QAAI,+BAA+B,KAAK;AACxC,QAAI,yBAAyB,KAAK;AAClC,QAAI,kBAAkB,KAAK;AAE3B,QAAI,oBAAoBA,QAAO,UAAU,WAAW;AAClD,UAAI,EAAE,gBAAgB,oBAAoB;AACxC,eAAO,IAAI,kBAAkB;AAAA,MAC/B;AAEA,WAAK,aAAa;AAClB,WAAK,aAAa;AAClB,WAAK,OAAO;AACZ,WAAK,2BAA2B;AAChC,WAAK,mBAAmB;AACxB,WAAK,wBAAwB;AAE7B,aAAO;AAAA,IACT;AAEA,sBAAkB,UAAU,SAAS,WAAW;AAC9C,aAAO,QAAQ;AAAA,SACZ,KAAK,aAAa,uBAAuB,MACzC,KAAK,OAAO,kBAAkB,MAC9B,KAAK,aAAa,kBAAkB,MACpC,KAAK,mBAAmB,yBAAyB;AAAA,MACpD;AAAA,IACF;AAEA,sBAAkB,UAAU,QAAQ,SAAS,KAAK,QAAQ;AACxD,UAAI,OAAO,QAAQ,mBAAmB,KAAK,MAAM;AACjD,UAAI,MAAM,IAAI,kBAAkB;AAEhC,UAAI,mBAAmB,OAAO,0BAA0B,CAAC;AACzD,UAAI,iBAAiB,OAAO,qBAAqB,CAAC;AAClD,UAAI,qBAAqB,OAAO,4BAA4B,CAAC;AAC7D,UAAI,eAAe,OAAO,qBAAqB,CAAC;AAChD,UAAI,0BAA0B,OAAO,kCAAkC,IAAI,OAAO,IAAI;AACtF,UAAI,6BAA6B,OAAO,uCAAuC,IAAI,IAAI,CAAC;AAExF,aAAO;AAAA,IACT;AAEA,sBAAkB,UAAU,8BAA8B,SAASC,IAAG;AACpE,WAAK,2BAA2BA;AAAA,IAClC;AAEA,sBAAkB,UAAU,8BAA8B,WAAW;AACnE,aAAO,KAAK;AAAA,IACd;AAEA,sBAAkB,UAAU,2BAA2B,SAASA,IAAG;AACjE,WAAK,wBAAwBA;AAAA,IAC/B;AAEA,sBAAkB,UAAU,2BAA2B,WAAW;AAChE,aAAO,KAAK;AAAA,IACd;AAEA,sBAAkB,UAAU,oBAAoB,SAAS,GAAG;AAC1D,WAAK,aAAa;AAAA,IACpB;AAEA,sBAAkB,UAAU,qBAAqB,WAAW;AAC1D,aAAO,KAAK;AAAA,IACd;AAEA,sBAAkB,UAAU,gBAAgB,SAAS,GAAG;AACtD,WAAK,aAAa;AAAA,IACpB;AAEA,sBAAkB,UAAU,iBAAiB,WAAW;AACtD,aAAO,KAAK;AAAA,IACd;AAEA,sBAAkB,UAAU,sBAAsB,SAAS,GAAG;AAC5D,WAAK,mBAAmB;AAAA,IAC1B;AAEA,sBAAkB,UAAU,uBAAuB,WAAW;AAC5D,aAAO,KAAK;AAAA,IACd;AAEA,sBAAkB,UAAU,kBAAkB,SAAS,GAAG;AACxD,WAAK,OAAO;AAAA,IACd;AAEA,sBAAkB,UAAU,mBAAmB,WAAW;AACxD,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;;;ACpGA;AAAA,iEAAAC,UAAAC,SAAA;AAAA;AAOA,IAAAA,QAAO,UAAU;AAAA;AAAA;AAAA;AAAA,MAIb,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUV,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlB,mBAAmB;AAAA;AAAA,IACvB;AAAA;AAAA;;;ACpDA;AAAA,iEAAAC,UAAAC,SAAA;AAAA;AAOA,IAAAA,QAAO,UAAU;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,CAAC;AAAA,MAErB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,YAAY,OAAO,KAAK,MAAM,CAAC,CAAC;AAAA,MAChC,MAAM;AAAA,MACN,WAAW,OAAO,KAAK,MAAM,CAAC,CAAC;AAAA,MAE/B,qBAAqB;AAAA,MACrB,6BAA6B;AAAA,MAC7B,mBAAmB;AAAA,MACnB,gBAAgB;AAAA,MAEhB,eAAe;AAAA,MACf,iBAAiB;AAAA,MAEjB,eAAe;AAAA,MACf,cAAc;AAAA,MAEd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MAEpB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAEhB,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,0BAA0B;AAAA,MAE1B,WAAW;AAAA,MACX,mBAAmB;AAAA;AAAA,MACnB,kBAAkB;AAAA;AAAA,MAElB,mBAAmB;AAAA;AAAA,MACnB,oBAAoB;AAAA;AAAA;AAAA,MAGpB,QAAQ;AAAA;AAAA,MACR,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,UAAU;AAAA;AAAA;AAAA,MAGV,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,MACT,SAAS;AAAA;AAAA,IACX;AAAA;AAAA;;;ACtEA;AAAA,yEAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,WAAW,QAAQ,MAAM,EAAE;AAC/B,QAAI,gBAAgB;AAEpB,QAAI,eAAe;AACnB,QAAI,oBAAoB;AACxB,QAAI,WAAW;AAEf,QAAIC,aAAY;AAChB,QAAI,UAAU;AAEd,QAAI,kBAAkBD,QAAO,UAAU,SAAS,MAAM;AACpD,UAAI,EAAE,gBAAgB,kBAAkB;AACtC,eAAO,IAAI,gBAAgB,IAAI;AAAA,MACjC;AAEA,mBAAa,KAAK,IAAI;AAEtB,WAAK,WAAWC,WAAU;AAC1B,WAAK,SAAS;AAEd,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK,MAAM,IAAI,kBAAkB;AACjC,WAAK,MAAM;AACX,WAAK,OAAO;AAEZ,WAAK,SAASA,WAAU;AACxB,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,UAAU;AAEf,UAAI,MAAM;AACR,aAAK,QAAQ,IAAI;AAAA,MACnB;AAAA,IACF;AAEA,aAAS,iBAAiB,YAAY;AAOtC,oBAAgB,UAAU,2BAA2B,WAAW;AAC9D,aAAO,KAAK,SAAS;AAAA,IACvB;AAOA,oBAAgB,UAAU,aAAa,WAAW;AAChD,aAAO,KAAK,YAAY,OAAO,KAAK,UAAU;AAAA,IAChD;AAOA,oBAAgB,UAAU,oBAAoB,WAAW;AACvD,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,SAAS,WAAW;AAC5C,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,wBAAwB,WAAW;AAC3D,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,WAAW,WAAW;AAC9C,aAAO,KAAK,UAAU,OAAO,KAAK,QAAQA,WAAU;AAAA,IACtD;AAOA,oBAAgB,UAAU,uBAAuB,WAAW;AAC1D,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,wBAAwB,WAAW;AAC3D,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,sBAAsB,WAAW;AACzD,aAAO,KAAK,QAAQ;AAAA,IACtB;AAOA,oBAAgB,UAAU,wBAAwB,WAAW;AAC3D,aAAO,KAAK,SAAS;AAAA,IACvB;AAOA,oBAAgB,UAAU,YAAY,WAAW;AAC/C,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,UAAU,WAAW;AAC7C,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,cAAc,WAAW;AACjD,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,UAAU,WAAW;AAC7C,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,UAAU,WAAW;AAC7C,aAAO,KAAK,SAAS,KAAK,QAAQ,UAAU,KAAK,IAAI,IAAI;AAAA,IAC3D;AAOA,oBAAgB,UAAU,aAAa,WAAW;AAChD,aAAO,KAAK,SAAS,KAAK,KAAK,OAAO;AAAA,IACxC;AAOA,oBAAgB,UAAU,cAAc,WAAW;AACjD,aAAO,KAAK,aAAaA,WAAU,gBAAgB,IAAM,KAAK,sBAAsB,KAAKA,WAAU,cAAeA,WAAU;AAAA,IAC9H;AAOA,oBAAgB,UAAU,4BAA4B,WAAW;AAC/D,aAAO,KAAK;AAAA,IACd;AAOA,oBAAgB,UAAU,aAAa,SAAS,SAAS;AACvD,UAAI,OAAO,WAAW,OAAO,MAAM,QAAQ,QAAQ;AACjD,aAAK,qBAAqB,EAAE,gBAAgB,IAAI;AAAA,MAClD;AAEA,WAAK,UAAU;AAAA,IACjB;AAOA,oBAAgB,UAAU,oBAAoB,SAAS,MAAM;AAC3D,UAAI,OAAO,GAAG;AACZ,cAAM,IAAI,MAAM,+BAA+B;AAAA,MACjD;AAEA,WAAK,QAAQ;AAAA,IACf;AAOA,oBAAgB,UAAU,SAAS,SAAS,KAAK;AAC/C,UAAI,MAAM,GAAG;AACX,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACvC;AAEA,WAAK,MAAM;AAAA,IACb;AAOA,oBAAgB,UAAU,wBAAwB,SAAS,MAAM;AAC/D,WAAK,SAAS,SAAS;AAAA,IACzB;AAOA,oBAAgB,UAAU,WAAW,SAAS,OAAO;AACnD,WAAK,QAAQ;AAAA,IACf;AAOA,oBAAgB,UAAU,uBAAuB,SAAS,KAAK;AAC7D,UAAI,EAAE,eAAe,oBAAoB;AACvC,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,WAAK,MAAM;AAAA,IACb;AAOA,oBAAgB,UAAU,wBAAwB,SAAS,MAAM;AAC/D,WAAK,SAAS;AAAA,IAChB;AAOA,oBAAgB,UAAU,YAAY,SAAS,QAAQ;AACrD,UAAI,SAAS,GAAG;AACd,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAEA,WAAK,SAAS;AAAA,IAChB;AAQA,oBAAgB,UAAU,UAAU,SAAS,MAAM,eAAe,OAAO;AACvE,aAAO,cAAc,MAAM,KAAK,EAC7B,QAAQ,SAAS,EAAE,EACnB,QAAQ,iBAAiB,EAAE;AAE9B,UAAI,cAAc;AAChB,eAAO,IAAI,IAAI;AAAA,MACjB;AAEA,UAAI,OAAO,WAAW,IAAI,MAAM,KAAK,QAAQ;AAC3C,aAAK,qBAAqB,EAAE,gBAAgB,IAAI;AAAA,MAClD;AAEA,WAAK,OAAO;AAAA,IACd;AAOA,oBAAgB,UAAU,cAAc,SAASC,WAAU;AACzD,WAAK,WAAWA;AAAA,IAClB;AAOA,oBAAgB,UAAU,UAAU,SAAS,MAAM;AACjD,UAAI,OAAO,GAAG;AACZ,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,WAAK,OAAO;AAAA,IACd;AAQA,oBAAgB,UAAU,UAAU,SAAS,MAAM,gBAAgB;AACjE,UAAI,EAAE,gBAAgB,OAAO;AAC3B,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,WAAK,OAAO,QAAQ,UAAU,MAAM,cAAc;AAAA,IACpD;AAOA,oBAAgB,UAAU,cAAc,SAAS,MAAM;AACrD,cAAQ,KAAK,YAAY,IAAID,WAAU,UAAUA,WAAU;AAE3D,UAAI,UAAU;AACd,iBAAY,QAAQA,WAAU,eAAgB,KAAK,YAAY,IAAIA,WAAU,UAAUA,WAAU;AAEjG,WAAK,sBAAsB,OAAO;AAClC,WAAK,OAAO,OAAOA,WAAU;AAC7B,WAAK,WAAWA,WAAU;AAAA,IAC5B;AAOA,oBAAgB,UAAU,4BAA4B,SAAS,QAAQ;AACrE,WAAK,SAAS;AAAA,IAChB;AAOA,oBAAgB,UAAU,cAAc,WAAW;AACjD,aAAO,KAAK,QAAQ,EAAE,MAAM,EAAE,MAAM;AAAA,IACtC;AASA,oBAAgB,UAAU,gBAAgB,WAAW;AACnD,cAAQ,KAAK,YAAY,IAAI,SAAS,oBAAoB,SAAS;AAAA,IACrE;AAOA,oBAAgB,UAAU,UAAU,WAAW;AAC7C,aAAO,KAAK,QAAQA,WAAU,eAAe,KAAK,OAAOA,WAAU;AAAA,IACrE;AAAA;AAAA;;;AC5ZA,IAAAE,gBAAA;AAAA,oDAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,SAAS,QAAQ,QAAQ,EAAE;AAC/B,QAAIC,eAAc,eAA2B;AAC7C,QAAIC,YAAW;AAEf,QAAIC,QAAOH,QAAO,UAAU,CAAC;AAE7B,IAAAG,MAAK,uBAAuB,SAAS,QAAQ;AAC3C,UAAI,WAAW,MAAM;AACnB,eAAO,OAAO,MAAM,CAAC;AAAA,MACvB,WAAW,OAAO,WAAW,UAAU;AACrC,eAAO,OAAO,KAAK,MAAM;AAAA,MAC3B,WAAWD,UAAS,MAAM,KAAK,CAAC,OAAO,gBAAgB;AACrD,YAAI,aAAa,IAAID,aAAY;AACjC,eAAO,KAAK,UAAU;AAEtB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AC1BA;AAAA,yEAAAG,UAAAC,SAAA;AAAA;AAOA,QAAI,WAAW,QAAQ,MAAM,EAAE;AAC/B,QAAIC,YAAW;AACf,QAAIC,aAAY,eAA2B;AAE3C,QAAI,eAAe;AACnB,QAAIC,QAAO;AAEX,QAAI,sBAAsBH,QAAO,UAAU,SAAS,SAAS;AAC3D,UAAI,EAAE,gBAAgB,sBAAsB;AAC1C,eAAO,IAAI,oBAAoB,OAAO;AAAA,MACxC;AAEA,MAAAE,WAAU,KAAK,MAAM,OAAO;AAE5B,WAAK,SAAS;AACd,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF;AAEA,aAAS,qBAAqBA,UAAS;AAEvC,wBAAoB,UAAU,gBAAgB,SAAS,KAAK,QAAQ,UAAU;AAAA,IAE9E;AAEA,wBAAoB,UAAU,gBAAgB,SAAS,KAAK,QAAQ,UAAU;AAAA,IAE9E;AAEA,wBAAoB,UAAU,qBAAqB,SAAS,KAAK;AAC/D,UAAI,KAAK;AACP,aAAK,KAAK,SAAS,GAAG;AAAA,MACxB;AAAA,IACF;AAEA,wBAAoB,UAAU,UAAU,SAAS,IAAI;AAAA,IAErD;AAEA,wBAAoB,UAAU,kBAAkB,SAAS,IAAI;AAAA,IAE7D;AAEA,wBAAoB,UAAU,aAAa,SAASE,QAAO,UAAU,UAAU;AAC7E,eAAS,MAAMA,MAAK;AAAA,IACtB;AAEA,wBAAoB,UAAU,QAAQ,SAAS,IAAI,QAAQ,UAAU;AACnE,eAAS,UAAU;AAEnB,UAAI,OAAO,aAAa,YAAY;AAClC,mBAAW,KAAK,mBAAmB,KAAK,IAAI;AAAA,MAC9C;AAEA,UAAI,EAAE,cAAc,eAAe;AACjC,iBAAS,IAAI,MAAM,sCAAsC,CAAC;AAC1D;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,UAAU,KAAK,SAAS,UAAU;AAClD,iBAAS,IAAI,MAAM,iCAAiC,CAAC;AACrD;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,YAAY;AAC5B,iBAAS,IAAI,MAAM,6BAA6B,CAAC;AACjD;AAAA,MACF;AAEA,WAAK,SAAS,aAAa;AAC3B,WAAK,gBAAgB,EAAE;AACvB,WAAK,SAAS;AAEd,eAASD,MAAK,qBAAqB,MAAM;AAEzC,UAAI,OAAO,SAAS,MAAM,GAAG;AAC3B,aAAK,cAAc,IAAI,QAAQ,QAAQ;AAAA,MACzC,WAAWF,UAAS,MAAM,GAAG;AAC3B,aAAK,cAAc,IAAI,QAAQ,QAAQ;AAAA,MACzC,OAAO;AACL,aAAK,SAAS,aAAa;AAC3B,iBAAS,IAAI,MAAM,sDAAsD,CAAC;AAC1E;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,wBAAoB,UAAU,SAAS,WAAW;AAChD,UAAI,KAAK,SAAS,YAAY;AAC5B,aAAK,SAAS,SAAS;AACvB;AAAA,MACF;AAEA,WAAK,QAAQ;AAAA,IACf;AAEA,wBAAoB,UAAU,kBAAkB,WAAW;AACzD,aAAO,KAAK;AAAA,IACd;AAEA,wBAAoB,UAAU,QAAQ,SAASG,QAAO,IAAI;AACxD,UAAIA,QAAO;AACT,aAAK,UAAUA,OAAM;AAAA,MACvB;AAEA,aAAOF,WAAU,UAAU,MAAM,KAAK,MAAME,QAAO,EAAE;AAAA,IACvD;AAAA;AAAA;;;ACrHA;AAAA,iCAAAC,UAAA;AAAA;AAGA,QAAI;AACJ,KAAC,SAAU,SAAS;AAGnB,UAAG,OAAO,sBAAsB,aAAa;AAC5C,YAAG,aAAa,OAAOA,UAAS;AAC/B,kBAAQA,QAAO;AAAA,QAChB,WAAW,eAAe,OAAO,UAAU,OAAO,KAAK;AACtD,iBAAO,WAAY;AAClB,gBAAIC,UAAS,CAAC;AACd,oBAAQA,OAAM;AACd,mBAAOA;AAAA,UACR,CAAC;AAAA,QACF,OAAO;AACN,kBAAQ,QAAQ,CAAC,CAAC;AAAA,QACnB;AAAA,MACD,OAAO;AACN,gBAAQ,QAAQ,CAAC,CAAC;AAAA,MACnB;AAAA,IAGD,GAAE,SAASC,QAAO;AAClB,MAAAA,OAAM,UAAU;AAEhB,eAAS,mBAAmB;AAC3B,YAAIC,KAAI,GAAG,QAAQ,IAAI,MAAM,GAAG;AAEhC,iBAAQC,KAAG,GAAGA,MAAK,KAAK,EAAEA,IAAE;AAC3B,UAAAD,KAAIC;AACJ,UAAAD,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,UAAAA,KAAMA,KAAE,IAAM,aAAcA,OAAM,IAAOA,OAAM;AAC/C,gBAAMC,EAAC,IAAID;AAAA,QACZ;AAEA,eAAO,OAAO,eAAe,cAAc,IAAI,WAAW,KAAK,IAAI;AAAA,MACpE;AAEA,UAAI,KAAK,iBAAiB;AAC1B,eAAS,mBAAmB,GAAG;AAC9B,YAAIA,KAAI,GAAG,IAAI,GAAGC,KAAI,GAAG,QAAQ,OAAO,eAAe,cAAc,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,IAAI;AAE1G,aAAIA,KAAI,GAAGA,MAAK,KAAK,EAAEA,GAAG,OAAMA,EAAC,IAAI,EAAEA,EAAC;AACxC,aAAIA,KAAI,GAAGA,MAAK,KAAK,EAAEA,IAAG;AACzB,cAAI,EAAEA,EAAC;AACP,eAAID,KAAI,MAAMC,IAAGD,KAAI,MAAMA,MAAK,IAAK,KAAI,MAAMA,EAAC,IAAK,MAAM,IAAK,EAAE,IAAI,GAAI;AAAA,QAC3E;AACA,YAAI,MAAM,CAAC;AACX,aAAIC,KAAI,GAAGA,MAAK,IAAI,EAAEA,GAAG,KAAIA,KAAI,CAAC,IAAI,OAAO,eAAe,cAAc,MAAM,SAASA,KAAI,KAAKA,KAAI,MAAM,GAAG,IAAI,MAAM,MAAMA,KAAI,KAAKA,KAAI,MAAM,GAAG;AACrJ,eAAO;AAAA,MACR;AACA,UAAI,KAAK,mBAAmB,EAAE;AAC9B,UAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC;AACjE,UAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC,GAAI,KAAK,GAAG,CAAC;AACjE,UAAI,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE;AAClE,eAAS,WAAW,MAAM,MAAM;AAC/B,YAAI,IAAI,OAAO;AACf,iBAAQC,KAAI,GAAG,IAAI,KAAK,QAAQA,KAAI,IAAI,KAAK,MAAI,IAAK,IAAI,IAAE,KAAK,WAAWA,IAAG,KAAG,GAAI;AACtF,eAAO,CAAC;AAAA,MACT;AAEA,eAAS,UAAU,GAAG,MAAM;AAC3B,YAAI,IAAI,OAAO,IAAI,IAAI,EAAE,SAAS,IAAIA,KAAI;AAC1C,eAAMA,KAAI,IAAI,KACb,GAAG,EAAEA,IAAG,IAAK,IAAI,GAAI,IACrB,GAAG,EAAEA,IAAG,IAAM,KAAK,IAAK,GAAI,IAC5B,GAAG,EAAEA,IAAG,IAAM,KAAK,KAAM,GAAI,IAC7B,GAAG,EAAEA,IAAG,IAAK,MAAM,EAAG,IACtB,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAChD,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAChD,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,CAAC;AACjD,aAAK;AACL,eAAMA,KAAI,EAAG,KAAK,MAAI,IAAK,IAAI,IAAE,EAAEA,IAAG,KAAG,GAAI;AAC7C,eAAO,CAAC;AAAA,MACT;AAEA,eAAS,UAAU,KAAK,MAAM;AAC7B,YAAI,IAAI,OAAO;AACf,iBAAQA,KAAI,GAAG,IAAI,IAAI,QAAQF,KAAI,GAAG,IAAI,GAAGE,KAAI,KAAI;AACpD,UAAAF,KAAI,IAAI,WAAWE,IAAG;AACtB,cAAGF,KAAI,KAAM;AACZ,gBAAK,MAAI,IAAK,IAAI,IAAEA,MAAG,GAAI;AAAA,UAC5B,WAAUA,KAAI,MAAO;AACpB,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAMA,MAAG,IAAG,OAAM,GAAI;AAC7C,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAKA,KAAE,OAAM,GAAI;AAAA,UACzC,WAAUA,MAAK,SAAUA,KAAI,OAAQ;AACpC,YAAAA,MAAKA,KAAE,QAAM;AAAI,gBAAI,IAAI,WAAWE,IAAG,IAAE;AACzC,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAMF,MAAG,IAAG,MAAK,GAAI;AAC5C,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAMA,MAAG,IAAG,OAAM,GAAI;AAC7C,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAM,KAAG,IAAG,MAAMA,KAAE,MAAI,MAAK,GAAI;AACxD,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAK,IAAE,OAAM,GAAI;AAAA,UACzC,OAAO;AACN,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAMA,MAAG,KAAI,OAAM,GAAI;AAC9C,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAMA,MAAG,IAAG,OAAM,GAAI;AAC7C,gBAAK,MAAI,IAAK,IAAI,KAAK,MAAKA,KAAE,OAAM,GAAI;AAAA,UACzC;AAAA,QACD;AACA,eAAO,CAAC;AAAA,MACT;AACA,MAAAD,OAAM,QAAQ;AAEd,MAAAA,OAAM,OAAO;AAEb,MAAAA,OAAM,MAAM;AAEZ,MAAAA,OAAM,MAAM;AAAA,IACZ,CAAC;AAAA;AAAA;;;AClHD;AAAA,kDAAAI,UAAAC,SAAA;AAAA;AAUA,QAAM,EAAC,WAAAC,WAAS,IAAI;AAEpB,QAAM,QAAQ;AAEd,QAAM,cAAN,cAA0BA,WAAU;AAAA,MAClC,YAAY,SAAS;AACnB,cAAM,OAAO;AACb,aAAK,WAAW,OAAO,YAAY,CAAC;AACpC,aAAK,SAAS,aAAa,GAAG,CAAC;AAE/B,aAAK,UAAU;AAAA,MACjB;AAAA,MAEA,WAAWC,QAAO,UAAU,UAAU;AACpC,YAAIA,QAAO;AACT,eAAK,WAAW,MAAM,IAAIA,QAAO,KAAK,QAAQ,MAAM;AACpD,eAAK,WAAWA,OAAM;AAAA,QACxB;AAEA,iBAAS,MAAMA,MAAK;AAAA,MACtB;AAAA,MAEA,OAAO,UAAU;AACf,cAAM,WAAW,OAAO,YAAY,CAAC;AACrC,iBAAS,cAAc,KAAK,aAAa,GAAG,CAAC;AAC7C,eAAO,WAAW,SAAS,SAAS,QAAQ,IAAI;AAAA,MAClD;AAAA,MAEA,MAAM;AACJ,eAAO,KAAK,OAAO,KAAK,EAAE,YAAY;AAAA,MACxC;AAAA,MAEA,OAAO;AACL,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAEA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC/CjB;AAAA,0DAAAG,UAAAC,SAAA;AAAA;AAUA,QAAM,EAAC,WAAU,IAAI,QAAQ,MAAM;AAEnC,QAAM,QAAQ;AAEd,QAAM,qBAAN,cAAiC,WAAW;AAAA,MAC1C,YAAY,SAAS;AACnB,cAAM,OAAO;AAEb,aAAK,WAAW,OAAO,YAAY,CAAC;AACpC,aAAK,SAAS,aAAa,GAAG,CAAC;AAE/B,aAAK,UAAU;AACf,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,KAAKC,QAAO,UAAU;AACpB,YAAIA,QAAO;AACT,eAAK,kBAAkBA,OAAM;AAAA,QAC/B;AAEA,eAAO,MAAM,KAAKA,QAAO,QAAQ;AAAA,MACnC;AAAA,MAEA,WAAWA,QAAO,UAAU,UAAU;AACpC,YAAIA,QAAO;AACT,eAAK,WAAW,MAAM,IAAIA,QAAO,KAAK,QAAQ,MAAM;AACpD,eAAK,WAAWA,OAAM;AAAA,QACxB;AAEA,cAAM,WAAWA,QAAO,UAAU,QAAQ;AAAA,MAC5C;AAAA,MAEA,OAAO,UAAU;AACf,cAAM,WAAW,OAAO,YAAY,CAAC;AACrC,iBAAS,cAAc,KAAK,aAAa,GAAG,CAAC;AAC7C,eAAO,WAAW,SAAS,SAAS,QAAQ,IAAI;AAAA,MAClD;AAAA,MAEA,MAAM;AACJ,eAAO,KAAK,OAAO,KAAK,EAAE,YAAY;AAAA,MACxC;AAAA,MAEA,KAAK,aAAa,OAAO;AACvB,YAAI,YAAY;AACd,iBAAO,KAAK;AAAA,QACd,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC7DjB,IAAAE,eAAA;AAAA,2CAAAC,UAAAC,SAAA;AAAA;AAUA,IAAAA,QAAO,UAAU;AAAA,MACf,aAAa;AAAA,MACb,oBAAoB;AAAA,IACtB;AAAA;AAAA;;;ACbA;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,WAAW,QAAQ,MAAM,EAAE;AAC/B,QAAI,QAAQ;AACZ,QAAI,EAAC,YAAW,IAAI;AACpB,QAAI,EAAC,mBAAkB,IAAI;AAE3B,QAAI,sBAAsB;AAC1B,QAAI,kBAAkB;AACtB,QAAI,oBAAoB;AAExB,QAAIC,aAAY;AAChB,QAAIC,QAAO;AACX,QAAI,UAAU;AAEd,QAAI,yBAAyBF,QAAO,UAAU,SAAS,SAAS;AAC9D,UAAI,EAAE,gBAAgB,yBAAyB;AAC7C,eAAO,IAAI,uBAAuB,OAAO;AAAA,MAC3C;AAEA,gBAAU,KAAK,UAAU,KAAK,UAAU,OAAO;AAE/C,0BAAoB,KAAK,MAAM,OAAO;AAEtC,WAAK,SAAS;AACd,WAAK,WAAW,CAAC;AACjB,WAAK,WAAW;AAAA,QACd,eAAe;AAAA,QACf,eAAe;AAAA,QACf,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY,QAAQ;AAAA,QACpB,gBAAgB,QAAQ;AAAA,MAC1B;AAAA,IACF;AAEA,aAAS,wBAAwB,mBAAmB;AAEpD,2BAAuB,UAAU,eAAe,SAAS,IAAI;AAC3D,WAAK,SAAS,KAAK,EAAE;AAErB,UAAI,GAAG,qBAAqB,EAAE,mBAAmB,GAAG;AAClD,aAAK,qBAAqB,EAAE;AAAA,MAC9B;AAEA,WAAK,SAAS,aAAa;AAC3B,WAAK,SAAS;AAEd,UAAI,KAAK,SAAS,UAAU,CAAC,KAAK,SAAS,UAAU;AACnD,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAEA,2BAAuB,UAAU,gBAAgB,SAAS,IAAI,QAAQ,UAAU;AAC9E,UAAI,OAAO,WAAW,GAAG;AACvB,WAAG,UAAUC,WAAU,aAAa;AAAA,MACtC;AAEA,UAAI,SAAS,GAAG,UAAU;AAE1B,UAAI,WAAWA,WAAU,eAAe;AACtC,WAAG,QAAQ,OAAO,MAAM;AACxB,WAAG,kBAAkB,OAAO,MAAM;AAClC,WAAG,OAAO,MAAM,IAAI,MAAM,MAAM,CAAC;AAAA,MACnC;AAEA,WAAK,sBAAsB,EAAE;AAE7B,UAAI,WAAWA,WAAU,eAAe;AACtC,aAAK,MAAM,MAAM;AACjB,aAAK,aAAa,EAAE;AACpB,iBAAS,MAAM,EAAE;AACjB;AAAA,MACF,WAAW,WAAWA,WAAU,iBAAiB;AAC/C,aAAK,aAAa,IAAI,QAAQ,EAAE,IAAI,MAAM;AAC1C;AAAA,MACF,OAAO;AACL,iBAAS,IAAI,MAAM,wBAAwB,SAAS,kBAAkB,CAAC;AACvE;AAAA,MACF;AAAA,IACF;AAEA,2BAAuB,UAAU,gBAAgB,SAAS,IAAI,QAAQ,UAAU;AAC9E,SAAG,qBAAqB,EAAE,kBAAkB,IAAI;AAChD,SAAG,0BAA0BA,WAAU,2BAA2B;AAElE,WAAK,sBAAsB,EAAE;AAE7B,UAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ;AAC1C,aAAO,KAAK,SAAS,SAAS,KAAK;AACjC,cAAM,KAAK,SAAS,GAAG;AACvB,cAAM,IAAI;AAAA,MACZ,CAAC;AACD,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,2BAAuB,UAAU,YAAY,SAASE,IAAG;AACvD,UAAI,OAAOA,OAAM,UAAU;AACzB,QAAAA,KAAI,CAAC;AAAA,MACP;AAEA,UAAI,OAAOA,GAAE,SAAS,UAAU;AAC9B,QAAAA,GAAE,OAAO,CAAC;AAAA,MACZ;AAEA,UAAI,OAAOA,GAAE,KAAK,UAAU,UAAU;AACpC,QAAAA,GAAE,KAAK,QAAQF,WAAU;AAAA,MAC3B;AAEA,MAAAE,GAAE,aAAa,CAAC,CAACA,GAAE;AACnB,MAAAA,GAAE,iBAAiB,CAAC,CAACA,GAAE;AAEvB,aAAOA;AAAA,IACT;AAEA,2BAAuB,UAAU,UAAU,WAAW;AACpD,WAAK,SAAS,gBAAgB,KAAK;AAEnC,WAAK,SAAS,QAAQ,SAAS,IAAI;AACjC,aAAK,wBAAwB,EAAE;AAAA,MACjC,EAAE,KAAK,IAAI,CAAC;AAEZ,WAAK,SAAS,gBAAgB,KAAK,SAAS,KAAK,SAAS;AAE1D,UAAI,KAAK,QAAQ,GAAG;AAClB,aAAK,4BAA4B;AAAA,MACnC;AAEA,WAAK,0BAA0B;AAE/B,WAAK,SAAS,aAAa;AAC3B,WAAK,SAAS,SAAS;AACvB,WAAK,SAAS,WAAW;AACzB,WAAK,IAAI;AAAA,IACX;AAEA,2BAAuB,UAAU,kBAAkB,SAAS,IAAI;AAC9D,UAAI,GAAG,UAAU,MAAM,IAAI;AACzB,WAAG,UAAUF,WAAU,eAAe;AAAA,MACxC;AAEA,UAAI,GAAG,UAAU,MAAMA,WAAU,iBAAiB;AAChD,WAAG,qBAAqB,EAAE,kBAAkB,IAAI;AAChD,WAAG,0BAA0BA,WAAU,2BAA2B;AAAA,MACpE;AAEA,UAAI,GAAG,QAAQ,MAAM,IAAI;AACvB,WAAG,QAAQ,oBAAI,KAAK,GAAG,KAAK,SAAS,cAAc;AAAA,MACrD;AAEA,SAAG,WAAW;AAAA,QACZ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,2BAAuB,UAAU,eAAe,SAAS,IAAI,UAAU;AACrE,UAAI,UAAU,GAAG,UAAU,MAAMA,WAAU;AAC3C,UAAIG,YAAU,UAAU,IAAI,mBAAmB,KAAK,QAAQ,IAAI,IAAI,IAAI,YAAY;AACpF,UAAI,QAAQ;AAEZ,eAAS,cAAc;AACrB,YAAI,SAASA,UAAQ,OAAO,EAAE,aAAa,CAAC;AAC5C,WAAG,OAAO,MAAM;AAChB,WAAG,QAAQA,UAAQ,KAAK,CAAC;AACzB,WAAG,kBAAkBA,UAAQ,KAAK,IAAI,CAAC;AACvC,aAAK,aAAa,EAAE;AACpB,iBAAS,OAAO,EAAE;AAAA,MACpB;AAEA,MAAAA,UAAQ,KAAK,OAAO,YAAY,KAAK,IAAI,CAAC;AAC1C,MAAAA,UAAQ,KAAK,SAAS,SAAS,KAAK;AAClC,gBAAQ;AAAA,MACV,CAAC;AAED,MAAAA,UAAQ,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC;AAEjC,aAAOA;AAAA,IACT;AAEA,2BAAuB,UAAU,4BAA4B,WAAW;AACtE,UAAI,UAAU,KAAK,SAAS;AAC5B,UAAI,OAAO,KAAK,SAAS;AACzB,UAAI,SAAS,KAAK,SAAS;AAE3B,UAAI,KAAK,QAAQ,GAAG;AAClB,kBAAUH,WAAU;AACpB,eAAOA,WAAU;AACjB,iBAASA,WAAU;AAAA,MACrB;AAGA,WAAK,MAAM,QAAQ,aAAaA,WAAU,QAAQ,CAAC;AAGnD,WAAK,MAAMA,WAAU,UAAU;AAC/B,WAAK,MAAMA,WAAU,UAAU;AAG/B,WAAK,MAAM,QAAQ,cAAc,OAAO,CAAC;AACzC,WAAK,MAAM,QAAQ,cAAc,OAAO,CAAC;AAGzC,WAAK,MAAM,QAAQ,aAAa,IAAI,CAAC;AACrC,WAAK,MAAM,QAAQ,aAAa,MAAM,CAAC;AAGvC,UAAI,UAAU,KAAK,WAAW;AAC9B,UAAI,gBAAgB,OAAO,WAAW,OAAO;AAC7C,WAAK,MAAM,QAAQ,cAAc,aAAa,CAAC;AAC/C,WAAK,MAAM,OAAO;AAAA,IACpB;AAEA,2BAAuB,UAAU,8BAA8B,WAAW;AAExE,WAAK,MAAM,QAAQ,aAAaA,WAAU,cAAc,CAAC;AAGzD,WAAK,MAAM,QAAQ,cAAc,EAAE,CAAC;AAGpC,WAAK,MAAM,QAAQ,cAAcA,WAAU,iBAAiB,CAAC;AAG7D,WAAK,MAAM,QAAQ,cAAcA,WAAU,iBAAiB,CAAC;AAG7D,WAAK,MAAMA,WAAU,SAAS;AAC9B,WAAK,MAAMA,WAAU,SAAS;AAG9B,WAAK,MAAM,QAAQ,cAAc,KAAK,SAAS,MAAM,CAAC;AACtD,WAAK,MAAM,QAAQ,cAAc,KAAK,SAAS,MAAM,CAAC;AAGtD,WAAK,MAAM,QAAQ,cAAc,KAAK,SAAS,aAAa,CAAC;AAC7D,WAAK,MAAM,QAAQ,cAAc,KAAK,SAAS,aAAa,CAAC;AAM7D,WAAK,MAAM,QAAQ,aAAaA,WAAU,kBAAkB,CAAC;AAG7D,WAAK,MAAMA,WAAU,SAAS;AAG9B,WAAK,MAAM,QAAQ,cAAc,KAAK,SAAS,gBAAgB,KAAK,SAAS,aAAa,CAAC;AAG3F,WAAK,MAAM,QAAQ,aAAa,CAAC,CAAC;AAAA,IACpC;AAEA,2BAAuB,UAAU,0BAA0B,SAAS,IAAI;AACtE,UAAI,MAAM,GAAG,qBAAqB;AAClC,UAAI,SAAS,GAAG,UAAU;AAC1B,UAAI,aAAa,GAAG,SAAS;AAE7B,UAAI,OAAO,GAAG,QAAQ;AACtB,UAAI,iBAAiB,GAAG,kBAAkB;AAE1C,UAAI,GAAG,QAAQ,KAAK,aAAaA,WAAU,aAAa;AACtD,eAAOA,WAAU;AACjB,yBAAiBA,WAAU;AAC3B,qBAAaA,WAAU;AAEvB,WAAG,0BAA0BA,WAAU,iBAAiB;AAExD,YAAI,WAAW,OAAO,OAAO;AAAA,UAC3B,QAAQ,cAAcA,WAAU,cAAc;AAAA,UAC9C,QAAQ,cAAc,EAAE;AAAA,UACxB,QAAQ,cAAc,GAAG,QAAQ,CAAC;AAAA,UAClC,QAAQ,cAAc,GAAG,kBAAkB,CAAC;AAAA,UAC5C,QAAQ,cAAc,GAAG,SAAS,IAAI;AAAA,QACxC,GAAG,EAAE;AAEL,WAAG,SAAS,QAAQ;AAAA,MACtB;AAGA,WAAK,MAAM,QAAQ,aAAaA,WAAU,OAAO,CAAC;AAGlD,WAAK,MAAM,QAAQ,cAAe,GAAG,YAAY,KAAK,IAAKA,WAAU,cAAc,CAAC;AAGpF,WAAK,MAAM,QAAQ,cAAc,GAAG,0BAA0B,CAAC,CAAC;AAChE,WAAK,MAAM,IAAI,OAAO,CAAC;AAGvB,WAAK,MAAM,QAAQ,cAAc,MAAM,CAAC;AAGxC,WAAK,MAAM,QAAQ,aAAa,GAAG,WAAW,CAAC,CAAC;AAGhD,WAAK,MAAM,QAAQ,aAAa,GAAG,OAAO,CAAC,CAAC;AAG5C,WAAK,MAAM,QAAQ,aAAa,cAAc,CAAC;AAC/C,WAAK,MAAM,QAAQ,aAAa,IAAI,CAAC;AAErC,UAAI,OAAO,GAAG,QAAQ;AACtB,UAAI,UAAU,GAAG,WAAW;AAC5B,UAAI,QAAQ,GAAG,yBAAyB;AAExC,UAAI,IAAI,iBAAiB,GAAG;AAC1B,eAAO,OAAO,KAAK,IAAI;AACvB,kBAAU,OAAO,KAAK,OAAO;AAAA,MAC/B;AAGA,WAAK,MAAM,QAAQ,cAAc,KAAK,MAAM,CAAC;AAG7C,WAAK,MAAM,QAAQ,cAAc,MAAM,MAAM,CAAC;AAG9C,WAAK,MAAM,QAAQ,cAAc,QAAQ,MAAM,CAAC;AAGhD,WAAK,MAAMA,WAAU,UAAU;AAG/B,WAAK,MAAM,QAAQ,cAAc,GAAG,sBAAsB,CAAC,CAAC;AAG5D,WAAK,MAAM,QAAQ,aAAa,GAAG,sBAAsB,CAAC,CAAC;AAG3D,WAAK,MAAM,QAAQ,aAAa,UAAU,CAAC;AAG3C,WAAK,MAAM,IAAI;AAGf,WAAK,MAAM,KAAK;AAGhB,WAAK,MAAM,OAAO;AAAA,IACpB;AAEA,2BAAuB,UAAU,uBAAuB,SAAS,IAAI;AAEnE,WAAK,MAAM,QAAQ,aAAaA,WAAU,MAAM,CAAC;AAGjD,WAAK,MAAM,QAAQ,aAAa,GAAG,OAAO,CAAC,CAAC;AAG5C,UAAI,GAAG,QAAQ,GAAG;AAChB,aAAK,MAAM,QAAQ,cAAc,GAAG,kBAAkB,CAAC,CAAC;AACxD,aAAK,MAAM,QAAQ,cAAc,GAAG,QAAQ,CAAC,CAAC;AAAA,MAChD,OAAO;AACL,aAAK,MAAM,QAAQ,aAAa,GAAG,kBAAkB,CAAC,CAAC;AACvD,aAAK,MAAM,QAAQ,aAAa,GAAG,QAAQ,CAAC,CAAC;AAAA,MAC/C;AAAA,IACF;AAEA,2BAAuB,UAAU,wBAAwB,SAAS,IAAI;AACpE,UAAI,MAAM,GAAG,qBAAqB;AAClC,UAAI,SAAS,GAAG,UAAU;AAC1B,UAAI,OAAO,GAAG,QAAQ;AACtB,UAAI,QAAQ,GAAG,sBAAsB;AAErC,UAAI,GAAG,QAAQ,GAAG;AAChB,YAAI,kBAAkB,IAAI;AAC1B,WAAG,0BAA0BA,WAAU,iBAAiB;AAAA,MAC1D;AAEA,UAAI,IAAI,iBAAiB,GAAG;AAC1B,eAAO,OAAO,KAAK,IAAI;AAAA,MACzB;AAEA,SAAG,SAAS,OAAO,KAAK;AAGxB,WAAK,MAAM,QAAQ,aAAaA,WAAU,OAAO,CAAC;AAGlD,WAAK,MAAM,QAAQ,cAAc,GAAG,0BAA0B,CAAC,CAAC;AAChE,WAAK,MAAM,IAAI,OAAO,CAAC;AAGvB,WAAK,MAAM,QAAQ,cAAc,MAAM,CAAC;AAGxC,WAAK,MAAM,QAAQ,aAAa,GAAG,WAAW,CAAC,CAAC;AAEhD,SAAG,SAAS,OAAO,KAAK;AAGxB,UAAI,IAAI,mBAAmB,GAAG;AAC5B,aAAK,MAAMA,WAAU,SAAS;AAC9B,aAAK,MAAMA,WAAU,SAAS;AAC9B,aAAK,MAAMA,WAAU,SAAS;AAAA,MAChC,OAAO;AACL,aAAK,MAAM,QAAQ,aAAa,GAAG,OAAO,CAAC,CAAC;AAC5C,aAAK,MAAM,QAAQ,aAAa,GAAG,kBAAkB,CAAC,CAAC;AACvD,aAAK,MAAM,QAAQ,aAAa,GAAG,QAAQ,CAAC,CAAC;AAAA,MAC/C;AAGA,WAAK,MAAM,QAAQ,cAAc,KAAK,MAAM,CAAC;AAG7C,WAAK,MAAM,QAAQ,cAAc,MAAM,MAAM,CAAC;AAG9C,WAAK,MAAM,IAAI;AAGf,WAAK,MAAM,KAAK;AAEhB,SAAG,SAAS,WAAW,KAAK;AAAA,IAC9B;AAEA,2BAAuB,UAAU,aAAa,SAAS,SAAS;AAC9D,aAAO,KAAK,SAAS,YAAY,OAAO,KAAK,SAAS,UAAU;AAAA,IAClE;AAEA,2BAAuB,UAAU,UAAU,WAAW;AACpD,aAAO,KAAK,SAAS,cAAc,KAAK,SAAS,SAASA,WAAU,qBAAqB,KAAK,SAAS,gBAAgBA,WAAU,eAAe,KAAK,SAAS,gBAAgBA,WAAU;AAAA,IAC1L;AAEA,2BAAuB,UAAU,aAAa,SAAS,SAAS;AAC9D,WAAK,SAAS,UAAU;AAAA,IAC1B;AAAA;AAAA;;;ACpbA;AAAA,0DAAAI,UAAAC,SAAA;AAAA;AAOA,IAAAA,QAAO,UAAU;AAAA,MACf,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,wBAAwB;AAAA,IAC1B;AAAA;AAAA;;;ACZA;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,WAAW,QAAQ,MAAM,EAAE;AAE/B,QAAI,yBAAyB,2BAA4B;AACzD,QAAI,kBAAkB,2BAA4B;AAElD,QAAIC,QAAO;AAaX,QAAI,YAAYD,QAAO,UAAU,SAAS,SAAS;AACjD,UAAI,EAAE,gBAAgB,YAAY;AAChC,eAAO,IAAI,UAAU,OAAO;AAAA,MAC9B;AAEA,gBAAU,KAAK,UAAU,WAAW,CAAC;AACrC,cAAQ,OAAO,QAAQ,QAAQ,CAAC;AAEhC,6BAAuB,KAAK,MAAM,OAAO;AAEzC,UAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,SAAS,GAAG;AAC3D,gBAAQ,KAAK,QAAQ,QAAQ;AAC7B,eAAO,QAAQ;AAAA,MACjB;AAEA,UAAI,CAAC,QAAQ,cAAc,OAAO,QAAQ,KAAK,UAAU,YAAY,QAAQ,KAAK,UAAU,GAAG;AAC7F,gBAAQ,QAAQ;AAAA,MAClB;AAEA,cAAQ,mBAAmB,QAAQ,oBAAoB;AAEvD,UAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;AACjD,aAAK,WAAW,QAAQ,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,aAAS,WAAW,sBAAsB;AAS1C,cAAU,UAAU,qBAAqB,SAAS,MAAM;AACtD,aAAOC,MAAK,SAAS,MAAM;AAAA,QACzB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,kBAAkB,KAAK,QAAQ;AAAA,QAC/B,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO,KAAK,QAAQ;AAAA,QACpB,SAAS;AAAA,MACX,CAAC;AAED,UAAI,QAAQ,KAAK,SAAS;AAC1B,UAAI,YAAY,KAAK,SAAS;AAE9B,UAAI,KAAK,MAAM;AACb,aAAK,OAAOA,MAAK,aAAa,KAAK,IAAI;AAEvC,YAAI,CAAC,aAAa,KAAK,KAAK,MAAM,EAAE,MAAM,KAAK;AAC7C,kBAAQ;AACR,eAAK,OAAO;AAAA,QACd,WAAW,OAAO;AAChB,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAEA,UAAI,SAAS,WAAW;AACtB,aAAK,QAAQ;AAAA,MACf;AAEA,WAAK,OAAOA,MAAK,QAAQ,KAAK,IAAI;AAElC,aAAO;AAAA,IACT;AAiBA,cAAU,UAAU,QAAQ,SAAS,QAAQ,MAAM,UAAU;AAC3D,UAAI,OAAO,aAAa,YAAY;AAClC,mBAAW,KAAK,mBAAmB,KAAK,IAAI;AAAA,MAC9C;AAEA,aAAO,KAAK,mBAAmB,IAAI;AAEnC,UAAI,KAAK,SAAS,UAAU,KAAK,SAAS,eAAe,KAAK,SAAS,WAAW;AAChF,iBAAS,IAAI,MAAM,KAAK,OAAO,kCAAkC,CAAC;AAClE;AAAA,MACF;AAEA,UAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,WAAW,GAAG;AAC3D,iBAAS,IAAI,MAAM,6CAA6C,CAAC;AACjE;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,aAAa,OAAO,KAAK,aAAa,UAAU;AAChE,iBAAS,IAAI,MAAM,0EAA0E,CAAC;AAC9F;AAAA,MACF;AAEA,UAAI,QAAQ,IAAI,gBAAgB,KAAK,IAAI;AACzC,YAAM,QAAQ,KAAK,MAAM,KAAK,QAAQ,cAAc;AAEpD,UAAI,KAAK,kBAAkB;AACzB,cAAM,QAAQ,KAAK,MAAM,IAAI;AAAA,MAC/B;AAEA,UAAI,KAAK,OAAO;AACd,cAAM,UAAU,CAAC;AAAA,MACnB;AAEA,UAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,cAAM,WAAW,KAAK,OAAO;AAAA,MAC/B;AAEA,UAAI,KAAK,SAAS,aAAa,OAAO,KAAK,SAAS,UAAU;AAC5D,aAAK,OAAO;AAAA,MACd;AAEA,UAAI,OAAO,KAAK,SAAS,UAAU;AACjC,YAAI,KAAK,SAAS,WAAW;AAC3B,eAAK,QAAQ;AAAA,QACf;AAEA,cAAM,YAAY,KAAK,IAAI;AAAA,MAC7B;AAEA,UAAI,KAAK,SAAS,aAAa,OAAO,KAAK,aAAa,UAAU;AAChE,iBAAS,OAAO,KAAK,KAAK,QAAQ;AAAA,MACpC;AAEA,aAAO,uBAAuB,UAAU,MAAM,KAAK,MAAM,OAAO,QAAQ,QAAQ;AAAA,IAClF;AAQA,cAAU,UAAU,WAAW,WAAW;AACxC,WAAK,OAAO;AAAA,IACd;AAAA;AAAA;;;AC9KA;AAAA,6CAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,SAAS;AACb,QAAIC,QAAO;AAYX,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,EAAE,gBAAgB,MAAM;AAC1B,eAAO,IAAI,IAAI,OAAO;AAAA,MACxB;AAEA,gBAAU,KAAK,UAAUA,MAAK,SAAS,SAAS;AAAA,QAC9C,SAAS;AAAA,QACT,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,OAAO;AAAA,MACT,CAAC;AAED,WAAK,WAAW;AAAA,QACd,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAEA,WAAK,SAAS,IAAI,OAAO,OAAO;AAAA,IAClC;AAgBA,QAAI,UAAU,SAAS,SAAS,QAAQ,MAAM,UAAU;AACtD,WAAK,OAAO,MAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1C;AAKA,QAAI,UAAU,WAAW,WAAW;AAClC,WAAK,OAAO,SAAS;AAAA,IACvB;AAKA,QAAI,UAAU,KAAK,WAAW;AAC5B,aAAO,KAAK,OAAO,GAAG,MAAM,KAAK,QAAQ,SAAS;AAAA,IACpD;AAKA,QAAI,UAAU,OAAO,WAAW;AAC9B,aAAO,KAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,IACtD;AAKA,QAAI,UAAU,SAAS,WAAW;AAChC,aAAO,KAAK,OAAO,OAAO,MAAM,KAAK,QAAQ,SAAS;AAAA,IACxD;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACtFjB;AAAA,6CAAAE,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU,QAAQ,QAAQ;AAAA;AAAA;;;ACAjC;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,IAAAA,QAAO,UAAU,MAAM,UAAU;AAAA,MAC/B,YAAa,KAAK;AAChB,YAAI,EAAE,MAAM,OAAQ,MAAM,IAAK,SAAS,EAAG,OAAM,IAAI,MAAM,mDAAmD;AAC9G,aAAK,SAAS,IAAI,MAAM,GAAG;AAC3B,aAAK,OAAO,MAAM;AAClB,aAAK,MAAM;AACX,aAAK,MAAM;AACX,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,QAAS;AACP,aAAK,MAAM,KAAK,MAAM;AACtB,aAAK,OAAO;AACZ,aAAK,OAAO,KAAK,MAAS;AAAA,MAC5B;AAAA,MAEA,KAAM,MAAM;AACV,YAAI,KAAK,OAAO,KAAK,GAAG,MAAM,OAAW,QAAO;AAChD,aAAK,OAAO,KAAK,GAAG,IAAI;AACxB,aAAK,MAAO,KAAK,MAAM,IAAK,KAAK;AACjC,eAAO;AAAA,MACT;AAAA,MAEA,QAAS;AACP,cAAM,OAAO,KAAK,OAAO,KAAK,GAAG;AACjC,YAAI,SAAS,OAAW,QAAO;AAC/B,aAAK,OAAO,KAAK,GAAG,IAAI;AACxB,aAAK,MAAO,KAAK,MAAM,IAAK,KAAK;AACjC,eAAO;AAAA,MACT;AAAA,MAEA,OAAQ;AACN,eAAO,KAAK,OAAO,KAAK,GAAG;AAAA,MAC7B;AAAA,MAEA,UAAW;AACT,eAAO,KAAK,OAAO,KAAK,GAAG,MAAM;AAAA,MACnC;AAAA,IACF;AAAA;AAAA;;;ACtCA;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,YAAY;AAElB,IAAAA,QAAO,UAAU,MAAM,SAAS;AAAA,MAC9B,YAAa,KAAK;AAChB,aAAK,MAAM,OAAO;AAClB,aAAK,OAAO,IAAI,UAAU,KAAK,GAAG;AAClC,aAAK,OAAO,KAAK;AACjB,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,QAAS;AACP,aAAK,OAAO,KAAK;AACjB,aAAK,KAAK,MAAM;AAChB,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,KAAM,KAAK;AACT,aAAK;AACL,YAAI,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG;AACxB,gBAAM,OAAO,KAAK;AAClB,eAAK,OAAO,KAAK,OAAO,IAAI,UAAU,IAAI,KAAK,KAAK,OAAO,MAAM;AACjE,eAAK,KAAK,KAAK,GAAG;AAAA,QACpB;AAAA,MACF;AAAA,MAEA,QAAS;AACP,YAAI,KAAK,WAAW,EAAG,MAAK;AAC5B,cAAM,MAAM,KAAK,KAAK,MAAM;AAC5B,YAAI,QAAQ,UAAa,KAAK,KAAK,MAAM;AACvC,gBAAM,OAAO,KAAK,KAAK;AACvB,eAAK,KAAK,OAAO;AACjB,eAAK,OAAO;AACZ,iBAAO,KAAK,KAAK,MAAM;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAQ;AACN,cAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,YAAI,QAAQ,UAAa,KAAK,KAAK,KAAM,QAAO,KAAK,KAAK,KAAK,KAAK;AACpE,eAAO;AAAA,MACT;AAAA,MAEA,UAAW;AACT,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,IACF;AAAA;AAAA;;;AC/CA;AAAA,8BAAAC,UAAAC,SAAA;AAAA;AAAA,aAAS,SAAS,OAAO;AACvB,aAAO,OAAO,SAAS,KAAK,KAAK,iBAAiB;AAAA,IACpD;AAEA,aAAS,WAAW,UAAU;AAC5B,aAAO,OAAO,WAAW,QAAQ;AAAA,IACnC;AAEA,aAAS,MAAM,MAAMC,OAAM,UAAU;AACnC,aAAO,OAAO,MAAM,MAAMA,OAAM,QAAQ;AAAA,IAC1C;AAEA,aAAS,YAAY,MAAM;AACzB,aAAO,OAAO,YAAY,IAAI;AAAA,IAChC;AAEA,aAAS,gBAAgB,MAAM;AAC7B,aAAO,OAAO,gBAAgB,IAAI;AAAA,IACpC;AAEA,aAAS,WAAW,QAAQ,UAAU;AACpC,aAAO,OAAO,WAAW,QAAQ,QAAQ;AAAA,IAC3C;AAEA,aAAS,QAAQC,IAAG,GAAG;AACrB,aAAO,OAAO,QAAQA,IAAG,CAAC;AAAA,IAC5B;AAEA,aAASC,QAAO,SAAS,aAAa;AACpC,aAAO,OAAO,OAAO,SAAS,WAAW;AAAA,IAC3C;AAEA,aAAS,KAAK,QAAQ,QAAQ,aAAa,OAAO,KAAK;AACrD,aAAO,SAAS,MAAM,EAAE,KAAK,QAAQ,aAAa,OAAO,GAAG;AAAA,IAC9D;AAEA,aAAS,OAAOD,IAAG,GAAG;AACpB,aAAO,SAASA,EAAC,EAAE,OAAO,CAAC;AAAA,IAC7B;AAEA,aAAS,KAAK,QAAQ,OAAO,QAAQ,KAAK,UAAU;AAClD,aAAO,SAAS,MAAM,EAAE,KAAK,OAAO,QAAQ,KAAK,QAAQ;AAAA,IAC3D;AAEA,aAAS,KAAK,OAAO,kBAAkB,QAAQ;AAC7C,aAAO,OAAO,KAAK,OAAO,kBAAkB,MAAM;AAAA,IACpD;AAEA,aAAS,SAAS,QAAQ,OAAO,YAAY,UAAU;AACrD,aAAO,SAAS,MAAM,EAAE,SAAS,OAAO,YAAY,QAAQ;AAAA,IAC9D;AAEA,aAAS,QAAQ,QAAQ,OAAO,YAAY,UAAU;AACpD,aAAO,SAAS,MAAM,EAAE,QAAQ,OAAO,YAAY,QAAQ;AAAA,IAC7D;AAEA,aAAS,YAAY,QAAQ,OAAO,YAAY,UAAU;AACxD,aAAO,SAAS,MAAM,EAAE,YAAY,OAAO,YAAY,QAAQ;AAAA,IACjE;AAEA,aAAS,OAAO,QAAQ;AACtB,aAAO,SAAS,MAAM,EAAE,OAAO;AAAA,IACjC;AAEA,aAAS,OAAO,QAAQ;AACtB,aAAO,SAAS,MAAM,EAAE,OAAO;AAAA,IACjC;AAEA,aAAS,OAAO,QAAQ;AACtB,aAAO,SAAS,MAAM,EAAE,OAAO;AAAA,IACjC;AAEA,aAAS,SAAS,QAAQ;AACxB,UAAI,OAAO,SAAS,MAAM,EAAG,QAAO;AACpC,aAAO,OAAO,KAAK,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;AAAA,IACxE;AAEA,aAASE,UAAS,QAAQ,UAAU,OAAO,KAAK;AAC9C,aAAO,SAAS,MAAM,EAAE,SAAS,UAAU,OAAO,GAAG;AAAA,IACvD;AAEA,aAAS,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;AACvD,aAAO,SAAS,MAAM,EAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,IAChE;AAEA,aAAS,aAAa,QAAQ,QAAQ;AACpC,aAAO,SAAS,MAAM,EAAE,aAAa,MAAM;AAAA,IAC7C;AAEA,aAAS,aAAa,QAAQ,QAAQ;AACpC,aAAO,SAAS,MAAM,EAAE,aAAa,MAAM;AAAA,IAC7C;AAEA,aAAS,YAAY,QAAQ,QAAQ;AACnC,aAAO,SAAS,MAAM,EAAE,YAAY,MAAM;AAAA,IAC5C;AAEA,aAAS,YAAY,QAAQ,QAAQ;AACnC,aAAO,SAAS,MAAM,EAAE,YAAY,MAAM;AAAA,IAC5C;AAEA,aAAS,YAAY,QAAQ,QAAQ;AACnC,aAAO,SAAS,MAAM,EAAE,YAAY,MAAM;AAAA,IAC5C;AAEA,aAAS,YAAY,QAAQ,QAAQ;AACnC,aAAO,SAAS,MAAM,EAAE,YAAY,MAAM;AAAA,IAC5C;AAEA,aAAS,aAAa,QAAQ,QAAQ;AACpC,aAAO,SAAS,MAAM,EAAE,aAAa,MAAM;AAAA,IAC7C;AAEA,aAAS,aAAa,QAAQ,QAAQ;AACpC,aAAO,SAAS,MAAM,EAAE,aAAa,MAAM;AAAA,IAC7C;AAEA,aAAS,cAAc,QAAQ,OAAO,QAAQ;AAC5C,aAAO,SAAS,MAAM,EAAE,cAAc,OAAO,MAAM;AAAA,IACrD;AAEA,aAAS,cAAc,QAAQ,OAAO,QAAQ;AAC5C,aAAO,SAAS,MAAM,EAAE,cAAc,OAAO,MAAM;AAAA,IACrD;AAEA,aAAS,aAAa,QAAQ,OAAO,QAAQ;AAC3C,aAAO,SAAS,MAAM,EAAE,aAAa,OAAO,MAAM;AAAA,IACpD;AAEA,aAAS,aAAa,QAAQ,OAAO,QAAQ;AAC3C,aAAO,SAAS,MAAM,EAAE,aAAa,OAAO,MAAM;AAAA,IACpD;AAEA,aAAS,aAAa,QAAQ,OAAO,QAAQ;AAC3C,aAAO,SAAS,MAAM,EAAE,aAAa,OAAO,MAAM;AAAA,IACpD;AAEA,aAAS,aAAa,QAAQ,OAAO,QAAQ;AAC3C,aAAO,SAAS,MAAM,EAAE,aAAa,OAAO,MAAM;AAAA,IACpD;AAEA,aAAS,cAAc,QAAQ,OAAO,QAAQ;AAC5C,aAAO,SAAS,MAAM,EAAE,cAAc,OAAO,MAAM;AAAA,IACrD;AAEA,aAAS,cAAc,QAAQ,OAAO,QAAQ;AAC5C,aAAO,SAAS,MAAM,EAAE,cAAc,OAAO,MAAM;AAAA,IACrD;AAEA,IAAAJ,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC3LA;AAAA,0DAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,MAAM;AAEZ,IAAAA,QAAO,UAAU,MAAM,mBAAmB;AAAA,MACxC,YAAY,UAAU;AACpB,aAAK,WAAW;AAAA,MAClB;AAAA,MAEA,IAAI,YAAY;AACd,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM;AACX,eAAO,IAAI,SAAS,MAAM,KAAK,QAAQ;AAAA,MACzC;AAAA,MAEA,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AClBA;AAAA,kDAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,MAAM;AAKZ,IAAAA,QAAO,UAAU,MAAM,YAAY;AAAA,MACjC,cAAc;AACZ,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,IAAI,YAAY;AACd,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,OAAO,MAAM;AACX,YAAI,KAAK,eAAe,EAAG,QAAO;AAElC,YAAI,KAAK,gBAAgB,KAAK,mBAAmB,MAAM,CAAC,MAAM,GAAG;AAC/D,eAAK,YAAY,kBAAkB,IAAI;AACvC,iBAAO,IAAI,SAAS,MAAM,MAAM;AAAA,QAClC;AAEA,YAAI,SAAS;AACb,YAAI,QAAQ;AAEZ,YAAI,KAAK,cAAc,GAAG;AACxB,iBAAO,QAAQ,KAAK,YAAY;AAC9B,kBAAM,OAAO,KAAK,KAAK;AAEvB,gBAAI,OAAO,KAAK,iBAAiB,OAAO,KAAK,eAAe;AAC1D,wBAAU;AACV,mBAAK,OAAO;AACZ;AAAA,YACF;AAEA,iBAAK,gBAAgB;AACrB,iBAAK,gBAAgB;AACrB,iBAAK,YAAa,KAAK,aAAa,IAAM,OAAO;AACjD,iBAAK;AACL;AAEA,gBAAI,KAAK,cAAc,KAAK,aAAa;AACvC,wBAAU,OAAO,cAAc,KAAK,SAAS;AAC7C,mBAAK,OAAO;AACZ;AAAA,YACF;AAAA,UACF;AAEA,cAAI,KAAK,cAAc,EAAG,QAAO;AAAA,QACnC;AAEA,cAAM,WAAW,mBAAmB,MAAM,KAAK;AAC/C,cAAM,MAAM,KAAK,aAAa;AAE9B,YAAI,MAAM,MAAO,WAAU,IAAI,SAAS,MAAM,QAAQ,OAAO,GAAG;AAEhE,iBAASC,KAAI,KAAKA,KAAI,KAAK,YAAYA,MAAK;AAC1C,gBAAM,OAAO,KAAKA,EAAC;AAEnB,cAAI,KAAK,gBAAgB,GAAG;AAC1B,gBAAI,QAAQ,KAAM;AAChB,mBAAK,YAAY;AACjB,wBAAU,OAAO,aAAa,IAAI;AAAA,YACpC,WAAW,QAAQ,OAAQ,QAAQ,KAAM;AACvC,mBAAK,cAAc;AACnB,mBAAK,YAAY;AACjB,mBAAK,YAAY,OAAO;AAAA,YAC1B,WAAW,QAAQ,OAAQ,QAAQ,KAAM;AACvC,kBAAI,SAAS,IAAM,MAAK,gBAAgB;AAAA,uBAC/B,SAAS,IAAM,MAAK,gBAAgB;AAC7C,mBAAK,cAAc;AACnB,mBAAK,YAAY;AACjB,mBAAK,YAAY,OAAO;AAAA,YAC1B,WAAW,QAAQ,OAAQ,QAAQ,KAAM;AACvC,kBAAI,SAAS,IAAM,MAAK,gBAAgB;AAAA,uBAC/B,SAAS,IAAM,MAAK,gBAAgB;AAC7C,mBAAK,cAAc;AACnB,mBAAK,YAAY;AACjB,mBAAK,YAAY,OAAO;AAAA,YAC1B,OAAO;AACL,mBAAK,YAAY;AACjB,wBAAU;AAAA,YACZ;AAEA;AAAA,UACF;AAEA,cAAI,OAAO,KAAK,iBAAiB,OAAO,KAAK,eAAe;AAC1D,sBAAU;AACV,YAAAA;AACA,iBAAK,OAAO;AAEZ;AAAA,UACF;AAEA,eAAK,gBAAgB;AACrB,eAAK,gBAAgB;AAErB,eAAK,YAAa,KAAK,aAAa,IAAM,OAAO;AACjD,eAAK;AAEL,cAAI,KAAK,cAAc,KAAK,aAAa;AACvC,sBAAU,OAAO,cAAc,KAAK,SAAS;AAC7C,iBAAK,OAAO;AAAA,UACd;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,cAAM,SAAS,KAAK,cAAc,IAAI,WAAW;AACjD,aAAK,OAAO;AACZ,eAAO;AAAA,MACT;AAAA,MAEA,SAAS;AACP,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,aAAK,YAAY;AACjB,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAEA,aAAS,mBAAmB,MAAM,OAAO;AACvC,YAAM,MAAM,KAAK;AACjB,UAAI,OAAO,MAAO,QAAO;AAEzB,YAAM,QAAQ,KAAK,IAAI,OAAO,MAAM,CAAC;AAErC,UAAIA,KAAI,MAAM;AACd,aAAOA,KAAI,UAAU,KAAKA,EAAC,IAAI,SAAU,IAAM,CAAAA;AAE/C,UAAIA,KAAI,MAAO,QAAO;AAEtB,YAAM,OAAO,KAAKA,EAAC;AAEnB,UAAI;AACJ,UAAI,QAAQ,IAAM,QAAO;AACzB,UAAI,QAAQ,OAAQ,QAAQ,IAAM,UAAS;AAAA,eAClC,QAAQ,OAAQ,QAAQ,IAAM,UAAS;AAAA,eACvC,QAAQ,OAAQ,QAAQ,IAAM,UAAS;AAAA,UAC3C,QAAO;AAEZ,YAAM,YAAY,MAAMA;AACxB,aAAO,YAAY,SAAS,YAAY;AAAA,IAC1C;AAEA,aAAS,kBAAkB,MAAM;AAC/B,YAAM,MAAM,KAAK;AACjB,UAAI,QAAQ,EAAG,QAAO;AAEtB,YAAM,OAAO,KAAK,MAAM,CAAC;AAEzB,UAAI,QAAQ,IAAM,QAAO;AACzB,WAAK,OAAO,SAAU,IAAM,QAAO;AAEnC,YAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,CAAC;AAEjC,UAAIA,KAAI,MAAM;AACd,aAAOA,MAAK,UAAU,KAAKA,EAAC,IAAI,SAAU,IAAM,CAAAA;AAEhD,UAAIA,KAAI,EAAG,QAAO;AAElB,YAAM,QAAQ,KAAKA,EAAC;AAEpB,UAAI;AACJ,UAAI,SAAS,OAAQ,SAAS,IAAM,UAAS;AAAA,eACpC,SAAS,OAAQ,SAAS,IAAM,UAAS;AAAA,eACzC,SAAS,OAAQ,SAAS,IAAM,UAAS;AAAA,UAC7C,QAAO;AAEZ,UAAI,MAAMA,OAAM,OAAQ,QAAO;AAE/B,UAAI,UAAU,GAAG;AACf,cAAM,SAAS,KAAKA,KAAI,CAAC;AACzB,YAAI,UAAU,OAAQ,SAAS,IAAM,QAAO;AAC5C,YAAI,UAAU,OAAQ,SAAS,IAAM,QAAO;AAC5C,YAAI,UAAU,OAAQ,SAAS,IAAM,QAAO;AAC5C,YAAI,UAAU,OAAQ,SAAS,IAAM,QAAO;AAAA,MAC9C;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACxLA;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,qBAAqB;AAC3B,QAAM,cAAc;AAEpB,IAAAA,QAAO,UAAU,MAAM,YAAY;AAAA,MACjC,YAAY,WAAW,QAAQ;AAC7B,aAAK,WAAW,kBAAkB,QAAQ;AAE1C,gBAAQ,KAAK,UAAU;AAAA,UACrB,KAAK;AACH,iBAAK,UAAU,IAAI,YAAY;AAC/B;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AACH,kBAAM,IAAI,MAAM,2BAA2B,KAAK,QAAQ;AAAA,UAC1D;AACE,iBAAK,UAAU,IAAI,mBAAmB,KAAK,QAAQ;AAAA,QACvD;AAAA,MACF;AAAA,MAEA,IAAI,YAAY;AACd,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,MAEA,KAAK,MAAM;AACT,YAAI,OAAO,SAAS,SAAU,QAAO;AACrC,eAAO,KAAK,QAAQ,OAAO,IAAI;AAAA,MACjC;AAAA;AAAA,MAGA,MAAM,MAAM;AACV,eAAO,KAAK,KAAK,IAAI;AAAA,MACvB;AAAA,MAEA,IAAI,MAAM;AACR,YAAI,SAAS;AACb,YAAI,KAAM,UAAS,KAAK,KAAK,IAAI;AACjC,kBAAU,KAAK,QAAQ,MAAM;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,kBAAkB,UAAU;AACnC,iBAAW,SAAS,YAAY;AAEhC,cAAQ,UAAU;AAAA,QAChB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,gBAAM,IAAI,MAAM,uBAAuB,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA;AAAA;;;AC/DA;AAAA,kCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,EAAE,cAAAC,cAAa,IAAI;AACzB,QAAM,mBAAmB,IAAI,MAAM,sBAAsB;AACzD,QAAM,kBAAkB,IAAI,MAAM,iBAAiB;AAEnD,QAAM,OAAO;AACb,QAAMC,eAAc;AAGpB,QAAM,MACJ,OAAO,mBAAmB,cAAc,CAAC,OAAO,OAAO,QAAQ,SAAS,EAAE,IAAI;AAGhF,QAAM,OAAO,KAAK,MAAM;AAGxB,QAAM,UAAU;AAChB,QAAM,gBAAgB;AACtB,QAAM,aAAa;AACnB,QAAM,YAAY;AAElB,QAAM,cAAc,MAAM;AAC1B,QAAM,oBAAoB,MAAM;AAGhC,QAAM,cAAc,KAAoB;AACxC,QAAM,gBAAgB,KAAoB;AAC1C,QAAM,eAAe,KAAoB;AACzC,QAAM,cAAc,KAAoB;AACxC,QAAM,eAAe,MAAoB;AACzC,QAAM,oBAAoB,MAAoB;AAC9C,QAAM,cAAc,MAAoB;AACxC,QAAM,iBAAiB,OAAoB;AAC3C,QAAM,qBAAqB,OAAoB;AAC/C,QAAM,wBAAwB,OAAoB;AAClD,QAAM,YAAY,QAAoB;AACtC,QAAM,iBAAiB,QAAoB;AAC3C,QAAM,kBAAkB,QAAoB;AAC5C,QAAM,kBAAkB,QAAoB;AAG5C,QAAM,eAAe,eAAe;AACpC,QAAM,6BAA6B,cAAc;AACjD,QAAM,0BAA0B,eAAe;AAC/C,QAAM,gCAAgC,qBAAqB;AAC3D,QAAM,0BAA0B,eAAe;AAE/C,QAAM,kBAAkB,MAAM;AAC9B,QAAM,mBAAmB,MAAM;AAC/B,QAAM,8BAA8B,OAAO,eAAe;AAC1D,QAAM,cAAc,MAAM;AAC1B,QAAM,cAAc,MAAM;AAC1B,QAAM,kBAAkB,OAAO,cAAc;AAC7C,QAAM,kBAAkB,MAAM;AAC9B,QAAM,wBAAwB,MAAM;AACpC,QAAM,qBAAqB,MAAM;AACjC,QAAM,oBAAoB,MAAM;AAChC,QAAM,qBAAqB,MAAM;AACjC,QAAM,4BAA4B,MAAM;AAGxC,QAAM,eAAe,KAAiB;AACtC,QAAM,iBAAiB,KAAiB;AACxC,QAAM,gBAAgB,KAAiB;AACvC,QAAM,eAAe,KAAiB;AACtC,QAAM,kBAAkB,MAAiB;AACzC,QAAM,aAAa,MAAiB;AACpC,QAAM,mBAAmB,MAAiB;AAC1C,QAAM,kBAAkB,OAAiB;AACzC,QAAM,gBAAgB,OAAiB;AACvC,QAAM,kBAAkB,OAAiB;AACzC,QAAM,eAAe,QAAiB;AAEtC,QAAM,mBAAmB,OAAO,eAAe;AAC/C,QAAM,oBAAoB,MAAM;AAChC,QAAM,sBAAsB,OAAO,eAAe;AAClD,QAAM,gBAAgB,MAAM;AAC5B,QAAM,mBAAmB,MAAM;AAC/B,QAAM,sBAAsB,MAAM;AAClC,QAAM,qBAAqB,MAAM;AACjC,QAAM,mBAAmB,MAAM;AAG/B,QAAM,SAAS,cAAc;AAC7B,QAAM,aAAa,MAAM;AACzB,QAAM,OAAO,YAAY;AACzB,QAAM,iBAAiB,aAAa,YAAY;AAChD,QAAM,cAAc,iBAAiB;AACrC,QAAM,eAAe,iBAAiB;AACtC,QAAM,cAAc,oBAAoB;AACxC,QAAM,oBAAoB,kBAAkB;AAC5C,QAAM,UAAU,oBAAoB;AACpC,QAAM,aAAa,cAAc;AAGjC,QAAM,sBAAsB,cAAc,cAAc;AACxD,QAAM,cAAc,cAAc,YAAY;AAC9C,QAAM,qBAAqB,cAAc,cAAc;AACvD,QAAM,uBAAuB,cAAc,qBAAqB,cAAc;AAC9E,QAAM,kBACJ,cAAc,cAAc,cAAc,YAAY,kBAAkB;AAC1E,QAAM,2BAA2B,iBAAiB,cAAc;AAChE,QAAM,0BAA0B,gBAAgB,cAAc,iBAAiB;AAC/E,QAAM,4BAA4B,iBAAiB;AAGnD,QAAM,uBAAuB,cAAc,kBAAkB;AAC7D,QAAM,6BAA6B,eAAe;AAClD,QAAM,0BAA0B,eAAe;AAC/C,QAAM,qBAAqB,eAAe,kBAAkB,cAAc;AAC1E,QAAM,eAAe,cAAc,eAAe,eAAe;AACjE,QAAM,2BAA2B,gBAAgB;AACjD,QAAM,2BAA2B,eAAe;AAChD,QAAM,yBAAyB,cAAc,kBAAkB,0BAA0B;AACzF,QAAM,4BAA4B,kBAAkB,iBAAiB,kBAAkB;AACvF,QAAM,2BAA2B,iBAAiB,cAAc,kBAAkB;AAClF,QAAM,kBAAkB,kBAAkB,aAAa;AAEvD,QAAM,gBAAgB,OAAO,iBAAiB,uBAAO,eAAe;AAEpE,QAAM,gBAAN,MAAoB;AAAA,MAClB,YACE,QACA,EAAE,gBAAgB,OAAO,KAAAC,OAAM,MAAM,aAAa,YAAY,mBAAmB,IAAI,CAAC,GACtF;AACA,aAAK,SAAS;AACd,aAAK,QAAQ,IAAI,KAAK;AACtB,aAAK,gBAAgB;AACrB,aAAK,WAAW;AAChB,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,aAAa,sBAAsB,cAAc;AACtD,aAAK,MAAM,eAAeA;AAC1B,aAAK,aAAa,WAAW,KAAK,IAAI;AACtC,aAAK,sBAAsB,cAAc,KAAK,IAAI;AAAA,MACpD;AAAA,MAEA,IAAI,SAAS;AACX,gBAAQ,KAAK,OAAO,eAAe,qBAAqB;AAAA,MAC1D;AAAA,MAEA,IAAI,QAAQ;AACV,gBAAQ,KAAK,OAAO,eAAe,gBAAgB;AAAA,MACrD;AAAA,MAEA,KAAK,MAAM;AACT,aAAK,KAAK,OAAO,eAAe,qBAAqB,EAAG,QAAO;AAC/D,YAAI,KAAK,QAAQ,KAAM,QAAO,KAAK,IAAI,IAAI;AAE3C,aAAK,YAAY,KAAK,WAAW,IAAI;AACrC,aAAK,MAAM,KAAK,IAAI;AAEpB,YAAI,KAAK,WAAW,KAAK,eAAe;AACtC,eAAK,OAAO,gBAAgB;AAC5B,iBAAO;AAAA,QACT;AAEA,aAAK,OAAO,gBAAgB;AAC5B,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,cAAM,OAAO,KAAK,MAAM,MAAM;AAE9B,aAAK,YAAY,KAAK,WAAW,IAAI;AACrC,YAAI,KAAK,aAAa,EAAG,MAAK,OAAO,gBAAgB;AAErD,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,MAAM;AACR,YAAI,OAAO,SAAS,WAAY,MAAK,OAAO,KAAK,UAAU,IAAI;AAAA,iBACtD,SAAS,UAAa,SAAS,KAAM,MAAK,KAAK,IAAI;AAC5D,aAAK,OAAO,gBAAgB,KAAK,OAAO,eAAe,mBAAmB;AAAA,MAC5E;AAAA,MAEA,UAAU,MAAM,IAAI;AAClB,cAAM,SAAS,CAAC;AAChB,cAAM,SAAS,KAAK;AAEpB,eAAO,KAAK,IAAI;AAChB,gBAAQ,OAAO,eAAe,kBAAkB,yBAAyB;AACvE,iBAAO,KAAK,OAAO,eAAe,MAAM,CAAC;AAAA,QAC3C;AAEA,aAAK,OAAO,eAAe,iBAAiB,EAAG,QAAO,GAAG,IAAI;AAC7D,eAAO,QAAQ,QAAQ,EAAE;AAAA,MAC3B;AAAA,MAEA,SAAS;AACP,cAAM,SAAS,KAAK;AAEpB,eAAO,gBAAgB;AAEvB,WAAG;AACD,kBAAQ,OAAO,eAAe,kBAAkB,cAAc;AAC5D,kBAAM,OAAO,KAAK,MAAM;AACxB,mBAAO,gBAAgB;AACvB,mBAAO,OAAO,MAAM,KAAK,UAAU;AAAA,UACrC;AAEA,eAAK,OAAO,eAAe,8BAA8B,EAAG,MAAK,iBAAiB;AAAA,QACpF,SAAS,KAAK,eAAe,MAAM;AAEnC,eAAO,gBAAgB;AAAA,MACzB;AAAA,MAEA,mBAAmB;AACjB,cAAM,SAAS,KAAK;AAEpB,aAAK,OAAO,eAAe,4BAA4B,iBAAiB;AACtE,iBAAO,eAAe,OAAO,eAAe;AAC5C,iBAAO,OAAO,WAAW,KAAK,IAAI,CAAC;AACnC;AAAA,QACF;AAEA,aAAK,OAAO,eAAe,oBAAoB,YAAY;AACzD,eAAK,OAAO,eAAe,uBAAuB,GAAG;AACnD,mBAAO,gBAAgB;AACvB,mBAAO,SAAS,aAAa,KAAK,IAAI,CAAC;AAAA,UACzC;AACA;AAAA,QACF;AAEA,aAAK,OAAO,eAAe,gBAAgB,SAAS;AAClD,iBAAO,gBAAgB,OAAO,eAAe,UAAU;AACvD,iBAAO,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,QACnC;AAAA,MACF;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,qBAAqB,EAAG,QAAO;AAC/D,aAAK,OAAO,gBAAgB;AAC5B,eAAO;AAAA,MACT;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,8BAA8B,cAAe,MAAK,OAAO;AAAA,YACpF,MAAK,eAAe;AAAA,MAC3B;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,qBAAqB,EAAG;AACxD,aAAK,OAAO,gBAAgB;AAC5B,aAAK,KAAK,OAAO,eAAe,oBAAoB,EAAG,KAAI,KAAK,mBAAmB;AAAA,MACrF;AAAA,IACF;AAEA,QAAM,gBAAN,MAAoB;AAAA,MAClB,YACE,QACA,EAAE,gBAAgB,OAAO,KAAAA,OAAM,MAAM,aAAa,YAAY,mBAAmB,IAAI,CAAC,GACtF;AACA,aAAK,SAAS;AACd,aAAK,QAAQ,IAAI,KAAK;AACtB,aAAK,gBAAgB,kBAAkB,IAAI,IAAI;AAC/C,aAAK,WAAW;AAChB,aAAK,YAAY,gBAAgB;AACjC,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,aAAa,sBAAsB,cAAc;AACtD,aAAK,MAAM,eAAeA;AAC1B,aAAK,SAAS;AACd,aAAK,YAAY,UAAU,KAAK,IAAI;AACpC,aAAK,sBAAsB,aAAa,KAAK,IAAI;AAAA,MACnD;AAAA,MAEA,IAAI,SAAS;AACX,gBAAQ,KAAK,OAAO,eAAe,iBAAiB;AAAA,MACtD;AAAA,MAEA,IAAI,QAAQ;AACV,gBAAQ,KAAK,OAAO,eAAe,eAAe;AAAA,MACpD;AAAA,MAEA,KAAK,QAAQ,IAAI;AACf,YAAI,KAAK,WAAW,KAAM,OAAM,IAAI,MAAM,kCAAkC;AAC5E,YAAI,OAAO,OAAO,WAAY,MAAK;AAEnC,aAAK,OAAO,gBAAgB;AAC5B,aAAK,SAAS;AACd,aAAK,WAAW,IAAI,SAAS,KAAK,QAAQ,QAAQ,EAAE;AAEpD,YAAI,GAAI,MAAK,OAAO,GAAG,SAASC,KAAI;AAEpC,YAAI,UAAU,MAAM,GAAG;AACrB,iBAAO,eAAe,WAAW,KAAK;AACtC,cAAI,GAAI,QAAO,GAAG,SAASA,KAAI;AAC/B,iBAAO,GAAG,UAAU,KAAK,SAAS,SAAS,KAAK,KAAK,QAAQ,CAAC;AAAA,QAChE,OAAO;AACL,gBAAM,UAAU,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,MAAM;AAC7D,gBAAM,UAAU,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,QAAQ,IAAI;AACnE,iBAAO,GAAG,SAAS,OAAO;AAC1B,iBAAO,GAAG,SAAS,OAAO;AAC1B,iBAAO,GAAG,UAAU,KAAK,SAAS,SAAS,KAAK,KAAK,QAAQ,CAAC;AAAA,QAChE;AAEA,eAAO,GAAG,SAAS,WAAW,KAAK,IAAI,CAAC;AACxC,aAAK,OAAO,KAAK,UAAU,MAAM;AACjC,eAAO,KAAK,QAAQ,KAAK,MAAM;AAAA,MACjC;AAAA,MAEA,KAAK,MAAM;AACT,cAAM,SAAS,KAAK;AAEpB,YAAI,SAAS,MAAM;AACjB,eAAK,gBAAgB;AACrB,iBAAO,gBAAgB,OAAO,eAAe,eAAe;AAC5D,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,QAAQ,MAAM;AACrB,iBAAO,KAAK,IAAI,IAAI;AACpB,cAAI,SAAS,MAAM;AACjB,mBAAO,gBAAgB;AACvB,mBAAO,KAAK,WAAW,KAAK;AAAA,UAC9B;AAAA,QACF;AAEA,aAAK,YAAY,KAAK,WAAW,IAAI;AACrC,aAAK,MAAM,KAAK,IAAI;AAEpB,eAAO,gBAAgB,OAAO,eAAe,eAAe;AAE5D,eAAO,KAAK,WAAW,KAAK;AAAA,MAC9B;AAAA,MAEA,QAAQ;AACN,cAAM,OAAO,KAAK,MAAM,MAAM;AAE9B,aAAK,YAAY,KAAK,WAAW,IAAI;AACrC,YAAI,KAAK,aAAa,EAAG,MAAK,OAAO,gBAAgB;AACrD,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,MAAM;AACZ,cAAM,UAAU,CAAC,KAAK,QAAQ,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI;AAC1D,eAAO,KAAK,WAAW,EAAG,SAAQ,KAAK,KAAK,MAAM,CAAC;AAEnD,iBAASC,KAAI,GAAGA,KAAI,QAAQ,SAAS,GAAGA,MAAK;AAC3C,gBAAMC,QAAO,QAAQD,EAAC;AACtB,eAAK,YAAY,KAAK,WAAWC,KAAI;AACrC,eAAK,MAAM,KAAKA,KAAI;AAAA,QACtB;AAEA,aAAK,KAAK,QAAQ,QAAQ,SAAS,CAAC,CAAC;AAAA,MACvC;AAAA,MAEA,OAAO;AACL,cAAM,SAAS,KAAK;AAEpB,aAAK,OAAO,eAAe,iBAAiB,aAAa;AACvD,gBAAM,OAAO,KAAK,MAAM;AACxB,cAAI,KAAK,WAAW,QAAQ,KAAK,OAAO,MAAM,IAAI,MAAM;AACtD,mBAAO,gBAAgB;AACzB,eAAK,OAAO,eAAe,oBAAoB,EAAG,QAAO,KAAK,QAAQ,IAAI;AAC1E,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,cAAc,OAAO;AAC5B,iBAAO,gBAAgB;AACvB,eAAK,eAAe;AAAA,QACtB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,cAAM,SAAS,KAAK;AAEpB,gBACG,OAAO,eAAe,iBAAiB,gBACvC,OAAO,eAAe,kBAAkB,GACzC;AACA,gBAAM,OAAO,KAAK,MAAM;AACxB,cAAI,KAAK,WAAW,QAAQ,KAAK,OAAO,MAAM,IAAI,MAAM;AACtD,mBAAO,gBAAgB;AACzB,eAAK,OAAO,eAAe,oBAAoB,EAAG,QAAO,KAAK,QAAQ,IAAI;AAAA,QAC5E;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,SAAS,KAAK;AAEpB,eAAO,gBAAgB;AAEvB,WAAG;AACD,eAAK,MAAM;AAEX,iBACE,KAAK,WAAW,KAAK,kBACpB,OAAO,eAAe,qBAAqB,iBAC5C;AACA,mBAAO,gBAAgB;AACvB,mBAAO,MAAM,KAAK,SAAS;AAC3B,iBAAK,MAAM;AAAA,UACb;AAEA,eAAK,OAAO,eAAe,0BAA0B,+BAA+B;AAClF,mBAAO,gBAAgB;AACvB,mBAAO,KAAK,UAAU;AAAA,UACxB;AAEA,eAAK,OAAO,eAAe,6BAA6B,EAAG,MAAK,iBAAiB;AAAA,QACnF,SAAS,KAAK,eAAe,MAAM;AAEnC,eAAO,gBAAgB;AAAA,MACzB;AAAA,MAEA,mBAAmB;AACjB,cAAM,SAAS,KAAK;AAEpB,aAAK,OAAO,eAAe,wBAAwB,aAAa;AAC9D,iBAAO,gBAAgB,OAAO,eAAe,aAAa;AAC1D,iBAAO,KAAK,KAAK;AACjB,eAAK,OAAO,eAAe,kBAAkB,KAAM,QAAO,gBAAgB;AAC1E,cAAI,KAAK,WAAW,KAAM,MAAK,OAAO,IAAI;AAAA,QAC5C;AAEA,aAAK,OAAO,eAAe,oBAAoB,YAAY;AACzD,eAAK,OAAO,eAAe,uBAAuB,GAAG;AACnD,mBAAO,gBAAgB;AACvB,mBAAO,SAAS,aAAa,KAAK,IAAI,CAAC;AAAA,UACzC;AACA;AAAA,QACF;AAEA,aAAK,OAAO,eAAe,gBAAgB,SAAS;AAClD,iBAAO,gBAAgB,OAAO,eAAe,UAAU;AACvD,iBAAO,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,QACnC;AAAA,MACF;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,oBAAoB,EAAG,QAAO;AAC9D,aAAK,OAAO,gBAAgB;AAC5B,eAAO;AAAA,MACT;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,6BAA6B,aAAc,MAAK,OAAO;AAAA,YAClF,MAAK,eAAe;AAAA,MAC3B;AAAA,MAEA,uBAAuB;AACrB,aAAK,KAAK,OAAO,eAAe,+BAA+B,EAAG;AAClE,aAAK,OAAO,gBAAgB;AAC5B,aAAK,KAAK,OAAO,eAAe,mBAAmB,EAAG,KAAI,KAAK,mBAAmB;AAAA,MACpF;AAAA,MAEA,iBAAiB;AACf,aAAK,KAAK,OAAO,eAAe,oBAAoB,EAAG;AACvD,aAAK,OAAO,gBAAgB;AAC5B,aAAK,KAAK,OAAO,eAAe,mBAAmB,EAAG,KAAI,KAAK,mBAAmB;AAAA,MACpF;AAAA,IACF;AAEA,QAAM,iBAAN,MAAqB;AAAA,MACnB,YAAY,QAAQ;AAClB,aAAK,OAAO;AACZ,aAAK,iBAAiB,eAAe,KAAK,MAAM;AAChD,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAEA,QAAM,WAAN,MAAe;AAAA,MACb,YAAY,KAAK,KAAK,IAAI;AACxB,aAAK,OAAO;AACZ,aAAK,KAAK;AACV,aAAK,YAAY;AACjB,aAAK,QAAQ;AACb,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,WAAW;AACT,aAAK,iBAAiB;AAAA,MACxB;AAAA,MAEA,KAAK,QAAQ,KAAK;AAChB,YAAI,IAAK,MAAK,QAAQ;AAEtB,YAAI,WAAW,KAAK,IAAI;AACtB,eAAK,KAAK;AAEV,cAAI,KAAK,SAAS,MAAM;AACtB,iBAAK,KAAK,KAAK,eAAe,eAAe,KAAK,CAAC,KAAK,gBAAgB;AACtE,mBAAK,KAAK,QAAQ,KAAK,SAAS,IAAI,MAAM,oCAAoC,CAAC;AAAA,YACjF;AACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW,KAAK,MAAM;AACxB,eAAK,OAAO;AAEZ,cAAI,KAAK,OAAO,MAAM;AACpB,iBAAK,OAAO,eAAe,eAAe,GAAG;AAC3C,mBAAK,GAAG,QAAQ,KAAK,SAAS,IAAI,MAAM,sCAAsC,CAAC;AAAA,YACjF;AACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,cAAc,KAAM,MAAK,UAAU,KAAK,KAAK;AACtD,aAAK,KAAK,KAAK,OAAO,KAAK,YAAY;AAAA,MACzC;AAAA,IACF;AAEA,aAAS,aAAa;AACpB,WAAK,OAAO,gBAAgB;AAC5B,WAAK,eAAe;AAAA,IACtB;AAEA,aAAS,WAAW,KAAK;AACvB,YAAM,SAAS,KAAK;AACpB,UAAI,IAAK,QAAO,QAAQ,GAAG;AAC3B,WAAK,OAAO,eAAe,oBAAoB,GAAG;AAChD,eAAO,gBAAgB;AACvB,eAAO,KAAK,QAAQ;AAAA,MACtB;AACA,WAAK,OAAO,eAAe,kBAAkB,MAAM;AACjD,eAAO,gBAAgB;AAAA,MACzB;AAEA,aAAO,gBAAgB;AAGvB,WAAK,OAAO,eAAe,oBAAoB,EAAG,MAAK,OAAO;AAAA,UACzD,MAAK,eAAe;AAAA,IAC3B;AAEA,aAAS,aAAa,KAAK;AACzB,YAAM,SAAS,KAAK;AAEpB,UAAI,CAAC,OAAO,KAAK,UAAU,iBAAkB,OAAM,KAAK;AACxD,UAAI,IAAK,QAAO,KAAK,SAAS,GAAG;AACjC,aAAO,gBAAgB;AACvB,aAAO,KAAK,OAAO;AAEnB,YAAM,KAAK,OAAO;AAClB,YAAM,KAAK,OAAO;AAElB,UAAI,OAAO,QAAQ,GAAG,aAAa,KAAM,IAAG,SAAS,KAAK,QAAQ,GAAG;AAErE,UAAI,OAAO,MAAM;AACf,eAAO,GAAG,WAAW,QAAQ,GAAG,OAAO,SAAS,EAAG,IAAG,OAAO,MAAM,EAAE,QAAQ,KAAK;AAClF,YAAI,GAAG,aAAa,KAAM,IAAG,SAAS,KAAK,QAAQ,GAAG;AAAA,MACxD;AAAA,IACF;AAEA,aAAS,WAAW,KAAK;AACvB,YAAM,SAAS,KAAK;AAEpB,UAAI,IAAK,QAAO,QAAQ,GAAG;AAC3B,aAAO,gBAAgB;AAEvB,UAAI,KAAK,WAAW,KAAM,YAAW,KAAK,MAAM;AAEhD,WAAK,OAAO,eAAe,wBAAwB,iBAAiB;AAClE,eAAO,gBAAgB;AACvB,aAAK,OAAO,eAAe,sBAAsB,kBAAkB;AACjE,iBAAO,KAAK,OAAO;AAAA,QACrB;AAAA,MACF;AAEA,WAAK,eAAe;AAAA,IACtB;AAEA,aAAS,UAAU,KAAK;AACtB,UAAI,IAAK,MAAK,OAAO,QAAQ,GAAG;AAChC,WAAK,OAAO,gBAAgB;AAC5B,UAAI,KAAK,cAAc,UAAU,KAAK,OAAO,eAAe,kBAAkB;AAC5E,aAAK,OAAO,gBAAgB;AAC9B,WAAK,eAAe;AAAA,IACtB;AAEA,aAAS,eAAe;AACtB,WAAK,KAAK,OAAO,eAAe,mBAAmB,GAAG;AACpD,aAAK,OAAO,gBAAgB;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAEA,aAAS,gBAAgB;AACvB,WAAK,KAAK,OAAO,eAAe,oBAAoB,GAAG;AACrD,aAAK,OAAO,gBAAgB;AAC5B,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAEA,aAAS,WAAW,QAAQ;AAC1B,eAASD,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AAEtC,YAAI,EAAE,OAAOA,EAAC,EAAE,WAAW,GAAG;AAC5B,iBAAO,MAAM,EAAE,QAAQ,IAAI;AAC3B,UAAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,UAAU,KAAK;AACtB,YAAM,SAAS,KAAK;AAEpB,UAAI,IAAK,QAAO,QAAQ,GAAG;AAE3B,WAAK,OAAO,eAAe,gBAAgB,GAAG;AAC5C,aAAK,OAAO,eAAe,yBAAyB,EAAG,QAAO,gBAAgB;AAC9E,aAAK,OAAO,eAAe,0BAA0B,EAAG,QAAO,gBAAgB;AAC/E,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,aAAO,gBAAgB;AAEvB,UAAI,OAAO,mBAAmB,MAAM;AAClC,eAAO,eAAe,eAAe;AAAA,MACvC;AAEA,UAAI,OAAO,mBAAmB,MAAM;AAClC,eAAO,eAAe,eAAe;AAAA,MACvC;AAAA,IACF;AAEA,aAAS,eAAe,KAAK,MAAM;AACjC,UAAI,SAAS,UAAa,SAAS,KAAM,MAAK,KAAK,IAAI;AACvD,WAAK,eAAe,WAAW,GAAG;AAAA,IACpC;AAEA,aAAS,YAAY,MAAM;AACzB,UAAI,KAAK,mBAAmB,MAAM;AAChC,YAAI,SAAS,QAAQ;AACnB,eAAK,gBAAgB,iBAAiB;AACtC,eAAK,eAAe,eAAe;AAAA,QACrC;AACA,YAAI,SAAS,YAAY;AACvB,eAAK,gBAAgB;AACrB,eAAK,eAAe,eAAe;AAAA,QACrC;AAAA,MACF;AAEA,UAAI,KAAK,mBAAmB,MAAM;AAChC,YAAI,SAAS,SAAS;AACpB,eAAK,gBAAgB;AACrB,eAAK,eAAe,eAAe;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAM,SAAN,cAAqBJ,cAAa;AAAA,MAChC,YAAY,MAAM;AAChB,cAAM;AAEN,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,aAAK,iBAAiB;AAEtB,YAAI,MAAM;AACR,cAAI,KAAK,KAAM,MAAK,QAAQ,KAAK;AACjC,cAAI,KAAK,QAAS,MAAK,WAAW,KAAK;AACvC,cAAI,KAAK,WAAY,MAAK,cAAc,KAAK;AAC7C,cAAI,KAAK,QAAQ;AACf,iBAAK,OAAO,iBAAiB,SAAS,MAAM,KAAK,IAAI,CAAC;AAAA,UACxD;AAAA,QACF;AAEA,aAAK,GAAG,eAAe,WAAW;AAAA,MACpC;AAAA,MAEA,MAAM,IAAI;AACR,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,SAAS,IAAI;AACX,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,cAAc;AAAA,MAEd;AAAA,MAEA,IAAI,WAAW;AACb,eAAO,KAAK,mBAAmB,OAAO,OAAO;AAAA,MAC/C;AAAA,MAEA,IAAI,WAAW;AACb,eAAO,KAAK,mBAAmB,OAAO,OAAO;AAAA,MAC/C;AAAA,MAEA,IAAI,YAAY;AACd,gBAAQ,KAAK,eAAe,eAAe;AAAA,MAC7C;AAAA,MAEA,IAAI,aAAa;AACf,gBAAQ,KAAK,eAAe,oBAAoB;AAAA,MAClD;AAAA,MAEA,QAAQ,KAAK;AACX,aAAK,KAAK,eAAe,oBAAoB,GAAG;AAC9C,cAAI,CAAC,IAAK,OAAM;AAChB,eAAK,gBAAgB,KAAK,eAAe,cAAc;AAEvD,cAAI,KAAK,mBAAmB,MAAM;AAChC,iBAAK,eAAe,gBAAgB;AACpC,iBAAK,eAAe,QAAQ;AAAA,UAC9B;AACA,cAAI,KAAK,mBAAmB,MAAM;AAChC,iBAAK,eAAe,gBAAgB;AACpC,iBAAK,eAAe,QAAQ;AAAA,UAC9B;AAEA,eAAK,gBAAgB;AACrB,eAAK,YAAY;AACjB,eAAK,gBAAgB;AAErB,cAAI,KAAK,mBAAmB,KAAM,MAAK,eAAe,eAAe;AACrE,cAAI,KAAK,mBAAmB,KAAM,MAAK,eAAe,eAAe;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAEA,QAAMM,YAAN,MAAM,kBAAiB,OAAO;AAAA,MAC5B,YAAY,MAAM;AAChB,cAAM,IAAI;AAEV,aAAK,gBAAgB,UAAU,aAAa;AAC5C,aAAK,iBAAiB,IAAI,cAAc,MAAM,IAAI;AAElD,YAAI,MAAM;AACR,cAAI,KAAK,eAAe,cAAc,MAAO,MAAK,gBAAgB;AAClE,cAAI,KAAK,KAAM,MAAK,QAAQ,KAAK;AACjC,cAAI,KAAK,UAAW,MAAK,eAAe,eAAe;AACvD,cAAI,KAAK,SAAU,MAAK,YAAY,KAAK,QAAQ;AAAA,QACnD;AAAA,MACF;AAAA,MAEA,YAAY,UAAU;AACpB,cAAM,MAAM,IAAIL,aAAY,QAAQ;AACpC,cAAMC,OAAM,KAAK,eAAe,OAAO;AACvC,aAAK,eAAe,MAAM;AAC1B,eAAO;AAEP,iBAAS,UAAU,MAAM;AACvB,gBAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,iBAAO,SAAS,OAAO,KAAK,eAAe,KAAK,IAAI,YAAY,KAAK,OAAOA,KAAI,IAAI;AAAA,QACtF;AAAA,MACF;AAAA,MAEA,MAAM,IAAI;AACR,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,KAAK,MAAM,IAAI;AACb,aAAK,eAAe,eAAe;AACnC,aAAK,eAAe,KAAK,MAAM,EAAE;AACjC,eAAO;AAAA,MACT;AAAA,MAEA,OAAO;AACL,aAAK,eAAe,eAAe;AACnC,eAAO,KAAK,eAAe,KAAK;AAAA,MAClC;AAAA,MAEA,KAAK,MAAM;AACT,aAAK,eAAe,qBAAqB;AACzC,eAAO,KAAK,eAAe,KAAK,IAAI;AAAA,MACtC;AAAA,MAEA,QAAQ,MAAM;AACZ,aAAK,eAAe,qBAAqB;AACzC,eAAO,KAAK,eAAe,QAAQ,IAAI;AAAA,MACzC;AAAA,MAEA,SAAS;AACP,aAAK,gBAAgB;AACrB,aAAK,eAAe,eAAe;AACnC,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,aAAK,gBACH,KAAK,eAAe,cAAc,QAAQ,4BAA4B;AACxE,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,mBAAmB,KAAK,MAAM;AACnC,YAAI;AAEJ,cAAM,KAAK,IAAI,UAAS;AAAA,UACtB,GAAG;AAAA,UACH,KAAK,IAAI;AACP,gBAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE;AAAA,UAC1D;AAAA,UACA,aAAa;AACX,sBAAU,IAAI,OAAO;AAAA,UACvB;AAAA,UACA,QAAQ,IAAI;AACV,gBAAI,CAAC,QAAS,QAAO,GAAG,IAAI;AAC5B,oBAAQ,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE;AAAA,UAC5C;AAAA,QACF,CAAC;AAED,eAAO;AAEP,iBAAS,KAAK,MAAM;AAClB,cAAI,KAAK,KAAM,IAAG,KAAK,IAAI;AAAA,cACtB,IAAG,KAAK,KAAK,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,OAAO,KAAK,MAAM,MAAM;AACtB,YAAI,cAAc,IAAI,EAAG,QAAO;AAChC,YAAI,KAAK,aAAa,EAAG,QAAO,KAAK,mBAAmB,KAAK,aAAa,EAAE,GAAG,IAAI;AACnF,YAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,SAAS,SAAY,CAAC,IAAI,CAAC,IAAI;AAEhE,YAAIE,KAAI;AACR,eAAO,IAAI,UAAS;AAAA,UAClB,GAAG;AAAA,UACH,KAAK,IAAI;AACP,iBAAK,KAAKA,OAAM,KAAK,SAAS,OAAO,KAAKA,IAAG,CAAC;AAC9C,eAAG,IAAI;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,gBAAgB,IAAI;AACzB,gBACG,GAAG,eAAe,8BAA8B,KACjD,GAAG,eAAe,YAAY,GAAG,eAAe;AAAA,MAEpD;AAAA,MAEA,OAAO,SAAS,IAAI;AAClB,gBAAQ,GAAG,eAAe,kBAAkB;AAAA,MAC9C;AAAA,MAEA,CAAC,aAAa,IAAI;AAChB,cAAM,SAAS;AAEf,YAAI,QAAQ;AACZ,YAAI,iBAAiB;AACrB,YAAI,gBAAgB;AAEpB,aAAK,GAAG,SAAS,CAAC,QAAQ;AACxB,kBAAQ;AAAA,QACV,CAAC;AACD,aAAK,GAAG,YAAY,UAAU;AAC9B,aAAK,GAAG,SAAS,OAAO;AAExB,eAAO;AAAA,UACL,CAAC,aAAa,IAAI;AAChB,mBAAO;AAAA,UACT;AAAA,UACA,OAAO;AACL,mBAAO,IAAI,QAAQ,SAAU,SAASG,SAAQ;AAC5C,+BAAiB;AACjB,8BAAgBA;AAChB,oBAAM,OAAO,OAAO,KAAK;AACzB,kBAAI,SAAS,KAAM,QAAO,IAAI;AAAA,wBACpB,OAAO,eAAe,eAAe,EAAG,QAAO,IAAI;AAAA,YAC/D,CAAC;AAAA,UACH;AAAA,UACA,SAAS;AACP,mBAAO,QAAQ,IAAI;AAAA,UACrB;AAAA,UACA,MAAM,KAAK;AACT,mBAAO,QAAQ,GAAG;AAAA,UACpB;AAAA,QACF;AAEA,iBAAS,aAAa;AACpB,cAAI,mBAAmB,KAAM,QAAO,OAAO,KAAK,CAAC;AAAA,QACnD;AAEA,iBAAS,UAAU;AACjB,cAAI,mBAAmB,KAAM,QAAO,IAAI;AAAA,QAC1C;AAEA,iBAAS,OAAO,MAAM;AACpB,cAAI,kBAAkB,KAAM;AAC5B,cAAI,MAAO,eAAc,KAAK;AAAA,mBACrB,SAAS,SAAS,OAAO,eAAe,eAAe;AAC9D,0BAAc,gBAAgB;AAAA,cAC3B,gBAAe,EAAE,OAAO,MAAM,MAAM,SAAS,KAAK,CAAC;AACxD,0BAAgB,iBAAiB;AAAA,QACnC;AAEA,iBAAS,QAAQ,KAAK;AACpB,iBAAO,QAAQ,GAAG;AAClB,iBAAO,IAAI,QAAQ,CAAC,SAASA,YAAW;AACtC,gBAAI,OAAO,eAAe,UAAW,QAAO,QAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AACpF,mBAAO,KAAK,SAAS,WAAY;AAC/B,kBAAI,IAAK,CAAAA,QAAO,GAAG;AAAA,kBACd,SAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AAAA,YAC/C,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,QAAMC,YAAN,cAAuB,OAAO;AAAA,MAC5B,YAAY,MAAM;AAChB,cAAM,IAAI;AAEV,aAAK,gBAAgB,UAAU;AAC/B,aAAK,iBAAiB,IAAI,cAAc,MAAM,IAAI;AAElD,YAAI,MAAM;AACR,cAAI,KAAK,OAAQ,MAAK,UAAU,KAAK;AACrC,cAAI,KAAK,MAAO,MAAK,SAAS,KAAK;AACnC,cAAI,KAAK,MAAO,MAAK,SAAS,KAAK;AACnC,cAAI,KAAK,UAAW,MAAK,eAAe,eAAe;AAAA,QACzD;AAAA,MACF;AAAA,MAEA,OAAO;AACL,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEA,SAAS;AACP,aAAK,gBAAgB;AACrB,aAAK,eAAe,eAAe;AAAA,MACrC;AAAA,MAEA,QAAQ,OAAO,IAAI;AACjB,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,OAAO,MAAM,IAAI;AACf,aAAK,eAAe,UAAU,MAAM,EAAE;AAAA,MACxC;AAAA,MAEA,OAAO,IAAI;AACT,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,OAAO,gBAAgB,IAAI;AACzB,gBAAQ,GAAG,eAAe,+BAA+B;AAAA,MAC3D;AAAA,MAEA,OAAO,QAAQ,IAAI;AACjB,YAAI,GAAG,UAAW,QAAO,QAAQ,QAAQ,KAAK;AAC9C,cAAMC,SAAQ,GAAG;AACjB,cAAM,UAAU,SAAS,EAAE,IAAI,KAAK,IAAI,GAAGA,OAAM,MAAM,MAAM,IAAIA,OAAM,MAAM;AAC7E,cAAM,SAAS,WAAW,GAAG,eAAe,gBAAgB,IAAI;AAChE,YAAI,WAAW,EAAG,QAAO,QAAQ,QAAQ,IAAI;AAC7C,YAAIA,OAAM,WAAW,KAAM,CAAAA,OAAM,SAAS,CAAC;AAC3C,eAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAAA,OAAM,OAAO,KAAK,EAAE,QAAQ,QAAQ,CAAC;AAAA,QACvC,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,MAAM;AACV,aAAK,eAAe,eAAe;AACnC,eAAO,KAAK,eAAe,KAAK,IAAI;AAAA,MACtC;AAAA,MAEA,IAAI,MAAM;AACR,aAAK,eAAe,eAAe;AACnC,aAAK,eAAe,IAAI,IAAI;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAMC,UAAN,cAAqBJ,UAAS;AAAA;AAAA,MAE5B,YAAY,MAAM;AAChB,cAAM,IAAI;AAEV,aAAK,eAAe,UAAW,KAAK,eAAe;AACnD,aAAK,iBAAiB,IAAI,cAAc,MAAM,IAAI;AAElD,YAAI,MAAM;AACR,cAAI,KAAK,OAAQ,MAAK,UAAU,KAAK;AACrC,cAAI,KAAK,MAAO,MAAK,SAAS,KAAK;AACnC,cAAI,KAAK,MAAO,MAAK,SAAS,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,MAEA,OAAO;AACL,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEA,SAAS;AACP,aAAK,gBAAgB;AACrB,aAAK,eAAe,eAAe;AAAA,MACrC;AAAA,MAEA,QAAQ,OAAO,IAAI;AACjB,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,OAAO,MAAM,IAAI;AACf,aAAK,eAAe,UAAU,MAAM,EAAE;AAAA,MACxC;AAAA,MAEA,OAAO,IAAI;AACT,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,MAAM,MAAM;AACV,aAAK,eAAe,eAAe;AACnC,eAAO,KAAK,eAAe,KAAK,IAAI;AAAA,MACtC;AAAA,MAEA,IAAI,MAAM;AACR,aAAK,eAAe,eAAe;AACnC,aAAK,eAAe,IAAI,IAAI;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAMK,aAAN,cAAwBD,QAAO;AAAA,MAC7B,YAAY,MAAM;AAChB,cAAM,IAAI;AACV,aAAK,kBAAkB,IAAI,eAAe,IAAI;AAE9C,YAAI,MAAM;AACR,cAAI,KAAK,UAAW,MAAK,aAAa,KAAK;AAC3C,cAAI,KAAK,MAAO,MAAK,SAAS,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,MAEA,OAAO,MAAM,IAAI;AACf,YAAI,KAAK,eAAe,YAAY,KAAK,eAAe,eAAe;AACrE,eAAK,gBAAgB,OAAO;AAAA,QAC9B,OAAO;AACL,eAAK,WAAW,MAAM,KAAK,gBAAgB,cAAc;AAAA,QAC3D;AAAA,MACF;AAAA,MAEA,MAAM,IAAI;AACR,YAAI,KAAK,gBAAgB,SAAS,MAAM;AACtC,gBAAM,OAAO,KAAK,gBAAgB;AAClC,eAAK,gBAAgB,OAAO;AAC5B,aAAG,IAAI;AACP,eAAK,WAAW,MAAM,KAAK,gBAAgB,cAAc;AAAA,QAC3D,OAAO;AACL,aAAG,IAAI;AAAA,QACT;AAAA,MACF;AAAA,MAEA,QAAQ,KAAK;AACX,cAAM,QAAQ,GAAG;AACjB,YAAI,KAAK,gBAAgB,SAAS,MAAM;AACtC,eAAK,gBAAgB,OAAO;AAC5B,eAAK,gBAAgB,eAAe;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,WAAW,MAAM,IAAI;AACnB,WAAG,MAAM,IAAI;AAAA,MACf;AAAA,MAEA,OAAO,IAAI;AACT,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,OAAO,IAAI;AACT,aAAK,gBAAgB,aAAa;AAClC,aAAK,OAAO,oBAAoB,KAAK,IAAI,CAAC;AAAA,MAC5C;AAAA,IACF;AAEA,QAAME,eAAN,cAA0BD,WAAU;AAAA,IAAC;AAErC,aAAS,oBAAoB,KAAK,MAAM;AACtC,YAAM,KAAK,KAAK,gBAAgB;AAChC,UAAI,IAAK,QAAO,GAAG,GAAG;AACtB,UAAI,SAAS,QAAQ,SAAS,OAAW,MAAK,KAAK,IAAI;AACvD,WAAK,KAAK,IAAI;AACd,SAAG,IAAI;AAAA,IACT;AAEA,aAAS,mBAAmB,SAAS;AACnC,aAAO,IAAI,QAAQ,CAAC,SAASJ,YAAW;AACtC,eAAOM,UAAS,GAAG,SAAS,CAAC,QAAQ;AACnC,cAAI,IAAK,QAAON,QAAO,GAAG;AAC1B,kBAAQ;AAAA,QACV,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,aAASM,UAAS,WAAW,SAAS;AACpC,YAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,GAAG,OAAO;AACjF,YAAM,OAAO,IAAI,UAAU,OAAO,IAAI,IAAI,SAAS,CAAC,MAAM,aAAa,IAAI,IAAI,IAAI;AAEnF,UAAI,IAAI,SAAS,EAAG,OAAM,IAAI,MAAM,sCAAsC;AAE1E,UAAI,MAAM,IAAI,CAAC;AACf,UAAI,OAAO;AACX,UAAI,QAAQ;AAEZ,eAAST,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,eAAO,IAAIA,EAAC;AAEZ,YAAI,UAAU,GAAG,GAAG;AAClB,cAAI,KAAK,MAAM,OAAO;AAAA,QACxB,OAAO;AACL,sBAAY,KAAK,MAAMA,KAAI,GAAG,OAAO;AACrC,cAAI,KAAK,IAAI;AAAA,QACf;AAEA,cAAM;AAAA,MACR;AAEA,UAAI,MAAM;AACR,YAAI,MAAM;AAEV,cAAM,cACJ,UAAU,IAAI,KAAK,CAAC,EAAE,KAAK,kBAAkB,KAAK,eAAe;AAEnE,aAAK,GAAG,SAAS,CAAC,QAAQ;AACxB,cAAI,UAAU,KAAM,SAAQ;AAAA,QAC9B,CAAC;AAED,aAAK,GAAG,UAAU,MAAM;AACtB,gBAAM;AACN,cAAI,CAAC,YAAa,MAAK,KAAK;AAAA,QAC9B,CAAC;AAED,YAAI,aAAa;AACf,eAAK,GAAG,SAAS,MAAM,KAAK,UAAU,MAAM,OAAO,gBAAgB,CAAC;AAAA,QACtE;AAAA,MACF;AAEA,aAAO;AAEP,eAAS,YAAY,GAAG,IAAI,IAAIU,UAAS;AACvC,UAAE,GAAG,SAASA,QAAO;AACrB,UAAE,GAAG,SAAS,OAAO;AAErB,iBAAS,UAAU;AACjB,cAAI,MAAM,EAAE,kBAAkB,CAAC,EAAE,eAAe,MAAO,QAAOA,SAAQ,eAAe;AACrF,cAAI,MAAM,EAAE,kBAAkB,CAAC,EAAE,eAAe,MAAO,QAAOA,SAAQ,eAAe;AAAA,QACvF;AAAA,MACF;AAEA,eAAS,QAAQ,KAAK;AACpB,YAAI,CAAC,OAAO,MAAO;AACnB,gBAAQ;AAER,mBAAW,KAAK,KAAK;AACnB,YAAE,QAAQ,GAAG;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,aAAS,KAAK,GAAG;AACf,aAAO;AAAA,IACT;AAEA,aAASC,UAAS,QAAQ;AACxB,aAAO,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,OAAO;AAAA,IAC7C;AAEA,aAAS,UAAU,QAAQ;AACzB,aAAO,OAAO,OAAO,iBAAiB,YAAYA,UAAS,MAAM;AAAA,IACnE;AAEA,aAAS,SAAS,QAAQ;AACxB,aAAO,CAAC,CAAC,OAAO,kBAAkB,OAAO,eAAe;AAAA,IAC1D;AAEA,aAAS,QAAQ,QAAQ;AACvB,aAAO,CAAC,CAAC,OAAO,kBAAkB,OAAO,eAAe;AAAA,IAC1D;AAEA,aAAS,YAAY,QAAQ;AAC3B,aAAO,CAAC,CAAC,OAAO,kBAAkB,OAAO,eAAe;AAAA,IAC1D;AAEA,aAAS,WAAW,QAAQ;AAC1B,aAAO,CAAC,CAAC,OAAO,kBAAkB,OAAO,eAAe;AAAA,IAC1D;AAEA,aAAS,eAAe,QAAQ,OAAO,CAAC,GAAG;AACzC,YAAM,MACH,OAAO,kBAAkB,OAAO,eAAe,SAC/C,OAAO,kBAAkB,OAAO,eAAe;AAGlD,aAAO,CAAC,KAAK,OAAO,QAAQ,mBAAmB,OAAO;AAAA,IACxD;AAEA,aAAS,cAAc,QAAQ;AAC7B,aAAO,UAAU,MAAM,KAAK,OAAO;AAAA,IACrC;AAEA,aAAS,YAAY,QAAQ;AAC3B,cACG,OAAO,eAAe,aAAa,YACnC,OAAO,eAAe,gBAAgB,eACtC,OAAO,eAAe,uBAAuB;AAAA,IAElD;AAEA,aAAS,aAAa,MAAM;AAC1B,aAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,OAAO,KAAK,eAAe;AAAA,IACjF;AAEA,aAAS,kBAAkB,MAAM;AAC/B,aAAO,aAAa,IAAI,IAAI,KAAK,aAAa;AAAA,IAChD;AAEA,aAASZ,QAAO;AAAA,IAAC;AAEjB,aAAS,QAAQ;AACf,WAAK,QAAQ,IAAI,MAAM,iBAAiB,CAAC;AAAA,IAC3C;AAEA,aAAS,SAAS,GAAG;AACnB,aAAO,EAAE,YAAYK,UAAS,UAAU,WAAW,EAAE,YAAYE,QAAO,UAAU;AAAA,IACpF;AAEA,IAAAX,QAAO,UAAU;AAAA,MACf,UAAAc;AAAA,MACA;AAAA,MACA,UAAAE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAAP;AAAA,MACA,UAAAF;AAAA,MACA,QAAAI;AAAA,MACA,WAAAC;AAAA;AAAA,MAEA,aAAAC;AAAA,IACF;AAAA;AAAA;;;AC/sCA;AAAA,uCAAAI,UAAA;AAAA;AAAA,QAAM,MAAM;AAEZ,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,cAAc,IAAI,WAAW,CAAC;AACpC,QAAM,cAAc,IAAI,KAAK,CAAC,KAAM,KAAM,KAAM,IAAM,KAAM,CAAI,CAAC;AACjE,QAAM,YAAY,IAAI,KAAK,CAAC,aAAa,WAAW,CAAC;AACrD,QAAM,YAAY,IAAI,KAAK,CAAC,KAAM,KAAM,KAAM,IAAM,KAAM,EAAI,CAAC;AAC/D,QAAM,UAAU,IAAI,KAAK,CAAC,IAAM,CAAI,CAAC;AACrC,QAAM,OAAO;AACb,QAAM,eAAe;AACrB,QAAM,iBAAiB;AAEvB,IAAAA,SAAQ,iBAAiB,SAAS,eAAgB,KAAK,UAAU;AAC/D,aAAO,UAAU,KAAK,GAAG,IAAI,QAAQ,QAAQ;AAAA,IAC/C;AAEA,IAAAA,SAAQ,YAAY,SAAS,UAAW,MAAM;AAC5C,UAAI,SAAS;AACb,UAAI,KAAK,KAAM,WAAU,UAAU,WAAW,KAAK,OAAO,IAAI;AAC9D,UAAI,KAAK,SAAU,WAAU,UAAU,eAAe,KAAK,WAAW,IAAI;AAC1E,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK;AACP,mBAAW,OAAO,KAAK;AACrB,oBAAU,UAAU,MAAM,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI;AAAA,QACvD;AAAA,MACF;AACA,aAAO,IAAI,KAAK,MAAM;AAAA,IACxB;AAEA,IAAAA,SAAQ,YAAY,SAAS,UAAW,KAAK;AAC3C,YAAM,SAAS,CAAC;AAEhB,aAAO,IAAI,QAAQ;AACjB,YAAIC,KAAI;AACR,eAAOA,KAAI,IAAI,UAAU,IAAIA,EAAC,MAAM,GAAI,CAAAA;AACxC,cAAM,MAAM,SAAS,IAAI,SAAS,IAAI,SAAS,GAAGA,EAAC,CAAC,GAAG,EAAE;AACzD,YAAI,CAAC,IAAK,QAAO;AAEjB,cAAM,IAAI,IAAI,SAAS,IAAI,SAASA,KAAI,GAAG,MAAM,CAAC,CAAC;AACnD,cAAM,WAAW,EAAE,QAAQ,GAAG;AAC9B,YAAI,aAAa,GAAI,QAAO;AAC5B,eAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC;AAEnD,cAAM,IAAI,SAAS,GAAG;AAAA,MACxB;AAEA,aAAO;AAAA,IACT;AAEA,IAAAD,SAAQ,SAAS,SAAS,OAAQ,MAAM;AACtC,YAAM,MAAM,IAAI,MAAM,GAAG;AACzB,UAAI,OAAO,KAAK;AAChB,UAAI,SAAS;AAEb,UAAI,KAAK,aAAa,KAAK,KAAK,KAAK,SAAS,CAAC,MAAM,IAAK,SAAQ;AAClE,UAAI,IAAI,WAAW,IAAI,MAAM,KAAK,OAAQ,QAAO;AAEjD,aAAO,IAAI,WAAW,IAAI,IAAI,KAAK;AACjC,cAAMC,KAAI,KAAK,QAAQ,GAAG;AAC1B,YAAIA,OAAM,GAAI,QAAO;AACrB,kBAAU,SAAS,MAAM,KAAK,MAAM,GAAGA,EAAC,IAAI,KAAK,MAAM,GAAGA,EAAC;AAC3D,eAAO,KAAK,MAAMA,KAAI,CAAC;AAAA,MACzB;AAEA,UAAI,IAAI,WAAW,IAAI,IAAI,OAAO,IAAI,WAAW,MAAM,IAAI,IAAK,QAAO;AACvE,UAAI,KAAK,YAAY,IAAI,WAAW,KAAK,QAAQ,IAAI,IAAK,QAAO;AAEjE,UAAI,MAAM,KAAK,IAAI;AACnB,UAAI,MAAM,KAAK,UAAU,KAAK,OAAO,MAAM,CAAC,GAAG,GAAG;AAClD,UAAI,MAAM,KAAK,UAAU,KAAK,KAAK,CAAC,GAAG,GAAG;AAC1C,UAAI,MAAM,KAAK,UAAU,KAAK,KAAK,CAAC,GAAG,GAAG;AAC1C,iBAAW,KAAK,MAAM,KAAK,GAAG;AAC9B,UAAI,MAAM,KAAK,UAAW,KAAK,MAAM,QAAQ,IAAI,MAAQ,GAAG,EAAE,GAAG,GAAG;AAEpE,UAAI,GAAG,IAAI,cAAc,WAAW,KAAK,IAAI;AAE7C,UAAI,KAAK,SAAU,KAAI,MAAM,KAAK,KAAK,UAAU,GAAG;AAEpD,UAAI,KAAK,aAAa,KAAK,YAAY;AACvC,UAAI,KAAK,WAAW,KAAK,cAAc;AACvC,UAAI,KAAK,MAAO,KAAI,MAAM,KAAK,KAAK,OAAO,GAAG;AAC9C,UAAI,KAAK,MAAO,KAAI,MAAM,KAAK,KAAK,OAAO,GAAG;AAC9C,UAAI,MAAM,KAAK,UAAU,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG;AACpD,UAAI,MAAM,KAAK,UAAU,KAAK,YAAY,GAAG,CAAC,GAAG,GAAG;AAEpD,UAAI,OAAQ,KAAI,MAAM,KAAK,QAAQ,GAAG;AAEtC,UAAI,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;AAE5C,aAAO;AAAA,IACT;AAEA,IAAAD,SAAQ,SAAS,SAAS,OAAQ,KAAK,kBAAkB,oBAAoB;AAC3E,UAAI,WAAW,IAAI,GAAG,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI;AAE/C,UAAI,OAAO,UAAU,KAAK,GAAG,KAAK,gBAAgB;AAClD,YAAM,OAAO,UAAU,KAAK,KAAK,CAAC;AAClC,YAAM,MAAM,UAAU,KAAK,KAAK,CAAC;AACjC,YAAM,MAAM,UAAU,KAAK,KAAK,CAAC;AACjC,YAAM,OAAO,UAAU,KAAK,KAAK,EAAE;AACnC,YAAM,QAAQ,UAAU,KAAK,KAAK,EAAE;AACpC,YAAM,OAAO,OAAO,QAAQ;AAC5B,YAAM,WAAW,IAAI,GAAG,MAAM,IAAI,OAAO,UAAU,KAAK,KAAK,KAAK,gBAAgB;AAClF,YAAM,QAAQ,UAAU,KAAK,KAAK,EAAE;AACpC,YAAM,QAAQ,UAAU,KAAK,KAAK,EAAE;AACpC,YAAM,WAAW,UAAU,KAAK,KAAK,CAAC;AACtC,YAAM,WAAW,UAAU,KAAK,KAAK,CAAC;AAEtC,YAAME,KAAI,MAAM,GAAG;AAGnB,UAAIA,OAAM,IAAI,GAAI,QAAO;AAGzB,UAAIA,OAAM,UAAU,KAAK,KAAK,CAAC,EAAG,OAAM,IAAI,MAAM,6EAA6E;AAE/H,UAAI,QAAQ,GAAG,GAAG;AAGhB,YAAI,IAAI,GAAG,EAAG,QAAO,UAAU,KAAK,KAAK,KAAK,gBAAgB,IAAI,MAAM;AAAA,MAC1E,WAAW,MAAM,GAAG,GAAG;AAAA,MAGvB,OAAO;AACL,YAAI,CAAC,oBAAoB;AACvB,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AAAA,MACF;AAGA,UAAI,aAAa,KAAK,QAAQ,KAAK,KAAK,SAAS,CAAC,MAAM,IAAK,YAAW;AAExE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,IAAI,KAAK,MAAO,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP;AAAA,IACF;AAEA,aAAS,QAAS,KAAK;AACrB,aAAO,IAAI,OAAO,aAAa,IAAI,SAAS,cAAc,eAAe,CAAC,CAAC;AAAA,IAC7E;AAEA,aAAS,MAAO,KAAK;AACnB,aAAO,IAAI,OAAO,WAAW,IAAI,SAAS,cAAc,eAAe,CAAC,CAAC,KACvE,IAAI,OAAO,SAAS,IAAI,SAAS,gBAAgB,iBAAiB,CAAC,CAAC;AAAA,IACxE;AAEA,aAAS,MAAOC,QAAO,KAAK,cAAc;AACxC,UAAI,OAAOA,WAAU,SAAU,QAAO;AACtC,MAAAA,SAAQ,CAAC,CAACA;AACV,UAAIA,UAAS,IAAK,QAAO;AACzB,UAAIA,UAAS,EAAG,QAAOA;AACvB,MAAAA,UAAS;AACT,UAAIA,UAAS,EAAG,QAAOA;AACvB,aAAO;AAAA,IACT;AAEA,aAAS,OAAQ,MAAM;AACrB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,MACX;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,WAAY,MAAM;AACzB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,MACX;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,QAAS,OAAO,KAAK,QAAQ,KAAK;AACzC,aAAO,SAAS,KAAK,UAAU;AAC7B,YAAI,MAAM,MAAM,MAAM,IAAK,QAAO;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,MAAO,OAAO;AACrB,UAAI,MAAM,IAAI;AACd,eAASF,KAAI,GAAGA,KAAI,KAAKA,KAAK,QAAO,MAAMA,EAAC;AAC5C,eAAS,IAAI,KAAK,IAAI,KAAK,IAAK,QAAO,MAAM,CAAC;AAC9C,aAAO;AAAA,IACT;AAEA,aAAS,UAAW,KAAKG,IAAG;AAC1B,YAAM,IAAI,SAAS,CAAC;AACpB,UAAI,IAAI,SAASA,GAAG,QAAO,OAAO,MAAM,GAAGA,EAAC,IAAI;AAChD,aAAO,MAAM,MAAM,GAAGA,KAAI,IAAI,MAAM,IAAI,MAAM;AAAA,IAChD;AAEA,aAAS,cAAe,KAAK,KAAK,KAAK;AACrC,UAAI,GAAG,IAAI;AACX,eAASH,KAAI,IAAIA,KAAI,GAAGA,MAAK;AAC3B,YAAI,MAAMA,EAAC,IAAI,MAAM;AACrB,cAAM,KAAK,MAAM,MAAM,GAAK;AAAA,MAC9B;AAAA,IACF;AAEA,aAAS,WAAY,KAAK,KAAK,KAAK;AAClC,UAAI,IAAI,SAAS,CAAC,EAAE,SAAS,IAAI;AAC/B,sBAAc,KAAK,KAAK,GAAG;AAAA,MAC7B,OAAO;AACL,YAAI,MAAM,KAAK,UAAU,KAAK,EAAE,GAAG,GAAG;AAAA,MACxC;AAAA,IACF;AAOA,aAAS,SAAU,KAAK;AAGtB,UAAI;AACJ,UAAI,IAAI,CAAC,MAAM,IAAM,YAAW;AAAA,eACvB,IAAI,CAAC,MAAM,IAAM,YAAW;AAAA,UAChC,QAAO;AAGZ,YAAM,QAAQ,CAAC;AACf,UAAIA;AACJ,WAAKA,KAAI,IAAI,SAAS,GAAGA,KAAI,GAAGA,MAAK;AACnC,cAAM,OAAO,IAAIA,EAAC;AAClB,YAAI,SAAU,OAAM,KAAK,IAAI;AAAA,YACxB,OAAM,KAAK,MAAO,IAAI;AAAA,MAC7B;AAEA,UAAI,MAAM;AACV,YAAM,IAAI,MAAM;AAChB,WAAKA,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACtB,eAAO,MAAMA,EAAC,IAAI,KAAK,IAAI,KAAKA,EAAC;AAAA,MACnC;AAEA,aAAO,WAAW,MAAM,KAAK;AAAA,IAC/B;AAEA,aAAS,UAAW,KAAK,QAAQ,QAAQ;AACvC,YAAM,IAAI,SAAS,QAAQ,SAAS,MAAM;AAC1C,eAAS;AAGT,UAAI,IAAI,MAAM,IAAI,KAAM;AACtB,eAAO,SAAS,GAAG;AAAA,MACrB,OAAO;AAEL,eAAO,SAAS,IAAI,UAAU,IAAI,MAAM,MAAM,GAAI;AAClD,cAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,QAAQ,IAAI,MAAM;AAC9E,eAAO,SAAS,OAAO,IAAI,MAAM,MAAM,EAAG;AAC1C,YAAI,QAAQ,OAAQ,QAAO;AAC3B,eAAO,SAAS,IAAI,SAAS,IAAI,SAAS,QAAQ,GAAG,CAAC,GAAG,CAAC;AAAA,MAC5D;AAAA,IACF;AAEA,aAAS,UAAW,KAAK,QAAQ,QAAQ,UAAU;AACjD,aAAO,IAAI,SAAS,IAAI,SAAS,QAAQ,QAAQ,KAAK,GAAG,QAAQ,SAAS,MAAM,CAAC,GAAG,QAAQ;AAAA,IAC9F;AAEA,aAAS,UAAW,KAAK;AACvB,YAAM,MAAM,IAAI,WAAW,GAAG;AAC9B,UAAI,SAAS,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI;AACxD,UAAI,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,EAAG;AAE1C,aAAQ,MAAM,SAAU;AAAA,IAC1B;AAAA;AAAA;;;AChUA;AAAA,uCAAAI,UAAAC,SAAA;AAAA;AAAA,QAAM,EAAE,UAAAC,WAAU,UAAAC,WAAU,eAAe,IAAI;AAC/C,QAAM,OAAO;AACb,QAAM,MAAM;AACZ,QAAM,UAAU;AAEhB,QAAM,QAAQ,IAAI,MAAM,CAAC;AAEzB,QAAM,aAAN,MAAiB;AAAA,MACf,cAAe;AACb,aAAK,WAAW;AAChB,aAAK,UAAU;AACf,aAAK,QAAQ,IAAI,KAAK;AAEtB,aAAK,UAAU;AAAA,MACjB;AAAA,MAEA,KAAM,QAAQ;AACZ,aAAK,YAAY,OAAO;AACxB,aAAK,MAAM,KAAK,MAAM;AAAA,MACxB;AAAA,MAEA,WAAY,MAAM;AAChB,eAAO,KAAK,cAAc,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,MACtD;AAAA,MAEA,MAAO,MAAM;AACX,YAAI,OAAO,KAAK,SAAU,QAAO;AACjC,YAAI,SAAS,EAAG,QAAO;AAEvB,YAAIC,SAAQ,KAAK,MAAM,IAAI;AAE3B,YAAI,SAASA,OAAM,WAAY,QAAOA;AAEtC,cAAM,SAAS,CAACA,MAAK;AAErB,gBAAQ,QAAQA,OAAM,cAAc,GAAG;AACrC,UAAAA,SAAQ,KAAK,MAAM,IAAI;AACvB,iBAAO,KAAKA,MAAK;AAAA,QACnB;AAEA,eAAO,IAAI,OAAO,MAAM;AAAA,MAC1B;AAAA,MAEA,MAAO,MAAM;AACX,cAAM,MAAM,KAAK,MAAM,KAAK;AAC5B,cAAM,MAAM,IAAI,aAAa,KAAK;AAElC,YAAI,QAAQ,KAAK;AACf,gBAAM,MAAM,KAAK,UAAU,IAAI,SAAS,KAAK,SAAS,IAAI,UAAU,IAAI;AACxE,eAAK,MAAM,MAAM;AACjB,eAAK,UAAU;AACf,eAAK,YAAY;AACjB,eAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AAEA,aAAK,YAAY;AACjB,aAAK,WAAW;AAEhB,eAAO,IAAI,SAAS,KAAK,SAAU,KAAK,WAAW,IAAK;AAAA,MAC1D;AAAA,IACF;AAEA,QAAM,SAAN,cAAqBD,UAAS;AAAA,MAC5B,YAAaE,OAAM,QAAQ,QAAQ;AACjC,cAAM;AAEN,aAAK,SAAS;AACd,aAAK,SAAS;AAEd,aAAK,UAAUA;AAAA,MACjB;AAAA,MAEA,MAAO,IAAI;AACT,YAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,eAAK,KAAK,IAAI;AAAA,QAChB;AACA,YAAI,KAAK,QAAQ,YAAY,MAAM;AACjC,eAAK,QAAQ,QAAQ;AAAA,QACvB;AACA,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,cAAe;AACb,aAAK,QAAQ,QAAQ,eAAe,IAAI,CAAC;AAAA,MAC3C;AAAA,MAEA,UAAW;AACT,YAAI,KAAK,QAAQ,YAAY,MAAM;AACjC,eAAK,QAAQ,UAAU;AACvB,eAAK,QAAQ,WAAW,SAAS,KAAK,OAAO,IAAI;AACjD,eAAK,QAAQ,QAAQ;AAAA,QACvB;AAAA,MACF;AAAA,MAEA,SAAU,IAAI;AACZ,aAAK,QAAQ;AACb,WAAG,IAAI;AAAA,MACT;AAAA,IACF;AAEA,QAAM,UAAN,cAAsBH,UAAS;AAAA,MAC7B,YAAa,MAAM;AACjB,cAAM,IAAI;AAEV,YAAI,CAAC,KAAM,QAAO,CAAC;AAEnB,aAAK,UAAU,IAAI,WAAW;AAC9B,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,UAAU;AACf,aAAK,WAAW;AAChB,aAAK,cAAc;AACnB,aAAK,YAAYI;AACjB,aAAK,UAAU;AACf,aAAK,YAAY;AACjB,aAAK,OAAO;AACZ,aAAK,aAAa;AAClB,aAAK,eAAe;AACpB,aAAK,mBAAmB;AACxB,aAAK,oBAAoB,KAAK,oBAAoB;AAClD,aAAK,sBAAsB,CAAC,CAAC,KAAK;AAClC,aAAK,eAAe,KAAK,QAAQ,KAAK,IAAI;AAAA,MAC5C;AAAA,MAEA,QAAS,KAAK;AACZ,aAAK,UAAU;AAEf,YAAI,KAAK;AACP,eAAK,QAAQ,GAAG;AAChB,eAAK,eAAe,GAAG;AACvB;AAAA,QACF;AAEA,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,iBAAkB;AAChB,YAAI,KAAK,QAAS,QAAO;AAEzB,aAAK,UAAU,KAAK,QAAQ;AAE5B,YAAI;AACF,eAAK,UAAU,QAAQ,OAAO,KAAK,QAAQ,MAAM,GAAG,GAAG,KAAK,mBAAmB,KAAK,mBAAmB;AAAA,QACzG,SAAS,KAAK;AACZ,eAAK,eAAe,GAAG;AACvB,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,gBAAQ,KAAK,QAAQ,MAAM;AAAA,UACzB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,iBAAK,cAAc;AACnB,iBAAK,WAAW,KAAK,QAAQ;AAC7B,mBAAO;AAAA,QACX;AAEA,aAAK,UAAU;AACf,aAAK,kBAAkB;AAEvB,YAAI,KAAK,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,aAAa;AAChE,eAAK,KAAK,SAAS,KAAK,SAAS,KAAK,cAAc,GAAG,KAAK,YAAY;AACxE,iBAAO;AAAA,QACT;AAEA,aAAK,UAAU,KAAK,cAAc;AAClC,aAAK,WAAW,KAAK,QAAQ;AAE7B,aAAK,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,KAAK,YAAY;AAChE,eAAO;AAAA,MACT;AAAA,MAEA,oBAAqB;AACnB,YAAI,KAAK,cAAc;AACrB,eAAK,QAAQ,OAAO,KAAK;AACzB,eAAK,eAAe;AAAA,QACtB;AAEA,YAAI,KAAK,kBAAkB;AACzB,eAAK,QAAQ,WAAW,KAAK;AAC7B,eAAK,mBAAmB;AAAA,QAC1B;AAEA,YAAI,KAAK,MAAM;AACb,cAAI,KAAK,KAAK,KAAM,MAAK,QAAQ,OAAO,KAAK,KAAK;AAClD,cAAI,KAAK,KAAK,SAAU,MAAK,QAAQ,WAAW,KAAK,KAAK;AAC1D,cAAI,KAAK,KAAK,KAAM,MAAK,QAAQ,OAAO,SAAS,KAAK,KAAK,MAAM,EAAE;AACnE,eAAK,QAAQ,MAAM,KAAK;AACxB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MAEA,kBAAmB,KAAK;AACtB,gBAAQ,KAAK,QAAQ,MAAM;AAAA,UACzB,KAAK;AACH,iBAAK,eAAe,QAAQ,eAAe,KAAK,KAAK,iBAAiB;AACtE;AAAA,UACF,KAAK;AACH,iBAAK,mBAAmB,QAAQ,eAAe,KAAK,KAAK,iBAAiB;AAC1E;AAAA,UACF,KAAK;AACH,iBAAK,aAAa,QAAQ,UAAU,GAAG;AACvC;AAAA,UACF,KAAK;AACH,iBAAK,OAAO,KAAK,eAAe,OAC5B,QAAQ,UAAU,GAAG,IACrB,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,QAAQ,UAAU,GAAG,CAAC;AAC7D;AAAA,QACJ;AAAA,MACF;AAAA,MAEA,qBAAsB;AACpB,aAAK,cAAc;AACnB,aAAK,WAAW,SAAS,KAAK,QAAQ,IAAI;AAE1C,cAAM,MAAM,KAAK,QAAQ,MAAM,KAAK,QAAQ,IAAI;AAEhD,YAAI;AACF,eAAK,kBAAkB,GAAG;AAAA,QAC5B,SAAS,KAAK;AACZ,eAAK,eAAe,GAAG;AACvB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,iBAAkB;AAChB,cAAM,MAAM,KAAK,QAAQ,WAAW,KAAK,QAAQ;AACjD,YAAI,QAAQ,KAAM,QAAO;AAEzB,aAAK,YAAY,IAAI;AACrB,cAAM,UAAU,KAAK,QAAQ,KAAK,GAAG;AAErC,YAAI,KAAK,aAAa,GAAG;AACvB,eAAK,QAAQ,KAAK,IAAI;AACtB,cAAI,QAAS,MAAK,QAAQ,QAAQ;AAClC,iBAAO,WAAW,KAAK,YAAY;AAAA,QACrC;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,gBAAiB;AACf,eAAO,IAAI,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAAA,MACpD;AAAA,MAEA,UAAW;AACT,eAAO,KAAK,QAAQ,WAAW,KAAK,CAAC,KAAK,YAAY;AACpD,cAAI,KAAK,WAAW,GAAG;AACrB,gBAAI,KAAK,YAAY,MAAM;AACzB,kBAAI,KAAK,eAAe,MAAM,MAAO;AACrC;AAAA,YACF;AAEA,gBAAI,KAAK,gBAAgB,MAAM;AAC7B,kBAAI,KAAK,WAAW,KAAK,QAAQ,SAAU;AAC3C,kBAAI,KAAK,mBAAmB,MAAM,MAAO,QAAO;AAChD;AAAA,YACF;AAEA,kBAAM,SAAS,KAAK,QAAQ,WAAW,KAAK,QAAQ;AACpD,gBAAI,WAAW,KAAM,MAAK,YAAY,OAAO;AAC7C;AAAA,UACF;AAEA,cAAI,KAAK,QAAQ,WAAW,IAAK;AACjC,cAAI,KAAK,YAAY,QAAQ,KAAK,eAAe,MAAM,MAAO;AAAA,QAChE;AAEA,aAAK,eAAe,IAAI;AAAA,MAC1B;AAAA,MAEA,eAAgB,KAAK;AACnB,cAAM,KAAK,KAAK;AAChB,aAAK,YAAYA;AACjB,WAAG,GAAG;AAAA,MACR;AAAA,MAEA,OAAQ,MAAM,IAAI;AAChB,aAAK,YAAY;AACjB,aAAK,QAAQ,KAAK,IAAI;AACtB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,OAAQ,IAAI;AACV,aAAK,YAAY,KAAK,aAAa,KAAK,KAAK,QAAQ,aAAa;AAClE,WAAG,KAAK,YAAY,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAAA,MAChE;AAAA,MAEA,cAAe;AACb,aAAK,eAAe,IAAI;AAAA,MAC1B;AAAA,MAEA,SAAU,IAAI;AACZ,YAAI,KAAK,QAAS,MAAK,QAAQ,QAAQ,eAAe,IAAI,CAAC;AAC3D,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,CAAC,OAAO,aAAa,IAAK;AACxB,YAAI,QAAQ;AAEZ,YAAI,iBAAiB;AACrB,YAAI,gBAAgB;AAEpB,YAAI,cAAc;AAClB,YAAI,gBAAgB;AAEpB,cAAM,UAAU;AAEhB,aAAK,GAAG,SAAS,OAAO;AACxB,aAAK,GAAG,SAAS,CAAC,QAAQ;AAAE,kBAAQ;AAAA,QAAI,CAAC;AACzC,aAAK,GAAG,SAAS,OAAO;AAExB,eAAO;AAAA,UACL,CAAC,OAAO,aAAa,IAAK;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,OAAQ;AACN,mBAAO,IAAI,QAAQ,MAAM;AAAA,UAC3B;AAAA,UACA,SAAU;AACR,mBAAO,QAAQ,IAAI;AAAA,UACrB;AAAA,UACA,MAAO,KAAK;AACV,mBAAO,QAAQ,GAAG;AAAA,UACpB;AAAA,QACF;AAEA,iBAAS,gBAAiB,KAAK;AAC7B,cAAI,CAAC,cAAe;AACpB,gBAAM,KAAK;AACX,0BAAgB;AAChB,aAAG,GAAG;AAAA,QACR;AAEA,iBAAS,OAAQ,SAASC,SAAQ;AAChC,cAAI,OAAO;AACT,mBAAOA,QAAO,KAAK;AAAA,UACrB;AAEA,cAAI,aAAa;AACf,oBAAQ,EAAE,OAAO,aAAa,MAAM,MAAM,CAAC;AAC3C,0BAAc;AACd;AAAA,UACF;AAEA,2BAAiB;AACjB,0BAAgBA;AAEhB,0BAAgB,IAAI;AAEpB,cAAI,QAAQ,aAAa,gBAAgB;AACvC,2BAAe,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AAC/C,6BAAiB,gBAAgB;AAAA,UACnC;AAAA,QACF;AAEA,iBAAS,QAAS,QAAQ,QAAQ,UAAU;AAC1C,0BAAgB;AAChB,iBAAO,GAAG,SAASD,KAAI;AAEvB,cAAI,gBAAgB;AAClB,2BAAe,EAAE,OAAO,QAAQ,MAAM,MAAM,CAAC;AAC7C,6BAAiB,gBAAgB;AAAA,UACnC,OAAO;AACL,0BAAc;AAAA,UAChB;AAAA,QACF;AAEA,iBAAS,UAAW;AAClB,0BAAgB,KAAK;AACrB,cAAI,CAAC,eAAgB;AACrB,cAAI,MAAO,eAAc,KAAK;AAAA,cACzB,gBAAe,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AACpD,2BAAiB,gBAAgB;AAAA,QACnC;AAEA,iBAAS,QAAS,KAAK;AACrB,kBAAQ,QAAQ,GAAG;AACnB,0BAAgB,GAAG;AACnB,iBAAO,IAAI,QAAQ,CAAC,SAASC,YAAW;AACtC,gBAAI,QAAQ,UAAW,QAAO,QAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AACtE,oBAAQ,KAAK,SAAS,WAAY;AAChC,kBAAI,IAAK,CAAAA,QAAO,GAAG;AAAA,kBACd,SAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AAAA,YAC/C,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAAN,QAAO,UAAU,SAAS,QAAS,MAAM;AACvC,aAAO,IAAI,QAAQ,IAAI;AAAA,IACzB;AAEA,aAASK,QAAQ;AAAA,IAAC;AAElB,aAAS,SAAU,MAAM;AACvB,cAAQ;AACR,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA;AAAA;;;ACrZA,IAAAE,qBAAA;AAAA,yCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAMC,aAAY;AAAA;AAAA,MAChB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAEA,QAAI;AACF,MAAAD,QAAO,UAAU,QAAQ,IAAI,EAAE,aAAaC;AAAA,IAC9C,QAAQ;AACN,MAAAD,QAAO,UAAUC;AAAA,IACnB;AAAA;AAAA;;;ACbA;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAAA,QAAM,EAAE,UAAAC,WAAU,UAAAC,WAAU,eAAe,IAAI;AAC/C,QAAM,MAAM;AAEZ,QAAMC,aAAY;AAClB,QAAM,UAAU;AAEhB,QAAM,QAAQ;AACd,QAAM,QAAQ;AAEd,QAAM,aAAa,IAAI,MAAM,IAAI;AAEjC,QAAM,OAAN,cAAmBD,UAAS;AAAA,MAC1B,YAAa,MAAM,QAAQ,UAAU;AACnC,cAAM,EAAE,aAAa,WAAW,KAAK,CAAC;AAEtC,aAAK,UAAU;AACf,aAAK,SAAS;AAEd,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,cAAc,OAAO,SAAS,aAAa,CAAC,OAAO;AACxD,aAAK,UAAU,OAAO,SAAS,UAAU,OAAO,SAAS;AACzD,aAAK,YAAY;AACjB,aAAK,QAAQ;AACb,aAAK,gBAAgB;AAErB,YAAI,KAAK,MAAM,YAAY,KAAM,MAAK,MAAM,UAAU;AAAA,YACjD,MAAK,MAAM,SAAS,KAAK,IAAI;AAAA,MACpC;AAAA,MAEA,MAAO,IAAI;AACT,aAAK,gBAAgB;AACrB,YAAI,KAAK,MAAM,YAAY,KAAM,MAAK,cAAc;AAAA,MACtD;AAAA,MAEA,cAAe,KAAK;AAClB,YAAI,KAAK,cAAc,KAAM;AAE7B,cAAM,WAAW,KAAK;AACtB,aAAK,YAAY;AAEjB,iBAAS,GAAG;AAAA,MACd;AAAA,MAEA,gBAAiB;AACf,YAAI,KAAK,MAAM,YAAY,KAAM,MAAK,MAAM,UAAU;AAEtD,cAAM,KAAK,KAAK;AAChB,aAAK,gBAAgB;AACrB,YAAI,OAAO,KAAM;AAEjB,YAAI,KAAK,MAAM,WAAY,QAAO,GAAG,IAAI,MAAM,uBAAuB,CAAC;AACvE,YAAI,KAAK,MAAM,WAAY,QAAO,GAAG,IAAI,MAAM,kCAAkC,CAAC;AAElF,aAAK,MAAM,UAAU;AAErB,YAAI,CAAC,KAAK,aAAa;AACrB,eAAK,MAAM,QAAQ,KAAK,MAAM;AAAA,QAChC;AAEA,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ;AACb,eAAK,cAAc,IAAI;AAAA,QACzB;AAEA,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,OAAQ,MAAM,IAAI;AAChB,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY,KAAK,YAAY,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,IAAI;AACvE,iBAAO,GAAG,IAAI;AAAA,QAChB;AAEA,YAAI,KAAK,SAAS;AAChB,cAAI,KAAK,aAAa,GAAG;AACvB,mBAAO,GAAG,IAAI,MAAM,gCAAgC,CAAC;AAAA,UACvD;AACA,iBAAO,GAAG;AAAA,QACZ;AAEA,aAAK,WAAW,KAAK;AACrB,YAAI,KAAK,MAAM,KAAK,IAAI,EAAG,QAAO,GAAG;AACrC,aAAK,MAAM,SAAS;AAAA,MACtB;AAAA,MAEA,UAAW;AACT,YAAI,KAAK,UAAW;AACpB,aAAK,YAAY;AAEjB,YAAI,KAAK,aAAa;AACpB,eAAK,OAAO,WAAW,KAAK,YAAY,IAAI,SAAS,KAAK,WAAW,OAAO,IAAI;AAChF,eAAK,MAAM,QAAQ,KAAK,MAAM;AAAA,QAChC;AAEA,iBAAS,KAAK,OAAO,KAAK,OAAO,IAAI;AAErC,aAAK,MAAM,MAAM,IAAI;AAAA,MACvB;AAAA,MAEA,OAAQ,IAAI;AACV,YAAI,KAAK,YAAY,KAAK,OAAO,MAAM;AACrC,iBAAO,GAAG,IAAI,MAAM,eAAe,CAAC;AAAA,QACtC;AAEA,aAAK,QAAQ;AACb,WAAG,IAAI;AAAA,MACT;AAAA,MAEA,YAAa;AACX,eAAO,eAAe,IAAI,KAAK,IAAI,MAAM,qBAAqB;AAAA,MAChE;AAAA,MAEA,cAAe;AACb,aAAK,MAAM,QAAQ,KAAK,UAAU,CAAC;AAAA,MACrC;AAAA,MAEA,SAAU,IAAI;AACZ,aAAK,MAAM,MAAM,IAAI;AAErB,aAAK,cAAc,KAAK,YAAY,OAAO,KAAK,UAAU,CAAC;AAE3D,WAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAM,OAAN,cAAmBD,UAAS;AAAA,MAC1B,YAAa,MAAM;AACjB,cAAM,IAAI;AACV,aAAK,SAASG;AACd,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,WAAW,CAAC;AACjB,aAAK,UAAU;AAAA,MACjB;AAAA,MAEA,MAAO,QAAQ,QAAQ,UAAU;AAC/B,YAAI,KAAK,cAAc,KAAK,WAAY,OAAM,IAAI,MAAM,gCAAgC;AAExF,YAAI,OAAO,WAAW,YAAY;AAChC,qBAAW;AACX,mBAAS;AAAA,QACX;AAEA,YAAI,CAAC,SAAU,YAAWA;AAE1B,YAAI,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAW,QAAO,OAAO;AAC7D,YAAI,CAAC,OAAO,KAAM,QAAO,OAAO,WAAW,OAAO,IAAI;AACtD,YAAI,CAAC,OAAO,KAAM,QAAO,OAAO,OAAO,SAAS,cAAc,QAAQ;AACtE,YAAI,CAAC,OAAO,IAAK,QAAO,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAK,QAAO,MAAM;AAC9B,YAAI,CAAC,OAAO,MAAO,QAAO,QAAQ,oBAAI,KAAK;AAE3C,YAAI,OAAO,WAAW,SAAU,UAAS,IAAI,KAAK,MAAM;AAExD,cAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,QAAQ;AAE5C,YAAI,IAAI,SAAS,MAAM,GAAG;AACxB,iBAAO,OAAO,OAAO;AACrB,eAAK,MAAM,MAAM;AACjB,eAAK,IAAI;AACT,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,SAAS;AAChB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,WAAY;AACV,YAAI,KAAK,WAAW,KAAK,SAAS,SAAS,GAAG;AAC5C,eAAK,cAAc;AACnB;AAAA,QACF;AAEA,YAAI,KAAK,WAAY;AACrB,aAAK,aAAa;AAElB,aAAK,KAAK,UAAU;AACpB,aAAK,KAAK,IAAI;AAAA,MAChB;AAAA,MAEA,MAAO,QAAQ;AACb,YAAI,WAAW,KAAK,QAAS;AAE7B,aAAK,UAAU;AAEf,YAAI,KAAK,YAAa,MAAK,SAAS;AACpC,YAAI,KAAK,SAAS,OAAQ,MAAK,SAAS,MAAM,EAAE,cAAc;AAAA,MAChE;AAAA,MAEA,QAAS,QAAQ;AACf,YAAI,CAAC,OAAO,KAAK;AACf,gBAAM,MAAM,QAAQ,OAAO,MAAM;AACjC,cAAI,KAAK;AACP,iBAAK,KAAK,GAAG;AACb;AAAA,UACF;AAAA,QACF;AACA,aAAK,WAAW,MAAM;AAAA,MACxB;AAAA,MAEA,WAAY,QAAQ;AAClB,cAAM,YAAY,QAAQ,UAAU;AAAA,UAClC,MAAM,OAAO;AAAA,UACb,UAAU,OAAO;AAAA,UACjB,KAAK,OAAO;AAAA,QACd,CAAC;AAED,cAAM,YAAY;AAAA,UAChB,MAAM;AAAA,UACN,MAAM,OAAO;AAAA,UACb,KAAK,OAAO;AAAA,UACZ,KAAK,OAAO;AAAA,UACZ,MAAM,UAAU;AAAA,UAChB,OAAO,OAAO;AAAA,UACd,MAAM;AAAA,UACN,UAAU,OAAO,YAAY;AAAA,UAC7B,OAAO,OAAO;AAAA,UACd,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,UAAU,OAAO;AAAA,QACnB;AAEA,aAAK,KAAK,QAAQ,OAAO,SAAS,CAAC;AACnC,aAAK,KAAK,SAAS;AACnB,iBAAS,MAAM,UAAU,UAAU;AAEnC,kBAAU,OAAO,OAAO;AACxB,kBAAU,OAAO,OAAO;AACxB,aAAK,KAAK,QAAQ,OAAO,SAAS,CAAC;AAAA,MACrC;AAAA,MAEA,WAAY;AACV,cAAM,QAAQ,KAAK;AACnB,aAAK,SAASA;AACd,cAAM;AAAA,MACR;AAAA,MAEA,cAAe;AACb,cAAM,MAAM,eAAe,IAAI;AAE/B,YAAI,KAAK,QAAS,MAAK,QAAQ,QAAQ,GAAG;AAE1C,eAAO,KAAK,SAAS,QAAQ;AAC3B,gBAAM,SAAS,KAAK,SAAS,MAAM;AACnC,iBAAO,QAAQ,GAAG;AAClB,iBAAO,cAAc;AAAA,QACvB;AAEA,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,MAAO,IAAI;AACT,aAAK,SAAS;AACd,WAAG;AAAA,MACL;AAAA,IACF;AAEA,IAAAJ,QAAO,UAAU,SAAS,KAAM,MAAM;AACpC,aAAO,IAAI,KAAK,IAAI;AAAA,IACtB;AAEA,aAAS,WAAY,MAAM;AACzB,cAAQ,OAAOG,WAAU,QAAQ;AAAA,QAC/B,KAAKA,WAAU;AAAS,iBAAO;AAAA,QAC/B,KAAKA,WAAU;AAAS,iBAAO;AAAA,QAC/B,KAAKA,WAAU;AAAS,iBAAO;AAAA,QAC/B,KAAKA,WAAU;AAAS,iBAAO;AAAA,QAC/B,KAAKA,WAAU;AAAS,iBAAO;AAAA,MACjC;AAEA,aAAO;AAAA,IACT;AAEA,aAASC,QAAQ;AAAA,IAAC;AAElB,aAAS,SAAUC,OAAM,MAAM;AAC7B,cAAQ;AACR,UAAI,KAAM,CAAAA,MAAK,KAAK,WAAW,SAAS,GAAG,MAAM,IAAI,CAAC;AAAA,IACxD;AAEA,aAAS,YAAa,KAAK;AACzB,aAAO,IAAI,SAAS,GAAG,IAAI,MAAM,IAAI,KAAK,GAAG;AAAA,IAC/C;AAAA;AAAA;;;AC9RA;AAAA,qCAAAC,UAAA;AAAA;AAAA,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,OAAO;AAAA;AAAA;;;ACDf;AAAA,6CAAAC,UAAAC,SAAA;AAAA;AAOA,QAAI,OAAO,QAAQ,MAAM;AAEzB,QAAI,SAAS;AACb,QAAIC,QAAO;AAMX,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,EAAE,gBAAgB,MAAM;AAC1B,eAAO,IAAI,IAAI,OAAO;AAAA,MACxB;AAEA,gBAAU,KAAK,UAAUA,MAAK,SAAS,SAAS;AAAA,QAC9C,MAAM;AAAA,MACR,CAAC;AAED,UAAI,OAAO,QAAQ,gBAAgB,UAAU;AAC3C,gBAAQ,cAAc,CAAC;AAAA,MACzB;AAEA,WAAK,WAAW;AAAA,QACd,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAEA,WAAK,SAAS,OAAO,KAAK,OAAO;AACjC,WAAK,aAAa;AAElB,UAAI,QAAQ,MAAM;AAChB,aAAK,aAAa,KAAK,WAAW,QAAQ,WAAW;AACrD,aAAK,WAAW,GAAG,SAAS,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,MAChE;AAAA,IACF;AASA,QAAI,UAAU,qBAAqB,SAAS,KAAK;AAC/C,WAAK,OAAO,KAAK,SAAS,GAAG;AAAA,IAC/B;AAUA,QAAI,UAAU,SAAS,SAAS,QAAQ,MAAM,UAAU;AACtD,UAAIC,QAAO;AAEX,WAAK,QAAQ,KAAK;AAElB,eAAS,OAAO,KAAK,cAAc;AACjC,YAAI,KAAK;AACP,mBAAS,GAAG;AACZ;AAAA,QACF;AAEA,QAAAA,MAAK,OAAO,MAAM,MAAM,cAAc,SAASC,MAAK;AAClD,mBAASA,MAAK,IAAI;AAAA,QACpB,CAAC;AAAA,MACH;AAEA,UAAI,KAAK,eAAe,UAAU;AAChC,eAAO,MAAM,MAAM;AAAA,MACrB,WAAW,KAAK,eAAe,YAAY,KAAK,OAAO;AACrD,aAAK,OAAO,KAAK,MAAM;AAEvB,YAAI,QAAQD,MAAK,OAAO,MAAM,MAAM,SAAS,KAAK;AAChD,mBAAS,KAAK,IAAI;AAAA,QACpB,CAAC;AAED,eAAO,KAAK,KAAK;AAAA,MACnB,WAAW,KAAK,eAAe,UAAU;AACvC,QAAAD,MAAK,cAAc,QAAQ,MAAM;AAAA,MACnC;AAAA,IACF;AAOA,QAAI,UAAU,WAAW,WAAW;AAClC,WAAK,OAAO,SAAS;AAAA,IACvB;AAOA,QAAI,UAAU,KAAK,WAAW;AAC5B,aAAO,KAAK,OAAO,GAAG,MAAM,KAAK,QAAQ,SAAS;AAAA,IACpD;AASA,QAAI,UAAU,OAAO,SAAS,aAAa,SAAS;AAClD,UAAI,KAAK,YAAY;AACnB,eAAO,KAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,EAAE,KAAK,aAAa,OAAO;AAAA,MACzF,OAAO;AACL,eAAO,KAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,SAAS;AAAA,MACtD;AAAA,IACF;AAOA,QAAI,UAAU,SAAS,WAAW;AAChC,UAAI,KAAK,YAAY;AACnB,eAAO,KAAK,WAAW,OAAO,MAAM,KAAK,YAAY,SAAS;AAAA,MAChE,OAAO;AACL,eAAO,KAAK,OAAO,OAAO,MAAM,KAAK,QAAQ,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC3IjB,IAAAI,gBAAA;AAAA,6CAAAC,UAAAC,SAAA;AAAA;AAEA,aAAS,wBAAyB,GAAG;AACpC,aAAO,KAAK,EAAE,cAAc,OAAO,UAAU,eAAe,KAAK,GAAG,SAAS,IAAI,EAAE,SAAS,IAAI;AAAA,IACjG;AAEA,QAAM,YAAY,IAAI,WAAW;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MA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","names":["exports","CommanderError","InvalidArgumentError","exports","InvalidArgumentError","Argument","exports","Help","cmd","a","chunk","exports","InvalidArgumentError","Option","str","exports","a","i","exports","EventEmitter","path","fs","process","Argument","CommanderError","Help","Option","Command","execArgv","signals","i","index","option","getErrorMessage","hasColors","exports","Argument","Command","CommanderError","InvalidArgumentError","Help","Option","exports","module","index","util","_","objectUtil","i","map","init_errors","init_errors","path","map","errorUtil","errorMap","version","a","index","r","init_errors","parent","path","transform","ctx","i","result","issues","elements","processed","ZodFirstPartyTypeKind","init_errors","exports","module","fs","path","i","exports","module","fs","path","u","o","exports","module","fs","path","reject","exports","module","path","i","reject","exports","module","pathKey","platform","exports","module","path","exports","module","exports","module","exports","module","path","exports","module","fs","exports","module","path","exports","module","exports","module","spawn","spawnSync","fs","path","os","path2","os2","path3","crypto","import_promises","import_os","import_path","exports","reject","exports","module","constants","platform","fs","path","_","err","err2","er","er2","exports","module","fs","path","self","index","exports","module","exports","module","fs","util","noop","queue","createReadStream","createWriteStream","path","options","cb","writeFile","data","src","dest","flags","go$readdir","mode","retry","i","exports","u","fs","reject","buffer","buffers","exports","module","path","exports","module","fs","dir","exports","module","u","exports","module","u","fs","pathExists","path","exports","module","fs","u","path","exports","module","fs","path","u","i","exports","module","exports","module","fs","path","pathExists","destStat","exports","module","fs","path","statSync","dir","require_copy","exports","module","u","exports","module","fs","u","remove","path","exports","module","u","fs","path","remove","emptyDir","dir","exports","module","u","path","fs","dir","exports","module","u","path","fs","pathExists","dir","exports","module","path","fs","pathExists","u","exists","exports","module","fs","u","exports","module","u","path","fs","pathExists","dir","exists","exports","module","require_utils","exports","module","exports","module","_","fs","readFileSync","writeFile","writeFileSync","require_jsonfile","exports","module","exports","module","u","fs","path","pathExists","dir","exports","module","exports","module","exports","module","u","exports","module","fs","path","remove","mkdirp","pathExists","exports","module","fs","path","parent","require_move","exports","module","u","exports","module","fse","parent","path","i","dir","exists","fs","import_promises","import_node_path","xdgConfigHome","path","os","c","dir","fs","a","import_promises","import_node_os","import_node_path","i","reject","_","n","o","d","b","__assign","IdentifyOperation","SpecialEventType","isValid","IdentifyOperation","Identify","Status","a","index","_a","Timeline","pluginName","index","plugin","timeout","e","_a","_b","queue","identity","identify","groupIdentify","revenue","AmplitudeCore","identify","revenue","pluginName","plugin","Revenue","revenue","RevenueProperty","index","LogLevel","Logger","Config","RequestMetadata","path","Destination","timeout","_a","retry","index","BaseTransport","ServerZone","Context","http","Http","chunk","NodeConfig","init_config","AmplitudeNode","init_types","init_esm","exports","module","$","init","i","exports","module","exports","module","exports","module","count","i","exports","module","o","i","F","n","exports","module","main","figures","exports","module","c","figures","aborted","exports","module","a","exports","module","exports","module","exports","module","exports","module","readline","EventEmitter","a","exports","module","reject","self","figures","n","c","a","i","exports","module","figures","wrap","n","c","i","exports","module","c","exports","module","exports","module","exports","module","n","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","reject","self","figures","i","n","c","a","exports","module","reject","self","figures","c","a","i","exports","module","figures","wrap","c","cursor","i","exports","module","reject","self","figures","wrap","i","index","c","exports","module","figures","c","cursor","i","exports","module","c","exports","module","exports","$","noop","onExit","exports","module","i","o","F","n","reject","self","prompts","noop","override","question","answer","getFormattedAnswer","require_action","exports","module","require_strip","exports","module","require_clear","exports","module","require_figures","exports","module","main","figures","require_style","exports","module","c","figures","aborted","require_lines","exports","module","a","require_wrap","exports","module","require_entriesToDisplay","exports","module","require_util","exports","module","require_prompt","exports","module","readline","EventEmitter","a","require_text","exports","module","figures","n","c","a","i","require_select","exports","module","figures","wrap","n","c","i","require_toggle","exports","module","c","require_datepart","exports","module","require_meridiem","exports","module","require_day","exports","module","n","require_hours","exports","module","require_milliseconds","exports","module","require_minutes","exports","module","require_month","exports","module","require_seconds","exports","module","require_year","exports","module","require_dateparts","exports","module","require_date","exports","module","figures","i","n","c","a","require_number","exports","module","figures","c","a","i","require_multiselect","exports","module","figures","wrap","c","cursor","i","require_autocomplete","exports","module","figures","wrap","i","index","c","require_autocompleteMultiselect","exports","module","figures","c","cursor","i","require_confirm","exports","module","c","require_elements","exports","module","require_prompts","exports","$","noop","onExit","require_lib","exports","module","prompts","noop","override","question","answer","require_prompts","exports","module","i","exports","module","exports","module","a","range","i","exports","module","i","n","c","exports","module","path","c","i","a","set","_","n","exports","module","fs","EventEmitter","dir","resolve","reject","path","isAsync","handlePromise","isAsyncGenerator","reject","applyEach","_","index","once","i","on","promiseCallback","a","filter","count","n","exports","module","isStream","exports","module","nextTick","i","exports","module","toString","exports","module","exports","module","Buffer","require_util","exports","objectToString","isObject","o","exports","module","exports","module","util","exports","module","Buffer","util","concat","n","i","exports","module","err","self","exports","module","exports","module","Writable","state","Duplex","util","Buffer","chunk","_","finished","count","exports","module","keys","Duplex","util","Readable","Writable","self","exports","Buffer","StringDecoder","i","self","c","n","exports","module","Readable","Duplex","Buffer","chunk","util","StringDecoder","state","n","readable","i","index","self","c","exports","module","Transform","Duplex","util","chunk","n","exports","module","PassThrough","Transform","util","chunk","exports","module","exports","module","exports","module","util","PassThrough","Readable","Writable","exports","module","path","exports","module","identity","exports","module","apply","exports","module","apply","transform","index","exports","module","constant","exports","module","exports","module","exports","module","Symbol","exports","module","Symbol","exports","module","objectToString","exports","module","Symbol","objectToString","exports","module","isObject","exports","module","isObject","exports","module","exports","module","exports","module","exports","module","isObject","exports","module","exports","module","exports","module","exports","module","constant","identity","exports","module","count","exports","module","exports","module","identity","exports","module","exports","module","exports","module","isArrayLike","exports","module","exports","module","isArrayLike","isObject","index","exports","module","n","index","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","Buffer","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","isObject","exports","module","isArrayLike","exports","module","index","exports","module","i","self","exports","module","format","exports","module","format","inspect","i","getMessage","hidden","a","range","i","isObject","AbortSignal","EventTarget","aborted","defineEventAttribute","AbortController","signals","require_util","exports","module","format","inspect","AbortSignal","AbortController","isBlob","reject","addAbortListener","signals","exports","module","String","signals","i","validateEncoding","exports","module","require_utils","exports","module","isReadableStream","isWritableStream","isTransformStream","isWebStream","isAsync","state","exports","module","process","once","Promise","isReadableStream","isWritableStream","addAbortListener","readable","writable","isAborted","finished","reject","require_destroy","exports","module","process","Symbol","self","err","exports","module","chunk","exports","module","isWebStream","addAbortListener","exports","module","Uint8Array","Buffer","inspect","n","i","c","_","exports","module","getDefaultHighWaterMark","getHighWaterMark","state","require_safe_buffer","exports","module","Buffer","require_string_decoder","exports","Buffer","StringDecoder","i","self","c","n","exports","module","process","Buffer","Readable","isAsync","readable","require_readable","exports","module","process","Promise","Symbol","Readable","Buffer","getHighWaterMark","getDefaultHighWaterMark","StringDecoder","reject","chunk","state","n","readable","i","index","self","writable","exports","module","process","Error","ObjectDefineProperty","Symbol","Writable","Buffer","getHighWaterMark","getDefaultHighWaterMark","state","chunk","count","n","i","stream","exports","module","process","isReadableStream","isWritableStream","Duplex","Readable","Writable","isBlob","AbortController","then","readable","writable","chunk","exports","module","Duplex","Readable","Writable","i","duplex","exports","module","Symbol","Transform","Duplex","getHighWaterMark","chunk","require_passthrough","exports","module","PassThrough","Transform","chunk","exports","module","process","Promise","once","Duplex","isTransformStream","isWebStream","isReadableStream","AbortController","PassThrough","Readable","addAbortListener","finished","writable","reject","chunk","readable","err","pipeline","i","onError","endFn","exports","module","pipeline","Duplex","isWebStream","isTransformStream","isWritableStream","isReadableStream","compose","n","readable","writable","chunk","exports","module","AbortController","finished","Boolean","Number","Promise","Symbol","compose","map","queue","asIndexedPairs","index","some","filter","every","options","reduce","flatMap","drop","take","exports","module","Promise","isWebStream","finished","pipeline","reject","require_stream","exports","module","Buffer","ObjectDefineProperty","compose","getDefaultHighWaterMark","pipeline","isUint8Array","chunk","exports","module","exports","module","index","exports","module","Symbol","exports","module","index","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","index","exports","module","exports","module","exports","module","index","exports","module","index","exports","module","exports","module","index","exports","module","index","exports","module","Map","exports","module","Map","exports","module","exports","module","map","exports","module","exports","module","exports","module","exports","module","exports","module","index","exports","module","exports","module","exports","module","index","exports","module","index","exports","module","exports","module","index","exports","module","exports","module","exports","module","index","exports","module","index","exports","module","exports","module","index","exports","module","isArrayLike","exports","module","exports","module","Set","exports","module","noop","exports","module","index","exports","module","Set","noop","exports","module","index","exports","module","exports","module","transform","exports","module","exports","module","isPlainObject","exports","i","c","u","exports","exports","c","parent","n","i","acc","map","index","_","start","final","exports","exports","exports","ext","path","filter","a","parent","_","i","_","n","c","index","i","v","aborted","bf","isStale","exports","isStream","exports","o","a","_","chunk","n","c","p","h","ret","reject","res","realpathSync","c","n","exports","a","path","dir","cached","p","index","_","fs","i","filter","queue","process","index","platform","exports","platform","i","exports","cached","exports","n","path","rest","c","parent","path","abs","_","target","exports","i","exports","exports","exports","require_file","exports","module","fs","path","isPlainObject","destBase","result","exports","module","fs","path","isStream","PassThrough","chunk","i","err","require_error","exports","module","util","exports","module","fs","path","util","Transform","format","chunk","self","reject","exports","module","require_util","exports","module","util","exports","module","n","exports","module","exports","module","exports","module","constants","platform","require_util","exports","module","PassThrough","isStream","util","exports","module","isStream","Transform","util","chunk","exports","module","CRC32","c","n","i","exports","module","Transform","chunk","exports","module","chunk","require_lib","exports","module","exports","module","constants","util","o","process","exports","module","exports","module","util","exports","module","util","exports","module","exports","module","exports","module","exports","module","fill","a","concat","toString","exports","module","exports","module","i","exports","module","exports","module","EventEmitter","TextDecoder","map","noop","i","data","Readable","reject","Writable","state","Duplex","Transform","PassThrough","pipeline","onerror","isStream","exports","i","c","index","n","exports","module","Writable","Readable","chunk","self","noop","reject","require_constants","exports","module","constants","exports","module","Readable","Writable","constants","noop","self","exports","exports","module","util","self","err","require_dist","exports","module","n","index","require_json","exports","module","Transform","util","chunk","self","exports","module","format","exports","exports","require_fs","exports","require_path","exports","os","path","exports","module","exports","module","index","n","exports","module","require_utils","exports","node","n","i","exports","module","parent","exports","module","exports","module","wrap","a","state","count","i","max","exports","module","util","isObject","transform","index","a","wrap","format","range","exports","module","parent","range","exports","module","queue","parent","range","i","require_constants","exports","module","require_parse","exports","module","index","parent","exports","module","require_constants","exports","module","path","require_utils","exports","path","state","exports","module","index","finished","state","n","i","require_parse","exports","module","constants","i","a","index","branch","opts","state","n","value","count","increment","rest","range","source","exports","module","path","constants","isObject","state","format","require_picomatch","exports","module","exports","module","util","index","state","i","require_pattern","exports","path","a","pattern","exports","module","PassThrough","i","endStream","require_stream","exports","exports","require_utils","exports","fs","path","exports","require_async","exports","path","exports","path","require_fs","exports","fs","exports","fs","exports","path","statSync","exports","module","exports","module","queueMicrotask","each","i","require_constants","exports","require_fs","exports","require_utils","exports","fs","exports","a","require_async","exports","common","path","require_sync","exports","common","require_fs","exports","fs","require_settings","exports","path","fs","require_out","exports","path","exports","module","exports","module","self","noop","errorHandler","context","queue","reject","require_common","exports","filter","a","exports","common","require_async","exports","common","require_async","exports","require_stream","exports","require_sync","exports","common","require_sync","exports","require_settings","exports","path","require_out","exports","require_reader","exports","path","require_stream","exports","index","i","reject","require_async","exports","reject","exports","exports","index","exports","exports","require_error","exports","require_entry","exports","exports","path","require_async","exports","require_stream","exports","require_sync","exports","require_sync","exports","require_settings","exports","fs","os","require_out","exports","module","FastGlob","posix","escapePath","convertPathToPattern","win32","require_util","exports","exports","module","exports","module","path","exports","module","fs","path","fileURLToPath","exists","i","n","a","dir","exports","exports","module","apply","self","exports","module","exports","module","fs","path","promisify","fsAccess","reject","exports","module","serialize","exports","module","exports","module","inverse","exports","module","apply","i","count","index","require_inspect","exports","module","inspect","exports","module","fs","path","util","timeout","require_lib","exports","module","commander","import_picocolors","import_node_fs","import_node_url","i","state","crypto","reject","http","u","timeout","isDesktop","index","index","expression","import_node_child_process","process","import_node_util","import_node_process","import_node_util","import_node_process","process","tty","index","reject","import_node_process","import_node_path","import_node_process","import_node_process","import_node_path","platform","import_node_util","import_node_child_process","import_node_url","execFileCallback","path","process","execPath","path","import_node_os","import_node_os","index","signals","signals","normalizeSignal","import_promises","import_node_util","isConnected","reject","import_node_events","import_node_events","import_node_events","import_node_events","import_promises","import_promises","timeout","import_node_process","import_node_path","path","correctEncoding","import_node_path","import_node_process","path","process","crossSpawn","process","path","reject","import_node_util","import_node_events","import_promises","state","chunk","init","state","chunk","objectToString","identity","chunk","identity","chunk","textEncoder","chunk","textDecoder","identity","timeout","suffix","timeout","count","add","milliseconds","handleResult","reject","import_node_fs","isStream","isReadableStream","isStream","transform","isReadableStream","isWritableStream","index","index","transform","import_node_process","isWritableStream","isReadableStream","isStream","process","addDefaultValue","_","import_node_fs","import_node_tty","isStream","tty","isReadableStream","transform","addProperties","optionName","value","stripFinalNewline","state","chunk","transform","LF","chunk","import_node_buffer","import_node_string_decoder","textEncoder","chunk","import_node_util","state","chunk","index","transform","chunk","index","transform","identityGenerator","transform","state","chunk","encoding","generators","import_node_fs","state","stripFinalNewline","path","import_node_events","handleResult","import_node_events","import_node_child_process","import_node_process","import_node_events","filter","throwOnDisconnect","import_node_events","state","process","import_node_child_process","import_node_stream","handleResult","import_node_fs","import_node_buffer","import_node_stream","addProperties","transform","import_node_events","import_node_stream","import_promises","PassThroughStream","aborted","noop","increment","import_promises","import_node_events","process","global","i","count","_","a","import_promises","import_node_util","import_promises","import_node_events","import_node_stream","stripFinalNewline","chunk","stripFinalNewline","getStreamContents","import_promises","state","stripFinalNewline","stripFinalNewline","import_node_events","isVerbose","timeout","stripFinalNewline","isStream","import_node_stream","import_node_util","import_promises","readable","import_node_stream","import_node_util","writable","chunk","import_node_stream","import_node_util","duplex","timeout","handleResult","mapArguments","boundOptions","setBoundExeca","sendMessage","getOneMessage","getEachMessage","getCancelSignal","platform","import_node_crypto","import_promises","import_node_os","import_node_path","xdgConfigHome","path","os","fs","crypto","getSession","path","init","createApiClient","prompts","program","pc","createApiClient","import_picocolors","program","pc","import_picocolors","import_promises","import_crypto","import_os","import_path","path","i","suffix","fs","path","os","suffix","path","fs","path","import_promises","import_path","fs","parent","path","i","writeJsonAtomic","dir","path2","fs2","state","import_picocolors","createApiClient","pc","createApiClient","pc","program","import_node_os","import_prompts","import_node_path","import_node_os","import_picocolors","import_fs_extra","import_promises","fs","main","version","import_promises","import_node_path","fs","path","parent","platform","import_promises","fs","import_node_path","import_fs_extra","path","fse","import_node_path","import_fs_extra","path","exists","fse","import_promises","import_promises","isObject","a","i","fs","import_promises","fs","i","import_node_fs","import_promises","import_node_path","import_node_stream","import_picocolors","import_node_crypto","import_node_fs","import_promises","import_node_os","import_node_path","crypto","reject","fs","chunk","platform","sleep","retryable","unwrapResponseObject","dir","path","fsPromises","fs","log","pc","fse","path","log","pc","fs","os","createApiClient","i","import_promises","import_node_path","path","fs","fg","import_promises","import_node_os","import_node_path","KEYTAR_SERVICE","isDesktop","xdgConfigHome","path","os","ensurePathPermissions","dir","fs","c","fs","map","KEYTAR_SERVICE","ensurePathPermissions","import_node_child_process","import_promises","import_node_path","import_picocolors","import_crypto","import_promises","import_path","import_os","import_crypto","import_promises","import_path","import_os","import_fs","import_promises","import_path","import_fs","import_stream","import_os","import_promises","import_path","import_crypto","cached","sha256Hex","path","os","path2","fs","writeJsonAtomic","a","path3","fs2","sha256Hex2","createHash2","path4","fs3","randomUUID2","os2","path5","fs4","randomUUID3","unwrapResponseObject","normalizePagination","sleep","createHash3","override","normalizeBranchName","state","n","c","path6","fs5","randomUUID4","timeout","_","reject","timeout","_","reject","unwrapResponseObject","DEFAULT_STALE_MS","sleep2","os3","fs6","path7","unwrapResponseObject","fs7","path8","parent","os4","normalizePagination","sha256FileHex","crypto","reject","fs8","chunk","fallback","fs9","randomUUID5","fs10","path10","fs11","path11","fs12","fs13","path12","os5","state","randomUUID6","retryable","fs14","path13","import_promises","import_node_child_process","import_picocolors","fs","i","pc","chunk","pc","createApiClient","collabInit","collabList","collabStatus","fs","collabRemix","collabCheckout","collabFinalizeTurn","path","drainPendingFinalizeQueue","retry","drainAsyncJobs","o","collabSync","collabSyncUpstream","collabReconcile","collabRequestMerge","collabView","collabApprove","collabReject","collabInvite","pc","unwrapResponseObject","prompts","os","collabInit","createApiClient","program","import_node_path","import_picocolors","import_prompts","import_picocolors","pc","index","i","readline","reject","import_promises","import_node_fs","import_node_os","import_node_path","import_picocolors","import_promises","import_node_os","import_node_path","fs","path","os","dir","a","i","import_node_fs","import_promises","version","fs","fsConstants","path","fallback","version","parseJsonObject","os","path","fs","override","path","os","dir","i","parent","pathExists","exists","pc","import_promises","import_node_os","import_node_path","pathExists","fs","os","platform","path","dir","firstLine","import_promises","import_node_fs","import_node_os","import_node_path","import_picocolors","os","path","pathExists","fs","getCliEnvFilePath","override","writeRemixCliEnvFile","extractString","readPackageVersionNearCli","dir","i","parent","inspectConfiguredRemixCliPath","exists","versionSatisfiesNodeRequirement","version","fsConstants","withAction","patch","describeLifecycleOutcome","pc","import_node_fs","import_node_os","import_node_path","import_picocolors","import_prompts","os","path","parent","fs","pc","prompts","dim","throwCancelled","pc","prompts","c","collabList","buildRecommendedNextSteps","path","collabInit","collabCheckout","collabRemix","program","import_picocolors","import_promises","import_node_path","import_picocolors","import_prompts","readStdin","chunk","pc","fs","prompts","path","import_promises","import_node_path","import_picocolors","resolveCascadeAppId","fs","path","printJsonOrMessage","pc","sleep","import_picocolors","pc","import_picocolors","printJsonOrMessage","pc","import_node_child_process","import_node_crypto","import_node_fs","import_promises","import_node_os","import_node_path","path","os","sha256Hex","dir","import_picocolors","createApiClient","unwrapResponseObject","maybeFindGitRoot","pc","import_picocolors","pc","program","collabInit","pc","collabList","collabStatus","collabCheckout","collabRemix","collabFinalizeTurn","drainPendingFinalizeQueue","drainAsyncJobs","collabSync","collabReconcile","collabSyncUpstream","collabRequestMerge","collabView","collabApprove","collabReject","collabInvite","import_picocolors","pc","parseInteger","parseForkedFilter","parseOwnership","parseAccessScope","program","import_picocolors","resolveScopeTarget","project","organizationId","printWarnings","pc","program","import_picocolors","pc","readStdin","chunk","program","import_picocolors","import_prompts","pc","prompts","seq","parseInteger","program","import_prompts","parseClaudePluginScope","throwCancelled","prompts","program","import_prompts","applyLifecycleExitCode","throwCancelled","confirmUninstall","prompts","program","import_prompts","import_promises","import_node_os","import_node_path","import_picocolors","expandHome","os","path","pathExists","fs","readJsonObject","dir","i","version","h","withAction","pc","applyLifecycleExitCode","throwCancelled","confirmUninstall","prompts","commonOptions","program","import_node_path","import_picocolors","import_node_crypto","import_node_fs","import_node_path","import_node_url","import_picocolors","import_node_crypto","import_promises","import_node_os","import_node_path","import_promises","fs","chunk","map","i","path","os","fs","a","import_node_crypto","import_node_fs","import_node_os","import_node_path","path","os","suffix","i","a","parent","import_node_fs","import_node_os","import_node_path","path","os","import_node_path","path","cached","identity","path","log","pc","identity","buildResult","createApiClient","program","path","identity","pc","import_picocolors","sleep","pc","parseInteger","program","import_picocolors","pc","program","import_picocolors","program","createApiClient","pc","program","pc","i"]}