{"version":3,"file":"index.cjs","sources":["../node_modules/lodash/lodash.js","../src/debug.ts","../src/domain/analytics.ts","../src/domain/attachment.ts","../src/domain/constants.ts","../src/domain/groupTemplates.ts","../src/domain/hosting.ts","../src/domain/post.ts","../src/domain/wayfinding.ts","../node_modules/@urbit/aura/dist/aura.esm.js","../node_modules/@urbit/nockjs/dist/nockjs.esm.mjs","../node_modules/browser-or-node/dist/index.mjs","../node_modules/big-integer/BigInteger.js","../node_modules/sorted-btree/b+tree.js","../src/api/apiUtils.ts","../src/urbit/content.ts","../src/urbit/channel.ts","../src/urbit/utils.ts","../src/urbit/activity.ts","../src/utils/assertNever.ts","../src/utils/blob.ts","../src/utils/timeoutSignal.ts","../src/utils/EventEmitter.ts","../src/http-api/types.ts","../src/http-api/fetch-event-source/parse.ts","../src/http-api/fetch-event-source/fetch.ts","../src/http-api/utils.ts","../src/http-api/Urbit.ts","../src/api/landscapeApi.ts","../src/api/urbit.ts","../node_modules/exponential-backoff/dist/options.js","../node_modules/exponential-backoff/dist/jitter/full/full.jitter.js","../node_modules/exponential-backoff/dist/jitter/no/no.jitter.js","../node_modules/exponential-backoff/dist/jitter/jitter.factory.js","../node_modules/exponential-backoff/dist/delay/delay.base.js","../node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js","../node_modules/exponential-backoff/dist/delay/always/always.delay.js","../node_modules/exponential-backoff/dist/delay/delay.factory.js","../node_modules/exponential-backoff/dist/backoff.js","../src/db/types.ts","../node_modules/emoji-regex/index.mjs","../src/logic/utils.ts","../src/api/harkApi.ts","../src/logic/noun.ts","../src/logic/postContent.ts","../src/api/activityApi.ts","../src/api/channelContentConfig.ts","../src/api/chatApi.ts","../src/api/postsApi.ts","../src/api/channelsApi.ts","../src/api/groupsApi.ts","../src/api/initApi.ts","../src/api/nounParsers.ts","../src/api/lanyardApi.ts","../src/api/contactsApi.ts","../src/api/settingsApi.ts","../node_modules/@smithy/protocol-http/dist-es/extensions/httpExtensionConfiguration.js","../node_modules/@smithy/types/dist-es/endpoint.js","../node_modules/@smithy/types/dist-es/extensions/checksum.js","../node_modules/@smithy/types/dist-es/middleware.js","../node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@aws-sdk/middleware-expect-continue/dist-es/index.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/constants.js","../node_modules/@aws-sdk/core/dist-es/submodules/client/setCredentialFeature.js","../node_modules/@aws-sdk/core/dist-es/submodules/client/setFeature.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.js","../node_modules/@smithy/util-middleware/dist-es/getSmithyContext.js","../node_modules/@smithy/util-middleware/dist-es/normalizeProvider.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/resolveAuthOptions.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/httpAuthSchemeMiddleware.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemeEndpointRuleSetPlugin.js","../node_modules/@smithy/middleware-serde/dist-es/serdePlugin.js","../node_modules/@smithy/core/dist-es/middleware-http-signing/httpSigningMiddleware.js","../node_modules/@smithy/core/dist-es/middleware-http-signing/getHttpSigningMiddleware.js","../node_modules/@smithy/core/dist-es/normalizeProvider.js","../node_modules/@smithy/util-base64/dist-es/constants.browser.js","../node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js","../node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@smithy/util-utf8/dist-es/toUint8Array.js","../node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../node_modules/@smithy/util-base64/dist-es/toBase64.browser.js","../node_modules/@smithy/util-stream/dist-es/blob/Uint8ArrayBlobAdapter.js","../node_modules/@smithy/util-stream/dist-es/checksum/ChecksumStream.browser.js","../node_modules/@smithy/util-stream/dist-es/stream-type-check.js","../node_modules/@smithy/util-stream/dist-es/checksum/createChecksumStream.browser.js","../node_modules/@smithy/util-stream/dist-es/ByteArrayCollector.js","../node_modules/@smithy/util-stream/dist-es/createBufferedReadableStream.js","../node_modules/@smithy/util-stream/dist-es/getAwsChunkedEncodingStream.browser.js","../node_modules/@smithy/util-stream/dist-es/headStream.browser.js","../node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../node_modules/@smithy/querystring-builder/dist-es/index.js","../node_modules/@smithy/fetch-http-handler/dist-es/create-request.js","../node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../node_modules/@smithy/fetch-http-handler/dist-es/stream-collector.js","../node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/util-stream/dist-es/sdk-stream-mixin.browser.js","../node_modules/@smithy/util-stream/dist-es/splitStream.browser.js","../node_modules/@smithy/core/dist-es/submodules/protocols/collect-stream-body.js","../node_modules/@smithy/core/dist-es/submodules/protocols/extended-encode-uri-component.js","../node_modules/@smithy/core/dist-es/submodules/schema/deref.js","../node_modules/@smithy/core/dist-es/submodules/schema/schemas/operation.js","../node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaDeserializationMiddleware.js","../node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaSerializationMiddleware.js","../node_modules/@smithy/core/dist-es/submodules/schema/middleware/getSchemaSerdePlugin.js","../node_modules/@smithy/core/dist-es/submodules/schema/schemas/translateTraits.js","../node_modules/@smithy/core/dist-es/submodules/schema/schemas/NormalizedSchema.js","../node_modules/@smithy/core/dist-es/submodules/schema/TypeRegistry.js","../node_modules/@smithy/core/dist-es/submodules/serde/date-utils.js","../node_modules/@smithy/uuid/dist-es/randomUUID.browser.js","../node_modules/@smithy/uuid/dist-es/v4.js","../node_modules/@smithy/core/dist-es/submodules/serde/lazy-json.js","../node_modules/@smithy/core/dist-es/submodules/serde/quote-header.js","../node_modules/@smithy/core/dist-es/submodules/serde/schema-serde-lib/schema-date-utils.js","../node_modules/@smithy/core/dist-es/submodules/serde/split-every.js","../node_modules/@smithy/core/dist-es/submodules/serde/split-header.js","../node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js","../node_modules/@smithy/core/dist-es/submodules/protocols/SerdeContext.js","../node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js","../node_modules/@smithy/core/dist-es/submodules/protocols/HttpBindingProtocol.js","../node_modules/@smithy/core/dist-es/submodules/protocols/serde/determineTimestampFormat.js","../node_modules/@smithy/core/dist-es/submodules/protocols/serde/FromStringShapeDeserializer.js","../node_modules/@smithy/core/dist-es/submodules/protocols/serde/HttpInterceptingShapeDeserializer.js","../node_modules/@smithy/core/dist-es/submodules/protocols/serde/ToStringShapeSerializer.js","../node_modules/@smithy/core/dist-es/submodules/protocols/serde/HttpInterceptingShapeSerializer.js","../node_modules/@smithy/core/dist-es/setFeature.js","../node_modules/@smithy/core/dist-es/util-identity-and-auth/DefaultIdentityProviderConfig.js","../node_modules/@smithy/core/dist-es/util-identity-and-auth/memoizeIdentityProvider.js","../node_modules/@smithy/property-provider/dist-es/memoize.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.js","../node_modules/@smithy/signature-v4/dist-es/constants.js","../node_modules/@smithy/signature-v4/dist-es/credentialDerivation.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js","../node_modules/@smithy/is-array-buffer/dist-es/index.js","../node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js","../node_modules/@smithy/signature-v4/dist-es/HeaderFormatter.js","../node_modules/@smithy/signature-v4/dist-es/headerUtil.js","../node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js","../node_modules/@smithy/signature-v4/dist-es/prepareRequest.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js","../node_modules/@smithy/signature-v4/dist-es/utilDate.js","../node_modules/@smithy/signature-v4/dist-es/SignatureV4Base.js","../node_modules/@smithy/signature-v4/dist-es/SignatureV4.js","../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js","../node_modules/@smithy/util-body-length-browser/dist-es/calculateBodyLength.js","../node_modules/@smithy/middleware-stack/dist-es/MiddlewareStack.js","../node_modules/@smithy/smithy-client/dist-es/client.js","../node_modules/@smithy/smithy-client/dist-es/schemaLogFilter.js","../node_modules/@smithy/smithy-client/dist-es/command.js","../node_modules/@smithy/smithy-client/dist-es/exceptions.js","../node_modules/@smithy/smithy-client/dist-es/defaults-mode.js","../node_modules/@smithy/smithy-client/dist-es/extensions/checksum.js","../node_modules/@smithy/smithy-client/dist-es/extensions/retry.js","../node_modules/@smithy/smithy-client/dist-es/extensions/defaultExtensionConfiguration.js","../node_modules/@smithy/smithy-client/dist-es/get-value-from-text-node.js","../node_modules/@smithy/smithy-client/dist-es/NoOpLogger.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/ProtocolLib.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/ConfigurableSerdeContext.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/UnionSerde.js","../node_modules/@aws-sdk/xml-builder/dist-es/escape-attribute.js","../node_modules/@aws-sdk/xml-builder/dist-es/escape-element.js","../node_modules/@aws-sdk/xml-builder/dist-es/XmlText.js","../node_modules/@aws-sdk/xml-builder/dist-es/XmlNode.js","../node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.browser.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/parseXmlBody.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeSerializer.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlCodec.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/AwsRestXmlProtocol.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/types.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getChecksumAlgorithmForRequest.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getChecksumLocationName.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/hasHeader.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/hasHeaderWithPrefix.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/isStreaming.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@aws-crypto/util/build/module/convertToBuffer.js","../node_modules/@aws-crypto/util/build/module/isEmptyData.js","../node_modules/@aws-crypto/util/build/module/numToUint8.js","../node_modules/@aws-crypto/util/build/module/uint32ArrayFrom.js","../node_modules/@aws-crypto/crc32c/build/module/aws_crc32c.js","../node_modules/@aws-crypto/crc32c/build/module/index.js","../node_modules/@aws-sdk/crc64-nvme/dist-es/Crc64Nvme.js","../node_modules/@aws-crypto/crc32/build/module/aws_crc32.js","../node_modules/@aws-crypto/crc32/build/module/index.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getCrc32ChecksumAlgorithmFunction.browser.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/selectChecksumAlgorithmFunction.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/stringHasher.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/flexibleChecksumsMiddleware.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/flexibleChecksumsInputMiddleware.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getChecksumAlgorithmListForResponse.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/isChecksumWithPartNumber.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getChecksum.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/validateChecksumFromResponse.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/flexibleChecksumsResponseMiddleware.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/getFlexibleChecksumsPlugin.js","../node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/resolveFlexibleChecksumsConfig.js","../node_modules/@aws-sdk/middleware-host-header/dist-es/index.js","../node_modules/@aws-sdk/middleware-logger/dist-es/loggerMiddleware.js","../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/configuration.js","../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/recursionDetectionMiddleware.browser.js","../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/getRecursionDetectionPlugin.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/check-content-length-header.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/region-redirect-endpoint-middleware.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/region-redirect-middleware.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityCache.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityCacheEntry.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/S3ExpressIdentityProviderImpl.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/constants.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/classes/SignatureV4S3Express.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/s3ExpressMiddleware.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/signS3Express.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3-express/functions/s3ExpressHttpSigningMiddleware.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/s3Configuration.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/throw-200-exceptions.js","../node_modules/@aws-sdk/util-arn-parser/dist-es/index.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/bucket-endpoint-middleware.js","../node_modules/@aws-sdk/middleware-sdk-s3/dist-es/validate-bucket-name.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/configurations.js","../node_modules/@smithy/util-endpoints/dist-es/cache/EndpointCache.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isIpAddress.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isValidHostLabel.js","../node_modules/@smithy/util-endpoints/dist-es/utils/customEndpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/debug/debugId.js","../node_modules/@smithy/util-endpoints/dist-es/debug/toDebugString.js","../node_modules/@smithy/util-endpoints/dist-es/types/EndpointError.js","../node_modules/@smithy/util-endpoints/dist-es/lib/booleanEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttrPathList.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttr.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isSet.js","../node_modules/@smithy/util-endpoints/dist-es/lib/not.js","../node_modules/@smithy/util-endpoints/dist-es/lib/parseURL.js","../node_modules/@smithy/util-endpoints/dist-es/lib/stringEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/substring.js","../node_modules/@smithy/util-endpoints/dist-es/lib/uriEncode.js","../node_modules/@smithy/util-endpoints/dist-es/utils/endpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTemplate.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getReferenceValue.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateExpression.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateCondition.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateConditions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointHeaders.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperties.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointUrl.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateEndpointRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateErrorRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateRules.js","../node_modules/@smithy/util-endpoints/dist-es/resolveEndpoint.js","../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../node_modules/@smithy/querystring-parser/dist-es/index.js","../node_modules/@smithy/url-parser/dist-es/index.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/check-features.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/encode-features.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/user-agent-middleware.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseDualstackEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseFipsEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/checkRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/isFipsRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/getRealRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/resolveRegionConfig.js","../node_modules/@smithy/eventstream-serde-config-resolver/dist-es/EventStreamSerdeConfig.js","../node_modules/@smithy/middleware-content-length/dist-es/index.js","../node_modules/@smithy/middleware-endpoint/dist-es/service-customizations/s3.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/createConfigValueProvider.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromConfig.browser.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/toEndpointV1.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js","../node_modules/@smithy/middleware-endpoint/dist-es/endpointMiddleware.js","../node_modules/@smithy/middleware-endpoint/dist-es/getEndpointPlugin.js","../node_modules/@smithy/middleware-endpoint/dist-es/resolveEndpointConfig.js","../node_modules/@smithy/util-retry/dist-es/config.js","../node_modules/@smithy/service-error-classification/dist-es/constants.js","../node_modules/@smithy/service-error-classification/dist-es/index.js","../node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js","../node_modules/@smithy/util-retry/dist-es/constants.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryBackoffStrategy.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryToken.js","../node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js","../node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js","../node_modules/@smithy/middleware-retry/dist-es/util.js","../node_modules/@smithy/middleware-retry/dist-es/configurations.js","../node_modules/@smithy/middleware-retry/dist-es/isStreamingPayload/isStreamingPayload.browser.js","../node_modules/@smithy/middleware-retry/dist-es/retryMiddleware.js","../node_modules/@aws-sdk/signature-v4-multi-region/dist-es/SignatureV4MultiRegion.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../node_modules/@aws-sdk/client-s3/dist-es/endpoint/ruleset.js","../node_modules/@aws-sdk/client-s3/dist-es/endpoint/endpointResolver.js","../node_modules/@aws-sdk/client-s3/dist-es/auth/httpAuthSchemeProvider.js","../node_modules/@aws-sdk/client-s3/dist-es/endpoint/EndpointParameters.js","../node_modules/@aws-sdk/client-s3/dist-es/models/S3ServiceException.js","../node_modules/@aws-sdk/client-s3/dist-es/models/errors.js","../node_modules/@aws-sdk/client-s3/dist-es/schemas/schemas_0.js","../node_modules/@aws-sdk/client-s3/dist-es/commands/CreateSessionCommand.js","../node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@aws-crypto/sha1-browser/build/module/isEmptyData.js","../node_modules/@aws-crypto/sha1-browser/build/module/constants.js","../node_modules/@aws-sdk/util-locate-window/dist-es/index.js","../node_modules/@aws-crypto/sha1-browser/build/module/webCryptoSha1.js","../node_modules/@aws-crypto/supports-web-crypto/build/module/supportsWebCrypto.js","../node_modules/@aws-crypto/sha1-browser/build/module/crossPlatformSha1.js","../node_modules/@aws-crypto/sha256-browser/build/module/constants.js","../node_modules/@aws-crypto/sha256-browser/build/module/webCryptoSha256.js","../node_modules/@aws-crypto/sha256-js/build/module/constants.js","../node_modules/@aws-crypto/sha256-js/build/module/RawSha256.js","../node_modules/@aws-crypto/sha256-js/build/module/jsSha256.js","../node_modules/@aws-crypto/sha256-browser/build/module/crossPlatformSha256.js","../node_modules/@aws-sdk/util-user-agent-browser/dist-es/index.js","../node_modules/@smithy/eventstream-codec/dist-es/Int64.js","../node_modules/@smithy/eventstream-codec/dist-es/HeaderMarshaller.js","../node_modules/@smithy/eventstream-codec/dist-es/splitMessage.js","../node_modules/@smithy/eventstream-codec/dist-es/EventStreamCodec.js","../node_modules/@smithy/eventstream-codec/dist-es/MessageDecoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/MessageEncoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/SmithyMessageDecoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/SmithyMessageEncoderStream.js","../node_modules/@smithy/eventstream-serde-universal/dist-es/getChunkedStream.js","../node_modules/@smithy/eventstream-serde-universal/dist-es/getUnmarshalledStream.js","../node_modules/@smithy/eventstream-serde-universal/dist-es/EventStreamMarshaller.js","../node_modules/@smithy/eventstream-serde-browser/dist-es/utils.js","../node_modules/@smithy/eventstream-serde-browser/dist-es/EventStreamMarshaller.js","../node_modules/@smithy/eventstream-serde-browser/dist-es/provider.js","../node_modules/@smithy/chunked-blob-reader/dist-es/index.js","../node_modules/@smithy/hash-blob-browser/dist-es/index.js","../node_modules/@smithy/invalid-dependency/dist-es/invalidProvider.js","../node_modules/@smithy/md5-js/dist-es/constants.js","../node_modules/@smithy/md5-js/dist-es/index.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/constants.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/resolveDefaultsModeConfig.js","../node_modules/@aws-sdk/client-s3/dist-es/runtimeConfig.shared.js","../node_modules/@aws-sdk/client-s3/dist-es/runtimeConfig.browser.js","../node_modules/@aws-sdk/region-config-resolver/dist-es/extensions/index.js","../node_modules/@aws-sdk/client-s3/dist-es/auth/httpAuthExtensionConfiguration.js","../node_modules/@aws-sdk/client-s3/dist-es/runtimeExtensions.js","../node_modules/@aws-sdk/client-s3/dist-es/S3Client.js","../node_modules/@aws-sdk/middleware-ssec/dist-es/index.js","../node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectCommand.js","../node_modules/@aws-sdk/util-format-url/dist-es/index.js","../node_modules/@aws-sdk/s3-request-presigner/dist-es/constants.js","../node_modules/@aws-sdk/s3-request-presigner/dist-es/presigner.js","../node_modules/@aws-sdk/s3-request-presigner/dist-es/getSignedUrl.js","../src/api/storageApi.ts","../src/api/vitalsApi.ts","../src/api/inviteApi.ts","../src/api/metagrabApi.ts","../src/api/changesApi.ts","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../src/api/hostingApi.ts","../src/api/openRouterApi.ts","../src/api/systemContactsApi.ts","../node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js"],"sourcesContent":["/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.23';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var 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 match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var 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\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\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   */\n  function 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\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee 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 `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee 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 `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\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   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\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   */\n  function 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\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   */\n  function 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\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   */\n  function 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\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\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   */\n  function 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\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   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\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   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\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   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\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   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\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   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\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   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\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   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * A specialized version of `_.lastIndexOf` 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   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\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     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\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     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function 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\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     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\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     */\n    function 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\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\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     */\n    function 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\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     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\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     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\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     */\n    function 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\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\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     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\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     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\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     */\n    function 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\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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    /**\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     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\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 {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\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     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\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     */\n    function 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\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays 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 array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\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     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\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     */\n    function 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\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\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     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` 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     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\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     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\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     */\n    var 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\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * 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     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n      while (++index < length) {\n        var key = path[index];\n\n        // skip non-string keys (e.g., Symbols, numbers)\n        if (typeof key !== 'string') {\n          continue;\n        }\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block \"constructor.prototype\" chains\n        if (key === 'constructor' &&\n            (index + 1) < length &&\n            typeof path[index + 1] === 'string' &&\n            path[index + 1] === 'prototype') {\n\n          // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n          if (isRootPrimitive && index === 0) {\n            continue;\n          }\n\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays 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 array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\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     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\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     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\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     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\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     */\n    function 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\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\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     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\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     */\n    function 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\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\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     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\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     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\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     */\n    function 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\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     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\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     */\n    function 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\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\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     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\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     */\n    function 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\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\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     */\n    function 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\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\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\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\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     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\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     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all 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     * @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 intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\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     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, 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 {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\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     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\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     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\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     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\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     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\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 an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\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     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\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     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.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     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\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 an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\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     */\n    function 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\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\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     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\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     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\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     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\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 `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\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 native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\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 `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\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     */\n    function 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\n    /**\n     * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or 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 a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\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     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\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 weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\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 weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is 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 convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\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     */\n    var 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\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\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     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\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     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values 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 values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\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     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\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     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\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     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\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     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","// Simplified console-based logger (no Zustand)\n\n/**\n * Cross-platform check for development mode.\n * Works in Node.js, browsers, and React Native.\n */\nexport function isDev(): boolean {\n  // Check for React Native's __DEV__ global\n  if (typeof __DEV__ !== 'undefined') {\n    return __DEV__;\n  }\n  // Fall back to NODE_ENV check\n  if (typeof process !== 'undefined' && process.env) {\n    return process.env.NODE_ENV !== 'production';\n  }\n  // Default to false in unknown environments\n  return false;\n}\n\n// Declare __DEV__ for TypeScript (React Native global)\ndeclare const __DEV__: boolean | undefined;\n\nexport interface Logger {\n  log: (...args: any[]) => void;\n  warn: (...args: any[]) => void;\n  error: (...args: any[]) => void;\n  debug: (...args: any[]) => void;\n  crumb: (...args: any[]) => void;\n  trackError: (message: string, data?: any) => void;\n  trackEvent: (event: string, data?: any) => void;\n  sensorsLog: (...args: any[]) => void;\n}\n\nexport function createDevLogger(tag: string, enabled = true): Logger {\n  const prefix = `[${tag}]`;\n  return {\n    log: (...args) => enabled && console.log(prefix, ...args),\n    warn: (...args) => enabled && console.warn(prefix, ...args),\n    error: (...args) => console.error(prefix, ...args),\n    debug: (...args) => enabled && console.debug(prefix, ...args),\n    crumb: (...args) => enabled && console.log(prefix, '[crumb]', ...args),\n    trackError: (msg, data) => console.error(prefix, '[error]', msg, data),\n    trackEvent: (event, data) => enabled && console.log(prefix, '[event]', event, data),\n    sensorsLog: (...args) => enabled && console.log(prefix, '[sensors]', ...args),\n  };\n}\n\nexport function escapeLog(value: string): string {\n  return value.replace(/\\n/g, '\\\\n');\n}\n\nexport function runIfDev<T>(fn: () => T): T | undefined {\n  if (process.env.NODE_ENV !== 'production') {\n    return fn();\n  }\n  return undefined;\n}\n\n// Add custom enabled loggers support (no-op for simplified version)\nexport function addCustomEnabledLoggers(_loggers: string[]): void {\n  // No-op in simplified version\n}\n\n// Log sync duration (simplified)\nexport function logSyncDuration(\n  _operation: string,\n  _startTime: number,\n  _metadata?: Record<string, any>\n): void {\n  // No-op in simplified version\n}\n","export enum AnalyticsEvent {\n  InviteShared = 'Invite Link Shared',\n  OnboardingSessionRevived = 'Onboarding Session Revived',\n  AppInstalled = 'App Installed',\n  AppUpdated = 'App Updated',\n  AppActive = 'App Active',\n  LoggedInBeforeSignup = 'Logged In Without Signing Up',\n  FailedSignupOTP = 'Failed to send Signup OTP',\n  FailedLoginOTP = 'Failed to send Login OTP',\n  InvitedUserFailedInventoryCheck = 'Invited User Failed Inventory Check',\n  PersonalInvitePressed = 'Personal Invite Shown',\n  ChannelTemplateSetup = 'Channel Created from Template',\n  ChannelLoadComplete = 'Channel Load Complete',\n  SessionInitialized = 'Session Initialized',\n  NodeNotRunning = 'Node Not Running',\n  NodeUnderMaintenance = 'Node Under Maintenance',\n  LoginDebug = 'Login Debug',\n  LoginAnomaly = 'Login Anomaly',\n  ExpectedHostingError = 'Expected Hosting API Error',\n  UnexpectedHostingError = 'Unexpected Hosting API Response',\n  NodeWaitReport = 'Node Wait Report',\n  InviteError = 'Invite Error',\n  InviteDebug = 'Invite Debug',\n  InviteButtonShown = 'Invite Button Shown',\n  InitializedNewInvite = 'Initialized New Invite',\n  DebugLogs = 'Debug Logs',\n  DebugGroupCreate = 'Create Group Debug',\n  DebugAttestation = 'Attestation Debug',\n  DebugContactMatching = 'Contact Matching Debug',\n  ErrorContactMatching = 'Contact Matching Error',\n  AppError = 'App Error',\n  AuthenticatedNodeStopped = 'Node Stopped While Logged In',\n  Scry = 'Scry',\n  ScryNoun = 'Scry Noun',\n  Poke = 'Poke',\n  NativeDbDebug = 'Native DB Debug',\n  Thread = 'Thread',\n  TrackedPoke = 'TrackedPoke',\n  ErrorDatabaseQuery = 'Database Query Error',\n  ErrorTrackedPokeTimeout = 'Error Tracked Poke Timeout',\n  ErrorThread = 'Thread Error',\n  ErrorSubscribeOnceTimeout = 'Error Subscribe Once Timeout',\n  ErrorNativeDb = 'Native DB Error',\n  InitDataFetched = 'Init Data Fetched',\n  InitDataWritten = 'Init Data Written',\n  LatestPostsFetched = 'Latest Posts Fetched',\n  LatestPostsWritten = 'Latest Posts Written',\n  SubscriptionsEstablished = 'Subscriptions Established',\n  AuthFailedToGetCode = 'Failed to get access code',\n  AuthForcedLogout = 'Auth Forced Logout',\n  NodeConnectionDebug = 'Node Connection Debug',\n  NodeConnectionError = 'Node Connection Error',\n  SyncDiscontinuity = 'Sync Discontinuity',\n  OnNetworkInvite = 'Sent On Network Group Invite',\n  UserLoggedIn = 'User Logged In',\n  NodeAuthSaved = 'Node Auth Saved',\n  ErrorNodeResumePush = 'Node Resume Push Error',\n  AnalyticsDigest = 'Usage Digest Report',\n  WebAppOpened = 'Web App Opened',\n  WebConsoleError = 'Web Console Error',\n  WayfindingDebug = 'Wayfinding Debug',\n  AttachmentUploadSuccess = 'Attachment Upload Success',\n  ActionContactAdded = 'Contact Added',\n  ActionContactRemoved = 'Contact Removed',\n  ActionRemoveContactSuggestion = 'Removed Contact Suggestion',\n  ActionContactEdited = 'Contact Edited',\n  ActionUpdatedProfile = 'Updated Profile',\n  ActionSendPost = 'Sent Post',\n  ActionForwardPost = 'Forwarded Post',\n  ActionForwardGroup = 'Forwarded Group',\n  ActionStartedDM = 'Started DM',\n  ActionSendPostRetry = 'Retried Post Send',\n  ActionHidePost = 'Hid Post',\n  ActionSendReply = 'Sent Thread Reply',\n  ActionDeletePost = 'Deleted Post',\n  ActionReact = 'Reacted to Post',\n  ActionUnreact = 'Removed Reaction from Post ',\n  ActionRespondToDMInvite = 'Responded to DM Invite',\n  ActionBlockUser = 'Blocked User',\n  ActionUnblockUser = 'Unblocked User',\n  ActionCustomizeDM = 'Customized DM',\n  ActionJoinGroup = 'Joined Group',\n  ActionCancelGroupJoin = 'Cancelled Group Join',\n  ActionCustomizedGroup = 'Customized Group',\n  ActionDeleteGroup = 'Deleted Group',\n  ActionKickUser = 'Kicked User',\n  ActionBanUser = 'Banned User',\n  ActionUnbanUser = 'Unbanned User',\n  ActionCreateGroup = 'Created Group',\n  ActionAcceptJoinRequest = 'Accepted Request to Join Group',\n  ActionRejectJoinRequest = 'Rejected Request to Join Group',\n  ActionAcceptGroupInvite = 'Accepted Group Invite',\n  ActionRejectGroupInvite = 'Rejected Group Invite',\n  ActionUpdatedGroupPrivacy = 'Updated Group Privacy',\n  ActionLeaveGroup = 'Left Group',\n  ActionAddedRole = 'Added Group Role',\n  ActionRemovedRole = 'Removed Group Role',\n  ActionUpdatedRole = 'Updated Group Role',\n  ActionAddMemberRole = 'Added Members to Group Role',\n  ActionRemoveMemberRole = 'Removed Members from Group Role',\n  ActionVisitedGroup = 'Viewed Group',\n  ActionRequestGroupInvite = 'Requested Group Invite',\n  ActionCreateChannel = 'Created Channel',\n  ActionDeleteChannel = 'Deleted Channel',\n  ActionUpdatedChannel = 'Updated Channel',\n  ActionPinChat = 'Pinned Chat',\n  ActionUnpinChat = 'Unpinned Chat',\n  ActionVisitedChannel = 'Viewed Channel',\n  ActionTappedChat = 'Tapped Chatlist Item',\n  ActionJoinChannel = 'Joined Channel',\n  ActionMoveChannel = 'Moved Channel',\n  ActionUpdateChannelWriters = 'Updated Channel Writers',\n  ActionAddedNavSection = 'Added Navigation Section',\n  ActionUpdatedNavSection = 'Updated Navigation Section',\n  ActionDeletedNavSection = 'Deleted Navigation Section',\n  ActionUpdatedGroupNavigation = 'Updated Group Navigation',\n  ActionViewProfileGroup = 'Viewed Pinned Profile Group',\n  ActionSelectActivityEvent = 'Tapped Activity Event',\n  ActionsNotifPermsChecked = 'Checked Notification Permissions',\n  ActionNotifPermsSettingsOpened = 'Opened Notification Settings from Nag',\n  ActionNotifPermsGrantedFromNag = 'Granted Notification Permission from Nag',\n  ActionInitiateTwitterAttest = 'Initiated Twitter Attestation',\n  ActionConfirmTwitterAttest = 'Confirmed Twitter Attestation',\n  ActionInitiatePhoneAttest = 'Initiated Phone Attestation',\n  ActionCheckAttestSig = 'Checked Attestation Signature',\n  ActionRevokeAttestation = 'Revoked Attestation',\n  ActionUpdateAttestDiscoverability = 'Updated Attestation Discoverability',\n  ActionConfirmPhoneAttest = 'Confirmed Phone Attestation',\n  ActionGroupChannelSelected = 'Tapped group channel',\n  ActionTappedPushNotif = 'Tapped Push Notification',\n  ActionDeferredDeepLink = 'Installed with Deferred Deeplink Invite',\n  ActionContactBookSkipped = 'Skipped Syncing Contact Book',\n  ActionContactBookPermRequested = 'Contact Book Requesting Permission',\n  ActionContactBookPermGranted = 'Contact Book Permission Granted',\n  ActionContactBookPermDenied = 'Contact Book Permission Denied',\n  ActionContactBookInviteShown = 'Contact Book Invite Shown',\n  ActionContactBookInviteSent = 'Contact Book Invite Sent',\n  FetchLinkMetadata = 'Fetched Link Metadata',\n  ActionCalmSettingsUpdate = 'Calm Settings Updated',\n  ActionThemeUpdate = 'Theme Setting Updated',\n  DebugSystemContacts = 'System Contacts Debug',\n  GroupJoinComplete = 'Group Join Complete',\n  PersonalInviteLinkReady = 'Personal Invite Link Ready',\n  ErrorSendPost = 'Error Sending Post',\n  ErrorSendReply = 'Error Sending Thread Reply',\n  ErrorReact = 'Error Reacting to Post',\n  ErrorUnreact = 'Error Removing Reaction from Post',\n  ErrorPushNotifNavigate = 'Error Navigating to Push Channel',\n  ErrorDigestFailed = 'Error Preparing Usage Digest',\n  ErrorSyncStartHighPriority = 'Error Start Sync: High Priority',\n  ErrorSyncStartLowPriority = 'Error Start Sync: Low Priority',\n  ErrorVerifyingPersonalInvite = 'Error Verifying DM Invite Link',\n  ErrorAttestation = 'Attestation Error',\n  ErrorNounParse = 'Error Parsing Noun',\n  ErrorNotificationService = 'Notification Service Error',\n  ErrorCreateGroup = 'Error Creating Group',\n  ErrorWayfinding = 'Wayfinding Error',\n  ErrorSystemContacts = 'System Contacts Error',\n  ErrorCalmSettingsUpdate = 'Error Updating Calm Settings',\n  ErrorThemeUpdate = 'Error Updating Theme Setting',\n  ErrorApi = 'API Error',\n  ErrorFetchLinkMetadata = 'Error Fetching Link Metadata',\n}\n\nexport interface AnalyticsDigest {\n  numContacts?: number | null;\n  numSystemContacts?: number | null;\n  numGroups?: number | null;\n  numGroupchats?: number | null;\n  numGroupsHosted?: number | null;\n  numChannels?: number | null;\n  numDms?: number | null;\n  numLegacyGroupDms?: number | null;\n  numGalleries?: number | null;\n  numNotebooks?: number | null;\n}\n\nexport enum AnalyticsSeverity {\n  Critical = 'Critical',\n  High = 'High',\n  Medium = 'Medium',\n  Low = 'Low',\n}\n","import { memoize, uniqueId } from 'lodash';\n\nimport { ContentReference } from './references';\nimport { UploadState } from './uploads';\n\n/**\n * Platform-agnostic image asset type (compatible with expo-image-picker's ImagePickerAsset)\n * This allows the package to work in Node.js, web, and React Native environments.\n */\nexport interface ImagePickerAsset {\n  uri: string;\n  width: number;\n  height: number;\n  fileSize?: number;\n  mimeType?: string;\n  fileName?: string;\n  type?: 'image' | 'video';\n  duration?: number;\n  base64?: string;\n  exif?: Record<string, unknown>;\n}\n\nexport type LinkMetadata = PageMetadata | FileMetadata;\n\nexport type LinkMetadataError =\n  | { type: 'redirect' }\n  | { type: 'error'; reason: 'bad response' | 'unknown error' | string };\n\nexport type DefaultPageMetadata = {\n  siteIconUrl?: string;\n  siteName?: string;\n  title?: string;\n  author?: string;\n  description?: string;\n  previewImageUrl?: string;\n  previewImageHeight?: string;\n  previewImageWidth?: string;\n};\n\nexport interface PageMetadata extends DefaultPageMetadata {\n  url: string;\n  type: 'page';\n}\n\nexport type FileMetadata = {\n  url: string;\n  type: 'file';\n  mime: string;\n  isImage?: boolean;\n};\n\nexport interface LinkAttachment extends DefaultPageMetadata {\n  type: 'link';\n  url: string;\n  resourceType?: 'page' | 'file';\n}\n\nexport type ReferenceAttachment = {\n  type: 'reference';\n  reference: ContentReference;\n  path: string;\n};\n\nexport type ImageAttachment = {\n  type: 'image';\n  file: ImagePickerAsset;\n  uploadState?: UploadState;\n};\n\nexport type UploadedImageAttachment = {\n  type: 'image';\n  file: ImagePickerAsset;\n  uploadState: Extract<UploadState, { status: 'success' | 'uploading' }>;\n};\n\nexport namespace UploadedImageAttachment {\n  export function uri(attachment: UploadedImageAttachment): string {\n    switch (attachment.uploadState.status) {\n      case 'success':\n        return attachment.uploadState.remoteUri;\n      case 'uploading':\n        return attachment.uploadState.localUri;\n    }\n  }\n}\n\nexport type FileAttachment = {\n  type: 'file';\n  // File or local URI string\n  localFile: File | string;\n  name?: string;\n  /** in bytes */\n  size: number;\n  mimeType?: string;\n};\n\nexport type UploadedFileAttachment = {\n  type: 'file';\n  // File or local URI string\n  localFile: File | string;\n  name?: string;\n  /** in bytes */\n  size: number;\n  mimeType?: string;\n  uploadState: Extract<UploadState, { status: 'success' | 'uploading' }>;\n};\n\nexport namespace UploadedFileAttachment {\n  export function uri(attachment: UploadedFileAttachment): string {\n    return uploadStateUri(attachment.uploadState);\n  }\n}\n\nexport type TextAttachment = {\n  type: 'text';\n  text: string;\n};\n\nexport type Attachment =\n  | ReferenceAttachment\n  | ImageAttachment\n  | FileAttachment\n  | TextAttachment\n  | LinkAttachment;\n\nexport type FinalizedAttachment =\n  | ReferenceAttachment\n  | UploadedImageAttachment\n  | UploadedFileAttachment\n  | TextAttachment\n  | LinkAttachment;\n\nexport namespace Attachment {\n  type ImageUploadIntent = {\n    type: 'image';\n    asset: Pick<\n      ImagePickerAsset,\n      'uri' | 'width' | 'height' | 'fileSize' | 'mimeType'\n    >;\n  };\n  export type UploadIntent =\n    | ImageUploadIntent\n    | {\n        type: 'fileUri';\n        localUri: string;\n        name?: string;\n        /** in bytes */\n        size: number;\n        mimeType?: string;\n      }\n    | { type: 'file'; file: File };\n\n  export namespace UploadIntent {\n    /** Branded type to avoid using wrong keys downstream */\n    export type Key = string & { __brand: 'Attachment.UploadIntent.Key' };\n\n    export function fromImagePickerAsset(\n      asset: ImagePickerAsset\n    ): UploadIntent {\n      return {\n        type: 'image',\n        asset,\n      };\n    }\n\n    export function fromFile(file: File): UploadIntent {\n      return { type: 'file', file };\n    }\n\n    export function createLocalUri(uploadIntent: UploadIntent): string {\n      switch (uploadIntent.type) {\n        case 'image':\n          return uploadIntent.asset.uri;\n        case 'file':\n          // TODO: URL.revokeObjectURL when no longer needed - shouldn't be\n          // an issue unless user uploads a *lot* of files\n          return URL.createObjectURL(uploadIntent.file);\n        case 'fileUri':\n          return uploadIntent.localUri;\n      }\n    }\n\n    export function extractImagePickerAssets(\n      xs: UploadIntent[]\n    ): ImagePickerAsset[] {\n      return xs\n        .filter((x): x is ImageUploadIntent => x.type === 'image')\n        .map((x) => x.asset);\n    }\n\n    /** Used when keying a 'file'-type UploadIntent. Memoized so that\n     * equivalent `File`s yield the same ID. */\n    const fileKey = memoize((_file: File): string => uniqueId('File'));\n\n    export function extractKey(uploadIntent: UploadIntent): UploadIntent.Key {\n      const rawValue: string = (() => {\n        switch (uploadIntent.type) {\n          case 'image':\n            return uploadIntent.asset.uri;\n          case 'file':\n            return fileKey(uploadIntent.file);\n          case 'fileUri':\n            return uploadIntent.localUri;\n        }\n      })();\n      // cast to branded type\n      return rawValue as UploadIntent.Key;\n    }\n\n    export function equivalent(a: UploadIntent, b: UploadIntent): boolean {\n      if (a.type !== b.type) {\n        return false;\n      }\n      switch (a.type) {\n        case 'image':\n          return a.asset.uri === (b as typeof a).asset.uri;\n        case 'file':\n          return a.file === (b as typeof a).file;\n        case 'fileUri':\n          return a.localUri === (b as typeof a).localUri;\n      }\n    }\n\n    export function toFinalizedAttachment(\n      uploadIntent: UploadIntent,\n      uploadState: UploadState\n    ): FinalizedAttachment | null {\n      if (uploadState.status === 'error') {\n        return null;\n      }\n      switch (uploadIntent.type) {\n        case 'image':\n          return {\n            type: 'image',\n            file: uploadIntent.asset,\n            uploadState,\n          };\n\n        case 'file':\n          return {\n            type: 'file',\n            localFile: uploadIntent.file,\n            size: uploadIntent.file.size,\n            mimeType: uploadIntent.file.type,\n            name: uploadIntent.file.name,\n            uploadState,\n          };\n\n        case 'fileUri':\n          return {\n            type: 'file',\n            localFile: uploadIntent.localUri,\n            name: uploadIntent.name,\n            size: uploadIntent.size,\n            mimeType: uploadIntent.type,\n            uploadState,\n          };\n      }\n    }\n\n    /** Builds a FinalizedAttachment using local data - used in optimistic UI update. */\n    export function toLocalFinalizedAttachment(\n      uploadIntent: UploadIntent\n    ): FinalizedAttachment | null {\n      switch (uploadIntent.type) {\n        case 'image':\n          return {\n            type: 'image',\n            file: uploadIntent.asset,\n            uploadState: {\n              status: 'uploading',\n              localUri: uploadIntent.asset.uri,\n            },\n          };\n\n        case 'file':\n          return {\n            type: 'file',\n            localFile: uploadIntent.file,\n            size: uploadIntent.file.size,\n            mimeType: uploadIntent.file.type,\n            name: uploadIntent.file.name,\n            uploadState: {\n              status: 'uploading',\n              localUri: createLocalUri(uploadIntent),\n            },\n          };\n\n        case 'fileUri':\n          return {\n            type: 'file',\n            localFile: uploadIntent.localUri,\n            size: uploadIntent.size,\n            mimeType: uploadIntent.mimeType,\n            name: uploadIntent.name,\n            uploadState: {\n              status: 'uploading',\n              localUri: uploadIntent.localUri,\n            },\n          };\n      }\n    }\n  }\n\n  export function toUploadIntent(\n    attachment: Attachment\n  ):\n    | { needsUpload: false; finalized: FinalizedAttachment }\n    | ({ needsUpload: true } & UploadIntent) {\n    switch (attachment.type) {\n      case 'image':\n        return {\n          needsUpload: true,\n          type: 'image',\n          asset: attachment.file,\n        };\n      case 'file':\n        if (attachment.localFile instanceof File) {\n          return {\n            needsUpload: true,\n            type: 'file',\n            file: attachment.localFile,\n          };\n        } else {\n          return {\n            needsUpload: true,\n            type: 'fileUri',\n            localUri: attachment.localFile,\n            name: attachment.name,\n            size: attachment.size,\n            mimeType: attachment.mimeType,\n          };\n        }\n      case 'text':\n      // fallthrough\n      case 'link':\n      // fallthrough\n      case 'reference':\n        return { needsUpload: false, finalized: attachment };\n    }\n  }\n\n  export function fromUploadIntent(uploadIntent: UploadIntent): Attachment {\n    switch (uploadIntent.type) {\n      case 'image': {\n        return { type: 'image', file: uploadIntent.asset };\n      }\n      case 'file': {\n        return {\n          type: 'file',\n          localFile: uploadIntent.file,\n          size: uploadIntent.file.size,\n          mimeType: uploadIntent.file.type,\n        };\n      }\n      case 'fileUri': {\n        return {\n          type: 'file',\n          localFile: uploadIntent.localUri,\n          name: uploadIntent.name,\n          size: uploadIntent.size,\n          mimeType: uploadIntent.mimeType,\n        };\n      }\n    }\n  }\n\n  export function toSuccessfulFinalizedAttachment(\n    attachment: Attachment,\n    uploadState: UploadState | null\n  ): FinalizedAttachment | null {\n    const uploadIntent = toUploadIntent(attachment);\n    if (uploadIntent.needsUpload) {\n      if (uploadState == null || uploadState.status !== 'success') {\n        return null;\n      }\n      switch (uploadIntent.type) {\n        case 'image':\n          return {\n            type: 'image',\n            file: uploadIntent.asset,\n            uploadState,\n          };\n\n        case 'file':\n          return {\n            type: 'file',\n            localFile: uploadIntent.file,\n            size: uploadIntent.file.size,\n            name: uploadIntent.file.name,\n            mimeType: uploadIntent.file.type,\n            uploadState,\n          };\n\n        case 'fileUri':\n          return {\n            type: 'file',\n            localFile: uploadIntent.localUri,\n            size: uploadIntent.size,\n            name: uploadIntent.name,\n            mimeType: uploadIntent.mimeType,\n            uploadState,\n          };\n      }\n    } else {\n      return (uploadIntent as { needsUpload: false; finalized: FinalizedAttachment }).finalized;\n    }\n  }\n\n  /**\n   * Make an attachment safe for JSON serialization.\n   * Converts web File objects to blob URLs.\n   * On non-web platforms (React Native), localFile is already a string path.\n   */\n  export function makeSerializable(att: Attachment): Attachment {\n    if (\n      att.type === 'file' &&\n      att.localFile instanceof File &&\n      typeof URL.createObjectURL === 'function'\n    ) {\n      return {\n        ...att,\n        localFile: URL.createObjectURL(att.localFile),\n        name: att.localFile.name,\n        size: att.localFile.size,\n        mimeType: att.localFile.type,\n      };\n    }\n    return att;\n  }\n}\n\nfunction uploadStateUri(\n  uploadState: Extract<UploadState, { status: 'success' | 'uploading' }>\n): string {\n  switch (uploadState.status) {\n    case 'success':\n      return uploadState.remoteUri;\n    case 'uploading':\n      return uploadState.localUri;\n  }\n}\n","const TLON_NAMESPACE = 'tlonEnv';\n\nexport interface Constants {\n  DEV_SHIP_URL: string;\n  INVITE_PROVIDER: string;\n  NOTIFY_PROVIDER: string;\n  NOTIFY_SERVICE: string;\n  POST_HOG_API_KEY: string;\n  API_URL: string;\n  API_AUTH_USERNAME: string | undefined;\n  API_AUTH_PASSWORD: string | undefined;\n  RECAPTCHA_SITE_KEY: string;\n  SHIP_URL_PATTERN: string;\n  DEFAULT_LURE: string;\n  DEFAULT_PRIORITY_TOKEN: string;\n  DEFAULT_TLON_LOGIN_EMAIL: string;\n  DEFAULT_TLON_LOGIN_PASSWORD: string;\n  DEFAULT_INVITE_LINK_URL: string;\n  DEFAULT_SHIP_LOGIN_URL: string;\n  DEFAULT_SHIP_LOGIN_ACCESS_CODE: string;\n  DEFAULT_ONBOARDING_PASSWORD: string;\n  DEFAULT_ONBOARDING_TLON_EMAIL: string;\n  DEFAULT_ONBOARDING_NICKNAME: string;\n  DEFAULT_ONBOARDING_PHONE_NUMBER: string | undefined;\n  ENABLED_LOGGERS: string[];\n  IGNORE_COSMOS: boolean;\n  TLON_EMPLOYEE_GROUP: string;\n  BRANCH_KEY: string;\n  BRANCH_DOMAIN: string;\n  INVITE_SERVICE_ENDPOINT: string;\n  INVITE_SERVICE_IS_DEV: boolean;\n  GIT_HASH: string;\n  DISABLE_SPLASH_MODAL: boolean;\n  AUTOMATED_TEST: boolean;\n  OPENROUTER_API_KEY: string;\n}\n\n/**\n * Default constants for standalone usage.\n * These can be overridden by setting window.tlonEnv (browser) or global.tlonEnv (Node.js).\n */\nconst DEFAULT_CONSTANTS: Constants = {\n  DEV_SHIP_URL: '',\n  INVITE_PROVIDER: '~wannec-dansen',\n  NOTIFY_PROVIDER: '~wannec-dansen',\n  NOTIFY_SERVICE: 'notify',\n  POST_HOG_API_KEY: '',\n  API_URL: 'https://api.tlon.io',\n  API_AUTH_USERNAME: undefined,\n  API_AUTH_PASSWORD: undefined,\n  RECAPTCHA_SITE_KEY: '',\n  SHIP_URL_PATTERN: 'https://{shipId}.tlon.network',\n  DEFAULT_LURE: '',\n  DEFAULT_PRIORITY_TOKEN: '',\n  DEFAULT_TLON_LOGIN_EMAIL: '',\n  DEFAULT_TLON_LOGIN_PASSWORD: '',\n  DEFAULT_INVITE_LINK_URL: '',\n  DEFAULT_SHIP_LOGIN_URL: '',\n  DEFAULT_SHIP_LOGIN_ACCESS_CODE: '',\n  DEFAULT_ONBOARDING_PASSWORD: '',\n  DEFAULT_ONBOARDING_TLON_EMAIL: '',\n  DEFAULT_ONBOARDING_NICKNAME: '',\n  DEFAULT_ONBOARDING_PHONE_NUMBER: undefined,\n  ENABLED_LOGGERS: [],\n  IGNORE_COSMOS: false,\n  TLON_EMPLOYEE_GROUP: '~natnex-ronret/tlon',\n  BRANCH_KEY: '',\n  BRANCH_DOMAIN: 'tlon.network',\n  INVITE_SERVICE_ENDPOINT: 'https://invite.tlon.io',\n  INVITE_SERVICE_IS_DEV: false,\n  GIT_HASH: '',\n  DISABLE_SPLASH_MODAL: false,\n  AUTOMATED_TEST: false,\n  OPENROUTER_API_KEY: '',\n};\n\n/**\n * Get runtime constants. Checks window.tlonEnv (browser), global.tlonEnv (Node.js),\n * then falls back to defaults. You can configure by setting:\n * - Browser: window.tlonEnv = { ... }\n * - Node.js: global.tlonEnv = { ... }\n */\nexport function getConstants(): Constants {\n  // Check browser window\n  if (typeof window !== 'undefined' && (window as any)[TLON_NAMESPACE]) {\n    return { ...DEFAULT_CONSTANTS, ...(window as any)[TLON_NAMESPACE] };\n  }\n\n  // Check Node.js global\n  if (typeof global !== 'undefined' && (global as any)[TLON_NAMESPACE]) {\n    return { ...DEFAULT_CONSTANTS, ...(global as any)[TLON_NAMESPACE] };\n  }\n\n  // Return defaults for standalone usage\n  return DEFAULT_CONSTANTS;\n}\n\n/**\n * Configure constants programmatically (useful for standalone usage).\n */\nexport function configureConstants(constants: Partial<Constants>): void {\n  if (typeof window !== 'undefined') {\n    (window as any)[TLON_NAMESPACE] = { ...getConstants(), ...constants };\n  } else if (typeof global !== 'undefined') {\n    (global as any)[TLON_NAMESPACE] = { ...getConstants(), ...constants };\n  }\n}\n\nexport function isOpenRouterConfigured(): boolean {\n  const constants = getConstants();\n  return !!constants.OPENROUTER_API_KEY && constants.OPENROUTER_API_KEY.length > 0;\n}\n","export type TemplateChannelType = 'chat' | 'notebook' | 'gallery';\n\nexport interface TemplateChannel {\n  type: TemplateChannelType;\n  title: string;\n  description: string;\n}\n\nexport interface GroupTemplate {\n  id: string;\n  title: string;\n  subtitle: string;\n  description: string;\n  icon: string;\n  channels: TemplateChannel[];\n}\n\nexport const groupTemplates = [\n  {\n    id: 'book-club',\n    title: 'Book Club',\n    subtitle: 'Discuss your latest reads',\n    description: 'A group for discussing books and literature',\n    icon: '📚',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Book chat',\n        description: 'Discuss books and literature',\n      },\n      {\n        type: 'gallery',\n        title: 'Now reading',\n        description: 'Share what you\\'re currently reading',\n      },\n      {\n        type: 'notebook',\n        title: 'Reviews',\n        description: 'Write and share book reviews',\n      },\n    ],\n  },\n  {\n    id: 'cooking-club',\n    title: 'Cooking Club',\n    subtitle: 'Share recipes and cooking tips',\n    description: 'A group for food lovers and home cooks',\n    icon: '🍳',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Food talk',\n        description: 'Chat about cooking and food',\n      },\n      {\n        type: 'gallery',\n        title: 'Meal pics',\n        description: 'Share photos of your culinary creations',\n      },\n      {\n        type: 'notebook',\n        title: 'Recipes',\n        description: 'Collect and share your favorite recipes',\n      },\n    ],\n  },\n  {\n    id: 'music',\n    title: 'Music',\n    subtitle: 'Share and discover new tunes',\n    description: 'A group for music lovers and audiophiles',\n    icon: '🎵',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Tune talk',\n        description: 'Discuss music and artists',\n      },\n      {\n        type: 'gallery',\n        title: 'Now listening',\n        description: 'Share what you\\'re listening to',\n      },\n      {\n        type: 'notebook',\n        title: 'Playlists',\n        description: 'Curate and share playlists',\n      },\n    ],\n  },\n  {\n    id: 'running-club',\n    title: 'Running Club',\n    subtitle: 'Track your runs and stay motivated',\n    description: 'A group for runners of all levels',\n    icon: '🏃',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Run chat',\n        description: 'Chat about running and training',\n      },\n      {\n        type: 'gallery',\n        title: 'Run pics',\n        description: 'Share photos from your runs',\n      },\n      {\n        type: 'notebook',\n        title: 'Goals',\n        description: 'Track your running goals and progress',\n      },\n    ],\n  },\n  {\n    id: 'cinema-club',\n    title: 'Cinema Club',\n    subtitle: 'Discuss and review films',\n    description: 'A group for movie enthusiasts and film buffs',\n    icon: '🎬',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Film chat',\n        description: 'Discuss movies and cinema',\n      },\n      {\n        type: 'gallery',\n        title: 'Now watching',\n        description: 'Share what you\\'re currently watching',\n      },\n      {\n        type: 'notebook',\n        title: 'Reviews',\n        description: 'Write and share film reviews',\n      },\n    ],\n  },\n  {\n    id: 'garden-club',\n    title: 'Garden Club',\n    subtitle: 'Grow together',\n    description: 'A group for gardeners and plant enthusiasts',\n    icon: '🌱',\n    channels: [\n      {\n        type: 'chat',\n        title: 'Garden talk',\n        description: 'Chat about gardening and plants',\n      },\n      {\n        type: 'gallery',\n        title: 'Plant pics',\n        description: 'Share photos of your garden and plants',\n      },\n      {\n        type: 'notebook',\n        title: 'Tips, plans and schedules',\n        description: 'Share gardening tips and track your plans',\n      },\n    ],\n  },\n] as const satisfies GroupTemplate[];\n\n// Basic group template used for custom group creation\nexport const basicGroupTemplate = {\n  id: 'basic-group',\n  title: 'Basic Group',\n  subtitle: 'A basic group with essential channels',\n  description: 'A basic group with essential channels',\n  icon: '✨',\n  channels: [\n    {\n      type: 'chat',\n      title: 'Chat',\n      description: 'General chat',\n    },\n    {\n      type: 'gallery',\n      title: 'Gallery',\n      description: 'Share images',\n    },\n    {\n      type: 'notebook',\n      title: 'Notebook',\n      description: 'Share notes',\n    },\n  ],\n} as const satisfies GroupTemplate;\n\nexport type GroupTemplateId = (typeof groupTemplates)[number]['id'] | typeof basicGroupTemplate.id;\n\nconst allTemplates = [...groupTemplates, basicGroupTemplate];\n\nexport const groupTemplatesById = allTemplates.reduce(\n  (acc, template) => {\n    acc[template.id as GroupTemplateId] = template;\n    return acc;\n  },\n  {} as Record<GroupTemplateId, GroupTemplate>\n);\n","export type User = {\n  id: string;\n  email: string;\n  phoneNumber?: string;\n  admin: boolean;\n  ships: string[];\n  requirePhoneNumberVerification: boolean;\n  phoneNumberVerifiedAt?: string;\n  verified: boolean;\n};\n\nexport type ReservableShip = {\n  id: string;\n  readyForDistribution: boolean;\n};\n\nexport type ReservedShip = {\n  id: string;\n  reservedBy: string;\n};\n\nexport type AssignmentResponse = {\n  ship: {\n    ship: ReservedShip;\n    status: HostedShipStatus;\n  };\n  code?: string;\n  personalLureToken?: string;\n};\n\nexport type BootPhase =\n  | 'Pending'\n  | 'Ready'\n  | 'Suspended'\n  | 'UnderMaintenance'\n  | 'Halting'\n  | 'ExportRunning'\n  | 'Unknown';\n\nexport type HostedShipInfo = {\n  booting: boolean;\n  manualUpdateNeeded?: boolean;\n  showWayfinding?: boolean;\n  id: string;\n};\n\nexport type HostedShipStatus = {\n  phase: BootPhase;\n};\n\nexport type HostedShipResponse = {\n  ship: HostedShipInfo;\n  status?: HostedShipStatus;\n};\n\nexport enum HostedNodeStatus {\n  Running = 'Running',\n  Paused = 'Paused',\n  Suspended = 'Suspended',\n  UnderMaintenance = 'UnderMaintenance',\n  Unknown = 'Unknown',\n}\n\nexport function nodeUrlIsHosted(url: string) {\n  return url.endsWith('tlon.network') || url.endsWith('.test.tlon.systems');\n}\n","import type { ChannelType } from '../db/types';\nimport type { PostMetadata } from '../db/types';\nimport { Block, Inline, Story } from '../urbit';\nimport { Attachment } from './attachment';\n\ninterface _PostDataDraftBase {\n  channelId: string;\n  content: (Inline | Block)[];\n  attachments: Attachment[];\n  channelType: ChannelType;\n  title?: string;\n  image?: string;\n  replyToPostId: string | null;\n}\n/** Draft for an original, non-edit post */\nexport interface PostDataDraftPost extends _PostDataDraftBase {\n  isEdit?: false;\n}\nexport interface PostDataDraftEdit extends _PostDataDraftBase {\n  isEdit: true;\n  editTargetPostId: string;\n}\n\n/**\n * A static, frozen version of a post draft that can be used to create a post.\n * In other words, this has everything you need to initiate sending a post.\n * Attachments need to be finalized before sending.\n */\nexport type PostDataDraft = PostDataDraftPost | PostDataDraftEdit;\n\ninterface _PostDataFinalizedBase {\n  channelId: string;\n  content: Story;\n  blob?: string;\n  metadata?: PostMetadata;\n  replyToPostId: string | null;\n}\n\n/**\n * Finalized \"normal\" post (i.e. not an edit).\n */\nexport interface PostDataFinalizedParent extends _PostDataFinalizedBase {\n  isEdit?: false;\n}\n\nexport interface PostDataFinalizedEdit extends _PostDataFinalizedBase {\n  isEdit: true;\n  editTargetPostId: string;\n}\n\n/**\n * A post that's ready to head down to the network.\n * Nothing left to do but send it.\n */\nexport type PostDataFinalized = PostDataFinalizedParent | PostDataFinalizedEdit;\n\nexport namespace PostDataDraft {\n  /**\n   * Make a PostDataDraft safe for JSON serialization.\n   * Converts web File objects in attachments to blob URLs.\n   */\n  export function serialize(draft: PostDataDraft): PostDataDraft {\n    return {\n      ...draft,\n      attachments: draft.attachments.map(Attachment.makeSerializable),\n    };\n  }\n\n  /**\n   * Type guard to validate that an unknown value is a valid PostDataDraft.\n   * Used when deserializing drafts from the database.\n   */\n  export function isValid(value: unknown): value is PostDataDraft {\n    if (typeof value !== 'object' || value === null) {\n      return false;\n    }\n    const obj = value as Record<string, unknown>;\n    const hasRequiredFields =\n      typeof obj.channelId === 'string' &&\n      Array.isArray(obj.content) &&\n      Array.isArray(obj.attachments) &&\n      typeof obj.channelType === 'string';\n\n    if (!hasRequiredFields) {\n      return false;\n    }\n\n    // Validate replyToPostId is string or null\n    if (obj.replyToPostId !== null && typeof obj.replyToPostId !== 'string') {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Revoke any blob URLs created during serialization.\n   * Call this when the draft is no longer needed (e.g., after successful send).\n   */\n  export function revokeBlobUrls(draft: PostDataDraft): void {\n    for (const att of draft.attachments) {\n      if (att.type === 'file' && typeof att.localFile === 'string') {\n        // Only revoke blob: URLs, not file:// or other URLs\n        if (att.localFile.startsWith('blob:')) {\n          try {\n            URL.revokeObjectURL(att.localFile);\n          } catch {\n            // Ignore errors - URL may have already been revoked\n          }\n        }\n      }\n    }\n  }\n}\n","export const PersonalGroupSlugs = {\n  slug: 'tm-wayfinding-group',\n  chatSlug: 'tm-wayfinding-group-chat',\n  collectionSlug: 'tm-wayfinding-group-collection',\n  notebookSlug: 'tm-wayfinding-group-notebook',\n};\n\nexport const PersonalGroupNames = {\n  groupTitle: 'Your Group',\n  chatTitle: 'Chat',\n  collectionTitle: 'Pictures',\n  notebookTitle: 'Notes',\n};\n\nexport interface WayfindingProgress {\n  viewedPersonalGroup: boolean;\n  viewedChatChannel: boolean;\n  viewedCollectionChannel: boolean;\n  viewedNotebookChannel: boolean;\n  tappedAddNote: boolean;\n  tappedAddCollection: boolean;\n  tappedChatInput: boolean;\n}\n","/**\n * Given a string formatted as a `@da`, returns a bigint representing the urbit date.\n *\n * @param   {string}  x  The formatted `@da`\n * @return  {bigint}     The urbit date as bigint\n */\nfunction parseDa(x) {\n  let pos = true;\n  let [date, time, ms] = x.split('..');\n  time = time || '0.0.0';\n  ms = ms || '0000';\n  let [yer, month, day] = date.slice(1).split('.');\n  if (yer.at(-1) === '-') {\n    yer = yer.slice(0, -1);\n    pos = false;\n  }\n  const [hour, minute, sec] = time.split('.');\n  const millis = ms.split('.').map(m => BigInt('0x' + m));\n  return year({\n    pos: pos,\n    year: BigInt(yer),\n    month: BigInt(month),\n    time: {\n      day: BigInt(day),\n      hour: BigInt(hour),\n      minute: BigInt(minute),\n      second: BigInt(sec),\n      ms: millis\n    }\n  });\n}\nfunction parseDr(x) {\n  const rop = {\n    day: 0n,\n    hour: 0n,\n    minute: 0n,\n    second: 0n,\n    ms: []\n  };\n  x = x.slice(1); //  strip ~\n  let [time, ms] = x.split('..');\n  ms = ms || '0000';\n  rop.ms = ms.split('.').map(m => BigInt('0x' + m));\n  time.split('.').forEach(a => {\n    switch (a[0]) {\n      case 'd':\n        rop.day += BigInt(a.slice(1));\n        break;\n      case 'h':\n        rop.hour += BigInt(a.slice(1));\n        break;\n      case 'm':\n        rop.minute += BigInt(a.slice(1));\n        break;\n      case 's':\n        rop.second += BigInt(a.slice(1));\n        break;\n      default:\n        throw new Error('bad dr: ' + x);\n    }\n  });\n  ms = ms || '0000';\n  return yule(rop);\n}\n/**\n * Given a bigint representing an urbit date, returns a string formatted as a proper `@da`.\n *\n * @param   {bigint}  x  The urbit date as bigint\n * @return  {string}     The formatted `@da`\n */\nfunction renderDa(x) {\n  const {\n    pos,\n    year,\n    month,\n    time\n  } = yore(x);\n  let out = `~${year}${pos ? '' : '-'}.${month}.${time.day}`;\n  if (time.hour !== 0n || time.minute !== 0n || time.second !== 0n || time.ms.length !== 0) {\n    out = out + `..${time.hour.toString().padStart(2, '0')}.${time.minute.toString().padStart(2, '0')}.${time.second.toString().padStart(2, '0')}`;\n    if (time.ms.length !== 0) {\n      out = out + `..${time.ms.map(x => x.toString(16).padStart(4, '0')).join('.')}`;\n    }\n  }\n  return out;\n}\nfunction renderDr(x) {\n  if (x === 0n) return '~s0';\n  const {\n    day,\n    hour,\n    minute,\n    second,\n    ms\n  } = yell(x);\n  let out = [];\n  if (day !== 0n) out.push('d' + day.toString());\n  if (hour !== 0n) out.push('h' + hour.toString());\n  if (minute !== 0n) out.push('m' + minute.toString());\n  if (second !== 0n) out.push('s' + second.toString());\n  if (ms.length !== 0) {\n    if (out.length === 0) out.push('s0');\n    out.push('.' + ms.map(x => x.toString(16).padStart(4, '0')).join('.'));\n  }\n  return '~' + out.join('.');\n}\n/**\n * Given a bigint representing an urbit date, returns a unix timestamp.\n *\n * @param   {bigint}  da  The urbit date\n * @return  {number}      The unix timestamp\n */\nfunction toUnix(da) {\n  // ported from +time:enjs:format in hoon.hoon\n  const offset = DA_SECOND / 2000n;\n  const epochAdjusted = offset + (da - DA_UNIX_EPOCH);\n  return Math.round(Number(epochAdjusted * 1000n / DA_SECOND));\n}\n/**\n * Given a unix timestamp, returns a bigint representing an urbit date\n *\n * @param   {number}  unix  The unix timestamp\n * @return  {bigint}        The urbit date\n */\nfunction fromUnix(unix) {\n  const timeSinceEpoch = BigInt(unix) * DA_SECOND / 1000n;\n  return DA_UNIX_EPOCH + timeSinceEpoch;\n}\n/**\n * Given a number of seconds, return a bigint representing its `@dr`\n */\nfunction fromSeconds(seconds) {\n  return yule({\n    day: 0n,\n    hour: 0n,\n    minute: 0n,\n    second: seconds,\n    ms: []\n  });\n}\n/**\n * Convert a `@dr` to the amount of seconds it represents, dropping sub-\n * second precision\n */\nfunction toSeconds(dr) {\n  const {\n    day,\n    hour,\n    minute,\n    second\n  } = yell(dr);\n  return ((day * 24n + hour) * 60n + minute) * 60n + second;\n}\nconst DA_UNIX_EPOCH = /*#__PURE__*/BigInt('170141184475152167957503069145530368000'); // `@ud` ~1970.1.1\nconst DA_SECOND = /*#__PURE__*/BigInt('18446744073709551616'); // `@ud` ~s1\nconst EPOCH = /*#__PURE__*/BigInt('292277024400');\nfunction isLeapYear(year) {\n  return year % 4n === 0n && year % 100n !== 0n || year % 400n === 0n;\n}\nconst MOH_YO = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst MOY_YO = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAY_YO = 86400n;\nconst HOR_YO = 3600n;\nconst MIT_YO = 60n;\nconst ERA_YO = 146097n;\nconst CET_YO = 36524n;\nfunction year(det) {\n  const yer = det.pos ? EPOCH + BigInt(det.year) : EPOCH - (BigInt(det.year) - 1n);\n  const day = (() => {\n    let cah = isLeapYear(yer) ? MOY_YO : MOH_YO;\n    let d = det.time.day - 1n;\n    let m = det.month - 1n;\n    while (m !== 0n) {\n      const [first, ...rest] = cah;\n      d = d + BigInt(first);\n      m = m - 1n;\n      cah = rest;\n    }\n    let loop = true;\n    let y = yer;\n    while (loop == true) {\n      if (y % 4n !== 0n) {\n        y = y - 1n;\n        d = d + (isLeapYear(y) ? 366n : 365n);\n      } else if (y % 100n !== 0n) {\n        y = y - 4n;\n        d = d + (isLeapYear(y) ? 1461n : 1460n);\n      } else if (y % 400n !== 0n) {\n        y = y - 100n;\n        d = d + (isLeapYear(y) ? 36525n : 36524n);\n      } else {\n        let eras = y / 400n;\n        d = d + eras * (4n * 36524n + 1n);\n        loop = false;\n      }\n    }\n    return d;\n  })();\n  det.time.day = day;\n  return yule(det.time);\n}\nfunction yule(rip) {\n  let sec = rip.second + DAY_YO * rip.day + HOR_YO * rip.hour + MIT_YO * rip.minute;\n  let ms = rip.ms;\n  let fac = 0n;\n  let muc = 3n;\n  while (ms.length !== 0) {\n    const [first, ...rest] = ms;\n    fac = fac + (first << 16n * muc);\n    ms = rest;\n    muc -= 1n;\n  }\n  return fac | sec << 64n;\n}\nfunction yell(x) {\n  let sec = x >> 64n;\n  const milliMask = BigInt('0xffffffffffffffff');\n  const millis = milliMask & x;\n  const ms = millis.toString(16).padStart(16, '0').match(/.{4}/g).map(x => BigInt('0x' + x));\n  while (ms.at(-1) === 0n) {\n    ms.pop();\n  }\n  let day = sec / DAY_YO;\n  sec = sec % DAY_YO;\n  let hor = sec / HOR_YO;\n  sec = sec % HOR_YO;\n  let mit = sec / MIT_YO;\n  sec = sec % MIT_YO;\n  return {\n    ms,\n    day,\n    minute: mit,\n    hour: hor,\n    second: sec\n  };\n}\nfunction yall(day) {\n  let era = 0n;\n  let cet = 0n;\n  let lep = false;\n  era = day / ERA_YO;\n  day = day % ERA_YO;\n  if (day < CET_YO + 1n) {\n    lep = true;\n  } else {\n    lep = false;\n    cet = 1n;\n    day = day - (CET_YO + 1n);\n    cet = cet + day / CET_YO;\n    day = day % CET_YO;\n  }\n  let yer = era * 400n + cet * 100n;\n  let loop = true;\n  while (loop == true) {\n    let dis = lep ? 366n : 365n;\n    if (!(day < dis)) {\n      yer = yer + 1n;\n      day = day - dis;\n      lep = yer % 4n === 0n;\n    } else {\n      loop = false;\n      let inner = true;\n      let mot = 0n;\n      while (inner) {\n        let cah = lep ? MOY_YO : MOH_YO;\n        let zis = BigInt(cah[Number(mot)]);\n        if (day < zis) {\n          return [yer, mot + 1n, day + 1n];\n        }\n        mot = mot + 1n;\n        day = day - zis;\n      }\n    }\n  }\n  return [0n, 0n, 0n];\n}\nfunction yore(x) {\n  const time = yell(x);\n  const [y, month, d] = yall(time.day);\n  time.day = d;\n  const pos = y > EPOCH;\n  const year = pos ? y - EPOCH : EPOCH + 1n - y;\n  return {\n    pos,\n    year,\n    month,\n    time\n  };\n}\n\n// ++  muk\n//\n// See arvo/sys/hoon.hoon.\n/**\n * Standard murmur3.\n *\n * @param  {Number}       syd\n * @param  {Number}       len\n * @param  {bigint}       key\n * @return {bigint}\n */\nconst muk = (syd, key) => {\n  const lo = Number(key & 0xffn);\n  const hi = Number((key & 0xff00n) / 256n);\n  const kee = String.fromCharCode(lo) + String.fromCharCode(hi);\n  return BigInt(murmurhash3_32_gc(kee, syd));\n};\n// see: https://github.com/garycourt/murmurhash-js\n//\n// Copyright (c) 2011 Gary Court\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n/**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n **/\nconst murmurhash3_32_gc = (key, seed) => {\n  let remainder, bytes, h1, h1b, c1, c2, k1, i; // c1b, c2b unused\n  remainder = key.length & 3; // key.length % 4\n  bytes = key.length - remainder;\n  h1 = seed;\n  c1 = 0xcc9e2d51;\n  c2 = 0x1b873593;\n  i = 0;\n  while (i < bytes) {\n    k1 = key.charCodeAt(i) & 0xff | (key.charCodeAt(++i) & 0xff) << 8 | (key.charCodeAt(++i) & 0xff) << 16 | (key.charCodeAt(++i) & 0xff) << 24;\n    ++i;\n    k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;\n    k1 = k1 << 15 | k1 >>> 17;\n    k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;\n    h1 ^= k1;\n    h1 = h1 << 13 | h1 >>> 19;\n    h1b = (h1 & 0xffff) * 5 + (((h1 >>> 16) * 5 & 0xffff) << 16) & 0xffffffff;\n    h1 = (h1b & 0xffff) + 0x6b64 + (((h1b >>> 16) + 0xe654 & 0xffff) << 16);\n  }\n  k1 = 0;\n  switch (remainder) {\n    case 3:\n      k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n    case 2:\n      k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n    case 1:\n      k1 ^= key.charCodeAt(i) & 0xff;\n      k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;\n      k1 = k1 << 15 | k1 >>> 17;\n      k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;\n      h1 ^= k1;\n  }\n  h1 ^= key.length;\n  h1 ^= h1 >>> 16;\n  h1 = (h1 & 0xffff) * 0x85ebca6b + (((h1 >>> 16) * 0x85ebca6b & 0xffff) << 16) & 0xffffffff;\n  h1 ^= h1 >>> 13;\n  h1 = (h1 & 0xffff) * 0xc2b2ae35 + (((h1 >>> 16) * 0xc2b2ae35 & 0xffff) << 16) & 0xffffffff;\n  h1 ^= h1 >>> 16;\n  return h1 >>> 0;\n};\n\n// ++  ob\n//\n// See arvo/sys/hoon.hoon.\n// a PRF for j in { 0, .., 3 }\nconst F = (j, arg) => {\n  const raku = [0xb76d5eed, 0xee281300, 0x85bcae01, 0x4b387af7];\n  return muk(raku[j], arg);\n};\n/**\n * Conceal structure v3.\n *\n * @param {String, Number, bigint} pyn\n * @return  {bigint}\n */\nconst fein = arg => {\n  const loop = pyn => {\n    const lo = pyn & 0xffffffffn;\n    const hi = pyn & 0xffffffff00000000n;\n    return pyn >= 0x10000n && pyn <= 0xffffffffn ? 0x10000n + feis(pyn - 0x10000n) : pyn >= 0x100000000n && pyn <= 0xffffffffffffffffn ? hi | loop(lo) : pyn;\n  };\n  return loop(arg);\n};\n/**\n * Restore structure v3.\n *\n * @param  {String, Number, bigint}  cry\n * @return  {bigint}\n */\nconst fynd = arg => {\n  const loop = cry => {\n    const lo = cry & 0xffffffffn;\n    const hi = cry & 0xffffffff00000000n;\n    return cry >= 0x10000n && cry <= 0xffffffffn ? 0x10000n + tail(cry - 0x10000n) : cry >= 0x100000000n && cry <= 0xffffffffffffffffn ? hi | loop(lo) : cry;\n  };\n  return loop(BigInt(arg));\n};\n/**\n * Generalised Feistel cipher.\n *\n * See: Black and Rogaway (2002), \"Ciphers with arbitrary finite domains.\"\n *\n * Note that this has been adjusted from the reference paper in order to\n * support some legacy behaviour.\n *\n * @param  {String, Number, bigint}\n * @return  {BN}\n */\nconst feis = arg => Fe(4, 65535n, 65536n, 0xffffffffn, F, arg);\nconst Fe = (r, a, b, k, f, m) => {\n  const c = fe(r, a, b, f, m);\n  return c < k ? c : fe(r, a, b, f, c);\n};\nconst fe = (r, a, b, f, m) => {\n  const loop = (j, ell, arr) => {\n    if (j > r) {\n      return r % 2 !== 0 ? a * arr + ell : arr === a ? a * arr + ell : a * ell + arr;\n    } else {\n      const eff = BigInt(f(j - 1, arr).toString());\n      const tmp = j % 2 !== 0 ? (ell + eff) % a : (ell + eff) % b;\n      return loop(j + 1, arr, tmp);\n    }\n  };\n  const L = m % a;\n  const R = m / a;\n  return loop(1, L, R);\n};\n/**\n * Reverse 'feis'.\n *\n * See: Black and Rogaway (2002), \"Ciphers with arbitrary finite domains.\"\n *\n * Note that this has been adjusted from the reference paper in order to\n * support some legacy behaviour.\n *\n * @param {bigint}  arg\n * @return  {bigint}\n */\nconst tail = arg => Fen(4, 65535n, 65536n, 0xffffffffn, F, arg);\nconst Fen = (r, a, b, k, f, m) => {\n  const c = fen(r, a, b, f, m);\n  return c < k ? c : fen(r, a, b, f, c);\n};\nconst fen = (r, a, b, f, m) => {\n  const loop = (j, ell, arr) => {\n    if (j < 1) {\n      return a * arr + ell;\n    } else {\n      const eff = f(j - 1, ell);\n      // NB (jtobin):\n      //\n      // Slight deviation from B&R (2002) here to prevent negative values.  We\n      // add 'a' or 'b' to arr as appropriate and reduce 'eff' modulo the same\n      // number before performing subtraction.\n      //\n      const tmp = j % 2 !== 0 ? (arr + a - eff % a) % a : (arr + b - eff % b) % b;\n      return loop(j - 1, tmp, ell);\n    }\n  };\n  const ahh = r % 2 !== 0 ? m / a : m % a;\n  const ale = r % 2 !== 0 ? m % a : m / a;\n  const L = ale === a ? ahh : ale;\n  const R = ale === a ? ale : ahh;\n  return loop(r, L, R);\n};\nvar ob = {\n  F,\n  fe,\n  Fe,\n  feis,\n  fein,\n  fen,\n  Fen,\n  tail,\n  fynd\n};\n\n//\n//  main parsing & rendering\n//\n//NOTE  matches for shape, not syllables\nconst regexP = /^~([a-z]{3}|([a-z]{6}(\\-[a-z]{6}){0,3}(\\-(\\-[a-z]{6}){4})*))$/;\n/**\n * Convert a valid `@p` literal string to a bigint.\n * Throws on malformed input.\n * @param  {String}  str  certified-sane `@p` literal string\n */\nfunction parseP(str) {\n  const syls = patp2syls(str);\n  const syl2bin = idx => {\n    return idx.toString(2).padStart(8, '0'); //NOTE  base16 isn't any faster\n  };\n\n  const addr = syls.reduce((acc, syl, idx) => idx % 2 !== 0 || syls.length === 1 ? acc + syl2bin(suffixes.indexOf(syl)) : acc + syl2bin(prefixes.indexOf(syl)), '');\n  const num = BigInt('0b' + addr);\n  return ob.fynd(num);\n}\n/**\n * Convert a valid `@p` literal string to a bigint.\n * Returns null on malformed input.\n * @param  {String}  str  `@p` literal string\n */\nfunction parseValidP(str) {\n  if (!regexP.test(str) || !validSyllables(str)) return null;\n  const res = parseP(str);\n  return str === renderP(res) ? res : null;\n}\n/**\n * Convert a number to a @p-encoded string.\n * @param  {bigint}  num\n */\nfunction renderP(num) {\n  const sxz = ob.fein(num);\n  const dyx = Math.ceil(sxz.toString(16).length / 2);\n  const dyy = Math.ceil(sxz.toString(16).length / 4);\n  function loop(tsxz, timp, trep) {\n    const log = tsxz & 0xffffn;\n    const pre = prefixes[Number(log >> 8n)];\n    const suf = suffixes[Number(log & 0xffn)];\n    const etc = timp & 0b11 ? '-' : timp === 0 ? '' : '--';\n    const res = pre + suf + etc + trep;\n    return timp === dyy ? trep : loop(tsxz >> 16n, timp + 1, res);\n  }\n  return '~' + (dyx <= 1 ? suffixes[Number(sxz)] : loop(sxz, 0, ''));\n}\n//\n//  utilities\n//\n/**\n * Validate a @p string.\n *\n * @param  {String}  str a string\n * @return  {boolean}\n */\nfunction isValidP(str) {\n  return regexP.test(str) //  general structure\n  && validSyllables(str) //  valid syllables\n  && str === renderP(parseP(str)); //  no leading zeroes\n}\n/**\n * Determine the `$rank` of a `@p` value or literal.\n * Throws on malformed input string.\n * @param   {String}  who  `@p` value or literal string\n */\nfunction clan(who) {\n  let num;\n  if (typeof who === 'bigint') num = who;else num = checkedParseP(who);\n  return num <= 0xffn ? 'czar' : num <= 0xffffn ? 'king' : num <= 0xffffffffn ? 'duke' : num <= 0xffffffffffffffffn ? 'earl' : 'pawn';\n}\n/**\n * Determine the \"size\" of a `@p` value or literal.\n * Throws on malformed input string.\n * @param   {String}  who  `@p` value or literal string\n */\nfunction kind(who) {\n  return rankToSize(clan(who));\n}\nfunction rankToSize(rank) {\n  switch (rank) {\n    case 'czar':\n      return 'galaxy';\n    case 'king':\n      return 'star';\n    case 'duke':\n      return 'planet';\n    case 'earl':\n      return 'moon';\n    case 'pawn':\n      return 'comet';\n  }\n}\nfunction sizeToRank(size) {\n  switch (size) {\n    case 'galaxy':\n      return 'czar';\n    case 'star':\n      return 'king';\n    case 'planet':\n      return 'duke';\n    case 'moon':\n      return 'earl';\n    case 'comet':\n      return 'pawn';\n  }\n}\nfunction sein(who) {\n  let num;\n  if (typeof who === 'bigint') num = who;else num = checkedParseP(who);\n  let mir = clan(num);\n  const res = mir === 'czar' ? num : mir === 'king' ? num & 0xffn : mir === 'duke' ? num & 0xffffn : mir === 'earl' ? num & 0xffffffffn : num & 0xffffn;\n  if (typeof who === 'bigint') return res;else return renderP(res);\n}\n/**\n * Render short-form ship name.\n * Throws on malformed input string.\n * @param  {String | number}  who  `@p` value or literal string\n */\nfunction cite(who) {\n  let num;\n  if (typeof who === 'bigint') num = who;else num = checkedParseP(who);\n  if (num <= 0xffffffffn) {\n    return renderP(num);\n  } else if (num <= 0xffffffffffffffffn) {\n    return renderP(num & 0xffffffffn).replace('-', '^');\n  } else {\n    return renderP(BigInt('0x' + num.toString(16).slice(0, 4))) + '_' + renderP(num & 0xffffn).slice(1);\n  }\n}\n//\n//  internals\n//\nfunction checkedParseP(str) {\n  if (!isValidP(str)) throw new Error('invalid @p literal: ' + str);\n  return parseP(str);\n}\nconst pre = `\ndozmarbinwansamlitsighidfidlissogdirwacsabwissib\\\nrigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\\\nholpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\\\nlosdilforpilramtirwintadbicdifrocwidbisdasmidlop\\\nrilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\\\nritpodmottamtolsavposnapnopsomfinfonbanmorworsip\\\nronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\\\nsivtagpadsaldivdactansidfabtarmonranniswolmispal\\\nlasdismaprabtobrollatlonnodnavfignomnibpagsopral\\\nbilhaddocridmocpacravripfaltodtiltinhapmicfanpat\\\ntaclabmogsimsonpinlomrictapfirhasbosbatpochactid\\\nhavsaplindibhosdabbitbarracparloddosbortochilmac\\\ntomdigfilfasmithobharmighinradmashalraglagfadtop\\\nmophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\\\nnimlarfitwalrapsarnalmoslandondanladdovrivbacpol\\\nlaptalpitnambonrostonfodponsovnocsorlavmatmipfip\\\n`;\nconst suf = `\nzodnecbudwessevpersutletfulpensytdurwepserwylsun\\\nrypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\\\nlunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\\\npyldulhetmevruttylwydtepbesdexsefwycburderneppur\\\nrysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\\\nsecmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\\\nselrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\\\nsyptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\\\nlytdusnebrumtynseglyxpunresredfunrevrefmectedrus\\\nbexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\\\ntenlusnussyltecmexpubrymtucfyllepdebbermughuttun\\\nbylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\\\nwedducfurfexnulluclennerlexrupnedlecrydlydfenwel\\\nnydhusrelrudneshesfetdesretdunlernyrsebhulryllud\\\nremlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\\\nlyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes\\\n`;\nconst prefixes = /*#__PURE__*/pre.match(/.{1,3}/g);\nconst suffixes = /*#__PURE__*/suf.match(/.{1,3}/g);\nfunction patp2syls(name) {\n  return name.replace(/[\\^~-]/g, '').match(/.{1,3}/g) || [];\n}\n//  check if string contains valid syllables\nfunction validSyllables(name) {\n  const syls = patp2syls(name);\n  return !(syls.length % 2 !== 0 && syls.length !== 1) // wrong length\n  && syls.every((syl, index) =>\n  //  invalid syllables\n  index % 2 !== 0 || syls.length === 1 ? suffixes.includes(syl) : prefixes.includes(syl));\n}\n\n//TODO  investigate whether native UintArrays are more portable\n//      than node Buffers\n/**\n * Convert a number to a `@q`-encoded string.\n * @param   {bigint}  num\n * @return  {String}\n */\nfunction renderQ(num) {\n  //NOTE  stupid hack to work around bad node Buffer spec\n  const hex = num.toString(16);\n  const lex = hex.length;\n  const buf = Buffer.from(hex.padStart(lex + lex % 2, '0'), 'hex');\n  const chunked = buf.length % 2 !== 0 && buf.length > 1 ? [[buf[0]]].concat(chunk(Array.from(buf.slice(1)), 2)) : chunk(Array.from(buf), 2);\n  const prefixName = byts => byts[1] === undefined ? suffixes[byts[0]] : prefixes[byts[0]] + suffixes[byts[1]]; //TODO  this branch unused\n  const name = byts => byts[1] === undefined ? suffixes[byts[0]] : prefixes[byts[0]] + suffixes[byts[1]];\n  const alg = pair => pair.length % 2 !== 0 && chunked.length > 1 ? prefixName(pair) : name(pair);\n  return chunked.reduce((acc, elem) => acc + (acc === '.~' ? '' : '-') + alg(elem), '.~');\n}\n/**\n * Convert a `@q`-encoded string to a bigint.\n * Throws on malformed input.\n * @param   {String}  str `@q` string with leading .~\n * @return  {String}\n */\nfunction parseQ(str) {\n  const chunks = str.slice(2).split('-');\n  const dec2hex = dec => {\n    if (dec < 0) throw new Error('malformed @q');\n    return dec.toString(16).padStart(2, '0');\n  };\n  const splat = chunks.map((chunk, i) => {\n    let syls = splitAt(3, chunk);\n    return syls[1] === '' && i === 0 //  singles only at the start\n    ? dec2hex(suffixes.indexOf(syls[0])) : dec2hex(prefixes.indexOf(syls[0])) + dec2hex(suffixes.indexOf(syls[1]));\n  });\n  return BigInt('0x' + (str.length === 0 ? '00' : splat.join('')));\n}\nfunction parseValidQ(str) {\n  try {\n    const num = parseQ(str);\n    return num;\n  } catch (e) {\n    return null;\n  }\n}\n//\n//  internals\n//\nfunction chunk(arr, size) {\n  let chunk = [];\n  let newArray = [chunk];\n  for (let i = 0; i < arr.length; i++) {\n    if (chunk.length < size) {\n      chunk.push(arr[i]);\n    } else {\n      chunk = [arr[i]];\n      newArray.push(chunk);\n    }\n  }\n  return newArray;\n}\nfunction splitAt(index, str) {\n  return [str.slice(0, index), str.slice(index)];\n}\n\n//  str: @r* format string including its leading . and ~s\nfunction parseR(per, str) {\n  per = getPrecision(per);\n  return parse$1(str.slice(per.l.length), per.w, per.p);\n}\nfunction renderR(per, r) {\n  per = getPrecision(per);\n  return per.l + rCo(deconstruct(r, BigInt(per.w), BigInt(per.p)));\n}\n//\n//  helpers\n//\nfunction getPrecision(per) {\n  if (per === 'h') return {\n    w: 5,\n    p: 10,\n    l: '.~~'\n  };else if (per === 's') return {\n    w: 8,\n    p: 23,\n    l: '.'\n  };else if (per === 'd') return {\n    w: 11,\n    p: 52,\n    l: '.~'\n  };else if (per === 'q') return {\n    w: 15,\n    p: 112,\n    l: '.~~~'\n  };else return per;\n}\nfunction bitMask(bits) {\n  return 2n ** bits - 1n;\n}\n//\n//  parsing and construction\n//\n//  str: @r* format string with its leading . and ~ stripped off\n//  w:   exponent bits\n//  p:   mantissa bits\nfunction parse$1(str, w, p) {\n  if (str === 'nan') return makeNaN(w, p);\n  if (str === 'inf') return makeInf(true, w, p);\n  if (str === '-inf') return makeInf(false, w, p);\n  let i = 0;\n  let sign = true;\n  if (str[i] === '-') {\n    sign = false;\n    i++;\n  }\n  let int = '';\n  while (str[i] !== '.' && str[i] !== 'e' && str[i] !== undefined) {\n    int += str[i++];\n  }\n  if (str[i] === '.') i++;\n  let fra = '';\n  while (str[i] !== 'e' && str[i] !== undefined) {\n    fra += str[i++];\n  }\n  if (str[i] === 'e') i++;\n  let expSign = true;\n  if (str[i] === '-') {\n    expSign = false;\n    i++;\n  }\n  let exp = '';\n  while (str[i] !== undefined) {\n    exp += str[i++];\n  }\n  return BigInt('0b' + makeFloat(w, p, sign, int, fra, expSign, Number(exp)));\n}\nfunction makeNaN(w, p) {\n  return bitMask(BigInt(w + 1)) << BigInt(p - 1);\n}\nfunction makeInf(s, w, p) {\n  return bitMask(BigInt(s ? w : w + 1)) << BigInt(p);\n}\n//  turn into representation without exponent\nfunction makeFloat(w, p, sign, intPart, floatPart, expSign, exp) {\n  if (exp !== 0) {\n    if (expSign) {\n      intPart = intPart + floatPart.padEnd(exp, '0').slice(0, exp);\n      floatPart = floatPart.slice(exp);\n    } else {\n      floatPart = intPart.padStart(exp, '0').slice(-exp) + floatPart;\n      intPart = intPart.slice(0, -exp);\n    }\n  }\n  return construct(p, w, sign, BigInt(intPart), BigInt(floatPart.length), BigInt(floatPart));\n}\n//NOTE  modified from an encodeFloat() written by by Jonas Raoni Soares Silva,\n//      made to operate on (big)integers, without using js's float logic.\n//      http://jsfromhell.com/classes/binary-parser\n//      (yes, this code is vaguely deranged. but it works!)\nfunction construct(precisionBits, exponentBits, sign, intPart, floatDits, floatPart) {\n  //REVIEW  when do we trigger this?\n  //        inputs representing nrs too large for exponentBits?\n  //        inputs with precision we can't match?\n  //        add tests for those cases! should match stdlib result.\n  function exceed(x) {\n    console.warn(x);\n    return 1;\n  }\n  const bias = 2 ** (exponentBits - 1) - 1,\n    minExp = -bias + 1,\n    maxExp = bias,\n    minUnnormExp = minExp - precisionBits,\n    len = 2 * bias + 1 + precisionBits + 3,\n    bin = new Array(len),\n    denom = 10n ** floatDits;\n  var exp = 0,\n    signal = !sign,\n    i,\n    lastBit,\n    rounded,\n    j,\n    result,\n    n;\n  //  zero-initialize the bit-array\n  for (i = len; i; bin[--i] = 0);\n  //  integral into bits\n  for (i = bias + 2; intPart && i; bin[--i] = intPart & 1n, intPart = intPart >> 1n);\n  //  fractional into bits\n  for (i = bias + 1; floatPart > 0n && i < len; (bin[++i] = (floatPart *= 2n) >= denom ? 1 : 0) && (floatPart = floatPart - denom));\n  //  walk cursor (i) to first 1-bit.\n  for (i = -1; ++i < len && !bin[i];);\n  //  round if needed\n  if (bin[(lastBit = precisionBits - 1 + (i = (exp = bias + 1 - i) >= minExp && exp <= maxExp ? i + 1 : bias + 1 - (exp = minExp - 1))) + 1]) {\n    if (!(rounded = bin[lastBit])) for (j = lastBit + 2; !rounded && j < len; rounded = bin[j++]);\n    for (j = lastBit + 1; rounded && --j >= 0; (bin[j] = (!bin[j] ? 1 : 0) - 0) && (rounded = 0));\n  }\n  //  walk cursor (i) to first/next(??) 1-bit\n  for (i = i - 2 < 0 ? -1 : i - 3; ++i < len && !bin[i];);\n  //  set exponent, throwing on under- and overflows\n  (exp = bias + 1 - i) >= minExp && exp <= maxExp ? ++i : exp < minExp && (exp != bias + 1 - len && exp < minUnnormExp && exceed('r.construct underflow'), i = bias + 1 - (exp = minExp - 1));\n  intPart && (exceed(intPart ? 'r.construct overflow' : 'r.construct'), exp = maxExp + 1, i = bias + 2);\n  //  exponent into bits\n  for (n = Math.abs(exp + bias), j = exponentBits + 1, result = ''; --j; result = (n & 1) + result, n = n >>= 1);\n  //  final serialization: sign + exponent + mantissa\n  return (signal ? '1' : '0') + result + bin.slice(i, i + precisionBits).join('');\n}\n//NOTE  not _exactly_ like +r-co due to dragon4() outExponent semantics.\n//      if we copy +r-co logic exactly we off-by-one all over the place.\nfunction rCo(a) {\n  if (a.t === 'n') return 'nan';\n  if (a.t === 'i') return a.s ? 'inf' : '-inf';\n  let e;\n  if (a.e - 4 > 0) {\n    //  12000 -> 12e3 e>+2\n    e = 1;\n  } else if (a.e + 2 < 0) {\n    //  0.001 -> 1e-3 e<-2\n    e = 1;\n  } else {\n    //  1.234e2 -> '.'@3 -> 123 .4\n    e = a.e + 1;\n    a.e = 0;\n  }\n  return (a.s ? '' : '-') + edCo(e, a.a) + (a.e === 0 ? '' : 'e' + a.e.toString());\n}\nfunction edCo(exp, int) {\n  const dig = Math.abs(exp);\n  if (exp <= 0) {\n    return '0.' + ''.padEnd(dig, '0') + int;\n  } else {\n    const len = int.length;\n    if (dig >= len) return int + ''.padEnd(dig - len, '0');\n    return int.slice(0, dig) + '.' + int.slice(dig);\n  }\n}\n//NOTE  the deconstruct() and dragon4() below are ported from Ryan Juckett's\n//      PrintFloat32() and Dragon4() respectively. its general structure is\n//      copied one-to-one and comments are preserved, but we got to drop some\n//      logic due to having access to native bigints. see his post series for\n//      a good walkthrough of the underlying algorithm and its implementation,\n//      as well as pointers to additional references.\n//      https://www.ryanjuckett.com/printing-floating-point-numbers/\n//      we only use one of the cutoff modes, but have maintained support for\n//      the others for completeness' sake.\n//  deconstruct(): binary float to $dn structure (+drg:ff)\nfunction deconstruct(float, exponentBits, precisionBits) {\n  //  deconstruct the value into its components\n  const mantissaMask = bitMask(precisionBits);\n  const exponentMask = bitMask(exponentBits);\n  const floatMantissa = float & mantissaMask;\n  const floatExponent = float >> BigInt(precisionBits) & exponentMask;\n  const sign = (float >> BigInt(exponentBits + precisionBits) & 1n) === 0n;\n  //  transform the components into the values they represent\n  let mantissa, exponent, mantissaHighBitIdx, unequalMargins;\n  if (floatExponent === exponentMask) {\n    //  specials\n    if (floatMantissa === 0n) return {\n      t: 'i',\n      s: sign\n    }; //  infinity\n    return {\n      t: 'n'\n    }; //  nan\n  } else if (floatExponent !== 0n) {\n    //  normalized\n    //  the floating point equation is:\n    //    value = (1 + mantissa/2^23) * 2 ^ (exponent-127)\n    //  we convert the integer equation by factoring a 2^23 out of the exponent\n    //    value = (1 + mantissa/2^23) * 2^23 * 2 ^ (exponent-127-23)\n    //    value = (2^23 + mantissa) * 2 ^ (exponent-127-23)\n    //  because of the implied 1 in front of the mantissa we have 24 bits of precision\n    //    m = (2^23 + mantissa)\n    //    e = (exponent-127-23)\n    mantissa = 1n << BigInt(precisionBits) | floatMantissa;\n    exponent = floatExponent - (2n ** (exponentBits - 1n) - 1n) - precisionBits;\n    mantissaHighBitIdx = Number(precisionBits);\n    unequalMargins = floatExponent !== 1n && floatMantissa === 0n;\n  } else {\n    //  denormalized\n    //  the floating point equation is:\n    //    value = (mantissa/2^23) * 2 ^ (1-127)\n    //  we convert the integer equation by factoring a 2^23 out of the exponent\n    //    value = (mantissa/2^23) * 2^23 * 2 ^ (1-127-23)\n    //    value = mantissa * 2 ^ (1-127-23)\n    //  we have up to 23 bits of precision\n    //    m = (mantissa)\n    //    e = (1-127-23)\n    mantissa = floatMantissa;\n    exponent = 1n - (2n ** (exponentBits - 1n) - 1n) - precisionBits;\n    mantissaHighBitIdx = mantissa.toString(2).length - 1; //  poor man's log2\n    unequalMargins = false;\n  }\n  const buf = (2n ** precisionBits).toString(10).length + 1;\n  const res = dragon4(mantissa, Number(exponent), mantissaHighBitIdx, unequalMargins, 'unique', 0, buf);\n  return {\n    t: 'd',\n    s: sign,\n    e: res.outExponent,\n    a: res.digits\n  };\n}\n//  dragon4(): binary float to decimal digits\n//\n//    like +drg:fl (but with slightly different outExponent semantics)\n//\n//    mantissa:           value significand\n//    exponent:           value exponent in base 2\n//    mantissaHighBitIdx: highest set mantissa bit index\n//    hasUnequalMargins:  is the high margin twice the low margin\n//    cutoffMode:         'unique' | 'totalLength' | 'fractionLength'\n//    cutoffNumber:       cutoff parameter for the selected mode\n//    bufferSize:         max output digits\n//\n//    digits:             printed digits\n//    outExponent:        exponent of the first digit printed\n//\nfunction dragon4(mantissa, exponent, mantissaHighBitIdx, hasUnequalMargins, cutoffMode, cutoffNumber, bufferSize) {\n  const bexponent = BigInt(exponent);\n  let pCurDigit = 0; //  pointer into output buffer (digit string index)\n  let outBuffer = new Array(bufferSize).fill('0');\n  let outExponent = 0;\n  //  if mantissa is zero, output \"0\"\n  if (mantissa === 0n) {\n    outBuffer[0] = '0';\n    outExponent = 0;\n    return {\n      digits: outBuffer.slice(0, 1).join(''),\n      outExponent\n    };\n  }\n  //  compute the initial state in integral form such that:\n  //  value     = scaledValue / scale\n  //  marginLow = scaledMarginLow / scale\n  let scale; //  positive scale applied to value and margin such\n  //  that they can be represented as whole numbers\n  let scaledValue; //  scale * mantissa\n  let scaledMarginLow; //  scale * 0.5 * (distance between this floating-\n  //  point number and its immediate lower value)\n  //  for normalized IEEE floating point values, each time the exponent is\n  //  incremented the margin also doubles. That creates a subset of transition\n  //  numbers where the high margin is twice the size of the low margin.\n  let scaledMarginHigh;\n  if (hasUnequalMargins) {\n    if (exponent > 0) {\n      //  no fractional component\n      //  1. expand the input value by multiplying out the mantissa and exponent.\n      //     this represents the input value in its whole number representation.\n      //  2. apply an additional scale of 2 such that later comparisons against\n      //     the margin values are simplified.\n      //  3. set the margin value to the lowest mantissa bit's scale.\n      scaledValue = 4n * mantissa;\n      scaledValue <<= bexponent; //  2 * 2 * mantissa*2^exponent\n      scale = 4n; //  2 * 2 * 1\n      scaledMarginLow = 1n << bexponent; //  2 * 2^(exponent-1)\n      scaledMarginHigh = 1n << bexponent + 1n; //  2 * 2 * 2^(exponent-1)\n    } else {\n      //  fractional component\n      //  in order to track the mantissa data as an integer, we store it as is\n      //  with a large scale\n      scaledValue = 4n * mantissa; //  2 * 2 * mantissa\n      scale = 1n << -bexponent + 2n; //  2 * 2 * 2^(-exponent)\n      scaledMarginLow = 1n; //  2 * 2^(-1)\n      scaledMarginHigh = 2n; //  2 * 2 * 2^(-1)\n    }\n  } else {\n    if (exponent > 0) {\n      //  no fractional component\n      //  1. expand the input value by multiplying out the mantissa and exponent.\n      //     this represents the input value in its whole number representation.\n      //  2. apply an additional scale of 2 such that later comparisons against\n      //     the margin values are simplified.\n      //  3. set the margin value to the lowest mantissa bit's scale.\n      scaledValue = 2n * mantissa;\n      scaledValue <<= bexponent; //  2 * mantissa*2^exponent\n      scale = 2n; //  2 * 1\n      scaledMarginLow = 1n << bexponent; //  2 * 2^(exponent-1)\n      scaledMarginHigh = scaledMarginLow;\n    } else {\n      //  fractional component\n      //  in order to track the mantissa data as an integer, we store it as is\n      //  with a large scale\n      scaledValue = 2n * mantissa; //  2 * mantissa\n      scale = 1n << BigInt(-exponent + 1); //  2 * 2^(-exponent)\n      scaledMarginLow = 1n; //  2 * 2^(-1)\n      scaledMarginHigh = scaledMarginLow;\n    }\n  }\n  //  compute an estimate for digitExponent that will be correct or undershoot\n  //  by one. this optimization is based on the paper \"Printing Floating-Point\n  //  Numbers Quickly and Accurately\" by Burger and Dybvig.\n  //  http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.72.4656&rep=rep1&type=pdf\n  //  we perform an additional subtraction of 0.69 to increase the frequency of\n  //  a failed estimate because that lets us take a faster branch in the code.\n  //  0.69 is chosen because 0.69 + log10(2) is less than one by a reasonable\n  //  epsilon that will account for any floating point error.\n  //  we want to set digitExponent to floor(log10(v)) + 1\n  //  v = mantissa*2^exponent\n  //  log2(v) = log2(mantissa) + exponent;\n  //  log10(v) = log2(v) * log10(2)\n  //  floor(log2(v)) = mantissaHighBitIdx + exponent;\n  //  log10(v) - log10(2) < (mantissaHighBitIdx + exponent) * log10(2) <= log10(v)\n  //  log10(v) < (mantissaHighBitIdx + exponent) * log10(2) + log10(2) <= log10(v) + log10(2)\n  //  floor( log10(v) ) < ceil( (mantissaHighBitIdx + exponent) * log10(2) ) <= floor( log10(v) ) + 1\n  //NOTE  loses precision! wants a 64-bit float. but seems precise enough...\n  const log10_2 = 0.30102999566398119521373889472449;\n  let digitExponent = Math.ceil((mantissaHighBitIdx + exponent) * log10_2 - 0.69);\n  //  if the digit exponent is smaller than the smallest desired digit for\n  //  fractional cutoff, pull the digit back into legal range at which point we\n  //  will round to the appropriate value.\n  //  note that while our value for digitExponent is still an estimate, this is\n  //  safe because it only increases the number. this will either correct\n  //  digitExponent to an accurate value or it will clamp it above the accurate\n  //  value.\n  if (cutoffMode === 'fractionLength' && digitExponent <= -cutoffNumber) {\n    digitExponent = -cutoffNumber + 1;\n  }\n  //  scale adjustment for digit exponent, divide value by 10^digitExponent\n  if (digitExponent > 0) {\n    //  the exponent is positive creating a division so we multiply up the scale\n    scale *= BigInt(10) ** BigInt(digitExponent);\n  } else if (digitExponent < 0) {\n    //  the exponent is negative creating a multiplication so we multiply\n    //  up the scaledValue, scaledMarginLow and scaledMarginHigh\n    const pow10 = BigInt(10) ** BigInt(-digitExponent);\n    scaledValue *= pow10;\n    scaledMarginLow *= pow10;\n    if (scaledMarginHigh !== scaledMarginLow) {\n      scaledMarginHigh *= scaledMarginLow;\n    }\n  }\n  //  if (value >= 1), our estimate for digitExponent was too low\n  if (scaledValue >= scale) {\n    //  the exponent estimate was incorrect. increment the exponent and don't\n    //  perform the premultiply needed for the first loop iteration.\n    digitExponent += 1;\n  } else {\n    //  the exponent estimate was correct. multiply larger by the output base\n    //  to prepare for the first loop iteration.\n    scaledValue *= 10n;\n    scaledMarginLow *= 10n;\n    if (scaledMarginHigh !== scaledMarginLow) scaledMarginHigh *= 10n;\n  }\n  //  compute the cutoff exponent (the exponent of the final digit to print).\n  //  default to the maximum size of the output buffer.\n  let cutoffExponent = digitExponent - bufferSize;\n  if (cutoffMode === 'totalLength') {\n    let desired = digitExponent - cutoffNumber;\n    if (desired > cutoffExponent) cutoffExponent = desired;\n  } else if (cutoffMode === 'fractionLength') {\n    let desired = -cutoffNumber;\n    if (desired > cutoffExponent) cutoffExponent = desired;\n  }\n  //  output the exponent of the first digit we will print\n  outExponent = digitExponent - 1;\n  //NOTE  thanks to native bigints, no bit block normalization needed\n  //  these values are used to inspect why the print loop terminated so we can properly\n  //  round the final digit.\n  let low = false; //  did the value get within marginLow distance from zero\n  let high = false; //  did the value get within marginHigh distance from one\n  let outputDigit = 0; //  current digit being output\n  if (cutoffMode === 'unique') {\n    //  for the unique cutoff mode, we will try to print until we have reached\n    //  a level of precision that uniquely distinguishes this value from its\n    //  neighbors. if we run out of space in the output buffer, we exit early.\n    while (true) {\n      digitExponent -= 1;\n      //  extract the digit\n      outputDigit = Number(scaledValue / scale);\n      scaledValue = scaledValue % scale;\n      //  update the high end of the value\n      let scaledValueHigh = scaledValue + scaledMarginHigh;\n      //  stop looping if we are far enough away from our neighboring values\n      //  or if we have reached the cutoff digit\n      low = scaledValue < scaledMarginLow;\n      high = scaledValueHigh > scale;\n      if (low || high || digitExponent === cutoffExponent) break;\n      //  store the output digit\n      outBuffer[pCurDigit] = String.fromCharCode('0'.charCodeAt(0) + outputDigit);\n      pCurDigit += 1;\n      //  mulitply larger by the output base\n      scaledValue *= 10n;\n      scaledMarginLow *= 10n;\n      if (scaledMarginHigh !== scaledMarginLow) scaledMarginHigh *= 10n;\n    }\n  } else {\n    //  for length based cutoff modes, we will try to print until we have\n    //  exhausted all precision (i.e. all remaining digits are zeros) or until\n    //  we reach the desired cutoff digit.\n    low = false;\n    high = false;\n    while (true) {\n      digitExponent -= 1;\n      //  extract the digit\n      outputDigit = Number(scaledValue / scale);\n      scaledValue = scaledValue % scale;\n      if (scaledValue === 0n || digitExponent === cutoffExponent) break;\n      //  store the output digit\n      outBuffer[pCurDigit] = String.fromCharCode('0'.charCodeAt(0) + outputDigit);\n      pCurDigit += 1;\n      //  multiply larger by the output base\n      scaledValue *= 10n;\n    }\n  }\n  //  round off the final digit.\n  //  default to rounding down if value got too close to 0\n  let roundDown = low;\n  if (low === high) {\n    //  legal to round up and down\n    //  round to the closest digit by comparing value with 0.5. to do this we\n    //  need to convert the inequality to large integer values.\n    //  compare( value, 0.5 )\n    //  compare( scale * value, scale * 0.5 )\n    //  compare( 2 * scale * value, scale )\n    scaledValue *= 2n;\n    let compare = scaledValue < scale ? -1 : scaledValue > scale ? 1 : 0;\n    roundDown = compare < 0;\n    //  if we are directly in the middle, round towards the even digit\n    //  (i.e. IEEE rouding rules)\n    if (compare === 0) roundDown = (outputDigit & 1) === 0;\n  }\n  //  print the rounded digit\n  if (roundDown) {\n    outBuffer[pCurDigit] = String.fromCharCode('0'.charCodeAt(0) + outputDigit);\n    pCurDigit += 1;\n  } else {\n    //  handle rounding up\n    if (outputDigit === 9) {\n      //  find the first non-nine prior digit\n      while (true) {\n        if (pCurDigit === 0) {\n          //  first digit\n          //  output 1 at the next highest exponent\n          outBuffer[pCurDigit] = '1';\n          pCurDigit += 1;\n          outExponent += 1;\n          break;\n        }\n        pCurDigit -= 1;\n        if (outBuffer[pCurDigit] !== '9') {\n          //  increment the digit\n          outBuffer[pCurDigit] = String.fromCharCode(outBuffer[pCurDigit].charCodeAt(0) + 1);\n          pCurDigit += 1;\n          break;\n        }\n      }\n    } else {\n      //  values in the range [0,8] can perform a simple round up\n      outBuffer[pCurDigit] = String.fromCharCode('0'.charCodeAt(0) + outputDigit + 1);\n      pCurDigit += 1;\n    }\n  }\n  //  trim trailing zeroes, produce output\n  const digits = outBuffer.slice(0, pCurDigit).join('');\n  return {\n    digits,\n    outExponent\n  };\n}\n\n//  parse: deserialize from atom literal strings\nfunction integerRegex(a, b, c, d, e) {\n  if (e === void 0) {\n    e = false;\n  }\n  const pre = d === 0 ? b : `${b}${c}{0,${d - 1}}`;\n  const aft = d === 0 ? `${c}*` : `(\\\\.${c}{${d}})*`;\n  return new RegExp(`^${e ? '\\\\-\\\\-?' : ''}${a}(0|${pre}${aft})$`);\n}\nfunction floatRegex(a) {\n  return new RegExp(`^\\\\.~{${a}}(nan|\\\\-?(inf|(0|[1-9][0-9]*)(\\\\.[0-9]+)?(e\\\\-?(0|[1-9][0-9]*))?))$`);\n}\n//TODO  rewrite with eye towards capturing groups?\nconst regex = {\n  'c': /^~\\-((~[0-9a-fA-F]+\\.)|(~[~\\.])|[0-9a-z\\-\\._])*$/,\n  'da': /^~(0|[1-9][0-9]*)\\-?\\.0*([1-9]|1[0-2])\\.0*[1-9][0-9]*(\\.\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)(\\.(\\.[0-9a-f]{4})+)?)?$/,\n  'dr': /^~((d|h|m|s)(0|[1-9][0-9]*))(\\.(d|h|m|s)(0|[1-9][0-9]*))*(\\.(\\.[0-9a-f]{4})+)?$/,\n  'f': /^\\.(y|n)$/,\n  'if': /^(\\.(0|[1-9][0-9]{0,2})){4}$/,\n  'is': /^(\\.(0|[1-9a-fA-F][0-9a-fA-F]{0,3})){8}$/,\n  'n': /^~$/,\n  'p': regexP,\n  'q': /^\\.~(([a-z]{3}|[a-z]{6})(\\-[a-z]{6})*)$/,\n  'rd': /*#__PURE__*/floatRegex(1),\n  'rh': /*#__PURE__*/floatRegex(2),\n  'rq': /*#__PURE__*/floatRegex(3),\n  'rs': /*#__PURE__*/floatRegex(0),\n  'sb': /*#__PURE__*/integerRegex('0b', '1', '[01]', 4, true),\n  'sd': /*#__PURE__*/integerRegex('', '[1-9]', '[0-9]', 3, true),\n  'si': /*#__PURE__*/integerRegex('0i', '[1-9]', '[0-9]', 0, true),\n  'sv': /*#__PURE__*/integerRegex('0v', '[1-9a-v]', '[0-9a-v]', 5, true),\n  'sw': /*#__PURE__*/integerRegex('0w', '[1-9a-zA-Z~-]', '[0-9a-zA-Z~-]', 5, true),\n  'sx': /*#__PURE__*/integerRegex('0x', '[1-9a-f]', '[0-9a-f]', 4, true),\n  't': /^~~((~[0-9a-fA-F]+\\.)|(~[~\\.])|[0-9a-z\\-\\._])*$/,\n  'ta': /^~\\.[0-9a-z\\-\\.~_]*$/,\n  'tas': /^[a-z][a-z0-9\\-]*$/,\n  'ub': /*#__PURE__*/integerRegex('0b', '1', '[01]', 4),\n  'ud': /*#__PURE__*/integerRegex('', '[1-9]', '[0-9]', 3),\n  'ui': /*#__PURE__*/integerRegex('0i', '[1-9]', '[0-9]', 0),\n  'uv': /*#__PURE__*/integerRegex('0v', '[1-9a-v]', '[0-9a-v]', 5),\n  'uw': /*#__PURE__*/integerRegex('0w', '[1-9a-zA-Z~-]', '[0-9a-zA-Z~-]', 5),\n  'ux': /*#__PURE__*/integerRegex('0x', '[1-9a-f]', '[0-9a-f]', 4)\n};\n//  parse(): slav()\n//  slav(): slaw() but throwing on failure\n//\nconst parse = slav;\nfunction slav(aura, str) {\n  const out = slaw(aura, str);\n  if (!out) {\n    throw new Error('slav: failed to parse @' + aura + ' from string: ' + str);\n  }\n  return out;\n}\n//  tryParse(): slaw()\n//  slaw(): parse string as specific aura, null if that fails\n//\nconst tryParse = slaw;\nfunction slaw(aura, str) {\n  //  if the aura has a regex, test with that first\n  //TODO  does double work with checks in nuck?\n  //\n  if (aura in regex && !regex[aura].test(str)) {\n    return null;\n  }\n  //  proceed into parsing the string into a coin,\n  //  producing a result if the aura matches\n  //\n  //TODO  further short-circuit based on aura?\n  const coin = nuck(str);\n  if (coin && coin.type === 'dime' && coin.aura === aura) {\n    return coin.atom;\n  } else {\n    return null;\n  }\n}\nfunction valid(aura, str) {\n  return slaw(aura, str) !== null;\n}\n//  nuck(): parse string into coin, or null if that fails\n//\nfunction nuck(str) {\n  if (str === '') return null;\n  //  narrow options down by the first character, before doing regex tests\n  //  and trying to parse for real\n  //\n  const c = str[0];\n  if (c >= 'a' && c <= 'z') {\n    //  \"sym\"\n    if (regex['tas'].test(str)) {\n      return {\n        type: 'dime',\n        aura: 'tas',\n        atom: stringToCord(str)\n      };\n    } else {\n      return null;\n    }\n  } else if (c >= '0' && c <= '9') {\n    //  \"bisk\"\n    const dim = bisk(str);\n    if (!dim) {\n      return null;\n    } else {\n      return {\n        type: 'dime',\n        ...dim\n      };\n    }\n  } else if (c === '-') {\n    //  \"tash\"\n    let pos = true;\n    if (str[1] == '-') {\n      str = str.slice(2);\n    } else {\n      str = str.slice(1);\n      pos = false;\n    }\n    const dim = bisk(str);\n    if (dim) {\n      // `@s`?:(pos (mul 2 b) ?:(=(0 b) 0 +((mul 2 (dec b)))))\n      if (pos) {\n        dim.atom = 2n * dim.atom;\n      } else if (dim.atom !== 0n) {\n        dim.atom = 1n + 2n * (dim.atom - 1n);\n      }\n      //NOTE  assumes bisk always returns u* auras\n      return {\n        type: 'dime',\n        aura: dim.aura.replace('u', 's'),\n        atom: dim.atom\n      };\n    } else {\n      return null;\n    }\n  } else if (c === '.') {\n    //  \"perd\", \"zust\"\n    //NOTE  doesn't match stdlib parsing order, but they're easy early-outs\n    if (str === '.y') {\n      return {\n        type: 'dime',\n        aura: 'f',\n        atom: 0n\n      };\n    } else if (str === '.n') {\n      return {\n        type: 'dime',\n        aura: 'f',\n        atom: 1n\n      };\n    } else\n      //REVIEW  entering the branch this way assumes regexes for sequentially-tested auras don't overlap...\n      //        going down the list of options this way matches hoon parser behavior the closest, but is slow for the \"miss\" case.\n      //        could be optimized by hard-returning if the regex fails for cases where the lead char is unique.\n      //        should probably run some perf tests\n      if (regex['is'].test(str)) {\n        const value = str.slice(1).split('.').reduce((a, v) => a + v.padStart(4, '0'), '');\n        return {\n          type: 'dime',\n          aura: 'is',\n          atom: BigInt('0x' + value)\n        };\n      } else if (regex['if'].test(str)) {\n        const value = str.slice(1).split('.').reduce((a, v, i) => a + (BigInt(v) << BigInt(8 * (3 - i))), 0n);\n        return {\n          type: 'dime',\n          aura: 'if',\n          atom: value\n        };\n      } else if (str[1] === '~' && (regex['rd'].test(str) || regex['rh'].test(str) || regex['rq'].test(str)) || regex['rs'].test(str)) {\n        //  \"royl\"\n        let precision = 0;\n        while (str[precision + 1] === '~') precision++;\n        let aura;\n        switch (precision) {\n          case 0:\n            aura = 'rs';\n            break;\n          case 1:\n            aura = 'rd';\n            break;\n          case 2:\n            aura = 'rh';\n            break;\n          case 3:\n            aura = 'rq';\n            break;\n          default:\n            throw new Error('parsing invalid @r*');\n        }\n        return {\n          type: 'dime',\n          aura,\n          atom: parseR(aura[1], str)\n        };\n      } else if (str[1] === '~' && regex['q'].test(str)) {\n        const num = parseValidQ(str);\n        if (num === null) return null;\n        return {\n          type: 'dime',\n          aura: 'q',\n          atom: num\n        };\n      } else if (str[1] === '_' && /^\\.(_([0-9a-zA-Z\\-\\.]|~\\-|~~)+)*__$/.test(str)) {\n        //  \"nusk\"\n        const coins = str.slice(1, -2).split('_').slice(1).map(s => {\n          //NOTE  real +wick produces null for strings w/ other ~ chars,\n          //      but the regex above already excludes those\n          s = s.replaceAll('~-', '_').replaceAll('~~', '~'); //  \"wick\"\n          return nuck(s);\n        });\n        if (coins.some(c => c === null)) {\n          return null;\n        } else {\n          return {\n            type: 'many',\n            list: coins\n          };\n        }\n      }\n    return null;\n  } else if (c === '~') {\n    if (str === '~') {\n      return {\n        type: 'dime',\n        aura: 'n',\n        atom: 0n\n      };\n    } else {\n      //  \"twid\"\n      if (regex['da'].test(str)) {\n        return {\n          type: 'dime',\n          aura: 'da',\n          atom: parseDa(str)\n        };\n      } else if (regex['dr'].test(str)) {\n        return {\n          type: 'dime',\n          aura: 'dr',\n          atom: parseDr(str)\n        };\n      } else if (regex['p'].test(str)) {\n        //NOTE  this still does the regex check twice...\n        const res = parseValidP(str);\n        if (res === null) return null;\n        return {\n          type: 'dime',\n          aura: 'p',\n          atom: res\n        };\n      } else\n        //TODO  test if these single-character checks affect performance or no,\n        //      or if we want to move them further up, etc.\n        if (str[1] === '.' && regex['ta'].test(str)) {\n          return {\n            type: 'dime',\n            aura: 'ta',\n            atom: stringToCord(str.slice(2))\n          };\n        } else if (str[1] === '~' && regex['t'].test(str)) {\n          return {\n            type: 'dime',\n            aura: 't',\n            atom: stringToCord(decodeString(str.slice(2)))\n          };\n        } else if (str[1] === '-' && regex['c'].test(str)) {\n          //TODO  cheeky! this doesn't support the full range of inputs that the\n          //      hoon stdlib supports, but should work for all sane inputs.\n          //      no guarantees about behavior for insane inputs...\n          if (/^~\\-~[0-9a-f]+\\.$/.test(str)) {\n            return {\n              type: 'dime',\n              aura: 'c',\n              atom: BigInt('0x' + str.slice(3, -1))\n            };\n          }\n          return {\n            type: 'dime',\n            aura: 'c',\n            atom: stringToCord(decodeString(str.slice(2)))\n          };\n        }\n    }\n    if (str[1] === '0' && /^~0[0-9a-v]+$/.test(str)) {\n      return {\n        type: 'blob',\n        jam: slurp(5, UV_ALPHABET, str.slice(2))\n      };\n    }\n    return null;\n  }\n  return null;\n}\n//  bisk(): parse string into dime of integer aura, or null if that fails\n//\nfunction bisk(str) {\n  switch (str.slice(0, 2)) {\n    case '0b':\n      //  \"bay\"\n      if (regex['ub'].test(str)) {\n        return {\n          aura: 'ub',\n          atom: BigInt(str.replaceAll('.', ''))\n        };\n      } else {\n        return null;\n      }\n    case '0c':\n      //  \"fim\"\n      //TODO  support base58check\n      console.log('aura-js: @uc parsing unsupported (bisk)');\n      return null;\n    case '0i':\n      //  \"dim\"\n      if (regex['ui'].test(str)) {\n        return {\n          aura: 'ui',\n          atom: BigInt(str.slice(2))\n        };\n      } else {\n        return null;\n      }\n    case '0x':\n      //  \"hex\"\n      if (regex['ux'].test(str)) {\n        return {\n          aura: 'ux',\n          atom: BigInt(str.replaceAll('.', ''))\n        };\n      } else {\n        return null;\n      }\n    case '0v':\n      //  \"viz\"\n      if (regex['uv'].test(str)) {\n        return {\n          aura: 'uv',\n          atom: slurp(5, UV_ALPHABET, str.slice(2))\n        };\n      } else {\n        return null;\n      }\n    case '0w':\n      //  \"wiz\"\n      if (regex['uw'].test(str)) {\n        return {\n          aura: 'uw',\n          atom: slurp(6, UW_ALPHABET$1, str.slice(2))\n        };\n      } else {\n        return null;\n      }\n    default:\n      //  \"dem\"\n      if (regex['ud'].test(str)) {\n        return {\n          aura: 'ud',\n          atom: BigInt(str.replaceAll('.', ''))\n        };\n      } else {\n        return null;\n      }\n  }\n}\n//  decodeString(): decode string from @ta-safe format\n//\n//    using logic from +woad.\n//    for example, '~.some.~43.hars~21.' becomes 'some Chars!'\n//    assumes\n//\nfunction decodeString(str) {\n  let out = '';\n  let i = 0;\n  while (i < str.length) {\n    switch (str[i]) {\n      case '.':\n        out = out + ' ';\n        i++;\n        continue;\n      case '~':\n        switch (str[++i]) {\n          case '~':\n            out = out + '~';\n            i++;\n            continue;\n          case '.':\n            out = out + '.';\n            i++;\n            continue;\n          default:\n            let char = 0;\n            do {\n              char = char << 4 | Number.parseInt(str[i++], 16);\n            } while (str[i] !== '.');\n            out = out + String.fromCodePoint(char);\n            i++;\n            continue;\n        }\n      default:\n        out = out + str[i++];\n        continue;\n    }\n  }\n  return out;\n}\nfunction stringToCord(str) {\n  return bytesToBigint(new TextEncoder().encode(str));\n}\nconst UW_ALPHABET$1 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-~';\nconst UV_ALPHABET = '0123456789abcdefghijklmnopqrstuv';\nfunction slurp(bits, alphabet, str) {\n  let out = 0n;\n  const bbits = BigInt(bits);\n  while (str !== '') {\n    if (str[0] !== '.') {\n      out = (out << bbits) + BigInt(alphabet.indexOf(str[0]));\n    }\n    str = str.slice(1);\n  }\n  return out;\n}\n//REVIEW  should the reversal happen here or at callsites? depends on what endianness is idiomatic to js?\nfunction bytesToBigint(bytes) {\n  if (bytes.length === 0) return 0n;\n  //  if we have node's Buffer available, use it, it's wicked fast.\n  //  otherwise, constructing the hex string \"by hand\" and instantiating\n  //  a bigint from that is the fastest thing we can do.\n  //\n  if (typeof Buffer !== 'undefined') return BigInt('0x' + Buffer.from(bytes.reverse()).toString('hex'));\n  let byt,\n    parts = [];\n  for (var i = bytes.length - 1; i >= 0; --i) {\n    byt = bytes[i];\n    parts.push(byt < 16 ? \"0\" + byt.toString(16) : byt.toString(16));\n  }\n  const num = BigInt('0x' + parts.join(''));\n  return num;\n}\n\n//  render: serialize into atom literal strings\n//  render(): scot()\n//  scot(): render atom as specific aura\n//\nconst render = scot;\nfunction scot(aura, atom) {\n  return rend({\n    type: 'dime',\n    aura,\n    atom\n  });\n}\n//  rend(): render coin into string\n//\nfunction rend(coin) {\n  switch (coin.type) {\n    case 'blob':\n      return '~0' + coin.jam.toString(32);\n    case 'many':\n      return '.' + coin.list.reduce((acc, item) => {\n        return acc + '_' + wack(rend(item));\n      }, '') + '__';\n    case 'dime':\n      switch (coin.aura[0]) {\n        case 'c':\n          //  this short-circuits the (wood (tuft atom)) calls that\n          //  hoon.hoon does, leaning on wood only for ascii characters,\n          //  and going straight to encoded representation for anything else.\n          //  (otherwise we'd need to stringify the utf-32 bytes, ouch.)\n          if (coin.atom < 0x7fn) return '~-' + encodeString(String.fromCharCode(Number(coin.atom)));else return '~-~' + coin.atom.toString(16) + '.';\n        case 'd':\n          switch (coin.aura[1]) {\n            case 'a':\n              return renderDa(coin.atom);\n            case 'r':\n              return renderDr(coin.atom);\n            default:\n              return zco(coin.atom);\n          }\n        case 'f':\n          switch (coin.atom) {\n            case 0n:\n              return '.y';\n            case 1n:\n              return '.n';\n            default:\n              return zco(coin.atom);\n          }\n        case 'n':\n          return '~';\n        case 'i':\n          switch (coin.aura[1]) {\n            case 'f':\n              return '.' + spite(coin.atom, 1, 4, 10);\n            case 's':\n              return '.' + spite(coin.atom, 2, 8, 16);\n            default:\n              return zco(coin.atom);\n          }\n        case 'p':\n          return renderP(coin.atom);\n        case 'q':\n          return renderQ(coin.atom);\n        case 'r':\n          switch (coin.aura[1]) {\n            case 'd':\n              return renderR('d', coin.atom);\n            case 'h':\n              return renderR('h', coin.atom);\n            case 'q':\n              return renderR('q', coin.atom);\n            case 's':\n              return renderR('s', coin.atom);\n            default:\n              return zco(coin.atom);\n          }\n        case 'u':\n          switch (coin.aura[1]) {\n            case 'c':\n              throw new Error('aura-js: @uc rendering unsupported');\n            //TODO;\n            case 'b':\n              return '0b' + split(coin.atom.toString(2), 4);\n            case 'i':\n              return '0i' + dco(1, coin.atom);\n            case 'x':\n              return '0x' + split(coin.atom.toString(16), 4);\n            case 'v':\n              return '0v' + split(coin.atom.toString(32), 5);\n            case 'w':\n              return '0w' + split(blend(6, UW_ALPHABET, coin.atom), 5);\n            default:\n              return split(coin.atom.toString(10), 3);\n          }\n        case 's':\n          const end = coin.atom & 1n;\n          coin.atom = end + (coin.atom >> 1n);\n          coin.aura = coin.aura.replace('s', 'u');\n          return (end === 0n ? '--' : '-') + rend(coin);\n        case 't':\n          if (coin.aura[1] === 'a') {\n            if (coin.aura[2] === 's') {\n              return cordToString(coin.atom);\n            } else {\n              return '~.' + cordToString(coin.atom);\n            }\n          } else {\n            return '~~' + encodeString(cordToString(coin.atom));\n          }\n        default:\n          return zco(coin.atom);\n      }\n  }\n}\nfunction dco(lent, atom) {\n  return atom.toString(10).padStart(lent, '0');\n}\nfunction xco(lent, atom) {\n  return atom.toString(16).padStart(lent, '0');\n}\nfunction zco(atom) {\n  return '0x' + xco(1, atom);\n}\nfunction wack(str) {\n  return str.replaceAll('~', '~~').replaceAll('_', '~-');\n}\n//  encodeString(): encode string into @ta-safe format\n//\n//    using logic from +wood.\n//    for example, 'some Chars!' becomes '~.some.~43.hars~21.'\n//    this is url-safe encoding for arbitrary strings.\n//\nfunction encodeString(string) {\n  let out = '';\n  for (let i = 0; i < string.length; i += 1) {\n    const char = string[i];\n    let add = '';\n    switch (char) {\n      case ' ':\n        add = '.';\n        break;\n      case '.':\n        add = '~.';\n        break;\n      case '~':\n        add = '~~';\n        break;\n      default:\n        {\n          const codePoint = string.codePointAt(i);\n          if (!codePoint) break;\n          //  js strings are encoded in UTF-16, so 16 bits per character.\n          //  codePointAt() reads a _codepoint_ at a character index, and may\n          //  consume up to two js string characters to do so, in the case of\n          //  16 bit surrogate pseudo-characters. here we detect that case, so\n          //  we can advance the cursor to skip past the additional character.\n          if (codePoint > 0xffff) i += 1;\n          if (codePoint >= 97 && codePoint <= 122 ||\n          // a-z\n          codePoint >= 48 && codePoint <= 57 ||\n          // 0-9\n          char === '-') {\n            add = char;\n          } else {\n            add = `~${codePoint.toString(16)}.`;\n          }\n        }\n    }\n    out += add;\n  }\n  return out;\n}\nconst UW_ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-~';\nfunction blend(bits, alphabet, atom) {\n  if (atom === 0n) return alphabet[0];\n  let out = '';\n  const bbits = BigInt(bits);\n  while (atom !== 0n) {\n    out = alphabet[Number(BigInt.asUintN(bits, atom))] + out;\n    atom = atom >> bbits;\n  }\n  return out;\n}\nfunction split(str, group) {\n  //  insert '.' every $group characters counting from the end,\n  //  while avoiding putting a leading dot at the start\n  return str.replace(new RegExp(`(?=(?:.{${group}})+$)(?!^)`, 'g'), '.');\n}\n//  byte-level split()\nfunction spite(atom, bytes, groups, base) {\n  if (base === void 0) {\n    base = 10;\n  }\n  let out = '';\n  const size = 8n * BigInt(bytes);\n  const mask = (1n << size) - 1n;\n  while (groups-- > 0) {\n    if (out !== '') out = '.' + out;\n    out = (atom & mask).toString(base) + out;\n    atom = atom >> size;\n  }\n  return out;\n}\nfunction cordToString(atom) {\n  return new TextDecoder('utf-8').decode(atomToByteArray(atom).reverse());\n}\n//NOTE  from nockjs' bigIntToByteArray\n//REVIEW  original produced [0] for 0n... probably not correct in our contexts!\nfunction atomToByteArray(atom) {\n  if (atom === 0n) return new Uint8Array(0);\n  const hexString = atom.toString(16);\n  const paddedHexString = hexString.length % 2 === 0 ? hexString : '0' + hexString;\n  const arrayLength = paddedHexString.length / 2;\n  const int8Array = new Uint8Array(arrayLength);\n  for (let i = 0; i < paddedHexString.length; i += 2) {\n    const hexSubstring = paddedHexString.slice(i, i + 2);\n    const signedInt = parseInt(hexSubstring, 16) << 24 >> 24;\n    int8Array[i / 2] = signedInt;\n  }\n  return int8Array;\n}\n\n//  main\nconst da = {\n  toUnix,\n  fromUnix\n};\nconst dr = {\n  toSeconds,\n  fromSeconds\n};\nconst p = {\n  cite,\n  sein,\n  clan,\n  kind,\n  rankToSize,\n  sizeToRank\n};\n\nexport { da, dr, nuck, p, parse, rend, render, scot, slav, slaw, tryParse, valid };\n//# sourceMappingURL=aura.esm.js.map\n","function bigIntToByteArray(bigInt) {\n  const hexString = bigInt.toString(16);\n  const paddedHexString = hexString.length % 2 === 0 ? hexString : '0' + hexString;\n  const arrayLength = paddedHexString.length / 2;\n  const int8Array = new Uint8Array(arrayLength);\n  for (let i = 0; i < paddedHexString.length; i += 2) {\n    const hexSubstring = paddedHexString.slice(i, i + 2);\n    const signedInt = parseInt(hexSubstring, 16) << 24 >> 24;\n    int8Array[i / 2] = signedInt;\n  }\n  return int8Array;\n}\n//  bit length cache entries\nconst blcCoeff = [];\nconst blcBigCoeff = [];\nconst blc = [];\nlet blcNext = 0;\nfunction bitLength(bigIntValue) {\n  if (bigIntValue === 0n) return 0;\n  //  there is no native bigint bitlength measuring support,\n  //  so we roll our own. this beats toString-based implementations (and those,\n  //  slightly surprisingly, beat manual bitstep loops).\n  //  the approach here is to find *an* upper bound quickly through comparisons,\n  //  in exponentially escalating steps, and then slowly step down the\n  //  comparisons to find the exact result. we get final precision from\n  //  Math.clz32. this approach makes measurements on large bignums way faster.\n  //  https://stackoverflow.com/a/76616288\n  //  find upper bound\n  let k = 0;\n  while (true) {\n    if (blcNext === k) {\n      blcCoeff.push(32 << blcNext);\n      blcBigCoeff.push(BigInt(blcCoeff[blcNext]));\n      blc.push(1n << blcBigCoeff[blcNext]);\n      blcNext++;\n    }\n    if (bigIntValue < blc[k]) break;\n    k++;\n  }\n  //  smallint case\n  if (!k) return 32 - Math.clz32(Number(bigIntValue));\n  //  determine exact length by bisection\n  k--;\n  let i = blcCoeff[k];\n  let a = bigIntValue >> blcBigCoeff[k];\n  while (k--) {\n    let b = a >> blcBigCoeff[k];\n    if (b) i += blcCoeff[k], a = b;\n  }\n  return i + 32 - Math.clz32(Number(a));\n}\nfunction testBit(bigIntValue, index) {\n  return (bigIntValue & BigInt(1) << BigInt(index)) !== BigInt(0);\n}\nfunction bigIntFromStringWithRadix(number, radix) {\n  //  native constructor is slightly faster\n  if (radix === 16) return BigInt('0x' + (number || '0'));\n  if (radix === 10) return BigInt(number || '0');\n  let result = BigInt(0);\n  const base = BigInt(radix);\n  const length = number.length;\n  for (let i = 0; i < length; i++) {\n    const digit = parseInt(number.charAt(i), radix);\n    if (isNaN(digit)) {\n      throw new Error(`Invalid character for radix ${radix}: '${number.charAt(i)}'`);\n    }\n    result = result * base + BigInt(digit);\n  }\n  return result;\n}\n\n// modified from source to accept bigint key and have optional key bytelength arg\n// see: https://github.com/garycourt/murmurhash-js\n//\n// Copyright (c) 2011 Gary Court\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n/**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n **/\nfunction murmurhash3_bi(len, key, seed) {\n  let remainder, bytes, h1, h1b, c1, c2, k1, i; // c1b, c2b unused\n  let yek;\n  if (0n === key) {\n    yek = new Uint8Array(0);\n    len = len || 0;\n  } else {\n    yek = bigIntToByteArray(key);\n    len = len || yek.length;\n  }\n  if (yek.length < len) {\n    const fil = new Uint8Array(len - yek.length);\n    const nek = new Uint8Array(yek.length + fil.length);\n    nek.set(fil);\n    nek.set(yek, fil.length);\n    yek = nek;\n  } else if (yek.length > len) {\n    throw new Error(\"murmur3 oversized key for length\");\n  }\n  yek.reverse(); //  shenanigans\n  remainder = yek.length & 3; // yek.length % 4\n  bytes = yek.length - remainder;\n  h1 = seed;\n  c1 = 0xcc9e2d51;\n  c2 = 0x1b873593;\n  i = 0;\n  while (i < bytes) {\n    k1 = yek[i] & 0xff | (yek[++i] & 0xff) << 8 | (yek[++i] & 0xff) << 16 | (yek[++i] & 0xff) << 24;\n    ++i;\n    k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;\n    k1 = k1 << 15 | k1 >>> 17;\n    k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;\n    h1 ^= k1;\n    h1 = h1 << 13 | h1 >>> 19;\n    h1b = (h1 & 0xffff) * 5 + (((h1 >>> 16) * 5 & 0xffff) << 16) & 0xffffffff;\n    h1 = (h1b & 0xffff) + 0x6b64 + (((h1b >>> 16) + 0xe654 & 0xffff) << 16);\n  }\n  k1 = 0;\n  switch (remainder) {\n    case 3:\n      k1 ^= (yek[i + 2] & 0xff) << 16;\n    case 2:\n      k1 ^= (yek[i + 1] & 0xff) << 8;\n    case 1:\n      k1 ^= yek[i] & 0xff;\n      k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;\n      k1 = k1 << 15 | k1 >>> 17;\n      k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;\n      h1 ^= k1;\n  }\n  h1 ^= yek.length;\n  h1 ^= h1 >>> 16;\n  h1 = (h1 & 0xffff) * 0x85ebca6b + (((h1 >>> 16) * 0x85ebca6b & 0xffff) << 16) & 0xffffffff;\n  h1 ^= h1 >>> 13;\n  h1 = (h1 & 0xffff) * 0xc2b2ae35 + (((h1 >>> 16) * 0xc2b2ae35 & 0xffff) << 16) & 0xffffffff;\n  h1 ^= h1 >>> 16;\n  return h1 >>> 0;\n}\n\n// implementation\nfunction dwim$1() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  const n = args.length === 1 ? args[0] : args;\n  if (isNoun(n)) return n;\n  if (typeof n === \"number\") {\n    return Atom.fromInt(n);\n  } else if (typeof n === \"bigint\") {\n    return new Atom(n);\n  } else if (typeof n === \"string\") {\n    return Atom.fromCord(n);\n  } else if (Array.isArray(n)) {\n    if (n.length < 2) {\n      return dwim$1(n[0]);\n    }\n    const head = dwim$1(n[n.length - 2]);\n    const tail = dwim$1(n[n.length - 1]);\n    let cel = new Cell(head, tail);\n    for (var j = n.length - 3; j >= 0; --j) {\n      cel = new Cell(dwim$1(n[j]), cel);\n    }\n    return cel;\n  } else if (n === null) {\n    return Atom.zero;\n  }\n  //  objects, undefined, etc\n  console.error(\"what do you mean??\", typeof n, JSON.stringify(n));\n  throw new Error('dwim, but meaning unclear');\n}\n//  structures\nfunction list$1(args) {\n  if (args.length === 0) return Atom.zero;\n  return dwim$1([...args, Atom.zero]);\n}\nfunction set(args) {\n  if (args.length === 0) return Atom.zero;\n  let set = Atom.zero;\n  for (let arg of args) {\n    set = putIn(set, dwim$1(arg));\n  }\n  return set;\n}\nfunction map(args) {\n  if (args.length === 0) return Atom.zero;\n  let map = Atom.zero;\n  for (let arg of args) {\n    map = putBy(map, dwim$1(arg.key), dwim$1(arg.val));\n  }\n  return map;\n}\nconst dejs = {\n  nounify: dwim$1,\n  dwim: dwim$1,\n  list: list$1,\n  set,\n  map\n};\n\nfunction mum(syd, fal, key) {\n  let i = 0;\n  while (i < 8) {\n    const haz = murmurhash3_bi(null, key, syd);\n    const ham = haz >>> 31 ^ haz & 0x7fffffff;\n    if (0 !== ham) return ham;\n    i++;\n    syd++;\n  }\n  return fal;\n}\n//\n//  ordering\n//\n//  +dor: depth order\nfunction dor(a, b) {\n  //  ?:  =(a b)  &\n  if (a.equals(b)) return true;\n  //  ?.  ?=(@ a)\n  if (a.isCell()) {\n    //  ?:  ?=(@ b)  |\n    if (b.isAtom()) return false;\n    //  ?:  =(-.a -.b)\n    if (a.head.equals(b.head))\n      //  $(a +.a, b +.b)\n      return dor(a.tail, b.tail);\n    //  $(a -.a, b -.b)\n    return dor(a.head, b.head);\n  }\n  //  ?.  ?=(@ b)  &\n  if (b.isCell()) return true;\n  //  (lth a b)\n  return a < b;\n}\n//  +gor: mug hash order, collisions fall back to +dor\nfunction gor(a, b) {\n  //  =+  [c=(mug a) d=(mug b)]\n  const c = a.mug();\n  const d = b.mug();\n  //  ?:  =(c d)\n  if (c === d)\n    //  (dor a b)\n    return dor(a, b);\n  //  (lth c d)\n  return c < d;\n}\n//  +mor: double mug hash order, collisions fall back to +dor\nfunction mor(a, b) {\n  //  =+  [c=(mug (mug a)) d=(mug (mug b))]\n  const c = Atom.fromInt(a.mug()).mug();\n  const d = Atom.fromInt(b.mug()).mug();\n  //  ?:  =(c d)\n  if (c === d)\n    //  (dor a b)\n    return dor(a, b);\n  //  (lth c d)\n  return c < d;\n}\n//\n//  data structures\n//\n//  isSet: check for set with >0 entries, ?=([* * *])\nfunction isSet(a) {\n  return a.isCell() && a.tail.isCell();\n}\n//  +put:in: set insertion\nfunction putIn(a, b) {\n  //  ?~  a\n  //    [b ~ ~]\n  if (a.equals(Atom.zero)) {\n    return dwim$1(b, null, null);\n  }\n  if (!isSet(a)) {\n    throw new Error('malformed set');\n  }\n  //  ?:  =(b n.a)\n  //    a\n  if (b.equals(a.head)) {\n    return a;\n  }\n  //  ?:  (gor b n.a)\n  if (gor(b, a.head)) {\n    //  =+  c=$(a l.a)\n    const c = putIn(a.tail.head, b);\n    //  ?>  ?=(^ c)\n    if (!isSet(c)) {\n      throw new Error('implementation error');\n    }\n    //  ?:  (mor n.a n.c)\n    //    a(l c)\n    if (mor(a.head, c.head)) {\n      return dwim$1(a.head, c, a.tail.tail);\n    }\n    //  c(r a(l r.c))\n    return dwim$1(c.head, c.tail.head, [a.head, c.tail.tail, a.tail.tail]);\n  }\n  //  =+  c=$(a r.a)\n  const c = putIn(a.tail.tail, b);\n  //  ?>  ?=(^ c)\n  if (!isSet(c)) {\n    throw new Error('implementation error');\n  }\n  //  ?:  (mor n.a n.c)\n  //    a(r c)\n  if (mor(a.head, c.head)) {\n    return dwim$1(a.head, a.tail.head, c);\n  }\n  //  c(l a(r l.c))\n  return dwim$1(c.head, [a.head, a.tail.head, c.tail.head], c.tail.tail);\n}\n//  isMap: check for map with >0 entries, ?=([[* *] * *])\nfunction isMap(a) {\n  return a.isCell() && a.head.isCell() && a.tail.isCell();\n}\n//  +put:by: map insertion\nfunction putBy(a, b, c) {\n  //  ?~  a\n  //    [[b c] ~ ~]\n  if (a.equals(Atom.zero)) {\n    return dwim$1([b, c], null, null);\n  }\n  if (!isMap(a)) {\n    throw new Error('malformed map');\n  }\n  //  ?:  =(b p.n.a)\n  if (b.equals(a.head.head)) {\n    //  ?:  =(c q.n.a)\n    //    a\n    if (c.equals(a.head.tail)) {\n      return a;\n    }\n    //  a(n [b c])\n    return dwim$1([b, c], a.tail);\n  }\n  //  ?:  (gor b p.n.a)\n  if (gor(b, a.head.head)) {\n    //  =+  d=$(a l.a)\n    const d = putBy(a.tail.head, b, c);\n    //  ?>  ?=(^ d)\n    if (!isMap(d)) {\n      throw new Error('implementation error');\n    }\n    //  ?:  (mor p.n.a p.n.d)\n    //    a(l d)\n    if (mor(a.head.head, d.head.head)) {\n      return dwim$1(a.head, d, a.tail.tail);\n    }\n    //  d(r a(l r.d))\n    return dwim$1(d.head, d.tail.head, [a.head, d.tail.tail, a.tail.tail]);\n  }\n  //  =+  d=$(a r.a)\n  const d = putBy(a.tail.tail, b, c);\n  //  ?>  ?=(^ d)\n  if (!isMap(d)) {\n    throw new Error('implementation error');\n  }\n  //  ?:  (mor p.n.a p.n.d)\n  //    a(r d)\n  if (mor(a.head.head, d.head.head)) {\n    return dwim$1(a.head, a.tail.head, d);\n  }\n  //  d(l a(r l.d))\n  return dwim$1(d.head, [a.head, a.tail.head, d.tail.head], d.tail.tail);\n}\n\nvar _Atom;\n// Helpers\nconst fragCache = {\n  \"0\": function (a) {\n    throw new Error(\"Bail\");\n  },\n  \"1\": function (a) {\n    return a;\n  }\n};\n// Classes\nclass Atom {\n  constructor(number) {\n    this.number = void 0;\n    this._mug = 0;\n    this.deep = false;\n    this.number = number;\n  }\n  // common methods with Cell\n  isAtom() {\n    return true;\n  }\n  isCell() {\n    return false;\n  }\n  pretty(out, hasTail) {\n    if (this.number < 65536n) out.push(this.number.toString(10));else {\n      let tap = [],\n        isTa = true,\n        isTas = true,\n        bytes = bigIntToByteArray(this.number);\n      for (let i = bytes.length - 1; i >= 0; --i) {\n        const c = bytes[i];\n        if (isTa && (c < 32 || c > 127)) {\n          isTa = false;\n          isTas = false;\n          break;\n        } else if (isTas && !(c > 47 && c < 58 || c > 96 && c < 123 || c === 45)) isTas = false;\n        tap.push(String.fromCharCode(c));\n      }\n      if (isTas) {\n        out.push(\"%\");\n        out.push.apply(out, tap);\n      } else if (isTa) {\n        out.push(\"'\");\n        out.push.apply(out, tap);\n        out.push(\"'\");\n      } else {\n        out.push(\"0x\");\n        out.push(this.number.toString(16));\n      }\n    }\n  }\n  toString() {\n    const parts = [];\n    this.pretty(parts, false);\n    return parts.join(\"\");\n  }\n  equals(o) {\n    return o instanceof Atom && o.number === this.number;\n  }\n  loob() {\n    if (Number(this.number) === 0) return true;\n    if (Number(this.number) === 1) return false;else throw new Error(\"Bail\");\n  }\n  mug() {\n    if (this._mug === 0) this._mug = this.calculateMug();\n    return this._mug;\n  }\n  calculateMug() {\n    return mum(0xcafebabe, 0x7fff, this.number);\n  }\n  mugged() {\n    return this._mug !== 0;\n  }\n  at(a) {\n    return Atom.fragmenter(a)(this);\n  }\n  // Atom specific methods\n  bump() {\n    return new Atom(this.number + 1n);\n  }\n  bytes() {\n    const bytes = bigIntToByteArray(this.number);\n    const r = [];\n    for (var i = bytes.length - 1; i >= 0; --i) {\n      r.push(bytes[i] & 0xff);\n    }\n    return r;\n  }\n  cap() {\n    if (Number(this.number) === 0) throw new Error(\"Bail\");\n    if (Number(this.number) === 1) throw new Error(\"Bail\");else return testBit(this.number, bitLength(this.number) - 2) ? new Atom(3n) : new Atom(2n);\n  }\n  mas() {\n    if (Number(this.number) === 0) throw new Error(\"Bail\");\n    if (Number(this.number) === 1) throw new Error(\"Bail\");\n    if (Number(this.number) === 2) return new Atom(1n);\n    if (Number(this.number) === 3) return new Atom(1n);else {\n      const n = this.number;\n      const l = bitLength(n) - 2;\n      const addTop = BigInt(1 << l);\n      const mask = BigInt((1 << l) - 1);\n      return new Atom(n & mask ^ addTop);\n    }\n  }\n  shortCode() {\n    return this.number.toString(36); // can we do more?\n  }\n  // Class Methods\n  static cordToString(c) {\n    const bytes = c.bytes(),\n      chars = [];\n    for (let i = 0; i < bytes.length; ++i) {\n      chars.push(String.fromCharCode(bytes[i]));\n    }\n    return chars.join(\"\");\n  }\n  // cached tree addressing function constructor\n  static fragmenter(a) {\n    const s = a.shortCode();\n    if (fragCache.hasOwnProperty(s)) {\n      return fragCache[s];\n    } else {\n      for (var parts = [\"a\"]; !Atom.one.equals(a); a = a.mas()) {\n        parts.push(Atom.two.equals(a.cap()) ? \"head\" : \"tail\");\n      }\n      return fragCache[s] = new Function(\"a\", \"return \" + parts.join(\".\") + \";\");\n    }\n  }\n  // Atom builders\n  static fromString(str, radix) {\n    if (radix === void 0) {\n      radix = 10;\n    }\n    const num = bigIntFromStringWithRadix(str, radix);\n    return new Atom(num);\n  }\n  static fromInt(n) {\n    if (n < 256) return Atom.small[n];else return new Atom(BigInt(n));\n  }\n  static fromCord(str) {\n    if (str.length === 0) return Atom.zero;\n    let i,\n      j,\n      octs = Array(str.length);\n    for (i = 0, j = octs.length - 1; i < octs.length; ++i, --j) {\n      const charByte = (str.charCodeAt(i) & 0xff).toString(16);\n      octs[j] = charByte.length === 1 ? \"0\" + charByte : charByte;\n    }\n    if (str.length > 4) return Atom.fromString(octs.join(''), 16);else return new Atom(BigInt(parseInt(octs.join(\"\"), 16)));\n  }\n}\n_Atom = Atom;\nAtom.small = /*#__PURE__*/Array.from(Array(256)).map(function (_, i) {\n  return new _Atom(BigInt(i));\n});\nAtom.zero = _Atom.small[0];\nAtom.one = _Atom.small[1];\nAtom.two = _Atom.small[2];\nAtom.three = _Atom.small[3];\nclass Cell {\n  constructor(head, tail, deep) {\n    if (deep === void 0) {\n      deep = true;\n    }\n    this.head = void 0;\n    this.tail = void 0;\n    this.deep = void 0;\n    this._mug = 0;\n    this.head = head;\n    this.tail = tail;\n    this.deep = deep;\n  }\n  // common methods\n  isAtom() {\n    return false;\n  }\n  isCell() {\n    return true;\n  }\n  pretty(out, hasTail) {\n    if (!hasTail) out.push(\"[\");\n    this.head.pretty(out, false);\n    out.push(\" \");\n    this.tail.pretty(out, true);\n    if (!hasTail) out.push(\"]\");\n  }\n  toString() {\n    const parts = [];\n    this.pretty(parts, false);\n    return parts.join(\"\");\n  }\n  mug() {\n    if (this._mug === 0) this._mug = this.calculateMug();\n    return this._mug;\n  }\n  calculateMug() {\n    return mum(0xdeadbeef, 0xfffe, BigInt(this.tail.mug()) << 32n | BigInt(this.head.mug()));\n  }\n  mugged() {\n    return this._mug !== 0;\n  }\n  equals(o) {\n    if (o instanceof Cell) return this.unify(o);else return false;\n  }\n  bump() {\n    throw new Error(\"Bail\");\n  }\n  loob() {\n    throw new Error(\"Bail\");\n  }\n  at(a) {\n    return Atom.fragmenter(a)(this);\n  }\n  // Cell specific\n  unify(o) {\n    if (this === o) return true;\n    if (o.mugged()) {\n      if (this.mugged()) {\n        if (this.mug() != o.mug()) return false;\n      } else return o.unify(this);\n    }\n    if (this.head.equals(o.head)) {\n      // @ts-ignore, we are intentionally de-duplicating\n      o.head = this.head;\n      if (this.tail.equals(o.tail)) {\n        o._mug = this._mug;\n        // @ts-ignore, we are intentionally de-duplicating\n        o.tail = this.tail;\n        return true;\n      }\n    }\n    return false;\n  }\n}\nfunction isAtom(a) {\n  return a instanceof Atom;\n}\nfunction isCell(a) {\n  return a instanceof Cell;\n}\nfunction isNoun(a) {\n  return isAtom(a) || isCell(a);\n}\n\nconst frond = function (opts) {\n  return function (noun) {\n    if (!(noun instanceof Cell && noun.head instanceof Atom)) {\n      throw new Error(\"frond: noun not cell with tag head\");\n    }\n    const tag = Atom.cordToString(noun.head);\n    for (let i = 0; i < opts.length; i++) {\n      if (tag === opts[i].tag) {\n        return {\n          [tag]: opts[i].get(noun.tail)\n        };\n      }\n    }\n    throw new Error(\"frond: unknown tag\" + tag);\n  };\n};\nconst tuple = function (funs) {\n  return function (noun) {\n    let i = 0;\n    let o = [];\n    while (i < funs.length - 1) {\n      if (noun.isAtom()) {\n        throw new Error(\"tuple: noun too shallow\");\n      }\n      o.push(funs[i](noun.head));\n      noun = noun.tail;\n      i++;\n    }\n    o.push(funs[i](noun));\n    return o;\n  };\n};\nconst pairs = function (cels) {\n  return function (noun) {\n    let i = 0;\n    let o = {};\n    while (i < cels.length - 1) {\n      if (!(noun instanceof Cell)) {\n        throw new Error(\"pairs: noun too shallow\");\n      }\n      o[cels[i].nom] = cels[i].get(noun.head);\n      noun = noun.tail;\n      i++;\n    }\n    o[cels[i].nom] = cels[i].get(noun);\n    return o;\n  };\n};\nconst pair = function (na, ga, nb, gb) {\n  return pairs([{\n    nom: na,\n    get: ga\n  }, {\n    nom: nb,\n    get: gb\n  }]);\n};\nconst bucwut = function (opts) {\n  return function (noun) {\n    for (let i = 0; i < opts.length; i++) {\n      try {\n        const res = opts[i](noun);\n        return res;\n      } catch (e) {\n        continue;\n      }\n    }\n    throw new Error(\"bucwut: no matches\");\n  };\n};\n//  buccen: like frond, but without the wrapper object\nconst buccen = function (opts) {\n  return function (noun) {\n    if (!(noun instanceof Cell && noun.head instanceof Atom)) {\n      throw new Error(\"buccen: noun not cell with tag head\");\n    }\n    const tag = Atom.cordToString(noun.head);\n    for (let i = 0; i < opts.length; i++) {\n      if (tag === opts[i].tag) {\n        return opts[i].get(noun.tail);\n      }\n    }\n    throw new Error(\"buccen: unknown tag: \" + tag);\n  };\n};\n//  (list *) -> any[]\nconst array = function (item) {\n  return function (noun) {\n    let a = [];\n    while (noun instanceof Cell) {\n      a.push(item(noun.head));\n      noun = noun.tail;\n    }\n    return a;\n  };\n};\n//  (tree *) -> any[]\nconst tree = function (item) {\n  return function (noun) {\n    if (noun instanceof Cell) {\n      if (!(noun.tail instanceof Cell)) {\n        throw new Error(\"tree: malformed\");\n      }\n      return [...tree(item)(noun.tail.tail), item(noun.head), ...tree(item)(noun.tail.head)];\n    }\n    return [];\n  };\n};\nconst cord = function (noun) {\n  if (!(noun instanceof Atom)) {\n    throw new Error(`cord: noun not atom ${noun.toString()}`);\n  }\n  return Atom.cordToString(noun);\n};\nconst tape = function (noun) {\n  return array(n => {\n    if (n.isCell()) {\n      throw new Error(\"tape: malformed\");\n    }\n    return Atom.cordToString(n);\n  })(noun).join();\n};\nconst numb = function (noun) {\n  if (!(noun instanceof Atom)) {\n    throw new Error(\"numb: noun not atom\");\n  }\n  if (bitLength(noun.number) <= 32) {\n    return Number(noun.number);\n  } else {\n    return noun.number.toString();\n  }\n};\nconst numb32 = function (noun) {\n  if (!(noun instanceof Atom)) {\n    throw new Error(\"numb32: noun not atom\");\n  }\n  if (bitLength(noun.number) > 32) {\n    throw new Error(\"numb32: number too big\");\n  }\n  return Number(noun.number);\n};\nconst numbString = function (noun) {\n  if (!(noun instanceof Atom)) {\n    throw new Error(\"numbString: noun not atom\");\n  }\n  return noun.number.toString();\n};\nconst loob = function (noun) {\n  return noun.loob();\n};\nconst nill = function (noun) {\n  if (!(noun instanceof Atom && noun.number === 0n)) {\n    throw new Error(\"nill: not null\");\n  }\n  return null;\n};\nconst path = /*#__PURE__*/array(cord);\nconst enjs = {\n  frond,\n  tuple,\n  pairs,\n  pair,\n  array,\n  loob,\n  tree,\n  cord,\n  tape,\n  numb,\n  numb32,\n  numbString,\n  path,\n  buccen,\n  bucwut,\n  nill\n};\n\n//TODO  could probably increase performance by not converting bigint -> number\n// a is native, returns native\nfunction met(a, b) {\n  var bits = bitLength(b.number),\n    full = bits >>> a,\n    part = full << a !== bits;\n  return part ? full + 1 : full;\n}\nfunction gth(a, b) {\n  return a.number > b.number;\n}\nfunction lth(a, b) {\n  return a.number < b.number;\n}\nfunction gte(a, b) {\n  return a.number >= b.number;\n}\nfunction lte(a, b) {\n  return a.number <= b.number;\n}\nfunction add(a, b) {\n  return new Atom(a.number + b.number);\n}\nfunction sub(a, b) {\n  var r = a.number - b.number;\n  if (r < 0) {\n    throw new Error(\"subtract underflow\");\n  } else {\n    return new Atom(r);\n  }\n}\nfunction dec(a) {\n  return sub(a, Atom.one);\n}\nfunction bex(a) {\n  const b = 1n << a.number;\n  return new Atom(b);\n}\nfunction lsh(a, b, c) {\n  var bits = Number(b.number << a.number);\n  return new Atom(c.number << BigInt(bits));\n}\nfunction rsh(a, b, c) {\n  var bits = b.number << a.number;\n  return new Atom(c.number >> BigInt(bits));\n}\n// to/from little-endian 32-bit word array, as used in vere\n// TODO: efficiency is horrible here, but can be improved using internals\nfunction bytesToWords(bytes) {\n  var len = bytes.length,\n    trim = len % 4;\n  let i, b, w;\n  if (trim > 0) {\n    len += 4 - trim;\n    for (i = 0; i < trim; ++i) {\n      bytes.push(0);\n    }\n  }\n  const size = len >> 2;\n  const words = new Array(size);\n  for (i = 0, b = 0; i < size; ++i) {\n    w = bytes[b++] << 0 & 0x000000ff;\n    w ^= bytes[b++] << 8 & 0x0000ff00;\n    w ^= bytes[b++] << 16 & 0x00ff0000;\n    w ^= bytes[b++] << 24 & 0xff000000;\n    words[i] = w;\n  }\n  return words;\n}\nfunction wordsToBytes(words) {\n  const buf = [];\n  let w, i, b;\n  for (i = 0, b = 0; i < words.length; ++i) {\n    w = words[i];\n    buf[b++] = 0xff & (w & 0x000000ff);\n    buf[b++] = 0xff & (w & 0x0000ff00) >>> 8;\n    buf[b++] = 0xff & (w & 0x00ff0000) >>> 16;\n    buf[b++] = 0xff & (w & 0xff000000) >>> 24;\n  }\n  // or here. one of the 'get rid of extra zeros' functions.\n  while (buf[--b] === 0) {\n    buf.pop();\n  }\n  return buf;\n}\nfunction bytesToAtom(bytes) {\n  let byt,\n    parts = [];\n  for (var i = bytes.length - 1; i >= 0; --i) {\n    byt = bytes[i] & 0xff;\n    parts.push(byt < 16 ? \"0\" + byt.toString(16) : byt.toString(16));\n  }\n  const num = bigIntFromStringWithRadix(parts.join(\"\"), 16);\n  return new Atom(num);\n}\nfunction atomToBytes(atom) {\n  return atom.bytes();\n}\nfunction atomToWords(atom) {\n  return bytesToWords(atomToBytes(atom));\n}\nfunction wordsToAtom(words) {\n  return bytesToAtom(wordsToBytes(words));\n}\n// 0x3930b13c0dedeccf01 atom\nvar malt = wordsToAtom;\n// XX: INTERNAL\nfunction slaq(bloq, len) {\n  return new Array((len << bloq) + 31 >>> 5);\n}\n// src is atom, all others native\nfunction chop(met, fum, wid, tou, dst, src) {\n  var buf = atomToWords(src),\n    len = buf.length,\n    i,\n    j,\n    san,\n    mek,\n    baf,\n    bat,\n    hut,\n    san,\n    wuf,\n    wut,\n    waf,\n    raf,\n    wat,\n    rat,\n    hop;\n  if (met < 5) {\n    san = 1 << met;\n    mek = (1 << san) - 1;\n    baf = fum << met;\n    bat = tou << met;\n    for (i = 0; i < wid; ++i) {\n      waf = baf >>> 5;\n      raf = baf & 31;\n      wat = bat >>> 5;\n      rat = bat & 31;\n      hop = waf >= len ? 0 : buf[waf];\n      hop = hop >>> raf & mek;\n      dst[wat] ^= hop << rat;\n      baf += san;\n      bat += san;\n    }\n  } else {\n    hut = met - 5;\n    san = 1 << hut;\n    for (i = 0; i < wid; ++i) {\n      wuf = fum + i << hut;\n      wut = tou + i << hut;\n      for (j = 0; j < san; ++j) {\n        dst[wut + j] ^= wuf + j >= len ? 0 : buf[wuf + j];\n      }\n    }\n  }\n}\n// bloq, start, length, atom\nfunction cut(a, b, c, d) {\n  //  this is the common case for cue operations, important to be fast,\n  //  we can just use native operatios for it\n  if (a.number === 0n) {\n    return new Atom(d.number >> b.number & (1n << c.number) - 1n);\n  }\n  var ai = Number(a.number),\n    bi = Number(b.number),\n    ci = Number(c.number);\n  var len = met(ai, d);\n  if (Atom.zero.equals(c) || bi >= len) {\n    return Atom.zero;\n  }\n  if (bi + ci > len) {\n    ci = len - Number(b.number); // doublecheck\n  }\n  if (0 === bi && ci === len) {\n    return d;\n  } else {\n    var sal = slaq(ai, ci);\n    chop(ai, bi, ci, 0, sal, d);\n    return malt(sal);\n  }\n}\nconst maxCat = /*#__PURE__*/Atom.fromInt(0xffffffff);\nconst catBits = /*#__PURE__*/Atom.fromInt(32);\nfunction end(a, b, c) {\n  if (gth(a, catBits)) {\n    throw new Error(\"Fail\");\n  } else if (gth(b, maxCat)) {\n    return c;\n  } else {\n    var ai = Number(a.number),\n      bi = Number(b.number),\n      len = met(ai, c);\n    if (0 === bi) {\n      return Atom.zero;\n    } else if (bi >= len) {\n      return c;\n    } else {\n      var sal = slaq(ai, bi);\n      chop(ai, 0, bi, 0, sal, c);\n      return malt(sal);\n    }\n  }\n}\nfunction mix(a, b) {\n  return new Atom(a.number ^ b.number);\n}\n// doublecheck everything\nfunction cat(a, b, c) {\n  if (gth(a, catBits)) {\n    throw new Error(\"Fail\");\n  } else {\n    var ai = Number(a.number),\n      lew = met(ai, b),\n      ler = met(ai, c),\n      all = lew + ler;\n    if (0 === all) {\n      return Atom.zero;\n    } else {\n      const sal = slaq(ai, all);\n      chop(ai, 0, lew, 0, sal, b);\n      chop(ai, 0, ler, lew, sal, c);\n      return malt(sal);\n    }\n  }\n}\nfunction can(a, b) {\n  if (gth(a, catBits)) {\n    throw new Error(\"Fail\");\n  } else {\n    let ai = Number(a.number),\n      tot = 0,\n      cab = b,\n      pos,\n      i_cab,\n      pi_cab,\n      qi_cab;\n    // measure\n    while (true) {\n      if (Atom.zero.equals(cab)) break;\n      if (cab instanceof Atom) throw new Error(\"Fail\");\n      i_cab = cab.head;\n      if (i_cab instanceof Atom) throw new Error(\"Fail\");else if (i_cab instanceof Cell) {\n        pi_cab = i_cab.head;\n        qi_cab = i_cab.tail;\n      }\n      if (pi_cab instanceof Atom && gth(pi_cab, maxCat)) throw new Error(\"Fail\");\n      if (qi_cab instanceof Cell) throw new Error(\"Fail\");\n      if (pi_cab instanceof Atom) tot += Number(pi_cab.number);\n      if (cab instanceof Cell) cab = cab.tail;\n    }\n    if (0 === tot) return Atom.zero;\n    var sal = slaq(ai, tot);\n    // chop the list atoms in\n    cab = b;\n    pos = 0;\n    while (!Atom.zero.equals(cab)) {\n      if (cab instanceof Cell) i_cab = cab.head;\n      if (i_cab instanceof Cell) {\n        if (i_cab.head instanceof Atom) pi_cab = Number(i_cab.head.number);\n        qi_cab = i_cab.tail;\n        chop(ai, 0, pi_cab, pos, sal, qi_cab);\n        pos += pi_cab;\n        if (cab instanceof Cell) cab = cab.tail;\n      }\n    }\n    return malt(sal);\n  }\n}\nvar bits = {\n  met,\n  cut,\n  add,\n  sub,\n  dec,\n  gth,\n  lth,\n  gte,\n  lte,\n  bex,\n  lsh,\n  rsh,\n  end,\n  mix,\n  cat,\n  can,\n  bytesToWords,\n  wordsToBytes,\n  bytesToAtom,\n  atomToBytes,\n  atomToWords,\n  wordsToAtom\n};\n\nconst dwim = dejs.dwim;\nconst mask = function (face, axis, axes) {\n  if (axis === void 0) {\n    axis = Atom.one;\n  }\n  if (axes === void 0) {\n    axes = {};\n  }\n  if (typeof face === 'string') {\n    if (face === '') return axes;\n    axes[face] = axis;\n    return axes;\n  } else {\n    if (face.length === 0) return axes;\n    if (face.length === 1) {\n      return mask(face[0], axis, axes);\n    } else {\n      const left = bits.lsh(Atom.zero, Atom.one, axis);\n      axes = mask(face[0], left, axes);\n      return mask(face.slice(1), left.bump(), axes);\n    }\n  }\n};\nconst grab = (axes, noun, face) => {\n  return noun.at(axes[face]);\n};\nconst experimental = {\n  mask,\n  grab\n};\n\nfunction flop(a) {\n  var b = Atom.zero;\n  while (true) {\n    if (Atom.zero.equals(a)) {\n      return b;\n    } else if (a instanceof Atom) {\n      throw new Error(\"Bail\");\n    } else {\n      b = new Cell(a.head, b);\n      a = a.tail;\n    }\n  }\n}\nfunction forEach(n, f) {\n  while (true) {\n    if (Atom.zero.equals(n)) {\n      return;\n    } else if (n instanceof Atom) {\n      throw new Error(\"Bail\");\n    } else {\n      f(n.head);\n      n = n.tail;\n    }\n  }\n}\nvar list = {\n  flop,\n  forEach\n};\n\nclass Slot {}\nclass Node extends Slot {\n  constructor() {\n    super();\n    this.slots = void 0;\n    this.slots = Array(32);\n  }\n  insert(key, val, lef, rem) {\n    lef -= 5;\n    const inx = rem >>> lef;\n    rem &= (1 << lef) - 1;\n    this.slots[inx] = undefined === this.slots[inx] ? new Single(key, val) : this.slots[inx].insert(key, val, lef, rem);\n    return this;\n  }\n  get(key, lef, rem) {\n    lef -= 5;\n    const inx = rem >>> lef;\n    rem &= (1 << lef) - 1;\n    const sot = this.slots[inx];\n    return undefined === sot ? undefined : sot.get(key, lef, rem);\n  }\n}\nclass Bucket extends Slot {\n  constructor() {\n    super();\n    this.singles = void 0;\n    this.singles = [];\n  }\n  insert(key, val, lef, rem) {\n    const a = this.singles;\n    for (var i = 0; i < a.length; ++i) {\n      const s = a[i];\n      if (s.key.equals(key)) {\n        s.val = val;\n        return this;\n      }\n    }\n    a.push(new Single(key, val));\n    return this;\n  }\n  get(key) {\n    const a = this.singles;\n    for (var i = 0; i < a.length; ++i) {\n      const s = a[i];\n      if (s.key.equals(key)) {\n        return s.val;\n      }\n    }\n  }\n}\nclass Single extends Slot {\n  constructor(key, val) {\n    super();\n    this.key = void 0;\n    this.val = void 0;\n    this.key = key;\n    this.val = val;\n  }\n  insert(key, val, lef, rem) {\n    if (this.key.equals(key)) {\n      this.val = val;\n      return this;\n    } else {\n      const rom = this.key.mug() & (1 << lef) - 1;\n      const n = lef > 0 ? new Node() : new Bucket();\n      n.insert(this.key, this.val, lef, rom);\n      n.insert(key, val, lef, rem);\n      return n;\n    }\n  }\n  get(key) {\n    if (this.key.equals(key)) return this.val;\n  }\n}\nclass NounMap {\n  constructor() {\n    this.slots = void 0;\n    this.slots = Array(64);\n  }\n  insert(key, val) {\n    const m = key.mug();\n    const inx = m >>> 25;\n    const sot = this.slots;\n    if (sot[inx] === undefined) sot[inx] = new Single(key, val);else {\n      var rem = m & (1 << 25) - 1;\n      sot[inx] = sot[inx].insert(key, val, 25, rem);\n    }\n  }\n  get(key) {\n    const m = key.mug();\n    const inx = m >>> 25;\n    const sot = this.slots[inx];\n    if (undefined === sot) {\n      return undefined;\n    } else {\n      var rem = m & (1 << 25) - 1;\n      return sot.get(key, 25, rem);\n    }\n  }\n}\n\nfunction bytesToBigint(bytes) {\n  if (bytes.length === 1) return BigInt(bytes[0]);\n  let byt,\n    parts = [];\n  for (var i = bytes.length - 1; i >= 0; --i) {\n    byt = bytes[i] & 0xff;\n    parts.push(byt.toString(16).padStart(2, '0'));\n  }\n  const num = bigIntFromStringWithRadix(parts.join(\"\"), 16);\n  return num;\n}\nfunction bigintToDataView(a) {\n  return new DataView(new Uint8Array(bigIntToByteArray(a).reverse()).buffer);\n}\n//  cue\n//NOTE  we operate primarily on a DataView (backed by a byte buffer), because\n//      that's way faster for big jams than the naive bigint bits operations.\nfunction bi_cut(b, c, d) {\n  return dv_cut(Number(b), Number(c), bigintToDataView(d));\n}\nfunction dv_bit(b, d) {\n  const byte = Math.floor(b / 8);\n  return d.getUint8(byte) >> b % 8 & 1;\n}\nfunction dv_bitLength(d) {\n  const l = d.byteLength - 1;\n  if (l > 2 ** 49) throw new Error('bail: oversized byte buffer'); //REVIEW\n  return l * 8 + d.getUint8(l).toString(2).length;\n}\nfunction dv_cut(b, c, d) {\n  if (c === 1) return dv_bit(b, d) ? 1n : 0n;\n  const offset = b % 8;\n  if (offset === 0) return dv_cut_at_bytes(b, c, d); //TODO  might not matter\n  const out = [];\n  let curByte = Math.floor(b / 8);\n  //  for reading whole bytes, read from both left and right according to offset\n  const bitsFromOne = 8 - offset;\n  const bitsFromTwo = offset;\n  const twoMask = 0xff >> 8 - bitsFromTwo;\n  while (c >= 8) {\n    const one = d.getUint8(curByte);\n    const two = d.getUint8(curByte + 1);\n    const left = (two & twoMask) << bitsFromOne;\n    const right = one >> bitsFromTwo;\n    out.push(left | right);\n    curByte++;\n    c -= 8;\n  }\n  //  for the last <8 bits, read them carefully\n  if (c > 0n) {\n    const bitsFromOne = Math.min(c, 8 - offset);\n    const bitsFromTwo = c - bitsFromOne;\n    const oneMask = 0xff >> 8 - bitsFromOne << offset;\n    const twoMask = 0xff >> 8 - bitsFromTwo;\n    const one = d.getUint8(curByte);\n    const two = curByte + 1 >= d.byteLength ? 0 : d.getUint8(curByte + 1);\n    const left = bitsFromTwo === 0 ? 0 : (two & twoMask) << bitsFromOne;\n    const right = (one & oneMask) >> offset;\n    out.push(left | right);\n  }\n  return bytesToBigint(out);\n}\nfunction dv_cut_at_bytes(b, c, d) {\n  if (b % 8 !== 0) throw new Error('non-byte-aligned read ' + b);\n  let curByte = Math.floor(b / 8);\n  const out = [];\n  //  we can just grab bytes directly\n  while (c >= 8) {\n    out.push(d.getUint8(curByte));\n    curByte++;\n    c -= 8;\n  }\n  //  only for the last one may we need to mask out bits beyond read range\n  if (c > 0n) {\n    out.push(d.getUint8(curByte) & 0xff >> 8 - c);\n  }\n  return bytesToBigint(out);\n}\nfunction rub(a, v, l) {\n  var c, d, e, w, x, y, z, p, q, m;\n  m = a + l;\n  x = a;\n  while (0 === dv_bit(x, v)) {\n    y = x + 1;\n    //  Sanity check: crash if decoding more bits than available\n    if (x > m) throw new Error('bail: rubbing past end');\n    x = y;\n  }\n  if (a === x) return {\n    head: 1,\n    tail: Atom.zero\n  };\n  c = x - a;\n  d = x + 1;\n  x = c - 1;\n  if (x > 52) throw new Error('bail: rubbing oversized pointer (>52 bits)');\n  y = 2 ** x; // bex(x);\n  z = Number(dv_cut(d, x, v));\n  e = y + z;\n  w = c + c;\n  y = w + e;\n  z = d + x;\n  p = w + e;\n  q = dv_cut(z, e, v);\n  return {\n    head: p,\n    tail: new Atom(q)\n  };\n}\nfunction insert(m, k, n) {\n  return m[k] = n;\n}\nfunction get(m, k) {\n  return m[k];\n}\nfunction cue_in(m, vv, l, b) {\n  let head;\n  let tailhead;\n  if (0 === dv_bit(b, vv)) {\n    const x = 1 + b;\n    const c = rub(x, vv, l);\n    head = c.head + 1;\n    tailhead = c.tail;\n    insert(m, b, tailhead);\n  } else {\n    let b2 = 2 + b;\n    let b1 = 1 + b;\n    if (0 === dv_bit(b1, vv)) {\n      const u = cue_in(m, vv, l, b2);\n      const x = u.head + b2;\n      const v = cue_in(m, vv, l, x);\n      const y = u.head + v.head;\n      head = 2 + y;\n      tailhead = new Cell(u.tail, v.tail);\n      insert(m, b, tailhead);\n    } else {\n      const d = rub(b2, vv, l);\n      const dd = get(m, Number(d.tail.number));\n      if (undefined === dd) throw new Error(\"Bail\");\n      head = 2 + d.head;\n      tailhead = dd;\n    }\n  }\n  return {\n    head: head,\n    tail: tailhead\n  };\n}\nfunction cue(a) {\n  return cue_bytes(bigintToDataView(a.number));\n}\nfunction cue_bytes(v) {\n  return cue_in({}, v, dv_bitLength(v), 0).tail;\n}\n//  jam\nfunction mat(a) {\n  if (Atom.zero.equals(a)) {\n    return dwim(1, 1);\n  } else {\n    const b = dwim(bits.met(0, a)),\n      c = dwim(bits.met(0, b)),\n      u = bits.dec(c),\n      v = bits.add(c, c),\n      x = bits.end(Atom.zero, u, b),\n      w = bits.bex(c),\n      y = bits.lsh(Atom.zero, u, a),\n      z = bits.mix(x, y),\n      p = bits.add(v, b),\n      q = bits.cat(Atom.zero, w, z);\n    return dwim(p, q);\n  }\n}\nfunction _jam_in_pair(m, h_a, t_a, b, l) {\n  var w = dwim([2, 1], l),\n    x = bits.add(Atom.two, b),\n    d = _jam_in(m, h_a, x, w),\n    y = bits.add(x, d.head),\n    e = _jam_in(m, t_a, y, d.tail.head),\n    z = bits.add(d.head, e.head);\n  return dwim(bits.add(Atom.two, z), e.tail.head, Atom.zero);\n}\nfunction _jam_in_ptr(u_c, l) {\n  var d = mat(u_c),\n    x = bits.lsh(Atom.zero, Atom.two, d.tail),\n    y = bits.add(Atom.two, d.head);\n  return dwim(y, [[y, bits.mix(Atom.three, x)], l], Atom.zero);\n}\nfunction _jam_in_flat(a, l) {\n  var d = mat(a),\n    x = bits.add(Atom.one, d.head);\n  return dwim(x, [[x, bits.lsh(Atom.zero, Atom.one, d.tail)], l], Atom.zero);\n}\nfunction _jam_in(m, a, b, l) {\n  const c = m.get(a);\n  if (undefined == c) {\n    m.insert(a, b);\n    return a instanceof Cell ? _jam_in_pair(m, a.head, a.tail, b, l) : _jam_in_flat(a, l);\n  } else if (a instanceof Atom && bits.met(0, a) <= bits.met(0, c)) {\n    return _jam_in_flat(a, l);\n  } else {\n    return _jam_in_ptr(c, l);\n  }\n}\nfunction jam(n) {\n  const x = _jam_in(new NounMap(), n, Atom.zero, Atom.zero),\n    q = list.flop(x.tail.head);\n  return bits.can(Atom.zero, q);\n}\n\nexport { Atom, Cell, bi_cut, bigintToDataView, cue, cue_bytes, dejs, dwim, enjs, experimental, fragCache, isAtom, isCell, isNoun, jam, mat };\n//# sourceMappingURL=nockjs.esm.js.map\n","// src/index.ts\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\nvar isNode = (\n  // @ts-expect-error\n  typeof process !== \"undefined\" && // @ts-expect-error\n  process.versions != null && // @ts-expect-error\n  process.versions.node != null\n);\nvar isWebWorker = typeof self === \"object\" && self.constructor && self.constructor.name === \"DedicatedWorkerGlobalScope\";\nvar isJsDom = typeof window !== \"undefined\" && window.name === \"nodejs\" || typeof navigator !== \"undefined\" && \"userAgent\" in navigator && typeof navigator.userAgent === \"string\" && (navigator.userAgent.includes(\"Node.js\") || navigator.userAgent.includes(\"jsdom\"));\nvar isDeno = (\n  // @ts-expect-error\n  typeof Deno !== \"undefined\" && // @ts-expect-error\n  typeof Deno.version !== \"undefined\" && // @ts-expect-error\n  typeof Deno.version.deno !== \"undefined\"\n);\nvar isBun = typeof process !== \"undefined\" && process.versions != null && process.versions.bun != null;\nexport {\n  isBrowser,\n  isBun,\n  isDeno,\n  isJsDom,\n  isNode,\n  isWebWorker\n};\n","var bigInt = (function (undefined) {\r\n    \"use strict\";\r\n\r\n    var BASE = 1e7,\r\n        LOG_BASE = 7,\r\n        MAX_INT = 9007199254740992,\r\n        MAX_INT_ARR = smallToArray(MAX_INT),\r\n        DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n    var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n    function Integer(v, radix, alphabet, caseSensitive) {\r\n        if (typeof v === \"undefined\") return Integer[0];\r\n        if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n        return parseValue(v);\r\n    }\r\n\r\n    function BigInteger(value, sign) {\r\n        this.value = value;\r\n        this.sign = sign;\r\n        this.isSmall = false;\r\n    }\r\n    BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n    function SmallInteger(value) {\r\n        this.value = value;\r\n        this.sign = value < 0;\r\n        this.isSmall = true;\r\n    }\r\n    SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n    function NativeBigInt(value) {\r\n        this.value = value;\r\n    }\r\n    NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n    function isPrecise(n) {\r\n        return -MAX_INT < n && n < MAX_INT;\r\n    }\r\n\r\n    function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n        if (n < 1e7)\r\n            return [n];\r\n        if (n < 1e14)\r\n            return [n % 1e7, Math.floor(n / 1e7)];\r\n        return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n    }\r\n\r\n    function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n        trim(arr);\r\n        var length = arr.length;\r\n        if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n            switch (length) {\r\n                case 0: return 0;\r\n                case 1: return arr[0];\r\n                case 2: return arr[0] + arr[1] * BASE;\r\n                default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n            }\r\n        }\r\n        return arr;\r\n    }\r\n\r\n    function trim(v) {\r\n        var i = v.length;\r\n        while (v[--i] === 0);\r\n        v.length = i + 1;\r\n    }\r\n\r\n    function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n        var x = new Array(length);\r\n        var i = -1;\r\n        while (++i < length) {\r\n            x[i] = 0;\r\n        }\r\n        return x;\r\n    }\r\n\r\n    function truncate(n) {\r\n        if (n > 0) return Math.floor(n);\r\n        return Math.ceil(n);\r\n    }\r\n\r\n    function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n        var l_a = a.length,\r\n            l_b = b.length,\r\n            r = new Array(l_a),\r\n            carry = 0,\r\n            base = BASE,\r\n            sum, i;\r\n        for (i = 0; i < l_b; i++) {\r\n            sum = a[i] + b[i] + carry;\r\n            carry = sum >= base ? 1 : 0;\r\n            r[i] = sum - carry * base;\r\n        }\r\n        while (i < l_a) {\r\n            sum = a[i] + carry;\r\n            carry = sum === base ? 1 : 0;\r\n            r[i++] = sum - carry * base;\r\n        }\r\n        if (carry > 0) r.push(carry);\r\n        return r;\r\n    }\r\n\r\n    function addAny(a, b) {\r\n        if (a.length >= b.length) return add(a, b);\r\n        return add(b, a);\r\n    }\r\n\r\n    function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n        var l = a.length,\r\n            r = new Array(l),\r\n            base = BASE,\r\n            sum, i;\r\n        for (i = 0; i < l; i++) {\r\n            sum = a[i] - base + carry;\r\n            carry = Math.floor(sum / base);\r\n            r[i] = sum - carry * base;\r\n            carry += 1;\r\n        }\r\n        while (carry > 0) {\r\n            r[i++] = carry % base;\r\n            carry = Math.floor(carry / base);\r\n        }\r\n        return r;\r\n    }\r\n\r\n    BigInteger.prototype.add = function (v) {\r\n        var n = parseValue(v);\r\n        if (this.sign !== n.sign) {\r\n            return this.subtract(n.negate());\r\n        }\r\n        var a = this.value, b = n.value;\r\n        if (n.isSmall) {\r\n            return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n        }\r\n        return new BigInteger(addAny(a, b), this.sign);\r\n    };\r\n    BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n    SmallInteger.prototype.add = function (v) {\r\n        var n = parseValue(v);\r\n        var a = this.value;\r\n        if (a < 0 !== n.sign) {\r\n            return this.subtract(n.negate());\r\n        }\r\n        var b = n.value;\r\n        if (n.isSmall) {\r\n            if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n            b = smallToArray(Math.abs(b));\r\n        }\r\n        return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n    };\r\n    SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n    NativeBigInt.prototype.add = function (v) {\r\n        return new NativeBigInt(this.value + parseValue(v).value);\r\n    }\r\n    NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n    function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n        var a_l = a.length,\r\n            b_l = b.length,\r\n            r = new Array(a_l),\r\n            borrow = 0,\r\n            base = BASE,\r\n            i, difference;\r\n        for (i = 0; i < b_l; i++) {\r\n            difference = a[i] - borrow - b[i];\r\n            if (difference < 0) {\r\n                difference += base;\r\n                borrow = 1;\r\n            } else borrow = 0;\r\n            r[i] = difference;\r\n        }\r\n        for (i = b_l; i < a_l; i++) {\r\n            difference = a[i] - borrow;\r\n            if (difference < 0) difference += base;\r\n            else {\r\n                r[i++] = difference;\r\n                break;\r\n            }\r\n            r[i] = difference;\r\n        }\r\n        for (; i < a_l; i++) {\r\n            r[i] = a[i];\r\n        }\r\n        trim(r);\r\n        return r;\r\n    }\r\n\r\n    function subtractAny(a, b, sign) {\r\n        var value;\r\n        if (compareAbs(a, b) >= 0) {\r\n            value = subtract(a, b);\r\n        } else {\r\n            value = subtract(b, a);\r\n            sign = !sign;\r\n        }\r\n        value = arrayToSmall(value);\r\n        if (typeof value === \"number\") {\r\n            if (sign) value = -value;\r\n            return new SmallInteger(value);\r\n        }\r\n        return new BigInteger(value, sign);\r\n    }\r\n\r\n    function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n        var l = a.length,\r\n            r = new Array(l),\r\n            carry = -b,\r\n            base = BASE,\r\n            i, difference;\r\n        for (i = 0; i < l; i++) {\r\n            difference = a[i] + carry;\r\n            carry = Math.floor(difference / base);\r\n            difference %= base;\r\n            r[i] = difference < 0 ? difference + base : difference;\r\n        }\r\n        r = arrayToSmall(r);\r\n        if (typeof r === \"number\") {\r\n            if (sign) r = -r;\r\n            return new SmallInteger(r);\r\n        } return new BigInteger(r, sign);\r\n    }\r\n\r\n    BigInteger.prototype.subtract = function (v) {\r\n        var n = parseValue(v);\r\n        if (this.sign !== n.sign) {\r\n            return this.add(n.negate());\r\n        }\r\n        var a = this.value, b = n.value;\r\n        if (n.isSmall)\r\n            return subtractSmall(a, Math.abs(b), this.sign);\r\n        return subtractAny(a, b, this.sign);\r\n    };\r\n    BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n    SmallInteger.prototype.subtract = function (v) {\r\n        var n = parseValue(v);\r\n        var a = this.value;\r\n        if (a < 0 !== n.sign) {\r\n            return this.add(n.negate());\r\n        }\r\n        var b = n.value;\r\n        if (n.isSmall) {\r\n            return new SmallInteger(a - b);\r\n        }\r\n        return subtractSmall(b, Math.abs(a), a >= 0);\r\n    };\r\n    SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n    NativeBigInt.prototype.subtract = function (v) {\r\n        return new NativeBigInt(this.value - parseValue(v).value);\r\n    }\r\n    NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n    BigInteger.prototype.negate = function () {\r\n        return new BigInteger(this.value, !this.sign);\r\n    };\r\n    SmallInteger.prototype.negate = function () {\r\n        var sign = this.sign;\r\n        var small = new SmallInteger(-this.value);\r\n        small.sign = !sign;\r\n        return small;\r\n    };\r\n    NativeBigInt.prototype.negate = function () {\r\n        return new NativeBigInt(-this.value);\r\n    }\r\n\r\n    BigInteger.prototype.abs = function () {\r\n        return new BigInteger(this.value, false);\r\n    };\r\n    SmallInteger.prototype.abs = function () {\r\n        return new SmallInteger(Math.abs(this.value));\r\n    };\r\n    NativeBigInt.prototype.abs = function () {\r\n        return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n    }\r\n\r\n\r\n    function multiplyLong(a, b) {\r\n        var a_l = a.length,\r\n            b_l = b.length,\r\n            l = a_l + b_l,\r\n            r = createArray(l),\r\n            base = BASE,\r\n            product, carry, i, a_i, b_j;\r\n        for (i = 0; i < a_l; ++i) {\r\n            a_i = a[i];\r\n            for (var j = 0; j < b_l; ++j) {\r\n                b_j = b[j];\r\n                product = a_i * b_j + r[i + j];\r\n                carry = Math.floor(product / base);\r\n                r[i + j] = product - carry * base;\r\n                r[i + j + 1] += carry;\r\n            }\r\n        }\r\n        trim(r);\r\n        return r;\r\n    }\r\n\r\n    function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n        var l = a.length,\r\n            r = new Array(l),\r\n            base = BASE,\r\n            carry = 0,\r\n            product, i;\r\n        for (i = 0; i < l; i++) {\r\n            product = a[i] * b + carry;\r\n            carry = Math.floor(product / base);\r\n            r[i] = product - carry * base;\r\n        }\r\n        while (carry > 0) {\r\n            r[i++] = carry % base;\r\n            carry = Math.floor(carry / base);\r\n        }\r\n        return r;\r\n    }\r\n\r\n    function shiftLeft(x, n) {\r\n        var r = [];\r\n        while (n-- > 0) r.push(0);\r\n        return r.concat(x);\r\n    }\r\n\r\n    function multiplyKaratsuba(x, y) {\r\n        var n = Math.max(x.length, y.length);\r\n\r\n        if (n <= 30) return multiplyLong(x, y);\r\n        n = Math.ceil(n / 2);\r\n\r\n        var b = x.slice(n),\r\n            a = x.slice(0, n),\r\n            d = y.slice(n),\r\n            c = y.slice(0, n);\r\n\r\n        var ac = multiplyKaratsuba(a, c),\r\n            bd = multiplyKaratsuba(b, d),\r\n            abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n        var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n        trim(product);\r\n        return product;\r\n    }\r\n\r\n    // The following function is derived from a surface fit of a graph plotting the performance difference\r\n    // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n    function useKaratsuba(l1, l2) {\r\n        return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n    }\r\n\r\n    BigInteger.prototype.multiply = function (v) {\r\n        var n = parseValue(v),\r\n            a = this.value, b = n.value,\r\n            sign = this.sign !== n.sign,\r\n            abs;\r\n        if (n.isSmall) {\r\n            if (b === 0) return Integer[0];\r\n            if (b === 1) return this;\r\n            if (b === -1) return this.negate();\r\n            abs = Math.abs(b);\r\n            if (abs < BASE) {\r\n                return new BigInteger(multiplySmall(a, abs), sign);\r\n            }\r\n            b = smallToArray(abs);\r\n        }\r\n        if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n            return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n        return new BigInteger(multiplyLong(a, b), sign);\r\n    };\r\n\r\n    BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n    function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n        if (a < BASE) {\r\n            return new BigInteger(multiplySmall(b, a), sign);\r\n        }\r\n        return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n    }\r\n    SmallInteger.prototype._multiplyBySmall = function (a) {\r\n        if (isPrecise(a.value * this.value)) {\r\n            return new SmallInteger(a.value * this.value);\r\n        }\r\n        return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n    };\r\n    BigInteger.prototype._multiplyBySmall = function (a) {\r\n        if (a.value === 0) return Integer[0];\r\n        if (a.value === 1) return this;\r\n        if (a.value === -1) return this.negate();\r\n        return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n    };\r\n    SmallInteger.prototype.multiply = function (v) {\r\n        return parseValue(v)._multiplyBySmall(this);\r\n    };\r\n    SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n    NativeBigInt.prototype.multiply = function (v) {\r\n        return new NativeBigInt(this.value * parseValue(v).value);\r\n    }\r\n    NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n    function square(a) {\r\n        //console.assert(2 * BASE * BASE < MAX_INT);\r\n        var l = a.length,\r\n            r = createArray(l + l),\r\n            base = BASE,\r\n            product, carry, i, a_i, a_j;\r\n        for (i = 0; i < l; i++) {\r\n            a_i = a[i];\r\n            carry = 0 - a_i * a_i;\r\n            for (var j = i; j < l; j++) {\r\n                a_j = a[j];\r\n                product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n                carry = Math.floor(product / base);\r\n                r[i + j] = product - carry * base;\r\n            }\r\n            r[i + l] = carry;\r\n        }\r\n        trim(r);\r\n        return r;\r\n    }\r\n\r\n    BigInteger.prototype.square = function () {\r\n        return new BigInteger(square(this.value), false);\r\n    };\r\n\r\n    SmallInteger.prototype.square = function () {\r\n        var value = this.value * this.value;\r\n        if (isPrecise(value)) return new SmallInteger(value);\r\n        return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n    };\r\n\r\n    NativeBigInt.prototype.square = function (v) {\r\n        return new NativeBigInt(this.value * this.value);\r\n    }\r\n\r\n    function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n        var a_l = a.length,\r\n            b_l = b.length,\r\n            base = BASE,\r\n            result = createArray(b.length),\r\n            divisorMostSignificantDigit = b[b_l - 1],\r\n            // normalization\r\n            lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n            remainder = multiplySmall(a, lambda),\r\n            divisor = multiplySmall(b, lambda),\r\n            quotientDigit, shift, carry, borrow, i, l, q;\r\n        if (remainder.length <= a_l) remainder.push(0);\r\n        divisor.push(0);\r\n        divisorMostSignificantDigit = divisor[b_l - 1];\r\n        for (shift = a_l - b_l; shift >= 0; shift--) {\r\n            quotientDigit = base - 1;\r\n            if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n                quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n            }\r\n            // quotientDigit <= base - 1\r\n            carry = 0;\r\n            borrow = 0;\r\n            l = divisor.length;\r\n            for (i = 0; i < l; i++) {\r\n                carry += quotientDigit * divisor[i];\r\n                q = Math.floor(carry / base);\r\n                borrow += remainder[shift + i] - (carry - q * base);\r\n                carry = q;\r\n                if (borrow < 0) {\r\n                    remainder[shift + i] = borrow + base;\r\n                    borrow = -1;\r\n                } else {\r\n                    remainder[shift + i] = borrow;\r\n                    borrow = 0;\r\n                }\r\n            }\r\n            while (borrow !== 0) {\r\n                quotientDigit -= 1;\r\n                carry = 0;\r\n                for (i = 0; i < l; i++) {\r\n                    carry += remainder[shift + i] - base + divisor[i];\r\n                    if (carry < 0) {\r\n                        remainder[shift + i] = carry + base;\r\n                        carry = 0;\r\n                    } else {\r\n                        remainder[shift + i] = carry;\r\n                        carry = 1;\r\n                    }\r\n                }\r\n                borrow += carry;\r\n            }\r\n            result[shift] = quotientDigit;\r\n        }\r\n        // denormalization\r\n        remainder = divModSmall(remainder, lambda)[0];\r\n        return [arrayToSmall(result), arrayToSmall(remainder)];\r\n    }\r\n\r\n    function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n        // Performs faster than divMod1 on larger input sizes.\r\n        var a_l = a.length,\r\n            b_l = b.length,\r\n            result = [],\r\n            part = [],\r\n            base = BASE,\r\n            guess, xlen, highx, highy, check;\r\n        while (a_l) {\r\n            part.unshift(a[--a_l]);\r\n            trim(part);\r\n            if (compareAbs(part, b) < 0) {\r\n                result.push(0);\r\n                continue;\r\n            }\r\n            xlen = part.length;\r\n            highx = part[xlen - 1] * base + part[xlen - 2];\r\n            highy = b[b_l - 1] * base + b[b_l - 2];\r\n            if (xlen > b_l) {\r\n                highx = (highx + 1) * base;\r\n            }\r\n            guess = Math.ceil(highx / highy);\r\n            do {\r\n                check = multiplySmall(b, guess);\r\n                if (compareAbs(check, part) <= 0) break;\r\n                guess--;\r\n            } while (guess);\r\n            result.push(guess);\r\n            part = subtract(part, check);\r\n        }\r\n        result.reverse();\r\n        return [arrayToSmall(result), arrayToSmall(part)];\r\n    }\r\n\r\n    function divModSmall(value, lambda) {\r\n        var length = value.length,\r\n            quotient = createArray(length),\r\n            base = BASE,\r\n            i, q, remainder, divisor;\r\n        remainder = 0;\r\n        for (i = length - 1; i >= 0; --i) {\r\n            divisor = remainder * base + value[i];\r\n            q = truncate(divisor / lambda);\r\n            remainder = divisor - q * lambda;\r\n            quotient[i] = q | 0;\r\n        }\r\n        return [quotient, remainder | 0];\r\n    }\r\n\r\n    function divModAny(self, v) {\r\n        var value, n = parseValue(v);\r\n        if (supportsNativeBigInt) {\r\n            return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n        }\r\n        var a = self.value, b = n.value;\r\n        var quotient;\r\n        if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n        if (self.isSmall) {\r\n            if (n.isSmall) {\r\n                return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n            }\r\n            return [Integer[0], self];\r\n        }\r\n        if (n.isSmall) {\r\n            if (b === 1) return [self, Integer[0]];\r\n            if (b == -1) return [self.negate(), Integer[0]];\r\n            var abs = Math.abs(b);\r\n            if (abs < BASE) {\r\n                value = divModSmall(a, abs);\r\n                quotient = arrayToSmall(value[0]);\r\n                var remainder = value[1];\r\n                if (self.sign) remainder = -remainder;\r\n                if (typeof quotient === \"number\") {\r\n                    if (self.sign !== n.sign) quotient = -quotient;\r\n                    return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n                }\r\n                return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n            }\r\n            b = smallToArray(abs);\r\n        }\r\n        var comparison = compareAbs(a, b);\r\n        if (comparison === -1) return [Integer[0], self];\r\n        if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n        // divMod1 is faster on smaller input sizes\r\n        if (a.length + b.length <= 200)\r\n            value = divMod1(a, b);\r\n        else value = divMod2(a, b);\r\n\r\n        quotient = value[0];\r\n        var qSign = self.sign !== n.sign,\r\n            mod = value[1],\r\n            mSign = self.sign;\r\n        if (typeof quotient === \"number\") {\r\n            if (qSign) quotient = -quotient;\r\n            quotient = new SmallInteger(quotient);\r\n        } else quotient = new BigInteger(quotient, qSign);\r\n        if (typeof mod === \"number\") {\r\n            if (mSign) mod = -mod;\r\n            mod = new SmallInteger(mod);\r\n        } else mod = new BigInteger(mod, mSign);\r\n        return [quotient, mod];\r\n    }\r\n\r\n    BigInteger.prototype.divmod = function (v) {\r\n        var result = divModAny(this, v);\r\n        return {\r\n            quotient: result[0],\r\n            remainder: result[1]\r\n        };\r\n    };\r\n    NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n    BigInteger.prototype.divide = function (v) {\r\n        return divModAny(this, v)[0];\r\n    };\r\n    NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n        return new NativeBigInt(this.value / parseValue(v).value);\r\n    };\r\n    SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n    BigInteger.prototype.mod = function (v) {\r\n        return divModAny(this, v)[1];\r\n    };\r\n    NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n        return new NativeBigInt(this.value % parseValue(v).value);\r\n    };\r\n    SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n    BigInteger.prototype.pow = function (v) {\r\n        var n = parseValue(v),\r\n            a = this.value,\r\n            b = n.value,\r\n            value, x, y;\r\n        if (b === 0) return Integer[1];\r\n        if (a === 0) return Integer[0];\r\n        if (a === 1) return Integer[1];\r\n        if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n        if (n.sign) {\r\n            return Integer[0];\r\n        }\r\n        if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n        if (this.isSmall) {\r\n            if (isPrecise(value = Math.pow(a, b)))\r\n                return new SmallInteger(truncate(value));\r\n        }\r\n        x = this;\r\n        y = Integer[1];\r\n        while (true) {\r\n            if (b & 1 === 1) {\r\n                y = y.times(x);\r\n                --b;\r\n            }\r\n            if (b === 0) break;\r\n            b /= 2;\r\n            x = x.square();\r\n        }\r\n        return y;\r\n    };\r\n    SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n    NativeBigInt.prototype.pow = function (v) {\r\n        var n = parseValue(v);\r\n        var a = this.value, b = n.value;\r\n        var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n        if (b === _0) return Integer[1];\r\n        if (a === _0) return Integer[0];\r\n        if (a === _1) return Integer[1];\r\n        if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n        if (n.isNegative()) return new NativeBigInt(_0);\r\n        var x = this;\r\n        var y = Integer[1];\r\n        while (true) {\r\n            if ((b & _1) === _1) {\r\n                y = y.times(x);\r\n                --b;\r\n            }\r\n            if (b === _0) break;\r\n            b /= _2;\r\n            x = x.square();\r\n        }\r\n        return y;\r\n    }\r\n\r\n    BigInteger.prototype.modPow = function (exp, mod) {\r\n        exp = parseValue(exp);\r\n        mod = parseValue(mod);\r\n        if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n        var r = Integer[1],\r\n            base = this.mod(mod);\r\n        if (exp.isNegative()) {\r\n            exp = exp.multiply(Integer[-1]);\r\n            base = base.modInv(mod);\r\n        }\r\n        while (exp.isPositive()) {\r\n            if (base.isZero()) return Integer[0];\r\n            if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n            exp = exp.divide(2);\r\n            base = base.square().mod(mod);\r\n        }\r\n        return r;\r\n    };\r\n    NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n    function compareAbs(a, b) {\r\n        if (a.length !== b.length) {\r\n            return a.length > b.length ? 1 : -1;\r\n        }\r\n        for (var i = a.length - 1; i >= 0; i--) {\r\n            if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    BigInteger.prototype.compareAbs = function (v) {\r\n        var n = parseValue(v),\r\n            a = this.value,\r\n            b = n.value;\r\n        if (n.isSmall) return 1;\r\n        return compareAbs(a, b);\r\n    };\r\n    SmallInteger.prototype.compareAbs = function (v) {\r\n        var n = parseValue(v),\r\n            a = Math.abs(this.value),\r\n            b = n.value;\r\n        if (n.isSmall) {\r\n            b = Math.abs(b);\r\n            return a === b ? 0 : a > b ? 1 : -1;\r\n        }\r\n        return -1;\r\n    };\r\n    NativeBigInt.prototype.compareAbs = function (v) {\r\n        var a = this.value;\r\n        var b = parseValue(v).value;\r\n        a = a >= 0 ? a : -a;\r\n        b = b >= 0 ? b : -b;\r\n        return a === b ? 0 : a > b ? 1 : -1;\r\n    }\r\n\r\n    BigInteger.prototype.compare = function (v) {\r\n        // See discussion about comparison with Infinity:\r\n        // https://github.com/peterolson/BigInteger.js/issues/61\r\n        if (v === Infinity) {\r\n            return -1;\r\n        }\r\n        if (v === -Infinity) {\r\n            return 1;\r\n        }\r\n\r\n        var n = parseValue(v),\r\n            a = this.value,\r\n            b = n.value;\r\n        if (this.sign !== n.sign) {\r\n            return n.sign ? 1 : -1;\r\n        }\r\n        if (n.isSmall) {\r\n            return this.sign ? -1 : 1;\r\n        }\r\n        return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n    };\r\n    BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n    SmallInteger.prototype.compare = function (v) {\r\n        if (v === Infinity) {\r\n            return -1;\r\n        }\r\n        if (v === -Infinity) {\r\n            return 1;\r\n        }\r\n\r\n        var n = parseValue(v),\r\n            a = this.value,\r\n            b = n.value;\r\n        if (n.isSmall) {\r\n            return a == b ? 0 : a > b ? 1 : -1;\r\n        }\r\n        if (a < 0 !== n.sign) {\r\n            return a < 0 ? -1 : 1;\r\n        }\r\n        return a < 0 ? 1 : -1;\r\n    };\r\n    SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n    NativeBigInt.prototype.compare = function (v) {\r\n        if (v === Infinity) {\r\n            return -1;\r\n        }\r\n        if (v === -Infinity) {\r\n            return 1;\r\n        }\r\n        var a = this.value;\r\n        var b = parseValue(v).value;\r\n        return a === b ? 0 : a > b ? 1 : -1;\r\n    }\r\n    NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n    BigInteger.prototype.equals = function (v) {\r\n        return this.compare(v) === 0;\r\n    };\r\n    NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n    BigInteger.prototype.notEquals = function (v) {\r\n        return this.compare(v) !== 0;\r\n    };\r\n    NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n    BigInteger.prototype.greater = function (v) {\r\n        return this.compare(v) > 0;\r\n    };\r\n    NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n    BigInteger.prototype.lesser = function (v) {\r\n        return this.compare(v) < 0;\r\n    };\r\n    NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n    BigInteger.prototype.greaterOrEquals = function (v) {\r\n        return this.compare(v) >= 0;\r\n    };\r\n    NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n    BigInteger.prototype.lesserOrEquals = function (v) {\r\n        return this.compare(v) <= 0;\r\n    };\r\n    NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n    BigInteger.prototype.isEven = function () {\r\n        return (this.value[0] & 1) === 0;\r\n    };\r\n    SmallInteger.prototype.isEven = function () {\r\n        return (this.value & 1) === 0;\r\n    };\r\n    NativeBigInt.prototype.isEven = function () {\r\n        return (this.value & BigInt(1)) === BigInt(0);\r\n    }\r\n\r\n    BigInteger.prototype.isOdd = function () {\r\n        return (this.value[0] & 1) === 1;\r\n    };\r\n    SmallInteger.prototype.isOdd = function () {\r\n        return (this.value & 1) === 1;\r\n    };\r\n    NativeBigInt.prototype.isOdd = function () {\r\n        return (this.value & BigInt(1)) === BigInt(1);\r\n    }\r\n\r\n    BigInteger.prototype.isPositive = function () {\r\n        return !this.sign;\r\n    };\r\n    SmallInteger.prototype.isPositive = function () {\r\n        return this.value > 0;\r\n    };\r\n    NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n    BigInteger.prototype.isNegative = function () {\r\n        return this.sign;\r\n    };\r\n    SmallInteger.prototype.isNegative = function () {\r\n        return this.value < 0;\r\n    };\r\n    NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n    BigInteger.prototype.isUnit = function () {\r\n        return false;\r\n    };\r\n    SmallInteger.prototype.isUnit = function () {\r\n        return Math.abs(this.value) === 1;\r\n    };\r\n    NativeBigInt.prototype.isUnit = function () {\r\n        return this.abs().value === BigInt(1);\r\n    }\r\n\r\n    BigInteger.prototype.isZero = function () {\r\n        return false;\r\n    };\r\n    SmallInteger.prototype.isZero = function () {\r\n        return this.value === 0;\r\n    };\r\n    NativeBigInt.prototype.isZero = function () {\r\n        return this.value === BigInt(0);\r\n    }\r\n\r\n    BigInteger.prototype.isDivisibleBy = function (v) {\r\n        var n = parseValue(v);\r\n        if (n.isZero()) return false;\r\n        if (n.isUnit()) return true;\r\n        if (n.compareAbs(2) === 0) return this.isEven();\r\n        return this.mod(n).isZero();\r\n    };\r\n    NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n    function isBasicPrime(v) {\r\n        var n = v.abs();\r\n        if (n.isUnit()) return false;\r\n        if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n        if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n        if (n.lesser(49)) return true;\r\n        // we don't know if it's prime: let the other functions figure it out\r\n    }\r\n\r\n    function millerRabinTest(n, a) {\r\n        var nPrev = n.prev(),\r\n            b = nPrev,\r\n            r = 0,\r\n            d, t, i, x;\r\n        while (b.isEven()) b = b.divide(2), r++;\r\n        next: for (i = 0; i < a.length; i++) {\r\n            if (n.lesser(a[i])) continue;\r\n            x = bigInt(a[i]).modPow(b, n);\r\n            if (x.isUnit() || x.equals(nPrev)) continue;\r\n            for (d = r - 1; d != 0; d--) {\r\n                x = x.square().mod(n);\r\n                if (x.isUnit()) return false;\r\n                if (x.equals(nPrev)) continue next;\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n    BigInteger.prototype.isPrime = function (strict) {\r\n        var isPrime = isBasicPrime(this);\r\n        if (isPrime !== undefined) return isPrime;\r\n        var n = this.abs();\r\n        var bits = n.bitLength();\r\n        if (bits <= 64)\r\n            return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n        var logN = Math.log(2) * bits.toJSNumber();\r\n        var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n        for (var a = [], i = 0; i < t; i++) {\r\n            a.push(bigInt(i + 2));\r\n        }\r\n        return millerRabinTest(n, a);\r\n    };\r\n    NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n    BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n        var isPrime = isBasicPrime(this);\r\n        if (isPrime !== undefined) return isPrime;\r\n        var n = this.abs();\r\n        var t = iterations === undefined ? 5 : iterations;\r\n        for (var a = [], i = 0; i < t; i++) {\r\n            a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n        }\r\n        return millerRabinTest(n, a);\r\n    };\r\n    NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n    BigInteger.prototype.modInv = function (n) {\r\n        var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n        while (!newR.isZero()) {\r\n            q = r.divide(newR);\r\n            lastT = t;\r\n            lastR = r;\r\n            t = newT;\r\n            r = newR;\r\n            newT = lastT.subtract(q.multiply(newT));\r\n            newR = lastR.subtract(q.multiply(newR));\r\n        }\r\n        if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n        if (t.compare(0) === -1) {\r\n            t = t.add(n);\r\n        }\r\n        if (this.isNegative()) {\r\n            return t.negate();\r\n        }\r\n        return t;\r\n    };\r\n\r\n    NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n    BigInteger.prototype.next = function () {\r\n        var value = this.value;\r\n        if (this.sign) {\r\n            return subtractSmall(value, 1, this.sign);\r\n        }\r\n        return new BigInteger(addSmall(value, 1), this.sign);\r\n    };\r\n    SmallInteger.prototype.next = function () {\r\n        var value = this.value;\r\n        if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n        return new BigInteger(MAX_INT_ARR, false);\r\n    };\r\n    NativeBigInt.prototype.next = function () {\r\n        return new NativeBigInt(this.value + BigInt(1));\r\n    }\r\n\r\n    BigInteger.prototype.prev = function () {\r\n        var value = this.value;\r\n        if (this.sign) {\r\n            return new BigInteger(addSmall(value, 1), true);\r\n        }\r\n        return subtractSmall(value, 1, this.sign);\r\n    };\r\n    SmallInteger.prototype.prev = function () {\r\n        var value = this.value;\r\n        if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n        return new BigInteger(MAX_INT_ARR, true);\r\n    };\r\n    NativeBigInt.prototype.prev = function () {\r\n        return new NativeBigInt(this.value - BigInt(1));\r\n    }\r\n\r\n    var powersOfTwo = [1];\r\n    while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n    var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n    function shift_isSmall(n) {\r\n        return Math.abs(n) <= BASE;\r\n    }\r\n\r\n    BigInteger.prototype.shiftLeft = function (v) {\r\n        var n = parseValue(v).toJSNumber();\r\n        if (!shift_isSmall(n)) {\r\n            throw new Error(String(n) + \" is too large for shifting.\");\r\n        }\r\n        if (n < 0) return this.shiftRight(-n);\r\n        var result = this;\r\n        if (result.isZero()) return result;\r\n        while (n >= powers2Length) {\r\n            result = result.multiply(highestPower2);\r\n            n -= powers2Length - 1;\r\n        }\r\n        return result.multiply(powersOfTwo[n]);\r\n    };\r\n    NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n    BigInteger.prototype.shiftRight = function (v) {\r\n        var remQuo;\r\n        var n = parseValue(v).toJSNumber();\r\n        if (!shift_isSmall(n)) {\r\n            throw new Error(String(n) + \" is too large for shifting.\");\r\n        }\r\n        if (n < 0) return this.shiftLeft(-n);\r\n        var result = this;\r\n        while (n >= powers2Length) {\r\n            if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n            remQuo = divModAny(result, highestPower2);\r\n            result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n            n -= powers2Length - 1;\r\n        }\r\n        remQuo = divModAny(result, powersOfTwo[n]);\r\n        return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n    };\r\n    NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n    function bitwise(x, y, fn) {\r\n        y = parseValue(y);\r\n        var xSign = x.isNegative(), ySign = y.isNegative();\r\n        var xRem = xSign ? x.not() : x,\r\n            yRem = ySign ? y.not() : y;\r\n        var xDigit = 0, yDigit = 0;\r\n        var xDivMod = null, yDivMod = null;\r\n        var result = [];\r\n        while (!xRem.isZero() || !yRem.isZero()) {\r\n            xDivMod = divModAny(xRem, highestPower2);\r\n            xDigit = xDivMod[1].toJSNumber();\r\n            if (xSign) {\r\n                xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n            }\r\n\r\n            yDivMod = divModAny(yRem, highestPower2);\r\n            yDigit = yDivMod[1].toJSNumber();\r\n            if (ySign) {\r\n                yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n            }\r\n\r\n            xRem = xDivMod[0];\r\n            yRem = yDivMod[0];\r\n            result.push(fn(xDigit, yDigit));\r\n        }\r\n        var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n        for (var i = result.length - 1; i >= 0; i -= 1) {\r\n            sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n        }\r\n        return sum;\r\n    }\r\n\r\n    BigInteger.prototype.not = function () {\r\n        return this.negate().prev();\r\n    };\r\n    NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n    BigInteger.prototype.and = function (n) {\r\n        return bitwise(this, n, function (a, b) { return a & b; });\r\n    };\r\n    NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n    BigInteger.prototype.or = function (n) {\r\n        return bitwise(this, n, function (a, b) { return a | b; });\r\n    };\r\n    NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n    BigInteger.prototype.xor = function (n) {\r\n        return bitwise(this, n, function (a, b) { return a ^ b; });\r\n    };\r\n    NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n    var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n    function roughLOB(n) { // get lowestOneBit (rough)\r\n        // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n        // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n        var v = n.value,\r\n            x = typeof v === \"number\" ? v | LOBMASK_I :\r\n                typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n                    v[0] + v[1] * BASE | LOBMASK_BI;\r\n        return x & -x;\r\n    }\r\n\r\n    function integerLogarithm(value, base) {\r\n        if (base.compareTo(value) <= 0) {\r\n            var tmp = integerLogarithm(value, base.square(base));\r\n            var p = tmp.p;\r\n            var e = tmp.e;\r\n            var t = p.multiply(base);\r\n            return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n        }\r\n        return { p: bigInt(1), e: 0 };\r\n    }\r\n\r\n    BigInteger.prototype.bitLength = function () {\r\n        var n = this;\r\n        if (n.compareTo(bigInt(0)) < 0) {\r\n            n = n.negate().subtract(bigInt(1));\r\n        }\r\n        if (n.compareTo(bigInt(0)) === 0) {\r\n            return bigInt(0);\r\n        }\r\n        return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n    }\r\n    NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n    function max(a, b) {\r\n        a = parseValue(a);\r\n        b = parseValue(b);\r\n        return a.greater(b) ? a : b;\r\n    }\r\n    function min(a, b) {\r\n        a = parseValue(a);\r\n        b = parseValue(b);\r\n        return a.lesser(b) ? a : b;\r\n    }\r\n    function gcd(a, b) {\r\n        a = parseValue(a).abs();\r\n        b = parseValue(b).abs();\r\n        if (a.equals(b)) return a;\r\n        if (a.isZero()) return b;\r\n        if (b.isZero()) return a;\r\n        var c = Integer[1], d, t;\r\n        while (a.isEven() && b.isEven()) {\r\n            d = min(roughLOB(a), roughLOB(b));\r\n            a = a.divide(d);\r\n            b = b.divide(d);\r\n            c = c.multiply(d);\r\n        }\r\n        while (a.isEven()) {\r\n            a = a.divide(roughLOB(a));\r\n        }\r\n        do {\r\n            while (b.isEven()) {\r\n                b = b.divide(roughLOB(b));\r\n            }\r\n            if (a.greater(b)) {\r\n                t = b; b = a; a = t;\r\n            }\r\n            b = b.subtract(a);\r\n        } while (!b.isZero());\r\n        return c.isUnit() ? a : a.multiply(c);\r\n    }\r\n    function lcm(a, b) {\r\n        a = parseValue(a).abs();\r\n        b = parseValue(b).abs();\r\n        return a.divide(gcd(a, b)).multiply(b);\r\n    }\r\n    function randBetween(a, b, rng) {\r\n        a = parseValue(a);\r\n        b = parseValue(b);\r\n        var usedRNG = rng || Math.random;\r\n        var low = min(a, b), high = max(a, b);\r\n        var range = high.subtract(low).add(1);\r\n        if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n        var digits = toBase(range, BASE).value;\r\n        var result = [], restricted = true;\r\n        for (var i = 0; i < digits.length; i++) {\r\n            var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;\r\n            var digit = truncate(usedRNG() * top);\r\n            result.push(digit);\r\n            if (digit < digits[i]) restricted = false;\r\n        }\r\n        return low.add(Integer.fromArray(result, BASE, false));\r\n    }\r\n\r\n    var parseBase = function (text, base, alphabet, caseSensitive) {\r\n        alphabet = alphabet || DEFAULT_ALPHABET;\r\n        text = String(text);\r\n        if (!caseSensitive) {\r\n            text = text.toLowerCase();\r\n            alphabet = alphabet.toLowerCase();\r\n        }\r\n        var length = text.length;\r\n        var i;\r\n        var absBase = Math.abs(base);\r\n        var alphabetValues = {};\r\n        for (i = 0; i < alphabet.length; i++) {\r\n            alphabetValues[alphabet[i]] = i;\r\n        }\r\n        for (i = 0; i < length; i++) {\r\n            var c = text[i];\r\n            if (c === \"-\") continue;\r\n            if (c in alphabetValues) {\r\n                if (alphabetValues[c] >= absBase) {\r\n                    if (c === \"1\" && absBase === 1) continue;\r\n                    throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n                }\r\n            }\r\n        }\r\n        base = parseValue(base);\r\n        var digits = [];\r\n        var isNegative = text[0] === \"-\";\r\n        for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n            var c = text[i];\r\n            if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n            else if (c === \"<\") {\r\n                var start = i;\r\n                do { i++; } while (text[i] !== \">\" && i < text.length);\r\n                digits.push(parseValue(text.slice(start + 1, i)));\r\n            }\r\n            else throw new Error(c + \" is not a valid character\");\r\n        }\r\n        return parseBaseFromArray(digits, base, isNegative);\r\n    };\r\n\r\n    function parseBaseFromArray(digits, base, isNegative) {\r\n        var val = Integer[0], pow = Integer[1], i;\r\n        for (i = digits.length - 1; i >= 0; i--) {\r\n            val = val.add(digits[i].times(pow));\r\n            pow = pow.times(base);\r\n        }\r\n        return isNegative ? val.negate() : val;\r\n    }\r\n\r\n    function stringify(digit, alphabet) {\r\n        alphabet = alphabet || DEFAULT_ALPHABET;\r\n        if (digit < alphabet.length) {\r\n            return alphabet[digit];\r\n        }\r\n        return \"<\" + digit + \">\";\r\n    }\r\n\r\n    function toBase(n, base) {\r\n        base = bigInt(base);\r\n        if (base.isZero()) {\r\n            if (n.isZero()) return { value: [0], isNegative: false };\r\n            throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n        }\r\n        if (base.equals(-1)) {\r\n            if (n.isZero()) return { value: [0], isNegative: false };\r\n            if (n.isNegative())\r\n                return {\r\n                    value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n                        .map(Array.prototype.valueOf, [1, 0])\r\n                    ),\r\n                    isNegative: false\r\n                };\r\n\r\n            var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n                .map(Array.prototype.valueOf, [0, 1]);\r\n            arr.unshift([1]);\r\n            return {\r\n                value: [].concat.apply([], arr),\r\n                isNegative: false\r\n            };\r\n        }\r\n\r\n        var neg = false;\r\n        if (n.isNegative() && base.isPositive()) {\r\n            neg = true;\r\n            n = n.abs();\r\n        }\r\n        if (base.isUnit()) {\r\n            if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n            return {\r\n                value: Array.apply(null, Array(n.toJSNumber()))\r\n                    .map(Number.prototype.valueOf, 1),\r\n                isNegative: neg\r\n            };\r\n        }\r\n        var out = [];\r\n        var left = n, divmod;\r\n        while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n            divmod = left.divmod(base);\r\n            left = divmod.quotient;\r\n            var digit = divmod.remainder;\r\n            if (digit.isNegative()) {\r\n                digit = base.minus(digit).abs();\r\n                left = left.next();\r\n            }\r\n            out.push(digit.toJSNumber());\r\n        }\r\n        out.push(left.toJSNumber());\r\n        return { value: out.reverse(), isNegative: neg };\r\n    }\r\n\r\n    function toBaseString(n, base, alphabet) {\r\n        var arr = toBase(n, base);\r\n        return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n            return stringify(x, alphabet);\r\n        }).join('');\r\n    }\r\n\r\n    BigInteger.prototype.toArray = function (radix) {\r\n        return toBase(this, radix);\r\n    };\r\n\r\n    SmallInteger.prototype.toArray = function (radix) {\r\n        return toBase(this, radix);\r\n    };\r\n\r\n    NativeBigInt.prototype.toArray = function (radix) {\r\n        return toBase(this, radix);\r\n    };\r\n\r\n    BigInteger.prototype.toString = function (radix, alphabet) {\r\n        if (radix === undefined) radix = 10;\r\n        if (radix !== 10 || alphabet) return toBaseString(this, radix, alphabet);\r\n        var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n        while (--l >= 0) {\r\n            digit = String(v[l]);\r\n            str += zeros.slice(digit.length) + digit;\r\n        }\r\n        var sign = this.sign ? \"-\" : \"\";\r\n        return sign + str;\r\n    };\r\n\r\n    SmallInteger.prototype.toString = function (radix, alphabet) {\r\n        if (radix === undefined) radix = 10;\r\n        if (radix != 10 || alphabet) return toBaseString(this, radix, alphabet);\r\n        return String(this.value);\r\n    };\r\n\r\n    NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n    NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n    BigInteger.prototype.valueOf = function () {\r\n        return parseInt(this.toString(), 10);\r\n    };\r\n    BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n    SmallInteger.prototype.valueOf = function () {\r\n        return this.value;\r\n    };\r\n    SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n    NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n        return parseInt(this.toString(), 10);\r\n    }\r\n\r\n    function parseStringValue(v) {\r\n        if (isPrecise(+v)) {\r\n            var x = +v;\r\n            if (x === truncate(x))\r\n                return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n            throw new Error(\"Invalid integer: \" + v);\r\n        }\r\n        var sign = v[0] === \"-\";\r\n        if (sign) v = v.slice(1);\r\n        var split = v.split(/e/i);\r\n        if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n        if (split.length === 2) {\r\n            var exp = split[1];\r\n            if (exp[0] === \"+\") exp = exp.slice(1);\r\n            exp = +exp;\r\n            if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n            var text = split[0];\r\n            var decimalPlace = text.indexOf(\".\");\r\n            if (decimalPlace >= 0) {\r\n                exp -= text.length - decimalPlace - 1;\r\n                text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n            }\r\n            if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n            text += (new Array(exp + 1)).join(\"0\");\r\n            v = text;\r\n        }\r\n        var isValid = /^([0-9][0-9]*)$/.test(v);\r\n        if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n        if (supportsNativeBigInt) {\r\n            return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n        }\r\n        var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n        while (max > 0) {\r\n            r.push(+v.slice(min, max));\r\n            min -= l;\r\n            if (min < 0) min = 0;\r\n            max -= l;\r\n        }\r\n        trim(r);\r\n        return new BigInteger(r, sign);\r\n    }\r\n\r\n    function parseNumberValue(v) {\r\n        if (supportsNativeBigInt) {\r\n            return new NativeBigInt(BigInt(v));\r\n        }\r\n        if (isPrecise(v)) {\r\n            if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n            return new SmallInteger(v);\r\n        }\r\n        return parseStringValue(v.toString());\r\n    }\r\n\r\n    function parseValue(v) {\r\n        if (typeof v === \"number\") {\r\n            return parseNumberValue(v);\r\n        }\r\n        if (typeof v === \"string\") {\r\n            return parseStringValue(v);\r\n        }\r\n        if (typeof v === \"bigint\") {\r\n            return new NativeBigInt(v);\r\n        }\r\n        return v;\r\n    }\r\n    // Pre-define numbers in range [-999,999]\r\n    for (var i = 0; i < 1000; i++) {\r\n        Integer[i] = parseValue(i);\r\n        if (i > 0) Integer[-i] = parseValue(-i);\r\n    }\r\n    // Backwards compatibility\r\n    Integer.one = Integer[1];\r\n    Integer.zero = Integer[0];\r\n    Integer.minusOne = Integer[-1];\r\n    Integer.max = max;\r\n    Integer.min = min;\r\n    Integer.gcd = gcd;\r\n    Integer.lcm = lcm;\r\n    Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n    Integer.randBetween = randBetween;\r\n\r\n    Integer.fromArray = function (digits, base, isNegative) {\r\n        return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n    };\r\n\r\n    return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n    module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n    define( function () {\r\n        return bigInt;\r\n    });\r\n}\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = function (d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n    return function (d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EmptyBTree = exports.asSet = exports.simpleComparator = exports.defaultComparator = void 0;\r\n/**\r\n * Compares DefaultComparables to form a strict partial ordering.\r\n *\r\n * Handles +/-0 and NaN like Map: NaN is equal to NaN, and -0 is equal to +0.\r\n *\r\n * Arrays are compared using '<' and '>', which may cause unexpected equality:\r\n * for example [1] will be considered equal to ['1'].\r\n *\r\n * Two objects with equal valueOf compare the same, but compare unequal to\r\n * primitives that have the same value.\r\n */\r\nfunction defaultComparator(a, b) {\r\n    // Special case finite numbers first for performance.\r\n    // Note that the trick of using 'a - b' and checking for NaN to detect non-numbers\r\n    // does not work if the strings are numeric (ex: \"5\"). This would leading most \r\n    // comparison functions using that approach to fail to have transitivity.\r\n    if (Number.isFinite(a) && Number.isFinite(b)) {\r\n        return a - b;\r\n    }\r\n    // The default < and > operators are not totally ordered. To allow types to be mixed\r\n    // in a single collection, compare types and order values of different types by type.\r\n    var ta = typeof a;\r\n    var tb = typeof b;\r\n    if (ta !== tb) {\r\n        return ta < tb ? -1 : 1;\r\n    }\r\n    if (ta === 'object') {\r\n        // standardized JavaScript bug: null is not an object, but typeof says it is\r\n        if (a === null)\r\n            return b === null ? 0 : -1;\r\n        else if (b === null)\r\n            return 1;\r\n        a = a.valueOf();\r\n        b = b.valueOf();\r\n        ta = typeof a;\r\n        tb = typeof b;\r\n        // Deal with the two valueOf()s producing different types\r\n        if (ta !== tb) {\r\n            return ta < tb ? -1 : 1;\r\n        }\r\n    }\r\n    // a and b are now the same type, and will be a number, string or array \r\n    // (which we assume holds numbers or strings), or something unsupported.\r\n    if (a < b)\r\n        return -1;\r\n    if (a > b)\r\n        return 1;\r\n    if (a === b)\r\n        return 0;\r\n    // Order NaN less than other numbers\r\n    if (Number.isNaN(a))\r\n        return Number.isNaN(b) ? 0 : -1;\r\n    else if (Number.isNaN(b))\r\n        return 1;\r\n    // This could be two objects (e.g. [7] and ['7']) that aren't ordered\r\n    return Array.isArray(a) ? 0 : Number.NaN;\r\n}\r\nexports.defaultComparator = defaultComparator;\r\n;\r\nfunction simpleComparator(a, b) {\r\n    return a > b ? 1 : a < b ? -1 : 0;\r\n}\r\nexports.simpleComparator = simpleComparator;\r\n;\r\n/**\r\n * A reasonably fast collection of key-value pairs with a powerful API.\r\n * Largely compatible with the standard Map. BTree is a B+ tree data structure,\r\n * so the collection is sorted by key.\r\n *\r\n * B+ trees tend to use memory more efficiently than hashtables such as the\r\n * standard Map, especially when the collection contains a large number of\r\n * items. However, maintaining the sort order makes them modestly slower:\r\n * O(log size) rather than O(1). This B+ tree implementation supports O(1)\r\n * fast cloning. It also supports freeze(), which can be used to ensure that\r\n * a BTree is not changed accidentally.\r\n *\r\n * Confusingly, the ES6 Map.forEach(c) method calls c(value,key) instead of\r\n * c(key,value), in contrast to other methods such as set() and entries()\r\n * which put the key first. I can only assume that the order was reversed on\r\n * the theory that users would usually want to examine values and ignore keys.\r\n * BTree's forEach() therefore works the same way, but a second method\r\n * `.forEachPair((key,value)=>{...})` is provided which sends you the key\r\n * first and the value second; this method is slightly faster because it is\r\n * the \"native\" for-each method for this class.\r\n *\r\n * Out of the box, BTree supports keys that are numbers, strings, arrays of\r\n * numbers/strings, Date, and objects that have a valueOf() method returning a\r\n * number or string. Other data types, such as arrays of Date or custom\r\n * objects, require a custom comparator, which you must pass as the second\r\n * argument to the constructor (the first argument is an optional list of\r\n * initial items). Symbols cannot be used as keys because they are unordered\r\n * (one Symbol is never \"greater\" or \"less\" than another).\r\n *\r\n * @example\r\n * Given a {name: string, age: number} object, you can create a tree sorted by\r\n * name and then by age like this:\r\n *\r\n *     var tree = new BTree(undefined, (a, b) => {\r\n *       if (a.name > b.name)\r\n *         return 1; // Return a number >0 when a > b\r\n *       else if (a.name < b.name)\r\n *         return -1; // Return a number <0 when a < b\r\n *       else // names are equal (or incomparable)\r\n *         return a.age - b.age; // Return >0 when a.age > b.age\r\n *     });\r\n *\r\n *     tree.set({name:\"Bill\", age:17}, \"happy\");\r\n *     tree.set({name:\"Fran\", age:40}, \"busy & stressed\");\r\n *     tree.set({name:\"Bill\", age:55}, \"recently laid off\");\r\n *     tree.forEachPair((k, v) => {\r\n *       console.log(`Name: ${k.name} Age: ${k.age} Status: ${v}`);\r\n *     });\r\n *\r\n * @description\r\n * The \"range\" methods (`forEach, forRange, editRange`) will return the number\r\n * of elements that were scanned. In addition, the callback can return {break:R}\r\n * to stop early and return R from the outer function.\r\n *\r\n * - TODO: Test performance of preallocating values array at max size\r\n * - TODO: Add fast initialization when a sorted array is provided to constructor\r\n *\r\n * For more documentation see https://github.com/qwertie/btree-typescript\r\n *\r\n * Are you a C# developer? You might like the similar data structures I made for C#:\r\n * BDictionary, BList, etc. See http://core.loyc.net/collections/\r\n *\r\n * @author David Piepgrass\r\n */\r\nvar BTree = /** @class */ (function () {\r\n    /**\r\n     * Initializes an empty B+ tree.\r\n     * @param compare Custom function to compare pairs of elements in the tree.\r\n     *   If not specified, defaultComparator will be used which is valid as long as K extends DefaultComparable.\r\n     * @param entries A set of key-value pairs to initialize the tree\r\n     * @param maxNodeSize Branching factor (maximum items or children per node)\r\n     *   Must be in range 4..256. If undefined or <4 then default is used; if >256 then 256.\r\n     */\r\n    function BTree(entries, compare, maxNodeSize) {\r\n        this._root = EmptyLeaf;\r\n        this._size = 0;\r\n        this._maxNodeSize = maxNodeSize >= 4 ? Math.min(maxNodeSize, 256) : 32;\r\n        this._compare = compare || defaultComparator;\r\n        if (entries)\r\n            this.setPairs(entries);\r\n    }\r\n    Object.defineProperty(BTree.prototype, \"size\", {\r\n        /////////////////////////////////////////////////////////////////////////////\r\n        // ES6 Map<K,V> methods /////////////////////////////////////////////////////\r\n        /** Gets the number of key-value pairs in the tree. */\r\n        get: function () { return this._size; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(BTree.prototype, \"length\", {\r\n        /** Gets the number of key-value pairs in the tree. */\r\n        get: function () { return this._size; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(BTree.prototype, \"isEmpty\", {\r\n        /** Returns true iff the tree contains no key-value pairs. */\r\n        get: function () { return this._size === 0; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    /** Releases the tree so that its size is 0. */\r\n    BTree.prototype.clear = function () {\r\n        this._root = EmptyLeaf;\r\n        this._size = 0;\r\n    };\r\n    /** Runs a function for each key-value pair, in order from smallest to\r\n     *  largest key. For compatibility with ES6 Map, the argument order to\r\n     *  the callback is backwards: value first, then key. Call forEachPair\r\n     *  instead to receive the key as the first argument.\r\n     * @param thisArg If provided, this parameter is assigned as the `this`\r\n     *        value for each callback.\r\n     * @returns the number of values that were sent to the callback,\r\n     *        or the R value if the callback returned {break:R}. */\r\n    BTree.prototype.forEach = function (callback, thisArg) {\r\n        var _this = this;\r\n        if (thisArg !== undefined)\r\n            callback = callback.bind(thisArg);\r\n        return this.forEachPair(function (k, v) { return callback(v, k, _this); });\r\n    };\r\n    /** Runs a function for each key-value pair, in order from smallest to\r\n     *  largest key. The callback can return {break:R} (where R is any value\r\n     *  except undefined) to stop immediately and return R from forEachPair.\r\n     * @param onFound A function that is called for each key-value pair. This\r\n     *        function can return {break:R} to stop early with result R.\r\n     *        The reason that you must return {break:R} instead of simply R\r\n     *        itself is for consistency with editRange(), which allows\r\n     *        multiple actions, not just breaking.\r\n     * @param initialCounter This is the value of the third argument of\r\n     *        `onFound` the first time it is called. The counter increases\r\n     *        by one each time `onFound` is called. Default value: 0\r\n     * @returns the number of pairs sent to the callback (plus initialCounter,\r\n     *        if you provided one). If the callback returned {break:R} then\r\n     *        the R value is returned instead. */\r\n    BTree.prototype.forEachPair = function (callback, initialCounter) {\r\n        var low = this.minKey(), high = this.maxKey();\r\n        return this.forRange(low, high, true, callback, initialCounter);\r\n    };\r\n    /**\r\n     * Finds a pair in the tree and returns the associated value.\r\n     * @param defaultValue a value to return if the key was not found.\r\n     * @returns the value, or defaultValue if the key was not found.\r\n     * @description Computational complexity: O(log size)\r\n     */\r\n    BTree.prototype.get = function (key, defaultValue) {\r\n        return this._root.get(key, defaultValue, this);\r\n    };\r\n    /**\r\n     * Adds or overwrites a key-value pair in the B+ tree.\r\n     * @param key the key is used to determine the sort order of\r\n     *        data in the tree.\r\n     * @param value data to associate with the key (optional)\r\n     * @param overwrite Whether to overwrite an existing key-value pair\r\n     *        (default: true). If this is false and there is an existing\r\n     *        key-value pair then this method has no effect.\r\n     * @returns true if a new key-value pair was added.\r\n     * @description Computational complexity: O(log size)\r\n     * Note: when overwriting a previous entry, the key is updated\r\n     * as well as the value. This has no effect unless the new key\r\n     * has data that does not affect its sort order.\r\n     */\r\n    BTree.prototype.set = function (key, value, overwrite) {\r\n        if (this._root.isShared)\r\n            this._root = this._root.clone();\r\n        var result = this._root.set(key, value, overwrite, this);\r\n        if (result === true || result === false)\r\n            return result;\r\n        // Root node has split, so create a new root node.\r\n        this._root = new BNodeInternal([this._root, result]);\r\n        return true;\r\n    };\r\n    /**\r\n     * Returns true if the key exists in the B+ tree, false if not.\r\n     * Use get() for best performance; use has() if you need to\r\n     * distinguish between \"undefined value\" and \"key not present\".\r\n     * @param key Key to detect\r\n     * @description Computational complexity: O(log size)\r\n     */\r\n    BTree.prototype.has = function (key) {\r\n        return this.forRange(key, key, true, undefined) !== 0;\r\n    };\r\n    /**\r\n     * Removes a single key-value pair from the B+ tree.\r\n     * @param key Key to find\r\n     * @returns true if a pair was found and removed, false otherwise.\r\n     * @description Computational complexity: O(log size)\r\n     */\r\n    BTree.prototype.delete = function (key) {\r\n        return this.editRange(key, key, true, DeleteRange) !== 0;\r\n    };\r\n    BTree.prototype.with = function (key, value, overwrite) {\r\n        var nu = this.clone();\r\n        return nu.set(key, value, overwrite) || overwrite ? nu : this;\r\n    };\r\n    /** Returns a copy of the tree with the specified key-value pairs set. */\r\n    BTree.prototype.withPairs = function (pairs, overwrite) {\r\n        var nu = this.clone();\r\n        return nu.setPairs(pairs, overwrite) !== 0 || overwrite ? nu : this;\r\n    };\r\n    /** Returns a copy of the tree with the specified keys present.\r\n     *  @param keys The keys to add. If a key is already present in the tree,\r\n     *         neither the existing key nor the existing value is modified.\r\n     *  @param returnThisIfUnchanged if true, returns this if all keys already\r\n     *  existed. Performance note: due to the architecture of this class, all\r\n     *  node(s) leading to existing keys are cloned even if the collection is\r\n     *  ultimately unchanged.\r\n    */\r\n    BTree.prototype.withKeys = function (keys, returnThisIfUnchanged) {\r\n        var nu = this.clone(), changed = false;\r\n        for (var i = 0; i < keys.length; i++)\r\n            changed = nu.set(keys[i], undefined, false) || changed;\r\n        return returnThisIfUnchanged && !changed ? this : nu;\r\n    };\r\n    /** Returns a copy of the tree with the specified key removed.\r\n     * @param returnThisIfUnchanged if true, returns this if the key didn't exist.\r\n     *  Performance note: due to the architecture of this class, node(s) leading\r\n     *  to where the key would have been stored are cloned even when the key\r\n     *  turns out not to exist and the collection is unchanged.\r\n     */\r\n    BTree.prototype.without = function (key, returnThisIfUnchanged) {\r\n        return this.withoutRange(key, key, true, returnThisIfUnchanged);\r\n    };\r\n    /** Returns a copy of the tree with the specified keys removed.\r\n     * @param returnThisIfUnchanged if true, returns this if none of the keys\r\n     *  existed. Performance note: due to the architecture of this class,\r\n     *  node(s) leading to where the key would have been stored are cloned\r\n     *  even when the key turns out not to exist.\r\n     */\r\n    BTree.prototype.withoutKeys = function (keys, returnThisIfUnchanged) {\r\n        var nu = this.clone();\r\n        return nu.deleteKeys(keys) || !returnThisIfUnchanged ? nu : this;\r\n    };\r\n    /** Returns a copy of the tree with the specified range of keys removed. */\r\n    BTree.prototype.withoutRange = function (low, high, includeHigh, returnThisIfUnchanged) {\r\n        var nu = this.clone();\r\n        if (nu.deleteRange(low, high, includeHigh) === 0 && returnThisIfUnchanged)\r\n            return this;\r\n        return nu;\r\n    };\r\n    /** Returns a copy of the tree with pairs removed whenever the callback\r\n     *  function returns false. `where()` is a synonym for this method. */\r\n    BTree.prototype.filter = function (callback, returnThisIfUnchanged) {\r\n        var nu = this.greedyClone();\r\n        var del;\r\n        nu.editAll(function (k, v, i) {\r\n            if (!callback(k, v, i))\r\n                return del = Delete;\r\n        });\r\n        if (!del && returnThisIfUnchanged)\r\n            return this;\r\n        return nu;\r\n    };\r\n    /** Returns a copy of the tree with all values altered by a callback function. */\r\n    BTree.prototype.mapValues = function (callback) {\r\n        var tmp = {};\r\n        var nu = this.greedyClone();\r\n        nu.editAll(function (k, v, i) {\r\n            return tmp.value = callback(v, k, i), tmp;\r\n        });\r\n        return nu;\r\n    };\r\n    BTree.prototype.reduce = function (callback, initialValue) {\r\n        var i = 0, p = initialValue;\r\n        var it = this.entries(this.minKey(), ReusedArray), next;\r\n        while (!(next = it.next()).done)\r\n            p = callback(p, next.value, i++, this);\r\n        return p;\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Iterator methods /////////////////////////////////////////////////////////\r\n    /** Returns an iterator that provides items in order (ascending order if\r\n     *  the collection's comparator uses ascending order, as is the default.)\r\n     *  @param lowestKey First key to be iterated, or undefined to start at\r\n     *         minKey(). If the specified key doesn't exist then iteration\r\n     *         starts at the next higher key (according to the comparator).\r\n     *  @param reusedArray Optional array used repeatedly to store key-value\r\n     *         pairs, to avoid creating a new array on every iteration.\r\n     */\r\n    BTree.prototype.entries = function (lowestKey, reusedArray) {\r\n        var info = this.findPath(lowestKey);\r\n        if (info === undefined)\r\n            return iterator();\r\n        var nodequeue = info.nodequeue, nodeindex = info.nodeindex, leaf = info.leaf;\r\n        var state = reusedArray !== undefined ? 1 : 0;\r\n        var i = (lowestKey === undefined ? -1 : leaf.indexOf(lowestKey, 0, this._compare) - 1);\r\n        return iterator(function () {\r\n            jump: for (;;) {\r\n                switch (state) {\r\n                    case 0:\r\n                        if (++i < leaf.keys.length)\r\n                            return { done: false, value: [leaf.keys[i], leaf.values[i]] };\r\n                        state = 2;\r\n                        continue;\r\n                    case 1:\r\n                        if (++i < leaf.keys.length) {\r\n                            reusedArray[0] = leaf.keys[i], reusedArray[1] = leaf.values[i];\r\n                            return { done: false, value: reusedArray };\r\n                        }\r\n                        state = 2;\r\n                    case 2:\r\n                        // Advance to the next leaf node\r\n                        for (var level = -1;;) {\r\n                            if (++level >= nodequeue.length) {\r\n                                state = 3;\r\n                                continue jump;\r\n                            }\r\n                            if (++nodeindex[level] < nodequeue[level].length)\r\n                                break;\r\n                        }\r\n                        for (; level > 0; level--) {\r\n                            nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children;\r\n                            nodeindex[level - 1] = 0;\r\n                        }\r\n                        leaf = nodequeue[0][nodeindex[0]];\r\n                        i = -1;\r\n                        state = reusedArray !== undefined ? 1 : 0;\r\n                        continue;\r\n                    case 3:\r\n                        return { done: true, value: undefined };\r\n                }\r\n            }\r\n        });\r\n    };\r\n    /** Returns an iterator that provides items in reversed order.\r\n     *  @param highestKey Key at which to start iterating, or undefined to\r\n     *         start at maxKey(). If the specified key doesn't exist then iteration\r\n     *         starts at the next lower key (according to the comparator).\r\n     *  @param reusedArray Optional array used repeatedly to store key-value\r\n     *         pairs, to avoid creating a new array on every iteration.\r\n     *  @param skipHighest Iff this flag is true and the highestKey exists in the\r\n     *         collection, the pair matching highestKey is skipped, not iterated.\r\n     */\r\n    BTree.prototype.entriesReversed = function (highestKey, reusedArray, skipHighest) {\r\n        if (highestKey === undefined) {\r\n            highestKey = this.maxKey();\r\n            skipHighest = undefined;\r\n            if (highestKey === undefined)\r\n                return iterator(); // collection is empty\r\n        }\r\n        var _a = this.findPath(highestKey) || this.findPath(this.maxKey()), nodequeue = _a.nodequeue, nodeindex = _a.nodeindex, leaf = _a.leaf;\r\n        check(!nodequeue[0] || leaf === nodequeue[0][nodeindex[0]], \"wat!\");\r\n        var i = leaf.indexOf(highestKey, 0, this._compare);\r\n        if (!skipHighest && i < leaf.keys.length && this._compare(leaf.keys[i], highestKey) <= 0)\r\n            i++;\r\n        var state = reusedArray !== undefined ? 1 : 0;\r\n        return iterator(function () {\r\n            jump: for (;;) {\r\n                switch (state) {\r\n                    case 0:\r\n                        if (--i >= 0)\r\n                            return { done: false, value: [leaf.keys[i], leaf.values[i]] };\r\n                        state = 2;\r\n                        continue;\r\n                    case 1:\r\n                        if (--i >= 0) {\r\n                            reusedArray[0] = leaf.keys[i], reusedArray[1] = leaf.values[i];\r\n                            return { done: false, value: reusedArray };\r\n                        }\r\n                        state = 2;\r\n                    case 2:\r\n                        // Advance to the next leaf node\r\n                        for (var level = -1;;) {\r\n                            if (++level >= nodequeue.length) {\r\n                                state = 3;\r\n                                continue jump;\r\n                            }\r\n                            if (--nodeindex[level] >= 0)\r\n                                break;\r\n                        }\r\n                        for (; level > 0; level--) {\r\n                            nodequeue[level - 1] = nodequeue[level][nodeindex[level]].children;\r\n                            nodeindex[level - 1] = nodequeue[level - 1].length - 1;\r\n                        }\r\n                        leaf = nodequeue[0][nodeindex[0]];\r\n                        i = leaf.keys.length;\r\n                        state = reusedArray !== undefined ? 1 : 0;\r\n                        continue;\r\n                    case 3:\r\n                        return { done: true, value: undefined };\r\n                }\r\n            }\r\n        });\r\n    };\r\n    /* Used by entries() and entriesReversed() to prepare to start iterating.\r\n     * It develops a \"node queue\" for each non-leaf level of the tree.\r\n     * Levels are numbered \"bottom-up\" so that level 0 is a list of leaf\r\n     * nodes from a low-level non-leaf node. The queue at a given level L\r\n     * consists of nodequeue[L] which is the children of a BNodeInternal,\r\n     * and nodeindex[L], the current index within that child list, such\r\n     * such that nodequeue[L-1] === nodequeue[L][nodeindex[L]].children.\r\n     * (However inside this function the order is reversed.)\r\n     */\r\n    BTree.prototype.findPath = function (key) {\r\n        var nextnode = this._root;\r\n        var nodequeue, nodeindex;\r\n        if (nextnode.isLeaf) {\r\n            nodequeue = EmptyArray, nodeindex = EmptyArray; // avoid allocations\r\n        }\r\n        else {\r\n            nodequeue = [], nodeindex = [];\r\n            for (var d = 0; !nextnode.isLeaf; d++) {\r\n                nodequeue[d] = nextnode.children;\r\n                nodeindex[d] = key === undefined ? 0 : nextnode.indexOf(key, 0, this._compare);\r\n                if (nodeindex[d] >= nodequeue[d].length)\r\n                    return; // first key > maxKey()\r\n                nextnode = nodequeue[d][nodeindex[d]];\r\n            }\r\n            nodequeue.reverse();\r\n            nodeindex.reverse();\r\n        }\r\n        return { nodequeue: nodequeue, nodeindex: nodeindex, leaf: nextnode };\r\n    };\r\n    /**\r\n     * Computes the differences between `this` and `other`.\r\n     * For efficiency, the diff is returned via invocations of supplied handlers.\r\n     * The computation is optimized for the case in which the two trees have large amounts\r\n     * of shared data (obtained by calling the `clone` or `with` APIs) and will avoid\r\n     * any iteration of shared state.\r\n     * The handlers can cause computation to early exit by returning {break: R}.\r\n     * Neither of the collections should be changed during the comparison process (in your callbacks), as this method assumes they will not be mutated.\r\n     * @param other The tree to compute a diff against.\r\n     * @param onlyThis Callback invoked for all keys only present in `this`.\r\n     * @param onlyOther Callback invoked for all keys only present in `other`.\r\n     * @param different Callback invoked for all keys with differing values.\r\n     */\r\n    BTree.prototype.diffAgainst = function (other, onlyThis, onlyOther, different) {\r\n        if (other._compare !== this._compare) {\r\n            throw new Error(\"Tree comparators are not the same.\");\r\n        }\r\n        if (this.isEmpty || other.isEmpty) {\r\n            if (this.isEmpty && other.isEmpty)\r\n                return undefined;\r\n            // If one tree is empty, everything will be an onlyThis/onlyOther.\r\n            if (this.isEmpty)\r\n                return onlyOther === undefined ? undefined : BTree.stepToEnd(BTree.makeDiffCursor(other), onlyOther);\r\n            return onlyThis === undefined ? undefined : BTree.stepToEnd(BTree.makeDiffCursor(this), onlyThis);\r\n        }\r\n        // Cursor-based diff algorithm is as follows:\r\n        // - Until neither cursor has navigated to the end of the tree, do the following:\r\n        //  - If the `this` cursor is \"behind\" the `other` cursor (strictly <, via compare), advance it.\r\n        //  - Otherwise, advance the `other` cursor.\r\n        //  - Any time a cursor is stepped, perform the following:\r\n        //    - If either cursor points to a key/value pair:\r\n        //      - If thisCursor === otherCursor and the values differ, it is a Different.\r\n        //      - If thisCursor > otherCursor and otherCursor is at a key/value pair, it is an OnlyOther.\r\n        //      - If thisCursor < otherCursor and thisCursor is at a key/value pair, it is an OnlyThis as long as the most recent \r\n        //        cursor step was *not* otherCursor advancing from a tie. The extra condition avoids erroneous OnlyOther calls \r\n        //        that would occur due to otherCursor being the \"leader\".\r\n        //    - Otherwise, if both cursors point to nodes, compare them. If they are equal by reference (shared), skip\r\n        //      both cursors to the next node in the walk.\r\n        // - Once one cursor has finished stepping, any remaining steps (if any) are taken and key/value pairs are logged\r\n        //   as OnlyOther (if otherCursor is stepping) or OnlyThis (if thisCursor is stepping).\r\n        // This algorithm gives the critical guarantee that all locations (both nodes and key/value pairs) in both trees that \r\n        // are identical by value (and possibly by reference) will be visited *at the same time* by the cursors.\r\n        // This removes the possibility of emitting incorrect diffs, as well as allowing for skipping shared nodes.\r\n        var _compare = this._compare;\r\n        var thisCursor = BTree.makeDiffCursor(this);\r\n        var otherCursor = BTree.makeDiffCursor(other);\r\n        // It doesn't matter how thisSteppedLast is initialized.\r\n        // Step order is only used when either cursor is at a leaf, and cursors always start at a node.\r\n        var thisSuccess = true, otherSuccess = true, prevCursorOrder = BTree.compare(thisCursor, otherCursor, _compare);\r\n        while (thisSuccess && otherSuccess) {\r\n            var cursorOrder = BTree.compare(thisCursor, otherCursor, _compare);\r\n            var thisLeaf = thisCursor.leaf, thisInternalSpine = thisCursor.internalSpine, thisLevelIndices = thisCursor.levelIndices;\r\n            var otherLeaf = otherCursor.leaf, otherInternalSpine = otherCursor.internalSpine, otherLevelIndices = otherCursor.levelIndices;\r\n            if (thisLeaf || otherLeaf) {\r\n                // If the cursors were at the same location last step, then there is no work to be done.\r\n                if (prevCursorOrder !== 0) {\r\n                    if (cursorOrder === 0) {\r\n                        if (thisLeaf && otherLeaf && different) {\r\n                            // Equal keys, check for modifications\r\n                            var valThis = thisLeaf.values[thisLevelIndices[thisLevelIndices.length - 1]];\r\n                            var valOther = otherLeaf.values[otherLevelIndices[otherLevelIndices.length - 1]];\r\n                            if (!Object.is(valThis, valOther)) {\r\n                                var result = different(thisCursor.currentKey, valThis, valOther);\r\n                                if (result && result.break)\r\n                                    return result.break;\r\n                            }\r\n                        }\r\n                    }\r\n                    else if (cursorOrder > 0) {\r\n                        // If this is the case, we know that either:\r\n                        // 1. otherCursor stepped last from a starting position that trailed thisCursor, and is still behind, or\r\n                        // 2. thisCursor stepped last and leapfrogged otherCursor\r\n                        // Either of these cases is an \"only other\"\r\n                        if (otherLeaf && onlyOther) {\r\n                            var otherVal = otherLeaf.values[otherLevelIndices[otherLevelIndices.length - 1]];\r\n                            var result = onlyOther(otherCursor.currentKey, otherVal);\r\n                            if (result && result.break)\r\n                                return result.break;\r\n                        }\r\n                    }\r\n                    else if (onlyThis) {\r\n                        if (thisLeaf && prevCursorOrder !== 0) {\r\n                            var valThis = thisLeaf.values[thisLevelIndices[thisLevelIndices.length - 1]];\r\n                            var result = onlyThis(thisCursor.currentKey, valThis);\r\n                            if (result && result.break)\r\n                                return result.break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (!thisLeaf && !otherLeaf && cursorOrder === 0) {\r\n                var lastThis = thisInternalSpine.length - 1;\r\n                var lastOther = otherInternalSpine.length - 1;\r\n                var nodeThis = thisInternalSpine[lastThis][thisLevelIndices[lastThis]];\r\n                var nodeOther = otherInternalSpine[lastOther][otherLevelIndices[lastOther]];\r\n                if (nodeOther === nodeThis) {\r\n                    prevCursorOrder = 0;\r\n                    thisSuccess = BTree.step(thisCursor, true);\r\n                    otherSuccess = BTree.step(otherCursor, true);\r\n                    continue;\r\n                }\r\n            }\r\n            prevCursorOrder = cursorOrder;\r\n            if (cursorOrder < 0) {\r\n                thisSuccess = BTree.step(thisCursor);\r\n            }\r\n            else {\r\n                otherSuccess = BTree.step(otherCursor);\r\n            }\r\n        }\r\n        if (thisSuccess && onlyThis)\r\n            return BTree.finishCursorWalk(thisCursor, otherCursor, _compare, onlyThis);\r\n        if (otherSuccess && onlyOther)\r\n            return BTree.finishCursorWalk(otherCursor, thisCursor, _compare, onlyOther);\r\n    };\r\n    ///////////////////////////////////////////////////////////////////////////\r\n    // Helper methods for diffAgainst /////////////////////////////////////////\r\n    BTree.finishCursorWalk = function (cursor, cursorFinished, compareKeys, callback) {\r\n        var compared = BTree.compare(cursor, cursorFinished, compareKeys);\r\n        if (compared === 0) {\r\n            if (!BTree.step(cursor))\r\n                return undefined;\r\n        }\r\n        else if (compared < 0) {\r\n            check(false, \"cursor walk terminated early\");\r\n        }\r\n        return BTree.stepToEnd(cursor, callback);\r\n    };\r\n    BTree.stepToEnd = function (cursor, callback) {\r\n        var canStep = true;\r\n        while (canStep) {\r\n            var leaf = cursor.leaf, levelIndices = cursor.levelIndices, currentKey = cursor.currentKey;\r\n            if (leaf) {\r\n                var value = leaf.values[levelIndices[levelIndices.length - 1]];\r\n                var result = callback(currentKey, value);\r\n                if (result && result.break)\r\n                    return result.break;\r\n            }\r\n            canStep = BTree.step(cursor);\r\n        }\r\n        return undefined;\r\n    };\r\n    BTree.makeDiffCursor = function (tree) {\r\n        var _root = tree._root, height = tree.height;\r\n        return { height: height, internalSpine: [[_root]], levelIndices: [0], leaf: undefined, currentKey: _root.maxKey() };\r\n    };\r\n    /**\r\n     * Advances the cursor to the next step in the walk of its tree.\r\n     * Cursors are walked backwards in sort order, as this allows them to leverage maxKey() in order to be compared in O(1).\r\n     * @param cursor The cursor to step\r\n     * @param stepToNode If true, the cursor will be advanced to the next node (skipping values)\r\n     * @returns true if the step was completed and false if the step would have caused the cursor to move beyond the end of the tree.\r\n     */\r\n    BTree.step = function (cursor, stepToNode) {\r\n        var internalSpine = cursor.internalSpine, levelIndices = cursor.levelIndices, leaf = cursor.leaf;\r\n        if (stepToNode === true || leaf) {\r\n            var levelsLength = levelIndices.length;\r\n            // Step to the next node only if:\r\n            // - We are explicitly directed to via stepToNode, or\r\n            // - There are no key/value pairs left to step to in this leaf\r\n            if (stepToNode === true || levelIndices[levelsLength - 1] === 0) {\r\n                var spineLength = internalSpine.length;\r\n                // Root is leaf\r\n                if (spineLength === 0)\r\n                    return false;\r\n                // Walk back up the tree until we find a new subtree to descend into\r\n                var nodeLevelIndex = spineLength - 1;\r\n                var levelIndexWalkBack = nodeLevelIndex;\r\n                while (levelIndexWalkBack >= 0) {\r\n                    if (levelIndices[levelIndexWalkBack] > 0) {\r\n                        if (levelIndexWalkBack < levelsLength - 1) {\r\n                            // Remove leaf state from cursor\r\n                            cursor.leaf = undefined;\r\n                            levelIndices.pop();\r\n                        }\r\n                        // If we walked upwards past any internal node, slice them out\r\n                        if (levelIndexWalkBack < nodeLevelIndex)\r\n                            cursor.internalSpine = internalSpine.slice(0, levelIndexWalkBack + 1);\r\n                        // Move to new internal node\r\n                        cursor.currentKey = internalSpine[levelIndexWalkBack][--levelIndices[levelIndexWalkBack]].maxKey();\r\n                        return true;\r\n                    }\r\n                    levelIndexWalkBack--;\r\n                }\r\n                // Cursor is in the far left leaf of the tree, no more nodes to enumerate\r\n                return false;\r\n            }\r\n            else {\r\n                // Move to new leaf value\r\n                var valueIndex = --levelIndices[levelsLength - 1];\r\n                cursor.currentKey = leaf.keys[valueIndex];\r\n                return true;\r\n            }\r\n        }\r\n        else { // Cursor does not point to a value in a leaf, so move downwards\r\n            var nextLevel = internalSpine.length;\r\n            var currentLevel = nextLevel - 1;\r\n            var node = internalSpine[currentLevel][levelIndices[currentLevel]];\r\n            if (node.isLeaf) {\r\n                // Entering into a leaf. Set the cursor to point at the last key/value pair.\r\n                cursor.leaf = node;\r\n                var valueIndex = levelIndices[nextLevel] = node.values.length - 1;\r\n                cursor.currentKey = node.keys[valueIndex];\r\n            }\r\n            else {\r\n                var children = node.children;\r\n                internalSpine[nextLevel] = children;\r\n                var childIndex = children.length - 1;\r\n                levelIndices[nextLevel] = childIndex;\r\n                cursor.currentKey = children[childIndex].maxKey();\r\n            }\r\n            return true;\r\n        }\r\n    };\r\n    /**\r\n     * Compares the two cursors. Returns a value indicating which cursor is ahead in a walk.\r\n     * Note that cursors are advanced in reverse sorting order.\r\n     */\r\n    BTree.compare = function (cursorA, cursorB, compareKeys) {\r\n        var heightA = cursorA.height, currentKeyA = cursorA.currentKey, levelIndicesA = cursorA.levelIndices;\r\n        var heightB = cursorB.height, currentKeyB = cursorB.currentKey, levelIndicesB = cursorB.levelIndices;\r\n        // Reverse the comparison order, as cursors are advanced in reverse sorting order\r\n        var keyComparison = compareKeys(currentKeyB, currentKeyA);\r\n        if (keyComparison !== 0) {\r\n            return keyComparison;\r\n        }\r\n        // Normalize depth values relative to the shortest tree.\r\n        // This ensures that concurrent cursor walks of trees of differing heights can reliably land on shared nodes at the same time.\r\n        // To accomplish this, a cursor that is on an internal node at depth D1 with maxKey X is considered \"behind\" a cursor on an\r\n        // internal node at depth D2 with maxKey Y, when D1 < D2. Thus, always walking the cursor that is \"behind\" will allow the cursor\r\n        // at shallower depth (but equal maxKey) to \"catch up\" and land on shared nodes.\r\n        var heightMin = heightA < heightB ? heightA : heightB;\r\n        var depthANormalized = levelIndicesA.length - (heightA - heightMin);\r\n        var depthBNormalized = levelIndicesB.length - (heightB - heightMin);\r\n        return depthANormalized - depthBNormalized;\r\n    };\r\n    // End of helper methods for diffAgainst //////////////////////////////////\r\n    ///////////////////////////////////////////////////////////////////////////\r\n    /** Returns a new iterator for iterating the keys of each pair in ascending order.\r\n     *  @param firstKey: Minimum key to include in the output. */\r\n    BTree.prototype.keys = function (firstKey) {\r\n        var it = this.entries(firstKey, ReusedArray);\r\n        return iterator(function () {\r\n            var n = it.next();\r\n            if (n.value)\r\n                n.value = n.value[0];\r\n            return n;\r\n        });\r\n    };\r\n    /** Returns a new iterator for iterating the values of each pair in order by key.\r\n     *  @param firstKey: Minimum key whose associated value is included in the output. */\r\n    BTree.prototype.values = function (firstKey) {\r\n        var it = this.entries(firstKey, ReusedArray);\r\n        return iterator(function () {\r\n            var n = it.next();\r\n            if (n.value)\r\n                n.value = n.value[1];\r\n            return n;\r\n        });\r\n    };\r\n    Object.defineProperty(BTree.prototype, \"maxNodeSize\", {\r\n        /////////////////////////////////////////////////////////////////////////////\r\n        // Additional methods ///////////////////////////////////////////////////////\r\n        /** Returns the maximum number of children/values before nodes will split. */\r\n        get: function () {\r\n            return this._maxNodeSize;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    /** Gets the lowest key in the tree. Complexity: O(log size) */\r\n    BTree.prototype.minKey = function () { return this._root.minKey(); };\r\n    /** Gets the highest key in the tree. Complexity: O(1) */\r\n    BTree.prototype.maxKey = function () { return this._root.maxKey(); };\r\n    /** Quickly clones the tree by marking the root node as shared.\r\n     *  Both copies remain editable. When you modify either copy, any\r\n     *  nodes that are shared (or potentially shared) between the two\r\n     *  copies are cloned so that the changes do not affect other copies.\r\n     *  This is known as copy-on-write behavior, or \"lazy copying\". */\r\n    BTree.prototype.clone = function () {\r\n        this._root.isShared = true;\r\n        var result = new BTree(undefined, this._compare, this._maxNodeSize);\r\n        result._root = this._root;\r\n        result._size = this._size;\r\n        return result;\r\n    };\r\n    /** Performs a greedy clone, immediately duplicating any nodes that are\r\n     *  not currently marked as shared, in order to avoid marking any\r\n     *  additional nodes as shared.\r\n     *  @param force Clone all nodes, even shared ones.\r\n     */\r\n    BTree.prototype.greedyClone = function (force) {\r\n        var result = new BTree(undefined, this._compare, this._maxNodeSize);\r\n        result._root = this._root.greedyClone(force);\r\n        result._size = this._size;\r\n        return result;\r\n    };\r\n    /** Gets an array filled with the contents of the tree, sorted by key */\r\n    BTree.prototype.toArray = function (maxLength) {\r\n        if (maxLength === void 0) { maxLength = 0x7FFFFFFF; }\r\n        var min = this.minKey(), max = this.maxKey();\r\n        if (min !== undefined)\r\n            return this.getRange(min, max, true, maxLength);\r\n        return [];\r\n    };\r\n    /** Gets an array of all keys, sorted */\r\n    BTree.prototype.keysArray = function () {\r\n        var results = [];\r\n        this._root.forRange(this.minKey(), this.maxKey(), true, false, this, 0, function (k, v) { results.push(k); });\r\n        return results;\r\n    };\r\n    /** Gets an array of all values, sorted by key */\r\n    BTree.prototype.valuesArray = function () {\r\n        var results = [];\r\n        this._root.forRange(this.minKey(), this.maxKey(), true, false, this, 0, function (k, v) { results.push(v); });\r\n        return results;\r\n    };\r\n    /** Gets a string representing the tree's data based on toArray(). */\r\n    BTree.prototype.toString = function () {\r\n        return this.toArray().toString();\r\n    };\r\n    /** Stores a key-value pair only if the key doesn't already exist in the tree.\r\n     * @returns true if a new key was added\r\n    */\r\n    BTree.prototype.setIfNotPresent = function (key, value) {\r\n        return this.set(key, value, false);\r\n    };\r\n    /** Returns the next pair whose key is larger than the specified key (or undefined if there is none).\r\n     * If key === undefined, this function returns the lowest pair.\r\n     * @param key The key to search for.\r\n     * @param reusedArray Optional array used repeatedly to store key-value pairs, to\r\n     * avoid creating a new array on every iteration.\r\n     */\r\n    BTree.prototype.nextHigherPair = function (key, reusedArray) {\r\n        reusedArray = reusedArray || [];\r\n        if (key === undefined) {\r\n            return this._root.minPair(reusedArray);\r\n        }\r\n        return this._root.getPairOrNextHigher(key, this._compare, false, reusedArray);\r\n    };\r\n    /** Returns the next key larger than the specified key, or undefined if there is none.\r\n     *  Also, nextHigherKey(undefined) returns the lowest key.\r\n     */\r\n    BTree.prototype.nextHigherKey = function (key) {\r\n        var p = this.nextHigherPair(key, ReusedArray);\r\n        return p && p[0];\r\n    };\r\n    /** Returns the next pair whose key is smaller than the specified key (or undefined if there is none).\r\n     *  If key === undefined, this function returns the highest pair.\r\n     * @param key The key to search for.\r\n     * @param reusedArray Optional array used repeatedly to store key-value pairs, to\r\n     *        avoid creating a new array each time you call this method.\r\n     */\r\n    BTree.prototype.nextLowerPair = function (key, reusedArray) {\r\n        reusedArray = reusedArray || [];\r\n        if (key === undefined) {\r\n            return this._root.maxPair(reusedArray);\r\n        }\r\n        return this._root.getPairOrNextLower(key, this._compare, false, reusedArray);\r\n    };\r\n    /** Returns the next key smaller than the specified key, or undefined if there is none.\r\n     *  Also, nextLowerKey(undefined) returns the highest key.\r\n     */\r\n    BTree.prototype.nextLowerKey = function (key) {\r\n        var p = this.nextLowerPair(key, ReusedArray);\r\n        return p && p[0];\r\n    };\r\n    /** Returns the key-value pair associated with the supplied key if it exists\r\n     *  or the pair associated with the next lower pair otherwise. If there is no\r\n     *  next lower pair, undefined is returned.\r\n     * @param key The key to search for.\r\n     * @param reusedArray Optional array used repeatedly to store key-value pairs, to\r\n     *        avoid creating a new array each time you call this method.\r\n     * */\r\n    BTree.prototype.getPairOrNextLower = function (key, reusedArray) {\r\n        return this._root.getPairOrNextLower(key, this._compare, true, reusedArray || []);\r\n    };\r\n    /** Returns the key-value pair associated with the supplied key if it exists\r\n     *  or the pair associated with the next lower pair otherwise. If there is no\r\n     *  next lower pair, undefined is returned.\r\n     * @param key The key to search for.\r\n     * @param reusedArray Optional array used repeatedly to store key-value pairs, to\r\n     *        avoid creating a new array each time you call this method.\r\n     * */\r\n    BTree.prototype.getPairOrNextHigher = function (key, reusedArray) {\r\n        return this._root.getPairOrNextHigher(key, this._compare, true, reusedArray || []);\r\n    };\r\n    /** Edits the value associated with a key in the tree, if it already exists.\r\n     * @returns true if the key existed, false if not.\r\n    */\r\n    BTree.prototype.changeIfPresent = function (key, value) {\r\n        return this.editRange(key, key, true, function (k, v) { return ({ value: value }); }) !== 0;\r\n    };\r\n    /**\r\n     * Builds an array of pairs from the specified range of keys, sorted by key.\r\n     * Each returned pair is also an array: pair[0] is the key, pair[1] is the value.\r\n     * @param low The first key in the array will be greater than or equal to `low`.\r\n     * @param high This method returns when a key larger than this is reached.\r\n     * @param includeHigh If the `high` key is present, its pair will be included\r\n     *        in the output if and only if this parameter is true. Note: if the\r\n     *        `low` key is present, it is always included in the output.\r\n     * @param maxLength Length limit. getRange will stop scanning the tree when\r\n     *                  the array reaches this size.\r\n     * @description Computational complexity: O(result.length + log size)\r\n     */\r\n    BTree.prototype.getRange = function (low, high, includeHigh, maxLength) {\r\n        if (maxLength === void 0) { maxLength = 0x3FFFFFF; }\r\n        var results = [];\r\n        this._root.forRange(low, high, includeHigh, false, this, 0, function (k, v) {\r\n            results.push([k, v]);\r\n            return results.length > maxLength ? Break : undefined;\r\n        });\r\n        return results;\r\n    };\r\n    /** Adds all pairs from a list of key-value pairs.\r\n     * @param pairs Pairs to add to this tree. If there are duplicate keys,\r\n     *        later pairs currently overwrite earlier ones (e.g. [[0,1],[0,7]]\r\n     *        associates 0 with 7.)\r\n     * @param overwrite Whether to overwrite pairs that already exist (if false,\r\n     *        pairs[i] is ignored when the key pairs[i][0] already exists.)\r\n     * @returns The number of pairs added to the collection.\r\n     * @description Computational complexity: O(pairs.length * log(size + pairs.length))\r\n     */\r\n    BTree.prototype.setPairs = function (pairs, overwrite) {\r\n        var added = 0;\r\n        for (var i = 0; i < pairs.length; i++)\r\n            if (this.set(pairs[i][0], pairs[i][1], overwrite))\r\n                added++;\r\n        return added;\r\n    };\r\n    /**\r\n     * Scans the specified range of keys, in ascending order by key.\r\n     * Note: the callback `onFound` must not insert or remove items in the\r\n     * collection. Doing so may cause incorrect data to be sent to the\r\n     * callback afterward.\r\n     * @param low The first key scanned will be greater than or equal to `low`.\r\n     * @param high Scanning stops when a key larger than this is reached.\r\n     * @param includeHigh If the `high` key is present, `onFound` is called for\r\n     *        that final pair if and only if this parameter is true.\r\n     * @param onFound A function that is called for each key-value pair. This\r\n     *        function can return {break:R} to stop early with result R.\r\n     * @param initialCounter Initial third argument of onFound. This value\r\n     *        increases by one each time `onFound` is called. Default: 0\r\n     * @returns The number of values found, or R if the callback returned\r\n     *        `{break:R}` to stop early.\r\n     * @description Computational complexity: O(number of items scanned + log size)\r\n     */\r\n    BTree.prototype.forRange = function (low, high, includeHigh, onFound, initialCounter) {\r\n        var r = this._root.forRange(low, high, includeHigh, false, this, initialCounter || 0, onFound);\r\n        return typeof r === \"number\" ? r : r.break;\r\n    };\r\n    /**\r\n     * Scans and potentially modifies values for a subsequence of keys.\r\n     * Note: the callback `onFound` should ideally be a pure function.\r\n     *   Specfically, it must not insert items, call clone(), or change\r\n     *   the collection except via return value; out-of-band editing may\r\n     *   cause an exception or may cause incorrect data to be sent to\r\n     *   the callback (duplicate or missed items). It must not cause a\r\n     *   clone() of the collection, otherwise the clone could be modified\r\n     *   by changes requested by the callback.\r\n     * @param low The first key scanned will be greater than or equal to `low`.\r\n     * @param high Scanning stops when a key larger than this is reached.\r\n     * @param includeHigh If the `high` key is present, `onFound` is called for\r\n     *        that final pair if and only if this parameter is true.\r\n     * @param onFound A function that is called for each key-value pair. This\r\n     *        function can return `{value:v}` to change the value associated\r\n     *        with the current key, `{delete:true}` to delete the current pair,\r\n     *        `{break:R}` to stop early with result R, or it can return nothing\r\n     *        (undefined or {}) to cause no effect and continue iterating.\r\n     *        `{break:R}` can be combined with one of the other two commands.\r\n     *        The third argument `counter` is the number of items iterated\r\n     *        previously; it equals 0 when `onFound` is called the first time.\r\n     * @returns The number of values scanned, or R if the callback returned\r\n     *        `{break:R}` to stop early.\r\n     * @description\r\n     *   Computational complexity: O(number of items scanned + log size)\r\n     *   Note: if the tree has been cloned with clone(), any shared\r\n     *   nodes are copied before `onFound` is called. This takes O(n) time\r\n     *   where n is proportional to the amount of shared data scanned.\r\n     */\r\n    BTree.prototype.editRange = function (low, high, includeHigh, onFound, initialCounter) {\r\n        var root = this._root;\r\n        if (root.isShared)\r\n            this._root = root = root.clone();\r\n        try {\r\n            var r = root.forRange(low, high, includeHigh, true, this, initialCounter || 0, onFound);\r\n            return typeof r === \"number\" ? r : r.break;\r\n        }\r\n        finally {\r\n            var isShared = void 0;\r\n            while (root.keys.length <= 1 && !root.isLeaf) {\r\n                isShared || (isShared = root.isShared);\r\n                this._root = root = root.keys.length === 0 ? EmptyLeaf :\r\n                    root.children[0];\r\n            }\r\n            // If any ancestor of the new root was shared, the new root must also be shared\r\n            if (isShared) {\r\n                root.isShared = true;\r\n            }\r\n        }\r\n    };\r\n    /** Same as `editRange` except that the callback is called for all pairs. */\r\n    BTree.prototype.editAll = function (onFound, initialCounter) {\r\n        return this.editRange(this.minKey(), this.maxKey(), true, onFound, initialCounter);\r\n    };\r\n    /**\r\n     * Removes a range of key-value pairs from the B+ tree.\r\n     * @param low The first key scanned will be greater than or equal to `low`.\r\n     * @param high Scanning stops when a key larger than this is reached.\r\n     * @param includeHigh Specifies whether the `high` key, if present, is deleted.\r\n     * @returns The number of key-value pairs that were deleted.\r\n     * @description Computational complexity: O(log size + number of items deleted)\r\n     */\r\n    BTree.prototype.deleteRange = function (low, high, includeHigh) {\r\n        return this.editRange(low, high, includeHigh, DeleteRange);\r\n    };\r\n    /** Deletes a series of keys from the collection. */\r\n    BTree.prototype.deleteKeys = function (keys) {\r\n        for (var i = 0, r = 0; i < keys.length; i++)\r\n            if (this.delete(keys[i]))\r\n                r++;\r\n        return r;\r\n    };\r\n    Object.defineProperty(BTree.prototype, \"height\", {\r\n        /** Gets the height of the tree: the number of internal nodes between the\r\n         *  BTree object and its leaf nodes (zero if there are no internal nodes). */\r\n        get: function () {\r\n            var node = this._root;\r\n            var height = -1;\r\n            while (node) {\r\n                height++;\r\n                node = node.isLeaf ? undefined : node.children[0];\r\n            }\r\n            return height;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    /** Makes the object read-only to ensure it is not accidentally modified.\r\n     *  Freezing does not have to be permanent; unfreeze() reverses the effect.\r\n     *  This is accomplished by replacing mutator functions with a function\r\n     *  that throws an Error. Compared to using a property (e.g. this.isFrozen)\r\n     *  this implementation gives better performance in non-frozen BTrees.\r\n     */\r\n    BTree.prototype.freeze = function () {\r\n        var t = this;\r\n        // Note: all other mutators ultimately call set() or editRange() \r\n        //       so we don't need to override those others.\r\n        t.clear = t.set = t.editRange = function () {\r\n            throw new Error(\"Attempted to modify a frozen BTree\");\r\n        };\r\n    };\r\n    /** Ensures mutations are allowed, reversing the effect of freeze(). */\r\n    BTree.prototype.unfreeze = function () {\r\n        // @ts-ignore \"The operand of a 'delete' operator must be optional.\"\r\n        //            (wrong: delete does not affect the prototype.)\r\n        delete this.clear;\r\n        // @ts-ignore\r\n        delete this.set;\r\n        // @ts-ignore\r\n        delete this.editRange;\r\n    };\r\n    Object.defineProperty(BTree.prototype, \"isFrozen\", {\r\n        /** Returns true if the tree appears to be frozen. */\r\n        get: function () {\r\n            return this.hasOwnProperty('editRange');\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    /** Scans the tree for signs of serious bugs (e.g. this.size doesn't match\r\n     *  number of elements, internal nodes not caching max element properly...)\r\n     *  Computational complexity: O(number of nodes), i.e. O(size). This method\r\n     *  skips the most expensive test - whether all keys are sorted - but it\r\n     *  does check that maxKey() of the children of internal nodes are sorted. */\r\n    BTree.prototype.checkValid = function () {\r\n        var size = this._root.checkValid(0, this, 0);\r\n        check(size === this.size, \"size mismatch: counted \", size, \"but stored\", this.size);\r\n    };\r\n    return BTree;\r\n}());\r\nexports.default = BTree;\r\n/** A TypeScript helper function that simply returns its argument, typed as\r\n *  `ISortedSet<K>` if the BTree implements it, as it does if `V extends undefined`.\r\n *  If `V` cannot be `undefined`, it returns `unknown` instead. Or at least, that\r\n *  was the intention, but TypeScript is acting weird and may return `ISortedSet<K>`\r\n *  even if `V` can't be `undefined` (discussion: btree-typescript issue #14) */\r\nfunction asSet(btree) {\r\n    return btree;\r\n}\r\nexports.asSet = asSet;\r\nif (Symbol && Symbol.iterator) // iterator is equivalent to entries()\r\n    BTree.prototype[Symbol.iterator] = BTree.prototype.entries;\r\nBTree.prototype.where = BTree.prototype.filter;\r\nBTree.prototype.setRange = BTree.prototype.setPairs;\r\nBTree.prototype.add = BTree.prototype.set; // for compatibility with ISetSink<K>\r\nfunction iterator(next) {\r\n    if (next === void 0) { next = (function () { return ({ done: true, value: undefined }); }); }\r\n    var result = { next: next };\r\n    if (Symbol && Symbol.iterator)\r\n        result[Symbol.iterator] = function () { return this; };\r\n    return result;\r\n}\r\n/** Leaf node / base class. **************************************************/\r\nvar BNode = /** @class */ (function () {\r\n    function BNode(keys, values) {\r\n        if (keys === void 0) { keys = []; }\r\n        this.keys = keys;\r\n        this.values = values || undefVals;\r\n        this.isShared = undefined;\r\n    }\r\n    Object.defineProperty(BNode.prototype, \"isLeaf\", {\r\n        get: function () { return this.children === undefined; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    ///////////////////////////////////////////////////////////////////////////\r\n    // Shared methods /////////////////////////////////////////////////////////\r\n    BNode.prototype.maxKey = function () {\r\n        return this.keys[this.keys.length - 1];\r\n    };\r\n    // If key not found, returns i^failXor where i is the insertion index.\r\n    // Callers that don't care whether there was a match will set failXor=0.\r\n    BNode.prototype.indexOf = function (key, failXor, cmp) {\r\n        var keys = this.keys;\r\n        var lo = 0, hi = keys.length, mid = hi >> 1;\r\n        while (lo < hi) {\r\n            var c = cmp(keys[mid], key);\r\n            if (c < 0)\r\n                lo = mid + 1;\r\n            else if (c > 0) // key < keys[mid]\r\n                hi = mid;\r\n            else if (c === 0)\r\n                return mid;\r\n            else {\r\n                // c is NaN or otherwise invalid\r\n                if (key === key) // at least the search key is not NaN\r\n                    return keys.length;\r\n                else\r\n                    throw new Error(\"BTree: NaN was used as a key\");\r\n            }\r\n            mid = (lo + hi) >> 1;\r\n        }\r\n        return mid ^ failXor;\r\n        // Unrolled version: benchmarks show same speed, not worth using\r\n        /*var i = 1, c: number = 0, sum = 0;\r\n        if (keys.length >= 4) {\r\n          i = 3;\r\n          if (keys.length >= 8) {\r\n            i = 7;\r\n            if (keys.length >= 16) {\r\n              i = 15;\r\n              if (keys.length >= 32) {\r\n                i = 31;\r\n                if (keys.length >= 64) {\r\n                  i = 127;\r\n                  i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 64 : -64;\r\n                  sum += c;\r\n                  i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 32 : -32;\r\n                  sum += c;\r\n                }\r\n                i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 16 : -16;\r\n                sum += c;\r\n              }\r\n              i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 8 : -8;\r\n              sum += c;\r\n            }\r\n            i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 4 : -4;\r\n            sum += c;\r\n          }\r\n          i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 2 : -2;\r\n          sum += c;\r\n        }\r\n        i += (c = i < keys.length ? cmp(keys[i], key) : 1) < 0 ? 1 : -1;\r\n        c = i < keys.length ? cmp(keys[i], key) : 1;\r\n        sum += c;\r\n        if (c < 0) {\r\n          ++i;\r\n          c = i < keys.length ? cmp(keys[i], key) : 1;\r\n          sum += c;\r\n        }\r\n        if (sum !== sum) {\r\n          if (key === key) // at least the search key is not NaN\r\n            return keys.length ^ failXor;\r\n          else\r\n            throw new Error(\"BTree: NaN was used as a key\");\r\n        }\r\n        return c === 0 ? i : i ^ failXor;*/\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Leaf Node: misc //////////////////////////////////////////////////////////\r\n    BNode.prototype.minKey = function () {\r\n        return this.keys[0];\r\n    };\r\n    BNode.prototype.minPair = function (reusedArray) {\r\n        if (this.keys.length === 0)\r\n            return undefined;\r\n        reusedArray[0] = this.keys[0];\r\n        reusedArray[1] = this.values[0];\r\n        return reusedArray;\r\n    };\r\n    BNode.prototype.maxPair = function (reusedArray) {\r\n        if (this.keys.length === 0)\r\n            return undefined;\r\n        var lastIndex = this.keys.length - 1;\r\n        reusedArray[0] = this.keys[lastIndex];\r\n        reusedArray[1] = this.values[lastIndex];\r\n        return reusedArray;\r\n    };\r\n    BNode.prototype.clone = function () {\r\n        var v = this.values;\r\n        return new BNode(this.keys.slice(0), v === undefVals ? v : v.slice(0));\r\n    };\r\n    BNode.prototype.greedyClone = function (force) {\r\n        return this.isShared && !force ? this : this.clone();\r\n    };\r\n    BNode.prototype.get = function (key, defaultValue, tree) {\r\n        var i = this.indexOf(key, -1, tree._compare);\r\n        return i < 0 ? defaultValue : this.values[i];\r\n    };\r\n    BNode.prototype.getPairOrNextLower = function (key, compare, inclusive, reusedArray) {\r\n        var i = this.indexOf(key, -1, compare);\r\n        var indexOrLower = i < 0 ? ~i - 1 : (inclusive ? i : i - 1);\r\n        if (indexOrLower >= 0) {\r\n            reusedArray[0] = this.keys[indexOrLower];\r\n            reusedArray[1] = this.values[indexOrLower];\r\n            return reusedArray;\r\n        }\r\n        return undefined;\r\n    };\r\n    BNode.prototype.getPairOrNextHigher = function (key, compare, inclusive, reusedArray) {\r\n        var i = this.indexOf(key, -1, compare);\r\n        var indexOrLower = i < 0 ? ~i : (inclusive ? i : i + 1);\r\n        var keys = this.keys;\r\n        if (indexOrLower < keys.length) {\r\n            reusedArray[0] = keys[indexOrLower];\r\n            reusedArray[1] = this.values[indexOrLower];\r\n            return reusedArray;\r\n        }\r\n        return undefined;\r\n    };\r\n    BNode.prototype.checkValid = function (depth, tree, baseIndex) {\r\n        var kL = this.keys.length, vL = this.values.length;\r\n        check(this.values === undefVals ? kL <= vL : kL === vL, \"keys/values length mismatch: depth\", depth, \"with lengths\", kL, vL, \"and baseIndex\", baseIndex);\r\n        // Note: we don't check for \"node too small\" because sometimes a node\r\n        // can legitimately have size 1. This occurs if there is a batch \r\n        // deletion, leaving a node of size 1, and the siblings are full so\r\n        // it can't be merged with adjacent nodes. However, the parent will\r\n        // verify that the average node size is at least half of the maximum.\r\n        check(depth == 0 || kL > 0, \"empty leaf at depth\", depth, \"and baseIndex\", baseIndex);\r\n        return kL;\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Leaf Node: set & node splitting //////////////////////////////////////////\r\n    BNode.prototype.set = function (key, value, overwrite, tree) {\r\n        var i = this.indexOf(key, -1, tree._compare);\r\n        if (i < 0) {\r\n            // key does not exist yet\r\n            i = ~i;\r\n            tree._size++;\r\n            if (this.keys.length < tree._maxNodeSize) {\r\n                return this.insertInLeaf(i, key, value, tree);\r\n            }\r\n            else {\r\n                // This leaf node is full and must split\r\n                var newRightSibling = this.splitOffRightSide(), target = this;\r\n                if (i > this.keys.length) {\r\n                    i -= this.keys.length;\r\n                    target = newRightSibling;\r\n                }\r\n                target.insertInLeaf(i, key, value, tree);\r\n                return newRightSibling;\r\n            }\r\n        }\r\n        else {\r\n            // Key already exists\r\n            if (overwrite !== false) {\r\n                if (value !== undefined)\r\n                    this.reifyValues();\r\n                // usually this is a no-op, but some users may wish to edit the key\r\n                this.keys[i] = key;\r\n                this.values[i] = value;\r\n            }\r\n            return false;\r\n        }\r\n    };\r\n    BNode.prototype.reifyValues = function () {\r\n        if (this.values === undefVals)\r\n            return this.values = this.values.slice(0, this.keys.length);\r\n        return this.values;\r\n    };\r\n    BNode.prototype.insertInLeaf = function (i, key, value, tree) {\r\n        this.keys.splice(i, 0, key);\r\n        if (this.values === undefVals) {\r\n            while (undefVals.length < tree._maxNodeSize)\r\n                undefVals.push(undefined);\r\n            if (value === undefined) {\r\n                return true;\r\n            }\r\n            else {\r\n                this.values = undefVals.slice(0, this.keys.length - 1);\r\n            }\r\n        }\r\n        this.values.splice(i, 0, value);\r\n        return true;\r\n    };\r\n    BNode.prototype.takeFromRight = function (rhs) {\r\n        // Reminder: parent node must update its copy of key for this node\r\n        // assert: neither node is shared\r\n        // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length<maxNodeSize)\r\n        var v = this.values;\r\n        if (rhs.values === undefVals) {\r\n            if (v !== undefVals)\r\n                v.push(undefined);\r\n        }\r\n        else {\r\n            v = this.reifyValues();\r\n            v.push(rhs.values.shift());\r\n        }\r\n        this.keys.push(rhs.keys.shift());\r\n    };\r\n    BNode.prototype.takeFromLeft = function (lhs) {\r\n        // Reminder: parent node must update its copy of key for this node\r\n        // assert: neither node is shared\r\n        // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length<maxNodeSize)\r\n        var v = this.values;\r\n        if (lhs.values === undefVals) {\r\n            if (v !== undefVals)\r\n                v.unshift(undefined);\r\n        }\r\n        else {\r\n            v = this.reifyValues();\r\n            v.unshift(lhs.values.pop());\r\n        }\r\n        this.keys.unshift(lhs.keys.pop());\r\n    };\r\n    BNode.prototype.splitOffRightSide = function () {\r\n        // Reminder: parent node must update its copy of key for this node\r\n        var half = this.keys.length >> 1, keys = this.keys.splice(half);\r\n        var values = this.values === undefVals ? undefVals : this.values.splice(half);\r\n        return new BNode(keys, values);\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Leaf Node: scanning & deletions //////////////////////////////////////////\r\n    BNode.prototype.forRange = function (low, high, includeHigh, editMode, tree, count, onFound) {\r\n        var cmp = tree._compare;\r\n        var iLow, iHigh;\r\n        if (high === low) {\r\n            if (!includeHigh)\r\n                return count;\r\n            iHigh = (iLow = this.indexOf(low, -1, cmp)) + 1;\r\n            if (iLow < 0)\r\n                return count;\r\n        }\r\n        else {\r\n            iLow = this.indexOf(low, 0, cmp);\r\n            iHigh = this.indexOf(high, -1, cmp);\r\n            if (iHigh < 0)\r\n                iHigh = ~iHigh;\r\n            else if (includeHigh === true)\r\n                iHigh++;\r\n        }\r\n        var keys = this.keys, values = this.values;\r\n        if (onFound !== undefined) {\r\n            for (var i = iLow; i < iHigh; i++) {\r\n                var key = keys[i];\r\n                var result = onFound(key, values[i], count++);\r\n                if (result !== undefined) {\r\n                    if (editMode === true) {\r\n                        if (key !== keys[i] || this.isShared === true)\r\n                            throw new Error(\"BTree illegally changed or cloned in editRange\");\r\n                        if (result.delete) {\r\n                            this.keys.splice(i, 1);\r\n                            if (this.values !== undefVals)\r\n                                this.values.splice(i, 1);\r\n                            tree._size--;\r\n                            i--;\r\n                            iHigh--;\r\n                        }\r\n                        else if (result.hasOwnProperty('value')) {\r\n                            values[i] = result.value;\r\n                        }\r\n                    }\r\n                    if (result.break !== undefined)\r\n                        return result;\r\n                }\r\n            }\r\n        }\r\n        else\r\n            count += iHigh - iLow;\r\n        return count;\r\n    };\r\n    /** Adds entire contents of right-hand sibling (rhs is left unchanged) */\r\n    BNode.prototype.mergeSibling = function (rhs, _) {\r\n        this.keys.push.apply(this.keys, rhs.keys);\r\n        if (this.values === undefVals) {\r\n            if (rhs.values === undefVals)\r\n                return;\r\n            this.values = this.values.slice(0, this.keys.length);\r\n        }\r\n        this.values.push.apply(this.values, rhs.reifyValues());\r\n    };\r\n    return BNode;\r\n}());\r\n/** Internal node (non-leaf node) ********************************************/\r\nvar BNodeInternal = /** @class */ (function (_super) {\r\n    __extends(BNodeInternal, _super);\r\n    /**\r\n     * This does not mark `children` as shared, so it is the responsibility of the caller\r\n     * to ensure children are either marked shared, or aren't included in another tree.\r\n     */\r\n    function BNodeInternal(children, keys) {\r\n        var _this = this;\r\n        if (!keys) {\r\n            keys = [];\r\n            for (var i = 0; i < children.length; i++)\r\n                keys[i] = children[i].maxKey();\r\n        }\r\n        _this = _super.call(this, keys) || this;\r\n        _this.children = children;\r\n        return _this;\r\n    }\r\n    BNodeInternal.prototype.clone = function () {\r\n        var children = this.children.slice(0);\r\n        for (var i = 0; i < children.length; i++)\r\n            children[i].isShared = true;\r\n        return new BNodeInternal(children, this.keys.slice(0));\r\n    };\r\n    BNodeInternal.prototype.greedyClone = function (force) {\r\n        if (this.isShared && !force)\r\n            return this;\r\n        var nu = new BNodeInternal(this.children.slice(0), this.keys.slice(0));\r\n        for (var i = 0; i < nu.children.length; i++)\r\n            nu.children[i] = nu.children[i].greedyClone(force);\r\n        return nu;\r\n    };\r\n    BNodeInternal.prototype.minKey = function () {\r\n        return this.children[0].minKey();\r\n    };\r\n    BNodeInternal.prototype.minPair = function (reusedArray) {\r\n        return this.children[0].minPair(reusedArray);\r\n    };\r\n    BNodeInternal.prototype.maxPair = function (reusedArray) {\r\n        return this.children[this.children.length - 1].maxPair(reusedArray);\r\n    };\r\n    BNodeInternal.prototype.get = function (key, defaultValue, tree) {\r\n        var i = this.indexOf(key, 0, tree._compare), children = this.children;\r\n        return i < children.length ? children[i].get(key, defaultValue, tree) : undefined;\r\n    };\r\n    BNodeInternal.prototype.getPairOrNextLower = function (key, compare, inclusive, reusedArray) {\r\n        var i = this.indexOf(key, 0, compare), children = this.children;\r\n        if (i >= children.length)\r\n            return this.maxPair(reusedArray);\r\n        var result = children[i].getPairOrNextLower(key, compare, inclusive, reusedArray);\r\n        if (result === undefined && i > 0) {\r\n            return children[i - 1].maxPair(reusedArray);\r\n        }\r\n        return result;\r\n    };\r\n    BNodeInternal.prototype.getPairOrNextHigher = function (key, compare, inclusive, reusedArray) {\r\n        var i = this.indexOf(key, 0, compare), children = this.children, length = children.length;\r\n        if (i >= length)\r\n            return undefined;\r\n        var result = children[i].getPairOrNextHigher(key, compare, inclusive, reusedArray);\r\n        if (result === undefined && i < length - 1) {\r\n            return children[i + 1].minPair(reusedArray);\r\n        }\r\n        return result;\r\n    };\r\n    BNodeInternal.prototype.checkValid = function (depth, tree, baseIndex) {\r\n        var kL = this.keys.length, cL = this.children.length;\r\n        check(kL === cL, \"keys/children length mismatch: depth\", depth, \"lengths\", kL, cL, \"baseIndex\", baseIndex);\r\n        check(kL > 1 || depth > 0, \"internal node has length\", kL, \"at depth\", depth, \"baseIndex\", baseIndex);\r\n        var size = 0, c = this.children, k = this.keys, childSize = 0;\r\n        for (var i = 0; i < cL; i++) {\r\n            size += c[i].checkValid(depth + 1, tree, baseIndex + size);\r\n            childSize += c[i].keys.length;\r\n            check(size >= childSize, \"wtf\", baseIndex); // no way this will ever fail\r\n            check(i === 0 || c[i - 1].constructor === c[i].constructor, \"type mismatch, baseIndex:\", baseIndex);\r\n            if (c[i].maxKey() != k[i])\r\n                check(false, \"keys[\", i, \"] =\", k[i], \"is wrong, should be \", c[i].maxKey(), \"at depth\", depth, \"baseIndex\", baseIndex);\r\n            if (!(i === 0 || tree._compare(k[i - 1], k[i]) < 0))\r\n                check(false, \"sort violation at depth\", depth, \"index\", i, \"keys\", k[i - 1], k[i]);\r\n        }\r\n        // 2020/08: BTree doesn't always avoid grossly undersized nodes,\r\n        // but AFAIK such nodes are pretty harmless, so accept them.\r\n        var toofew = childSize === 0; // childSize < (tree.maxNodeSize >> 1)*cL;\r\n        if (toofew || childSize > tree.maxNodeSize * cL)\r\n            check(false, toofew ? \"too few\" : \"too many\", \"children (\", childSize, size, \") at depth\", depth, \"maxNodeSize:\", tree.maxNodeSize, \"children.length:\", cL, \"baseIndex:\", baseIndex);\r\n        return size;\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Internal Node: set & node splitting //////////////////////////////////////\r\n    BNodeInternal.prototype.set = function (key, value, overwrite, tree) {\r\n        var c = this.children, max = tree._maxNodeSize, cmp = tree._compare;\r\n        var i = Math.min(this.indexOf(key, 0, cmp), c.length - 1), child = c[i];\r\n        if (child.isShared)\r\n            c[i] = child = child.clone();\r\n        if (child.keys.length >= max) {\r\n            // child is full; inserting anything else will cause a split.\r\n            // Shifting an item to the left or right sibling may avoid a split.\r\n            // We can do a shift if the adjacent node is not full and if the\r\n            // current key can still be placed in the same node after the shift.\r\n            var other;\r\n            if (i > 0 && (other = c[i - 1]).keys.length < max && cmp(child.keys[0], key) < 0) {\r\n                if (other.isShared)\r\n                    c[i - 1] = other = other.clone();\r\n                other.takeFromRight(child);\r\n                this.keys[i - 1] = other.maxKey();\r\n            }\r\n            else if ((other = c[i + 1]) !== undefined && other.keys.length < max && cmp(child.maxKey(), key) < 0) {\r\n                if (other.isShared)\r\n                    c[i + 1] = other = other.clone();\r\n                other.takeFromLeft(child);\r\n                this.keys[i] = c[i].maxKey();\r\n            }\r\n        }\r\n        var result = child.set(key, value, overwrite, tree);\r\n        if (result === false)\r\n            return false;\r\n        this.keys[i] = child.maxKey();\r\n        if (result === true)\r\n            return true;\r\n        // The child has split and `result` is a new right child... does it fit?\r\n        if (this.keys.length < max) { // yes\r\n            this.insert(i + 1, result);\r\n            return true;\r\n        }\r\n        else { // no, we must split also\r\n            var newRightSibling = this.splitOffRightSide(), target = this;\r\n            if (cmp(result.maxKey(), this.maxKey()) > 0) {\r\n                target = newRightSibling;\r\n                i -= this.keys.length;\r\n            }\r\n            target.insert(i + 1, result);\r\n            return newRightSibling;\r\n        }\r\n    };\r\n    /**\r\n     * Inserts `child` at index `i`.\r\n     * This does not mark `child` as shared, so it is the responsibility of the caller\r\n     * to ensure that either child is marked shared, or it is not included in another tree.\r\n     */\r\n    BNodeInternal.prototype.insert = function (i, child) {\r\n        this.children.splice(i, 0, child);\r\n        this.keys.splice(i, 0, child.maxKey());\r\n    };\r\n    /**\r\n     * Split this node.\r\n     * Modifies this to remove the second half of the items, returning a separate node containing them.\r\n     */\r\n    BNodeInternal.prototype.splitOffRightSide = function () {\r\n        // assert !this.isShared;\r\n        var half = this.children.length >> 1;\r\n        return new BNodeInternal(this.children.splice(half), this.keys.splice(half));\r\n    };\r\n    BNodeInternal.prototype.takeFromRight = function (rhs) {\r\n        // Reminder: parent node must update its copy of key for this node\r\n        // assert: neither node is shared\r\n        // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length<maxNodeSize)\r\n        this.keys.push(rhs.keys.shift());\r\n        this.children.push(rhs.children.shift());\r\n    };\r\n    BNodeInternal.prototype.takeFromLeft = function (lhs) {\r\n        // Reminder: parent node must update its copy of key for this node\r\n        // assert: neither node is shared\r\n        // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length<maxNodeSize)\r\n        this.keys.unshift(lhs.keys.pop());\r\n        this.children.unshift(lhs.children.pop());\r\n    };\r\n    /////////////////////////////////////////////////////////////////////////////\r\n    // Internal Node: scanning & deletions //////////////////////////////////////\r\n    // Note: `count` is the next value of the third argument to `onFound`. \r\n    //       A leaf node's `forRange` function returns a new value for this counter,\r\n    //       unless the operation is to stop early.\r\n    BNodeInternal.prototype.forRange = function (low, high, includeHigh, editMode, tree, count, onFound) {\r\n        var cmp = tree._compare;\r\n        var keys = this.keys, children = this.children;\r\n        var iLow = this.indexOf(low, 0, cmp), i = iLow;\r\n        var iHigh = Math.min(high === low ? iLow : this.indexOf(high, 0, cmp), keys.length - 1);\r\n        if (!editMode) {\r\n            // Simple case\r\n            for (; i <= iHigh; i++) {\r\n                var result = children[i].forRange(low, high, includeHigh, editMode, tree, count, onFound);\r\n                if (typeof result !== 'number')\r\n                    return result;\r\n                count = result;\r\n            }\r\n        }\r\n        else if (i <= iHigh) {\r\n            try {\r\n                for (; i <= iHigh; i++) {\r\n                    if (children[i].isShared)\r\n                        children[i] = children[i].clone();\r\n                    var result = children[i].forRange(low, high, includeHigh, editMode, tree, count, onFound);\r\n                    // Note: if children[i] is empty then keys[i]=undefined.\r\n                    //       This is an invalid state, but it is fixed below.\r\n                    keys[i] = children[i].maxKey();\r\n                    if (typeof result !== 'number')\r\n                        return result;\r\n                    count = result;\r\n                }\r\n            }\r\n            finally {\r\n                // Deletions may have occurred, so look for opportunities to merge nodes.\r\n                var half = tree._maxNodeSize >> 1;\r\n                if (iLow > 0)\r\n                    iLow--;\r\n                for (i = iHigh; i >= iLow; i--) {\r\n                    if (children[i].keys.length <= half) {\r\n                        if (children[i].keys.length !== 0) {\r\n                            this.tryMerge(i, tree._maxNodeSize);\r\n                        }\r\n                        else { // child is empty! delete it!\r\n                            keys.splice(i, 1);\r\n                            children.splice(i, 1);\r\n                        }\r\n                    }\r\n                }\r\n                if (children.length !== 0 && children[0].keys.length === 0)\r\n                    check(false, \"emptiness bug\");\r\n            }\r\n        }\r\n        return count;\r\n    };\r\n    /** Merges child i with child i+1 if their combined size is not too large */\r\n    BNodeInternal.prototype.tryMerge = function (i, maxSize) {\r\n        var children = this.children;\r\n        if (i >= 0 && i + 1 < children.length) {\r\n            if (children[i].keys.length + children[i + 1].keys.length <= maxSize) {\r\n                if (children[i].isShared) // cloned already UNLESS i is outside scan range\r\n                    children[i] = children[i].clone();\r\n                children[i].mergeSibling(children[i + 1], maxSize);\r\n                children.splice(i + 1, 1);\r\n                this.keys.splice(i + 1, 1);\r\n                this.keys[i] = children[i].maxKey();\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * Move children from `rhs` into this.\r\n     * `rhs` must be part of this tree, and be removed from it after this call\r\n     * (otherwise isShared for its children could be incorrect).\r\n     */\r\n    BNodeInternal.prototype.mergeSibling = function (rhs, maxNodeSize) {\r\n        // assert !this.isShared;\r\n        var oldLength = this.keys.length;\r\n        this.keys.push.apply(this.keys, rhs.keys);\r\n        var rhsChildren = rhs.children;\r\n        this.children.push.apply(this.children, rhsChildren);\r\n        if (rhs.isShared && !this.isShared) {\r\n            // All children of a shared node are implicitly shared, and since their new\r\n            // parent is not shared, they must now be explicitly marked as shared.\r\n            for (var i = 0; i < rhsChildren.length; i++)\r\n                rhsChildren[i].isShared = true;\r\n        }\r\n        // If our children are themselves almost empty due to a mass-delete,\r\n        // they may need to be merged too (but only the oldLength-1 and its\r\n        // right sibling should need this).\r\n        this.tryMerge(oldLength - 1, maxNodeSize);\r\n    };\r\n    return BNodeInternal;\r\n}(BNode));\r\n// Optimization: this array of `undefined`s is used instead of a normal\r\n// array of values in nodes where `undefined` is the only value.\r\n// Its length is extended to max node size on first use; since it can\r\n// be shared between trees with different maximums, its length can only\r\n// increase, never decrease. Its type should be undefined[] but strangely\r\n// TypeScript won't allow the comparison V[] === undefined[]. To prevent\r\n// users from making this array too large, BTree has a maximum node size.\r\n//\r\n// FAQ: undefVals[i] is already undefined, so why increase the array size?\r\n// Reading outside the bounds of an array is relatively slow because it\r\n// has the side effect of scanning the prototype chain.\r\nvar undefVals = [];\r\nvar Delete = { delete: true }, DeleteRange = function () { return Delete; };\r\nvar Break = { break: true };\r\nvar EmptyLeaf = (function () {\r\n    var n = new BNode();\r\n    n.isShared = true;\r\n    return n;\r\n})();\r\nvar EmptyArray = [];\r\nvar ReusedArray = []; // assumed thread-local\r\nfunction check(fact) {\r\n    var args = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        args[_i - 1] = arguments[_i];\r\n    }\r\n    if (!fact) {\r\n        args.unshift('B+ tree'); // at beginning of message\r\n        throw new Error(args.join(' '));\r\n    }\r\n}\r\n/** A BTree frozen in the empty state. */\r\nexports.EmptyBTree = (function () { var t = new BTree(); t.freeze(); return t; })();\r\n","import {\n  render,\n  parse,\n  tryParse,\n  da\n} from '@urbit/aura';\nimport bigInt from 'big-integer';\n\nimport * as db from '../db/types';\nimport type * as ub from '../urbit';\nimport { BadResponseError } from './urbit';\n\nexport function formatScryPath(\n  ...segments: (string | number | null | undefined)[]\n) {\n  return (\n    '/' +\n    segments\n      .filter((s) => s !== null && s !== undefined)\n      .map((s) => (typeof s === 'number' ? render('ud', BigInt(s)) : s))\n      .join('/')\n  );\n}\n\nexport function isColor(value: string) {\n  return value[0] === '#';\n}\n\n// Limit max image string size since this isn't currently limited serverside +\n// it's possible for these to be massive and cause issues.\nconst maxImageStringSize = 2048;\n\nexport function toClientMeta(meta: ub.GroupMeta): db.ClientMeta {\n  const iconImage = meta.image.length > maxImageStringSize ? '' : meta.image;\n  const iconImageData = iconImage\n    ? isColor(iconImage)\n      ? { iconImageColor: iconImage }\n      : { iconImage: iconImage }\n    : {};\n  const coverImage = meta.cover.length > maxImageStringSize ? '' : meta.cover;\n  const coverImageData = coverImage\n    ? isColor(coverImage)\n      ? { coverImageColor: coverImage }\n      : { coverImage: coverImage }\n    : {};\n  return {\n    title: meta.title,\n    iconImage: iconImageData.iconImage ?? null,\n    iconImageColor: iconImageData.iconImageColor ?? null,\n    coverImage: coverImageData.coverImage ?? null,\n    coverImageColor: coverImageData.coverImageColor ?? null,\n    description: meta.description,\n  };\n}\n\nexport function fromClientMeta(meta: db.ClientMeta): ub.GroupMeta {\n  return {\n    title: meta.title ?? '',\n    image: meta.iconImage ?? meta.iconImageColor ?? '',\n    cover: meta.coverImage ?? meta.coverImageColor ?? '',\n    description: meta.description ?? '',\n  };\n}\n\nexport function formatUd(ud: string) {  //REVIEW\n  return render('ud', BigInt(ud));\n}\n\nexport function udToDate(das: string) {\n  return da.toUnix(parseIdNumber(das));\n}\n\n//  parses either a @ud-formatted string (dot-separated decimal) or a plain\n//  decimal number string (aka @ui without the prefix).\n//  we try both instead of being precise at the callsites, because historically\n//  we used a too-lenient @ud parser, which also accepted dotless\n//  representations, making it slightly unclear/ambiguous what we were actually\n//  *intending* to parse. the backend is wildly inconsistent, so this is easier\n//  and safer than figuring all that out. (we'll tighten things up Soon™.)\nexport function parseIdNumber(id: string): bigint {\n  return tryParse('ud', id) || BigInt(id);\n}\n\nexport function formatDateParam(date: Date) {\n  return render('ud', da.fromUnix(date!.getTime()));\n}\n\nexport function isDmChannelId(channelId: string) {\n  return channelId.startsWith('~');\n}\n\nexport function isGroupDmChannelId(channelId: string) {\n  return channelId.startsWith('0v');\n}\n\nexport function isGroupChannelId(channelId: string) {\n  return (\n    channelId.startsWith('chat') ||\n    channelId.startsWith('diary') ||\n    channelId.startsWith('heap')\n  );\n}\n\nexport function parseGroupChannelId(channelId: string) {\n  const parts = channelId.split('/');\n  return {\n    kind: parts[0] as ub.Kind,\n    host: parts[1] as string,\n    name: parts[2] as string,\n  };\n}\n\nexport function parseGroupId(groupId: string) {\n  const parts = groupId.split('/');\n  return {\n    host: parts[0] as string,\n    name: parts[1] as string,\n  };\n}\n\nexport function getChannelIdType(channelId: string) {\n  if (isDmChannelId(channelId)) {\n    return 'dm';\n  } else if (isGroupDmChannelId(channelId)) {\n    return 'club';\n  } else if (isGroupChannelId(channelId)) {\n    return 'channel';\n  } else {\n    throw new Error('invalid channel id');\n  }\n}\n\n// distinguish between channel and group IDs\nexport function isChannelId(id: string): boolean {\n  // if has no path parts, is a dm or multi-dm\n  if (id.split('/').length === 1) {\n    return true;\n  }\n\n  // otherwise, check if its a group channel\n  return isGroupChannelId(id);\n}\n\nexport async function with404Handler<T>(\n  scryRequest: Promise<any>,\n  defaultValue: T\n) {\n  try {\n    return await scryRequest;\n  } catch (e) {\n    if (e instanceof BadResponseError && e.status === 404) {\n      return defaultValue;\n    }\n    throw e;\n  }\n}\nexport function getCanonicalPostId(inputId: string) {\n  let id = inputId;\n  // Dm and club posts come prefixed with the author, so we strip it\n  if (id[0] === '~') {\n    id = id.split('/').pop()!;\n  }\n  // The id in group post ids doesn't come dot separated, so we format it\n  if (id[3] !== '.') {\n    id = render('ud', BigInt(id));  //REVIEW  weird, and dot check is not ideal\n  }\n  return id;\n}\n\nexport function toPostEssay({\n  content,\n  authorId,\n  sentAt,\n  channelType,\n  blob,\n  metadata,\n}: {\n  content: ub.Story;\n  authorId: string;\n  sentAt: number;\n  channelType: db.ChannelType;\n  blob?: string;\n  metadata?: ub.Metadata;\n}): ub.PostEssay {\n  const essay: ub.PostEssay = {\n    content,\n    sent: sentAt,\n    kind:\n      channelType === 'notebook'\n        ? '/diary'\n        : channelType === 'gallery'\n          ? '/heap'\n          : '/chat',\n    author: authorId,\n    blob: blob || null,\n    meta: metadata || null,\n  };\n\n  return essay;\n}\n\n// the chat subscription doesn't include full posts (writs) in its add events,\n// so we need to recreate the implicit msising data before inserting them\nexport function deriveFullWrit(\n  id: string,\n  delta: ub.WritDeltaAdd | ub.WritResponseAdd\n): ub.Writ {\n  const time = delta.add.time\n    ? bigInt(delta.add.time).toString()\n    : da.fromUnix(delta.add.essay.sent).toString();\n\n  const seq = delta.add.seq ?? undefined;\n\n  const seal: ub.WritSeal = {\n    id,\n    time,\n    replies: [],\n    reacts: {},\n    meta: {\n      replyCount: 0,\n      lastRepliers: [],\n      lastReply: null,\n    },\n    seq,\n  };\n\n  return { seal, essay: delta.add.essay, type: 'writ' };\n}\n\nexport function deriveFullWritReply({\n  id,\n  parentId,\n  delta,\n}: {\n  id: string;\n  parentId: string;\n  delta: ub.ReplyDeltaAdd;\n}): ub.WritReply {\n  const time = delta.add.time\n    ? bigInt(delta.add.time).toString()\n    : da.fromUnix(delta.add.memo.sent).toString();\n\n  const seal: ub.WritReplySeal = {\n    id,\n    time,\n    'parent-id': parentId,\n    reacts: {},\n  };\n  const memo = delta.add.memo;\n\n  return { seal, memo };\n}\n","import { UnionToIntersection } from '../utils';\n\ntype Flag = string;\ntype Nest = string;\n\nexport type JSONContent = {\n  type?: string;\n  attrs?: Record<string, any>;\n  content?: JSONContent[];\n  marks?: {\n    type: string;\n    attrs?: Record<string, any>;\n    [key: string]: any;\n  }[];\n  text?: string;\n  [key: string]: any;\n};\n\nexport interface Ship {\n  ship: string;\n}\n\nexport interface Sect {\n  sect: string | null;\n}\n\nexport interface Italics {\n  italics: Inline[];\n}\n\nexport interface Bold {\n  bold: Inline[];\n}\n\nexport interface Strikethrough {\n  strike: Inline[];\n}\n\nexport interface Break {\n  break: null;\n}\n\nexport interface InlineCode {\n  'inline-code': string;\n}\n\nexport interface BlockCode {\n  code: string;\n}\n\nexport interface Blockquote {\n  blockquote: Inline[];\n}\n\n/**\n A reference to the accompanying blocks, indexed at 0\n*/\nexport interface BlockReference {\n  block: {\n    index: number;\n    text: string;\n  };\n}\n\nexport interface Tag {\n  tag: string;\n}\n\nexport interface Link {\n  link: {\n    href: string;\n    content: string;\n  };\n}\n\nexport interface Task {\n  task: {\n    checked: boolean;\n    content: Inline[];\n  };\n}\n\nexport type Inline =\n  | string\n  | Bold\n  | Italics\n  | Strikethrough\n  | Ship\n  | Sect\n  | Break\n  | InlineCode\n  | BlockCode\n  | Blockquote\n  | BlockReference\n  | Tag\n  | Link\n  | Task;\n\nexport type InlineKey =\n  | 'italics'\n  | 'bold'\n  | 'strike'\n  | 'blockquote'\n  | 'inline-code'\n  | 'block'\n  | 'code'\n  | 'tag'\n  | 'link'\n  | 'break'\n  | 'ship'\n  | 'task'\n  | 'sect';\n\nexport function isInline(c: Inline | Block): c is Inline {\n  if (typeof c === 'string') {\n    return true;\n  }\n\n  if (typeof c !== 'object') {\n    throw new Error('Invalid content type');\n  }\n\n  return (\n    !isBlockLink(c) &&\n    !isCode(c) &&\n    [\n      'text',\n      'mention',\n      'url',\n      'color',\n      'italics',\n      'bold',\n      'strike',\n      'blockquote',\n      'inline-code',\n      'block',\n      'code',\n      'tag',\n      'link',\n      'break',\n    ].some((k) => k in c)\n  );\n}\n\nexport interface ChanCite {\n  chan: {\n    nest: Nest;\n    where: string;\n  };\n}\n\nexport interface GroupCite {\n  group: Flag;\n}\n\nexport interface DeskCite {\n  desk: {\n    flag: string;\n    where: string;\n  };\n}\n\nexport interface BaitCite {\n  bait: {\n    group: Flag;\n    graph: Flag;\n    where: string;\n  };\n}\n\nexport type Cite = ChanCite | GroupCite | DeskCite | BaitCite;\n\nexport interface Image {\n  image: {\n    src: string;\n    height: number;\n    width: number;\n    alt: string;\n  };\n}\n\nexport interface LinkBlock {\n  link: {\n    url: string;\n    meta: Record<string, string | undefined> & {\n      title?: string;\n      description?: string;\n      author?: string;\n      siteName?: string;\n      siteIcon?: string;\n      previewImageUrl?: string;\n      previewImageHeight?: string;\n      previewImageWidth?: string;\n    };\n  };\n}\n\nexport type ListType = 'ordered' | 'unordered' | 'tasklist';\n\nexport interface List {\n  list: {\n    type: 'ordered' | 'unordered' | 'tasklist';\n    items: Listing[];\n    contents: Inline[];\n  };\n}\n\nexport type ListItem = {\n  item: Inline[];\n};\n\nexport type Listing = List | ListItem;\n\nexport interface ListingBlock {\n  listing: Listing;\n}\n\nexport type HeaderLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface Header {\n  header: {\n    tag: HeaderLevel;\n    content: Inline[];\n  };\n}\n\nexport interface Rule {\n  rule: null;\n}\n\nexport interface Code {\n  code: {\n    code: string;\n    lang: string;\n  };\n}\n\nexport type Block =\n  | Image\n  | { cite: Cite }\n  | ListingBlock\n  | Header\n  | Rule\n  | Code\n  | LinkBlock;\n\nexport namespace Block {\n  export function is<K extends keyof UnionToIntersection<Block>>(\n    poly: Block,\n    type: K\n  ): // @ts-expect-error - hey, I'm asserting here!\n  poly is Pick<UnionToIntersection<Block>, K> {\n    if (type === 'link') {\n      return isBlockLink(poly);\n    }\n\n    return type in poly;\n  }\n}\n\nexport function isBlock(c: Inline | Block): c is Block {\n  if (typeof c === 'string') {\n    return false;\n  }\n\n  if (typeof c !== 'object') {\n    throw new Error('Invalid content type');\n  }\n\n  return (\n    !isLink(c) &&\n    !isBlockCode(c) &&\n    [\n      'cite',\n      'link',\n      'image',\n      'listing',\n      'header',\n      'rule',\n      'code',\n      'chan',\n      'desk',\n      'bait',\n      'group',\n    ].some((k) => k in c)\n  );\n}\n\nexport function isBold(item: unknown): item is Bold {\n  return typeof item === 'object' && item !== null && 'bold' in item;\n}\n\nexport function isItalics(item: unknown): item is Italics {\n  return typeof item === 'object' && item !== null && 'italics' in item;\n}\n\nexport function isLink(item: unknown): item is Link {\n  return (\n    typeof item === 'object' &&\n    item !== null &&\n    'link' in item &&\n    'href' in (item as Link).link\n  );\n}\n\nexport function isStrikethrough(item: unknown): item is Strikethrough {\n  return typeof item === 'object' && item !== null && 'strike' in item;\n}\n\nexport function isBlockquote(item: unknown): item is Blockquote {\n  return typeof item === 'object' && item !== null && 'blockquote' in item;\n}\n\nexport function isInlineCode(item: unknown): item is InlineCode {\n  return typeof item === 'object' && item !== null && 'inline-code' in item;\n}\n\nexport function isBlockCode(item: unknown): item is BlockCode {\n  return (\n    typeof item === 'object' &&\n    item !== null &&\n    'code' in item &&\n    typeof item.code === 'string'\n  );\n}\n\nexport function isBreak(item: unknown): item is Break {\n  return typeof item === 'object' && item !== null && 'break' in item;\n}\n\nexport function isShip(item: unknown): item is Ship {\n  return typeof item === 'object' && item !== null && 'ship' in item;\n}\n\nexport function isSect(item: unknown): item is Sect {\n  return typeof item === 'object' && item !== null && 'sect' in item;\n}\n\nexport function isHeader(block: Block): block is Header {\n  return 'header' in block;\n}\n\nexport function isCode(item: unknown): item is Code {\n  return (\n    typeof item === 'object' &&\n    item !== null &&\n    'code' in item &&\n    typeof item.code === 'object'\n  );\n}\n\nexport function isListing(block: Block): block is ListingBlock {\n  return 'listing' in block;\n}\n\nexport function isListItem(listing: Listing): listing is ListItem {\n  return 'item' in listing;\n}\n\nexport function isList(listing: Listing): listing is List {\n  return 'list' in listing;\n}\n\nexport function isTag(item: unknown): item is Tag {\n  return typeof item === 'object' && item !== null && 'tag' in item;\n}\n\nexport function isBlockReference(item: unknown): item is BlockReference {\n  return typeof item === 'object' && item !== null && 'block' in item;\n}\n\nexport function isTask(item: unknown): item is Task {\n  return typeof item === 'object' && item !== null && 'task' in item;\n}\n\nexport function isImage(item: unknown): item is Image {\n  return typeof item === 'object' && item !== null && 'image' in item;\n}\n\nexport function isBlockLink(item: unknown): item is LinkBlock {\n  return (\n    typeof item === 'object' &&\n    item !== null &&\n    'link' in item &&\n    'url' in (item as LinkBlock).link\n  );\n}\n\nexport function isCite(s: Block): boolean {\n  if ('cite' in s) {\n    return true;\n  }\n  return false;\n}\n","import bigInt, { BigInteger } from 'big-integer';\n//REVIEW  non-native!\nimport _ from 'lodash';\nimport BTree from 'sorted-btree';\n\nimport { parseIdNumber } from '../api/apiUtils';\nimport { Stringified } from '../utils';\nimport { Block, Image, Inline, isBlock, isImage } from './content';\nimport { Flag } from './hark';\nimport { Metadata } from './meta';\n\nexport interface CacheId {\n  author: string;\n  sent: number;\n}\n\nexport interface Writ {\n  seal: WritSeal;\n  essay: WritEssay;\n}\n\nexport interface WritEssay extends PostEssay {\n  'kind-data': KindDataChat;\n}\n\nexport interface WritSeal extends PostSeal {\n  time: number;\n}\n\nexport type BotProfile = {\n  ship: Ship;\n  nickname: string | null;\n  avatar: string | null;\n};\n\nexport type Patda = string;\nexport type Ship = string;\nexport type Author = Ship | BotProfile;\nexport type Nest = string;\nexport type React = string | { any: string };\n\nexport interface ReplyMeta {\n  replyCount: number;\n  lastRepliers: Ship[];\n  lastReply: number | null;\n}\n\nexport interface PostSeal {\n  id: string;\n  reacts: { [ship: Ship]: React };\n  replies: ReplyTuple[] | null;\n  meta: ReplyMeta;\n  seq?: number;\n}\n\nexport interface ReplySeal {\n  id: string;\n  'parent-id': string;\n  reacts: {\n    [ship: Ship]: React;\n  };\n}\n\nexport interface VerseInline {\n  inline: Inline[];\n}\n\nexport interface VerseBlock {\n  block: Block;\n}\n\nexport function isBlockVerse(verse: Verse): verse is VerseBlock {\n  return 'block' in verse;\n}\n\nexport type Verse = VerseInline | VerseBlock;\n\nexport type Story = Verse[];\n\nexport type ChatBlock = Block;\n\n// TODO: remove all dependence on chat story.\nexport type ChatStory = {\n  inline: Inline[];\n  block: ChatBlock[];\n};\n\nexport type KindDataHeap = {\n  heap: string;\n};\n\nexport type KindDataDiary = {\n  diary: {\n    title: string;\n    image?: string;\n  };\n};\n\nexport type KindDataChat = {\n  chat: null | { notice: null };\n};\n\nexport type KindData = KindDataDiary | KindDataChat | KindDataHeap;\nexport type Kind = 'heap' | 'diary' | 'chat';\n\nexport interface PostEssay {\n  content: Story;\n  author: Author;\n  sent: number;\n  kind: string;\n  blob: string | null;\n  meta: Metadata | null;\n}\n\nexport type PostTombstone = {\n  author: Author;\n  id: string;\n  ['deleted-at']: number;\n  seq: number;\n  type: 'tombstone';\n};\n\nexport type Post = {\n  seal: PostSeal;\n  essay: PostEssay;\n  revision?: string;\n  type: 'post';\n};\n\nexport interface PagedPosts {\n  posts: Posts;\n  newer: string | null;\n  older: string | null;\n  total: number;\n  newest: number;\n}\n\nexport interface PagedPostsMap extends Omit<PagedPosts, 'posts'> {\n  posts: PageMap;\n}\n\nexport type PostLike = Post | PostTombstone;\n\nexport interface SequencedPosts {\n  posts: Posts;\n  newest: number;\n}\n\nexport interface Posts {\n  [time: string]: PostLike;\n}\n\nexport type PostTuple = [BigInteger, Post | null];\n\nexport type ReplyTuple = [BigInteger, Reply | null];\n\nexport type PageMap = BTree<BigInteger, Post | null>;\n\nexport interface Reply {\n  seal: ReplySeal;\n  memo: Memo;\n  revision?: string;\n}\n\nexport interface Memo {\n  content: Story;\n  author: Author;\n  sent: number;\n}\n\nexport type ReplyMap = BTree<BigInteger, Reply>;\n\nexport interface Replies {\n  [id: string]: Reply | PostTombstone;\n}\n\ninterface PostActionAdd {\n  add: PostEssay;\n}\n\ninterface PostActionAdd1 {\n  add: PostEssay;\n}\n\ninterface PostActionEdit {\n  edit: {\n    id: string;\n    essay: PostEssay;\n  };\n}\n\ninterface PostActionDel {\n  del: string;\n}\n\ninterface PostActionAddReact {\n  'add-react': {\n    id: string;\n    react: React;\n    ship: string;\n  };\n}\n\ninterface PostActionDelReact {\n  'del-react': {\n    id: string;\n    ship: string;\n  };\n}\n\ninterface DiffAddWriters {\n  'add-writers': string[];\n}\n\ninterface DiffDelWriters {\n  'del-writers': string[];\n}\n\ninterface DiffArrangedPosts {\n  order: string[];\n}\n\ninterface DiffSort {\n  sort: SortMode;\n}\n\ninterface DiffMeta {\n  meta: Stringified<ChannelMetadata> | null;\n}\n\ninterface PostActionReply {\n  reply: {\n    id: string; // post id\n    action: ReplyAction;\n  };\n}\n\nexport type PostAction =\n  | PostActionAdd\n  | PostActionEdit\n  | PostActionDel\n  | PostActionAddReact\n  | PostActionDelReact\n  | PostActionReply\n  | PostActionAdd1;\n\nexport interface DiffView {\n  view: DisplayMode;\n}\n\nexport interface CreateDiff {\n  create: {\n    perm: Perm;\n    posts: PageMap;\n  };\n}\n\nexport interface ReplyActionAdd {\n  add: Memo;\n}\n\nexport interface ReplyActionEdit {\n  edit: {\n    id: string;\n    memo: Memo;\n  };\n}\n\nexport interface ReplyActionDel {\n  del: string;\n}\n\nexport type ReplyAction =\n  | ReplyActionAdd\n  | ReplyActionDel\n  | ReplyActionEdit\n  | PostActionAddReact\n  | PostActionDelReact;\n\nexport type DisplayMode = 'list' | 'grid';\n\nexport type SortMode = 'alpha' | 'time' | 'arranged';\n\nexport interface PendingMessages {\n  posts: Record<string, PostEssay>;\n  replies: Record<string, Record<string, Memo>>;\n}\n\nexport type JSONValue = number | string | boolean;\n\nexport interface PostInput {\n  type: string;\n  postType: string;\n  configuration?: Record<string, JSONValue>;\n}\n\nexport interface PostCollectionRenderer {\n  id: string;\n  configuration?: Record<string, JSONValue>;\n}\n\nexport interface ContentRenderer {\n  rendererId: string;\n}\n\nexport interface ChannelMetadataSchemaV1 {\n  version: 1;\n  postInput: PostInput;\n  postCollectionRenderer: PostCollectionRenderer;\n  defaultContentRenderer: ContentRenderer;\n}\n\nexport type ChannelMetadata = ChannelMetadataSchemaV1;\n\nexport interface Channel {\n  perms: Perm;\n  view: DisplayMode;\n  order: string[];\n  sort: SortMode;\n  pending: PendingMessages;\n  meta: ChannelMetadata;\n}\n\nexport interface ChannelFromServer {\n  perms: Perm;\n  view: DisplayMode;\n  order: string[];\n  sort: SortMode;\n  pending: PendingMessages;\n  meta: Stringified<ChannelMetadata> | null;\n}\n\nexport interface Channels {\n  [key: string]: Channel;\n}\n\nexport interface Create {\n  kind: Kind;\n  group: Flag;\n  name: string;\n  title: string;\n  description: string;\n  meta: Stringified<ChannelMetadata> | null;\n  readers: string[];\n  writers: string[];\n}\n\nexport interface Perm {\n  writers: string[];\n  group: Flag;\n}\n\nexport interface ReplyReferenceResponse {\n  reply: {\n    'id-post': string;\n    reply: Reply;\n  };\n}\n\nexport interface PostReferenceResponse {\n  post: Post;\n}\n\nexport type ReferenceResponse = ReplyReferenceResponse | PostReferenceResponse;\n\nexport interface Said {\n  nest: Nest;\n  reference: ReferenceResponse;\n}\n\nexport interface Init {\n  channels: Channels;\n}\n\nexport type Diff = CreateDiff | Command;\n\nexport type Action =\n  | { join: Flag } // group flag\n  | { leave: null }\n  | { read: null }\n  | { 'read-at': string }\n  | { watch: null }\n  | { unwatch: null }\n  | Command;\n\nexport type ChannelsAction =\n  | { channel: { nest: Nest; action: Action } }\n  | { create: Create };\n\nexport type Command =\n  | { post: PostAction }\n  | DiffView\n  | DiffAddWriters\n  | DiffDelWriters\n  | DiffArrangedPosts\n  | DiffSort\n  | DiffMeta;\n\nexport type PostResponse =\n  | { set: Post | null }\n  | { reply: { id: string; 'r-reply': ReplyResponse; meta: ReplyMeta } }\n  | { essay: PostEssay }\n  | { reacts: Record<string, React> };\n\nexport type ReplyResponse = { set: Reply } | { reacts: Record<string, React> };\n\nexport interface ChannelPostResponse {\n  post: {\n    id: string;\n    'r-post': PostResponse;\n  };\n}\n\nexport type PendingResponse =\n  | { post: PostEssay }\n  | {\n      reply: {\n        top: string;\n        meta: ReplyMeta;\n        memo: Memo;\n      };\n    };\n\nexport interface ChannelPendingResponse {\n  pending: {\n    id: CacheId;\n    pending: PendingResponse;\n  };\n}\n\nexport type Response =\n  | { posts: Posts }\n  | ChannelPostResponse\n  | ChannelPendingResponse\n  | { order: string[] }\n  | { view: DisplayMode }\n  | { sort: SortMode }\n  | { perm: Perm }\n  | { meta: Stringified<ChannelMetadata> | null }\n  | { create: Perm }\n  | { join: string }\n  | { leave: null }\n  | { read: null }\n  | { 'read-at': string }\n  | { watch: null }\n  | { unwatch: null };\n\nexport interface ChannelsResponse {\n  nest: Nest;\n  response: Response;\n}\n\nexport interface ChannelsSubscribeResponse extends ChannelsResponse {\n  show: string;\n  hide: string;\n}\n\nexport function blockContentIsImage(content: Story) {\n  return (\n    content.length > 0 &&\n    content.filter((c) => 'block' in c).length > 0 &&\n    isImage((content.filter((c) => 'block' in c)[0] as VerseBlock).block)\n  );\n}\n\nexport function imageUrlFromContent(content: Story) {\n  if (blockContentIsImage(content)) {\n    return (\n      (content.filter((c) => 'block' in c)[0] as VerseBlock).block as Image\n    ).image.src;\n  }\n  return undefined;\n}\n\nexport function chatStoryFromStory(story: Story): ChatStory {\n  const newCon: ChatStory = {\n    inline: [],\n    block: [],\n  };\n\n  const inlines: Inline[] = story\n    .filter((s) => 'inline' in s)\n    .map((s) => (s as VerseInline).inline)\n    .flat();\n  const blocks: ChatBlock[] = story\n    .filter((s) => 'block' in s)\n    .map((s) => (s as VerseBlock).block as ChatBlock)\n    .flat();\n\n  newCon.inline = inlines;\n  newCon.block = blocks;\n\n  return newCon;\n}\n\nexport function storyFromChatStory(chatStory: ChatStory): Story {\n  const newStory: Story = [];\n\n  const inlines: Inline[] = chatStory.inline;\n  const blocks: Block[] = chatStory.block;\n\n  newStory.push({ inline: inlines });\n\n  blocks.forEach((b) => {\n    newStory.push({ block: b });\n  });\n\n  return newStory;\n}\n\nexport function getIdFromPostAction(postAction: PostAction): string {\n  if ('add' in postAction) {\n    return postAction.add.sent.toString();\n  }\n  if ('edit' in postAction) {\n    return postAction.edit.id;\n  }\n  if ('del' in postAction) {\n    return postAction.del;\n  }\n  if ('add-react' in postAction) {\n    return postAction['add-react'].id;\n  }\n  if ('del-react' in postAction) {\n    return postAction['del-react'].id;\n  }\n  if ('reply' in postAction) {\n    return postAction.reply.id;\n  }\n  return '';\n}\n\nexport const emptyPost: Post = {\n  seal: {\n    id: '',\n    reacts: {},\n    replies: null,\n    meta: {\n      replyCount: 0,\n      lastRepliers: [],\n      lastReply: null,\n    },\n    seq: 1,\n  },\n  revision: '0',\n  essay: {\n    author: '',\n    content: [],\n    sent: 0,\n    kind: '/chat',\n    blob: null,\n    meta: null,\n  },\n  type: 'post',\n};\n\nexport const emptyReply: Reply = {\n  seal: {\n    id: '',\n    'parent-id': '',\n    reacts: {},\n  },\n  revision: '0',\n  memo: {\n    author: '',\n    content: [],\n    sent: 0,\n  },\n};\n\nexport function constructStory(data: (Inline | Block)[]): Story {\n  const postContent: Story = [];\n  let index = 0;\n  data.forEach((c, i) => {\n    if (i < index) {\n      return;\n    }\n\n    if (isBlock(c)) {\n      postContent.push({ block: c as Block });\n      index += 1;\n    } else {\n      const inline = _.takeWhile(\n        _.drop(data, index),\n        (d) => !isBlock(d)\n      ) as Inline[];\n      postContent.push({ inline });\n      index += inline.length;\n    }\n  });\n\n  return postContent;\n}\n\nexport function newReplyMap(\n  entries?: [BigInteger, Reply][],\n  reverse = false\n): BTree<BigInteger, Reply> {\n  return new BTree<BigInteger, Reply>(entries, (a, b) =>\n    reverse ? b.compare(a) : a.compare(b)\n  );\n}\n\nexport function newPostTupleArray(\n  data:\n    | {\n        pages: PagedPosts[];\n      }\n    | undefined\n): PostTuple[] {\n  if (data === undefined || data.pages.length === 0) {\n    return [];\n  }\n\n  return _.uniqBy(\n    data.pages\n      .map((page) => {\n        const pagePosts = Object.entries(page.posts).map(\n          ([k, v]) => [bigInt(parseIdNumber(k)), v] as PostTuple\n        );\n\n        return pagePosts;\n      })\n      .flat(),\n    ([k]) => k.toString()\n  ).sort(([a], [b]) => a.compare(b));\n}\n\nexport function newPostMap(entries?: PostTuple[], reverse = false): PageMap {\n  return new BTree<BigInteger, Post | null>(entries, (a, b) =>\n    reverse ? b.compare(a) : a.compare(b)\n  );\n}\n\nexport type ChatMap = BTree<BigInteger, Post | Writ | Reply | null>;\n\nexport interface PostSealDataResponse {\n  id: string;\n  replies: Replies;\n  reacts: {\n    [ship: Ship]: React;\n  };\n  meta: {\n    replyCount: number;\n    lastRepliers: Ship[];\n    lastReply: number | null;\n  };\n}\n\nexport interface PostDataResponse {\n  seal: PostSealDataResponse;\n  revision?: string;\n  essay: PostEssay;\n}\n\nexport type ChannelScanItem = { post: Post } | ReplyReferenceResponse;\n\nexport type ChannelScan = ChannelScanItem[];\n\nexport type ChannelScam = { last: string | null; scan: ChannelScan };\n\nexport type TogglePost = { hide: string } | { show: string };\n\nexport type HiddenPosts = string[];\n\nexport type ChannelHead = {\n  recency: number;\n  nest: string;\n  latest: Writ;\n};\n\nexport type ChannelHeadsResponse = ChannelHead[];\n\nexport type ChannelHooksPreview = { name: string; meta: Metadata }[];\n","import { render, valid, da } from '@urbit/aura';\n\nimport { PostContent } from '../api';\nimport { ChannelType } from '../db';\nimport { GroupJoinStatus, GroupPrivacy } from '../db/types';\nimport { createDevLogger } from '../debug';\nimport { ContentReference } from '../domain';\nimport * as ub from './channel';\nimport * as ubc from './content';\nimport * as ubg from './groups';\nimport { Atom } from '@urbit/nockjs';\n\nconst logger = createDevLogger('urbitUtils', false);\n\ntype App = 'chat' | 'heap' | 'diary';\nconst APP_PREFIXES = ['chat', 'heap', 'diary'];\n\nexport function checkNest(nest: string): boolean {\n  const parts = nest.split('/');\n  if (parts.length !== 3) {\n    logger.error('Invalid nest:', nest);\n    return false;\n  }\n\n  if (!APP_PREFIXES.includes(parts[0])) {\n    logger.log(\n      `Custom channel type detected (${parts[0]}), pretending its chat.`,\n      nest\n    );\n    return false;\n  }\n\n  return true;\n}\n\nexport function nestToFlag(nest: string): [App, string] {\n  checkNest(nest);\n  const [app, ...rest] = nest.split('/');\n\n  return [app as App, rest.join('/')];\n}\n\nexport function preSig(ship: string): string {\n  if (!ship) {\n    return '';\n  }\n\n  if (ship.trim().startsWith('~')) {\n    return ship.trim();\n  }\n\n  return '~'.concat(ship.trim());\n}\n\nexport function desig(ship: string): string {\n  if (!ship) {\n    return '';\n  }\n\n  return ship.trim().replace('~', '');\n}\n\nexport function getFirstInline(content: ub.Story) {\n  const inlines = content.filter((v) => 'inline' in v) as ub.VerseInline[];\n  if (inlines.length === 0) {\n    return null;\n  }\n\n  return inlines[0].inline;\n}\n\nexport function citeToPath(cite: ubc.Cite) {\n  if ('desk' in cite) {\n    return `/1/desk/${cite.desk.flag}${cite.desk.where}`;\n  }\n  if ('chan' in cite) {\n    return `/1/chan/${cite.chan.nest}${cite.chan.where}`;\n  }\n  if ('group' in cite) {\n    return `/1/group/${cite.group}`;\n  }\n\n  return `/1/bait/${cite.bait.group}/${cite.bait.graph}/${cite.bait.where}`;\n}\n\nexport function pathToCite(path: string): ubc.Cite | undefined {\n  const segments = path.split('/');\n  if (segments.length < 3) {\n    return undefined;\n  }\n  const [, ver, kind, ...rest] = segments;\n  if (ver !== '1') {\n    return undefined;\n  }\n  if (kind === 'chan') {\n    if (rest.length < 3) {\n      return undefined;\n    }\n    const nest = rest.slice(0, 3).join('/');\n    return {\n      chan: {\n        nest,\n        where: `/${rest.slice(3).join('/')}` || '/',\n      },\n    };\n  }\n  if (kind === 'desk') {\n    if (rest.length < 2) {\n      return undefined;\n    }\n    const flag = rest.slice(0, 2).join('/');\n    return {\n      desk: {\n        flag,\n        where: `/${rest.slice(2).join('/')}` || '/',\n      },\n    };\n  }\n  if (kind === 'group') {\n    if (rest.length !== 2) {\n      return undefined;\n    }\n    return {\n      group: rest.join('/'),\n    };\n  }\n  return undefined;\n}\n\n//  encode the string as @t into url-safe format, using logic from +wood.\n//  for example, 'some Chars!' becomes '~.some.~43.hars~21.'\n//  this is equivalent to (scot %t string), and is url-safe encoding for\n//  arbitrary strings.\n//\nexport function encodeString(string: string) {\n  return render('t', Atom.fromCord(string).number);\n}\n\nexport function idIsNest(id: string) {\n  return id.split('/').length === 3;\n}\n\nexport function getChannelType(channelId: string) {\n  if (!idIsNest(channelId)) {\n    if (whomIsDm(channelId)) {\n      return 'dm';\n    }\n    if (whomIsMultiDm(channelId)) {\n      return 'groupDm';\n    }\n  }\n  const [app] = nestToFlag(channelId);\n\n  if (app === 'chat') {\n    return 'chat';\n  } else if (app === 'heap') {\n    return 'gallery';\n  } else if (app === 'diary') {\n    return 'notebook';\n  } else {\n    return 'chat';\n  }\n}\n\nexport function getChannelKindFromType(\n  type: Omit<ChannelType, 'dm' | 'groupDm'>\n) {\n  if (type === 'chat') {\n    return 'chat';\n  } else if (type === 'gallery') {\n    return 'heap';\n  } else if (type === 'notebook') {\n    return 'diary';\n  } else {\n    return 'chat';\n  }\n}\n\nexport function getTextContent(story: PostContent): string;\nexport function getTextContent(story?: PostContent): string | undefined {\n  if (!story) {\n    return;\n  }\n  // Guard against non-array content\n  if (!Array.isArray(story)) {\n    return typeof story === 'string' ? story : undefined;\n  }\n  return story\n    .map((verse) => {\n      if (isReferenceVerse(verse)) {\n        return '';\n      } else if (ub.isBlockVerse(verse)) {\n        return getBlockContent(verse.block);\n      } else if ('inline' in verse) {\n        return getInlinesContent(verse.inline);\n      } else {\n        return '';\n      }\n    })\n    .filter((v) => !!v && v !== '')\n    .join(' ')\n    .trim();\n}\n\nfunction isReferenceVerse(\n  verse: ub.Verse | ContentReference\n): verse is ContentReference {\n  return 'type' in verse && verse.type === 'reference';\n}\n\nexport function getBlockContent(block: ubc.Block) {\n  if (ubc.isImage(block)) {\n    return '(Image)';\n  } else if (ubc.isCite(block)) {\n    return '(Reference)';\n  } else if (ubc.isHeader(block)) {\n    return block.header.content.map(getInlineContent);\n  } else if (ubc.isCode(block)) {\n    return block.code.code;\n  } else if (ubc.isListing(block)) {\n    return getListingContent(block.listing);\n  }\n}\n\nexport function getListingContent(listing: ubc.Listing): string {\n  if (ubc.isListItem(listing)) {\n    return listing.item.map(getInlineContent).join(' ');\n  } else {\n    return listing.list.items.map(getListingContent).join(' ');\n  }\n}\n\nexport function getInlinesContent(inlines: ubc.Inline[]): string {\n  return inlines\n    .map(getInlineContent)\n    .filter((v) => v && v !== '')\n    .join(' ');\n}\n\nexport function getInlineContent(inline: ubc.Inline): string {\n  if (ubc.isBold(inline)) {\n    return inline.bold.map(getInlineContent).join(' ');\n  } else if (ubc.isItalics(inline)) {\n    return inline.italics.map(getInlineContent).join(' ');\n  } else if (ubc.isLink(inline)) {\n    return inline.link.content;\n  } else if (ubc.isStrikethrough(inline)) {\n    return inline.strike.map(getInlineContent).join(' ');\n  } else if (ubc.isBlockquote(inline)) {\n    return inline.blockquote.map(getInlineContent).join(' ');\n  } else if (ubc.isInlineCode(inline)) {\n    return inline['inline-code'];\n  } else if (ubc.isBlockCode(inline)) {\n    return inline.code;\n  } else if (ubc.isBreak(inline)) {\n    return '';\n  } else if (ubc.isShip(inline)) {\n    return inline.ship;\n  } else if (ubc.isSect(inline)) {\n    return `@${inline.sect || 'all'}`;\n  } else if (ubc.isTag(inline)) {\n    return inline.tag;\n  } else if (ubc.isBlockReference(inline)) {\n    return inline.block.text;\n  } else if (ubc.isTask(inline)) {\n    return inline.task.content.map(getInlineContent).join(' ');\n  } else {\n    return inline;\n  }\n}\n\nexport function whomIsDm(whom: string): boolean {\n  return whom.startsWith('~') && !whom.match('/');\n}\n\nexport function whomIsMultiDm(whom: string): boolean {\n  return whom.startsWith(`0v`);\n}\n\n// ship + term, term being a @tas: lower-case letters, numbers, and hyphens\nexport function whomIsFlag(whom: string): boolean {\n  return (\n    /^~[a-z-]+\\/[a-z]+[a-z0-9-]*$/.test(whom) && valid('p', whom.split('/')[0])\n  );\n}\n\nexport function createMultiDmId(seed = Date.now()) {\n  return render('uv', da.fromUnix(seed));\n}\n\nexport function getJoinStatusFromGang(gang: ubg.Gang): GroupJoinStatus | null {\n  if (gang.claim?.progress) {\n    if (\n      gang.claim?.progress === 'adding' ||\n      gang.claim?.progress === 'watching'\n    ) {\n      return 'joining';\n    }\n\n    // still consider the join in progress until the claim is removed\n    if (gang.claim?.progress === 'done') {\n      return 'joining';\n    }\n\n    if (gang.claim?.progress === 'error') {\n      return 'errored';\n    }\n  }\n\n  return null;\n}\n\nexport function extractGroupPrivacy(\n  preview: ubg.GroupPreview | ubg.GroupPreviewV7 | ubg.Group | null,\n  claim?: ubg.GroupClaim\n): GroupPrivacy {\n  if (!preview) {\n    if (claim?.progress === 'knocking') {\n      // sometimes gangs are missing the preview while joining,\n      // however we'll know it's private if the claim is 'knocking'\n      return 'private';\n    }\n\n    // If no preview is available, treat as secret group since secret groups\n    // intentionally don't expose preview data to non-members\n    return 'secret';\n  }\n\n  // v7 preview has privacy field directly\n  if ('privacy' in preview) {\n    return preview.privacy;\n  }\n\n  // v6 and earlier preview has cordon and secret fields\n  return preview.secret\n    ? 'secret'\n    : preview.cordon && 'shut' in preview.cordon\n      ? 'private'\n      : 'public';\n}\n\nexport function createSectionId() {\n  const idParts = render('uv', BigInt(Date.now())).split('.');\n  const newSectionId = `z${idParts[idParts.length - 1]}`;\n\n  return newSectionId;\n}\n","import { da } from '@urbit/aura';\nimport _ from 'lodash';\n\nimport type { UnionToIntersection } from '../utils';\nimport { Kind, Story } from './channel';\nimport { ContactBookProfile } from './contact';\nimport { nestToFlag, whomIsDm, whomIsFlag, whomIsMultiDm } from './utils';\nimport { parseIdNumber } from '../api/apiUtils';\n\nexport type Whom = { ship: string } | { club: string };\n\nexport type ExtendedEventType =\n  | 'post'\n  | 'post-mention'\n  | 'reply'\n  | 'reply-mention'\n  | 'dm-invite'\n  | 'dm-post'\n  | 'dm-post-mention'\n  | 'dm-reply'\n  | 'dm-reply-mention'\n  | 'group-ask'\n  | 'group-join'\n  | 'group-kick'\n  | 'group-invite'\n  | 'group-role'\n  | 'flag-post'\n  | 'flag-reply'\n  | 'contact';\n\nexport type NotificationLevel = 'hush' | 'soft' | 'default' | 'medium' | 'loud';\n\nexport enum NotificationNames {\n  loud = 'Notify for all activity',\n  default = 'Posts, mentions and replies',\n  medium = 'Posts, mentions and replies ',\n  soft = 'Only mentions and replies',\n  hush = 'Do not notify for any activity',\n}\n\nexport enum NotificationNamesShort {\n  loud = 'All posts and replies',\n  default = 'All posts',\n  medium = 'All posts ',\n  soft = 'Mentions and replies',\n  hush = 'No notifications',\n}\n\nexport interface VolumeLevel {\n  notify: NotificationLevel;\n  unreads: boolean;\n}\n\nexport type Volume = {\n  unreads: boolean;\n  notify: boolean;\n};\n\nexport interface MessageKey {\n  id: string;\n  time: string;\n}\n\nexport interface DmInviteEvent {\n  'dm-invite': Whom;\n}\n\nexport interface GroupKickEvent {\n  'group-kick': {\n    ship: string;\n    group: string;\n  };\n}\n\nexport interface GroupAskEvent {\n  'group-ask': {\n    ship: string;\n    group: string;\n  };\n}\n\nexport interface GroupJoinEvent {\n  'group-join': {\n    ship: string;\n    group: string;\n  };\n}\n\nexport interface GroupRoleEvent {\n  'group-role': {\n    ship: string;\n    group: string;\n    roles: string[];\n  };\n}\n\nexport interface GroupInviteEvent {\n  'group-invite': {\n    ship: string;\n    group: string;\n  };\n}\n\nexport interface FlagPostEvent {\n  'flag-post': {\n    key: MessageKey;\n    channel: string;\n    group: string;\n  };\n}\n\nexport interface FlagReplyEvent {\n  'flag-reply': {\n    key: MessageKey;\n    parent: MessageKey;\n    channel: string;\n    group: string;\n  };\n}\n\nexport interface DmPostEvent {\n  'dm-post': {\n    key: MessageKey;\n    whom: Whom;\n    content: Story;\n    mention: boolean;\n  };\n}\n\nexport interface DmReplyEvent {\n  'dm-reply': {\n    parent: MessageKey;\n    key: MessageKey;\n    whom: Whom;\n    content: Story;\n    mention: boolean;\n  };\n}\n\nexport interface PostEvent {\n  post: {\n    key: MessageKey;\n    group: string;\n    channel: string;\n    content: Story;\n    mention: boolean;\n  };\n}\n\nexport interface ReplyEvent {\n  reply: {\n    parent: MessageKey;\n    key: MessageKey;\n    group: string;\n    channel: string;\n    content: Story;\n    mention: boolean;\n  };\n}\n\nexport interface ContactEvent {\n  contact: {\n    who: string;\n    update: ContactBookProfile;\n  };\n}\n\nexport type ActivityIncomingEvent =\n  | GroupKickEvent\n  | GroupJoinEvent\n  | GroupRoleEvent\n  | GroupInviteEvent\n  | GroupAskEvent\n  | FlagPostEvent\n  | FlagReplyEvent\n  | DmInviteEvent\n  | DmPostEvent\n  | DmReplyEvent\n  | PostEvent\n  | ReplyEvent\n  | ContactEvent;\n\nexport type ActivityEvent = {\n  notified: boolean;\n} & ActivityIncomingEvent;\n\nexport interface PostRead {\n  seen: boolean;\n  floor: string;\n}\n\nexport interface Reads {\n  floor: number;\n  items: Record<string, PostRead>;\n}\n\nexport interface IndexData {\n  stream: Stream;\n  reads: Reads;\n}\n\nexport interface DmSource {\n  dm: Whom;\n}\n\nexport interface ChannelSource {\n  channel: { nest: string; group: string };\n}\n\nexport type Source =\n  | DmSource\n  | { base: null }\n  | { group: string }\n  | ChannelSource\n  | { thread: { key: MessageKey; channel: string; group: string } }\n  | { 'dm-thread': { key: MessageKey; whom: Whom } };\n\nexport interface MessageKey {\n  id: string;\n  time: string;\n}\n\nexport interface UnreadPoint extends MessageKey {\n  count: number;\n  notify: boolean;\n}\n\nexport interface UnreadThread extends UnreadPoint {\n  'parent-time': string;\n}\n\nexport interface ActivitySummary {\n  recency: number;\n  count: number;\n  'notify-count': number;\n  notify: boolean;\n  unread: UnreadPoint | null;\n  'recency-uv'?: string;\n}\n\nexport interface ActivitySummaryFull extends ActivitySummary {\n  reads: Reads;\n  children: string[];\n}\n\nexport interface ActivityBundle {\n  source: Source;\n  latest: string;\n  events: { event: ActivityEvent; time: string }[];\n  'source-key': string;\n}\n\nexport interface ActivityFeed {\n  feed: ActivityBundle[];\n  summaries: Activity;\n}\n\nexport type InitActivityFeeds = {\n  all: ActivityBundle[];\n  mentions: ActivityBundle[];\n  replies: ActivityBundle[];\n  summaries: Activity;\n};\n\nexport type Activity = Record<string, ActivitySummary>;\n\nexport type Indices = Record<string, IndexData>;\n\nexport type Stream = Record<string, ActivityEvent>;\n\nexport type VolumeMap = Partial<Record<ExtendedEventType, Volume>>;\n\nexport type ReadAction =\n  | { event: ActivityIncomingEvent }\n  | { item: string }\n  | { all: { time: string | null; deep: boolean } };\n\nexport interface ActivityReadAction {\n  source: Source;\n  action: ReadAction;\n}\n\nexport interface ActivityVolumeAction {\n  source: Source;\n  volume: VolumeMap | null;\n}\n\nexport type PushNotificationsSetting = 'all' | 'some' | 'none';\n\nexport type ActivityAction =\n  | { add: ActivityIncomingEvent }\n  | { del: Source }\n  | { read: ActivityReadAction }\n  | { adjust: ActivityVolumeAction }\n  | { 'clear-group-invites': null }\n  | { 'allow-notifications': PushNotificationsSetting };\n\nexport interface ActivitySummaryUpdate {\n  activity: Activity;\n}\n\nexport interface ActivityReadUpdate {\n  read: {\n    source: Source;\n    activity: ActivitySummary;\n  };\n}\n\nexport interface ActivityVolumeUpdate {\n  adjust: {\n    source: Source;\n    volume: VolumeMap | null;\n  };\n}\n\nexport interface ActivityAddUpdate {\n  add: {\n    ['source-key']: string;\n    source: Source;\n    time: string;\n    event: ActivityEvent;\n  };\n}\n\nexport interface ActivityDeleteUpdate {\n  del: Source;\n}\n\nexport interface ActivityPushNotificationsSettingUpdate {\n  'allow-notifications': PushNotificationsSetting;\n}\n\nexport type ActivityUpdate =\n  | ActivityReadUpdate\n  | ActivitySummaryUpdate\n  | ActivityVolumeUpdate\n  | ActivityDeleteUpdate\n  | ActivityAddUpdate\n  | ActivityPushNotificationsSettingUpdate;\n\nexport interface FullActivity {\n  indices: Indices;\n  activity: Activity;\n}\n\nexport type VolumeSettings = Record<string, VolumeMap | null>;\n\nexport function sourceToString(source: Source, stripPrefix = false): string {\n  if ('thread' in source) {\n    const key = `${source.thread.channel}/${source.thread.key.time}`;\n    return stripPrefix ? key : `thread/${key}`;\n  }\n\n  if ('dm-thread' in source) {\n    const prefix = sourceToString({ dm: source['dm-thread'].whom }, true);\n    const key = `${prefix}/${source['dm-thread'].key.id}`;\n    return stripPrefix ? key : `dm-thread/${key}`;\n  }\n\n  if ('channel' in source) {\n    return stripPrefix ? source.channel.nest : `channel/${source.channel.nest}`;\n  }\n\n  if ('group' in source) {\n    return stripPrefix ? source.group : `group/${source.group}`;\n  }\n\n  if ('dm' in source) {\n    if ('ship' in source.dm) {\n      return stripPrefix ? source.dm.ship : `ship/${source.dm.ship}`;\n    }\n\n    return stripPrefix ? source.dm.club : `club/${source.dm.club}`;\n  }\n\n  if ('base' in source) {\n    return 'base';\n  }\n\n  throw new Error('Invalid activity source');\n}\n\nconst onEvents: ExtendedEventType[] = [\n  'dm-reply',\n  'post-mention',\n  'reply-mention',\n  'dm-invite',\n  'dm-post',\n  'dm-post-mention',\n  'dm-reply',\n  'dm-reply-mention',\n  'group-ask',\n  'group-invite',\n  'flag-post',\n  'flag-reply',\n];\n\nconst notifyOffEvents: ExtendedEventType[] = [\n  'reply',\n  'group-join',\n  'group-kick',\n  'group-role',\n];\n\nconst allEvents: ExtendedEventType[] = [\n  'post',\n  'post-mention',\n  'reply',\n  'reply-mention',\n  'dm-invite',\n  'dm-post',\n  'dm-post-mention',\n  'dm-reply',\n  'dm-reply-mention',\n  'group-ask',\n  'group-join',\n  'group-kick',\n  'group-invite',\n  'group-role',\n  'flag-post',\n  'flag-reply',\n];\n\nexport function getUnreadsFromVolumeMap(vmap: VolumeMap): boolean {\n  return _.some(vmap, (v) => !!v?.unreads);\n}\n\nexport function getLevelFromVolumeMap(vmap: VolumeMap): NotificationLevel {\n  const entries = Object.entries(vmap) as [ExtendedEventType, Volume][];\n  if (_.every(entries, ([, v]) => v.notify)) {\n    return 'loud';\n  }\n\n  if (_.every(entries, ([, v]) => !v.notify)) {\n    return 'hush';\n  }\n\n  let isDefault = true;\n  entries.forEach(([k, v]) => {\n    if (onEvents.concat('post').includes(k) && !v.notify) {\n      isDefault = false;\n    }\n\n    if (notifyOffEvents.includes(k) && v.notify) {\n      isDefault = false;\n    }\n  });\n\n  if (isDefault) {\n    return 'medium';\n  }\n\n  return 'soft';\n}\n\nexport function getVolumeMap(\n  level: NotificationLevel,\n  unreads: boolean\n): VolumeMap {\n  const emptyMap: VolumeMap = {};\n  if (level === 'loud') {\n    return allEvents.reduce((acc, e) => {\n      acc[e] = { unreads, notify: true };\n      return acc;\n    }, emptyMap);\n  }\n\n  if (level === 'hush') {\n    return allEvents.reduce((acc, e) => {\n      acc[e] = { unreads, notify: false };\n      return acc;\n    }, {} as VolumeMap);\n  }\n\n  return allEvents.reduce((acc, e) => {\n    if (onEvents.includes(e)) {\n      acc[e] = { unreads, notify: true };\n    }\n\n    if (notifyOffEvents.includes(e)) {\n      acc[e] = { unreads, notify: false };\n    }\n\n    if (e === 'post') {\n      acc[e] = { unreads, notify: level === 'medium' || level === 'default' };\n    }\n\n    return acc;\n  }, emptyMap);\n}\n\nexport function getDefaultVolumeOption(\n  source: Source,\n  settings: VolumeSettings,\n  group?: string\n): { label: string; volume: NotificationLevel } {\n  const def = 'Use default setting';\n  if ('base' in source) {\n    return {\n      label: def,\n      volume: 'default',\n    };\n  }\n\n  const base: NotificationLevel = settings.base\n    ? getLevelFromVolumeMap(settings.base)\n    : 'default';\n  if ('group' in source || 'dm' in source) {\n    return {\n      label: def,\n      volume: base,\n    };\n  }\n\n  if ('channel' in source && group) {\n    const groupVolume = settings[`group/${group}`];\n    return {\n      label: groupVolume ? 'Use group default' : def,\n      volume: groupVolume ? getLevelFromVolumeMap(groupVolume) : base,\n    };\n  }\n\n  if ('thread' in source) {\n    const channelVolume = settings[`channel/${source.thread.channel}`];\n    return channelVolume\n      ? {\n          label: 'Use channel default',\n          volume: getLevelFromVolumeMap(channelVolume),\n        }\n      : getDefaultVolumeOption(\n          {\n            channel: {\n              nest: source.thread.channel,\n              group: source.thread.group,\n            },\n          },\n          settings,\n          group\n        );\n  }\n\n  if ('dm-thread' in source) {\n    const index = sourceToString({ dm: source['dm-thread'].whom });\n    const dmVolume = settings[index];\n    return dmVolume\n      ? { label: 'Use DM default', volume: getLevelFromVolumeMap(dmVolume) }\n      : getDefaultVolumeOption({ dm: source['dm-thread'].whom }, settings);\n  }\n\n  return {\n    label: def,\n    volume: 'default',\n  };\n}\n\nexport function stripSourcePrefix(source: string) {\n  if (source === 'base') {\n    return source;\n  }\n\n  return source.replace(/^[-\\w]*\\//, '');\n}\n\nexport function stripPrefixes(unreads: Activity) {\n  return _.mapKeys(unreads, (v, k) => stripSourcePrefix(k));\n}\n\nexport function onlyChats(unreads: Activity) {\n  return _.pickBy(\n    unreads,\n    (v, k) => k.startsWith('chat/') || whomIsDm(k) || whomIsMultiDm(k)\n  );\n}\n\nexport function getChannelSource(group: string, channel: string) {\n  return { channel: { nest: channel, group } };\n}\n\nexport function getDmSource(id: string) {\n  return whomIsDm(id) ? { dm: { ship: id } } : { dm: { club: id } };\n}\n\nexport function getKey(whom: string) {\n  return whomIsFlag(whom)\n    ? `channel/chat/${whom}`\n    : whomIsDm(whom)\n      ? `ship/${whom}`\n      : `club/${whom}`;\n}\n\nexport function getThreadKey(whom: string, id: string) {\n  const prefix = whomIsFlag(whom) ? 'thread/chat' : 'dm-thread';\n  return `${prefix}/${whom}/${id}`;\n}\n\nexport const isMessage = (event: ActivityEvent) => {\n  return (\n    'post' in event ||\n    'reply' in event ||\n    'dm-post' in event ||\n    'dm-reply' in event\n  );\n};\n\nexport const isNote = (event: ActivityEvent) => {\n  if ('post' in event) {\n    return event.post.channel.startsWith('diary');\n  }\n\n  return false;\n};\n\nexport const isGalleryBlock = (event: ActivityEvent) => {\n  if ('post' in event) {\n    return event.post.channel.startsWith('heap');\n  }\n\n  return false;\n};\n\nexport const isMention = (event: ActivityEvent) => {\n  if ('post' in event) {\n    return event.post.mention;\n  }\n\n  if ('reply' in event) {\n    return event.reply.mention;\n  }\n\n  if ('dm-post' in event) {\n    return event['dm-post'].mention;\n  }\n\n  if ('dm-reply' in event) {\n    return event['dm-reply'].mention;\n  }\n\n  return false;\n};\n\nexport const isComment = (event: ActivityEvent) => {\n  if ('reply' in event) {\n    return (\n      event.reply.channel.startsWith('heap') ||\n      event.reply.channel.startsWith('diary')\n    );\n  }\n\n  return false;\n};\n\nexport const isReply = (event: ActivityEvent) => {\n  if ('dm-reply' in event) {\n    return true;\n  }\n\n  if ('reply' in event) {\n    return !isComment(event);\n  }\n\n  return false;\n};\n\nexport const isAsk = (event: ActivityEvent) => 'group-ask' in event;\n\nexport const isInvite = (event: ActivityEvent) => 'group-invite' in event;\n\nexport const isJoin = (event: ActivityEvent) => 'group-join' in event;\n\nexport const isLeave = (event: ActivityEvent) => 'group-leave' in event;\n\nexport const isRoleChange = (event: ActivityEvent) => 'group-role' in event;\n\nexport const isGroupMeta = (event: ActivityEvent) =>\n  isJoin(event) || isRoleChange(event) || isLeave(event);\n\nexport function getTop(bundle: ActivityBundle): ActivityEvent {\n  return bundle.events.find(({ time }) => time === bundle.latest)!.event;\n}\n\nexport function getSource(bundle: ActivityBundle): Source {\n  const top = getTop(bundle);\n  return getSourceForEvent(top);\n}\n\nexport function getSourceForEvent(event: ActivityEvent): Source {\n  if ('post' in event) {\n    return { channel: { nest: event.post.channel, group: event.post.group } };\n  }\n\n  if ('reply' in event) {\n    return {\n      thread: {\n        key: event.reply.parent,\n        channel: event.reply.channel,\n        group: event.reply.group,\n      },\n    };\n  }\n\n  if ('dm-invite' in event) {\n    return { dm: event['dm-invite'] };\n  }\n\n  if ('dm-post' in event) {\n    return { dm: event['dm-post'].whom };\n  }\n\n  if ('dm-reply' in event) {\n    return {\n      'dm-thread': {\n        key: event['dm-reply'].parent,\n        whom: event['dm-reply'].whom,\n      },\n    };\n  }\n\n  if ('group-ask' in event) {\n    return { group: event['group-ask'].group };\n  }\n\n  if ('group-join' in event) {\n    return { group: event['group-join'].group };\n  }\n\n  if ('group-role' in event) {\n    return { group: event['group-role'].group };\n  }\n\n  if ('group-kick' in event) {\n    return { group: event['group-kick'].group };\n  }\n\n  if ('group-invite' in event) {\n    return { group: event['group-invite'].group };\n  }\n\n  if ('flag-post' in event) {\n    return {\n      group: event['flag-post'].group,\n    };\n  }\n\n  if ('flag-reply' in event) {\n    return {\n      group: event['flag-reply'].group,\n    };\n  }\n\n  return { base: null };\n}\n\nexport function getContent(event: ActivityEvent) {\n  if ('post' in event) {\n    return event.post.content;\n  }\n\n  if ('reply' in event) {\n    return event.reply.content;\n  }\n\n  if ('dm-post' in event) {\n    return event['dm-post'].content;\n  }\n\n  if ('dm-reply' in event) {\n    return event['dm-reply'].content;\n  }\n\n  return undefined;\n}\n\nexport function getIdParts(id: string): { author: string; sent: number } {\n  const [author, sentStr] = id.split('/');\n  return {\n    author,\n    sent: da.toUnix(parseIdNumber(sentStr)),\n  };\n}\n\nexport function getAuthor(event: ActivityEvent) {\n  if ('post' in event) {\n    return getIdParts(event.post.key.id).author;\n  }\n\n  if ('reply' in event) {\n    return getIdParts(event.reply.key.id).author;\n  }\n\n  if ('dm-post' in event) {\n    return getIdParts(event['dm-post'].key.id).author;\n  }\n\n  if ('dm-reply' in event) {\n    return getIdParts(event['dm-reply'].key.id).author;\n  }\n\n  if ('flag-post' in event) {\n    return getIdParts(event['flag-post'].key.id).author;\n  }\n\n  if ('flag-reply' in event) {\n    return getIdParts(event['flag-reply'].key.id).author;\n  }\n\n  if ('group-ask' in event) {\n    return event['group-ask'].ship;\n  }\n\n  return undefined;\n}\n\nexport function getChannelKind(event: PostEvent | ReplyEvent): Kind {\n  const channel = 'post' in event ? event.post.channel : event.reply.channel;\n  const [channelType] = nestToFlag(channel);\n  return channelType;\n}\n\nexport type ActivityRelevancy =\n  | 'mention'\n  | 'involvedThread'\n  | 'replyToGalleryOrNote'\n  | 'replyToChatPost'\n  | 'dm'\n  | 'groupchat'\n  | 'postInYourChannel'\n  | 'postToChannel'\n  | 'groupMeta'\n  | 'flaggedPost'\n  | 'flaggedReply'\n  | 'groupJoinRequest';\n\nexport function getRelevancy(\n  event: ActivityEvent,\n  us: string\n): ActivityRelevancy {\n  if (isMention(event)) {\n    return 'mention';\n  }\n\n  if ('dm-post' in event && 'ship' in event['dm-post'].whom) {\n    return 'dm';\n  }\n\n  if ('dm-post' in event && 'club' in event['dm-post'].whom) {\n    return 'groupchat';\n  }\n\n  if ('reply' in event && event.reply.parent.id.includes(us)) {\n    const channelType = getChannelKind(event);\n    if (channelType === 'heap' || channelType === 'diary') {\n      return 'replyToGalleryOrNote';\n    }\n\n    return 'replyToChatPost';\n  }\n\n  if ('post' in event && event.post.channel.includes(`/${us}/`)) {\n    return 'postInYourChannel';\n  }\n\n  if ('reply' in event && event.notified) {\n    return 'involvedThread';\n  }\n\n  if ('post' in event && event.notified) {\n    return 'postToChannel';\n  }\n\n  if ('flag-post' in event) {\n    return 'flaggedPost';\n  }\n\n  if ('flag-reply' in event) {\n    return 'flaggedReply';\n  }\n\n  if ('group-ask' in event) {\n    return 'groupJoinRequest';\n  }\n\n  console.log(\n    'Unknown relevancy type for activity summary. Defaulting to involvedThread.',\n    event\n  );\n  return 'involvedThread';\n}\n\nexport namespace ActivityIncomingEvent {\n  /**\n   * Helper for building exhaustive checks:\n   * ```ts\n   * declare const event: ActivityIncomingEvent;\n   * switch (true) {\n   * case is(event, \"dm-post\"):\n   *   // `event` is typed as `DmPostEvent`\n   *   return event['dm-post'].content;\n   *\n   * // TS should complain about missing cases until you add all of them\n   * }\n   * ```\n   */\n  export function is<\n    K extends keyof UnionToIntersection<ActivityIncomingEvent>,\n  >(\n    poly: ActivityIncomingEvent,\n    type: K\n  ): // @ts-expect-error - hey, I'm asserting here!\n  poly is Pick<UnionToIntersection<ActivityIncomingEvent>, K> {\n    return type in poly;\n  }\n}\n","/**\n * Assert that the argument is typed as `never`. Use to assert exhaustiveness\n * in cases that Typescript can't handle.\n *\n * ```ts\n * const x: string | number = 1;\n * switch (true) {\n *   case typeof x === 'string': return x;\n *   case typeof x === 'number': return 'number';\n *   default: return assertNever(x);\n * }\n * ```\n */\nexport function assertNever<T>(x: never): T {\n  throw new Error(`Unexpected case: ${x}`);\n}\n","export async function readArrayBufferFromBlob(\n  blob: Blob\n): Promise<ArrayBuffer> {\n  return await new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => resolve(reader.result as ArrayBuffer);\n    reader.onerror = reject;\n    reader.readAsArrayBuffer(blob);\n  });\n}\n","interface ManualAbortSignal extends AbortSignal {\n  cleanup: () => void;\n}\n\nexport function createTimeoutSignal(ms: number): ManualAbortSignal {\n  const controller = new AbortController();\n  const signal = controller.signal;\n\n  const timeout = setTimeout(() => {\n    controller.abort();\n  }, ms);\n\n  // Clean up the timeout if signal is aborted from elsewhere\n  signal.addEventListener(\n    'abort',\n    () => {\n      clearTimeout(timeout);\n    },\n    { once: true }\n  );\n\n  (signal as ManualAbortSignal).cleanup = () => {\n    clearTimeout(timeout);\n  };\n\n  return signal as ManualAbortSignal;\n}\n","type AnyEventMap = {\n  [key: string | symbol | number]: (...args: any[]) => void;\n};\n\nexport type EventMapForEmitter<Emitter extends EventEmitter> =\n  Emitter extends EventEmitter<infer M> ? M : never;\n\nexport class EventEmitter<EventMap extends AnyEventMap = AnyEventMap> {\n  private listeners: Partial<{\n    [E in keyof EventMap]: Array<EventMap[E]>;\n  }> = {};\n\n  on<E extends keyof EventMap>(event: E, callback: EventMap[E]) {\n    if (!(event in this.listeners)) {\n      this.listeners[event] = [];\n    }\n\n    this.listeners[event]!.push(callback);\n\n    return this;\n  }\n\n  off<E extends keyof EventMap>(event: E, callback: EventMap[E]) {\n    if (!(event in this.listeners)) {\n      return;\n    }\n    const index = this.listeners[event]!.findIndex((cb) => cb === callback);\n    if (index !== -1) {\n      this.listeners[event]!.splice(index, 1);\n    }\n    return this;\n  }\n\n  emit<E extends keyof EventMap>(event: E, ...data: Parameters<EventMap[E]>) {\n    if (!(event in this.listeners)) {\n      return;\n    }\n\n    for (let i = 0; i < this.listeners[event]!.length; i++) {\n      const callback = this.listeners[event]![i];\n      callback.apply(this, data);\n    }\n  }\n}\n","import { Noun } from '@urbit/nockjs';\n\n/**\n * An urbit style path, rendered as a Javascript string\n * @example\n * `\"/updates\"`\n */\nexport type Path = string;\n\n/**\n * @p including leading sig, rendered as a string\n *\n * @example\n * ```typescript\n * \"~sampel-palnet\"\n * ```\n *\n */\nexport type Patp = string;\n\n/**\n * @p not including leading sig, rendered as a string\n *\n * @example\n * ```typescript\n * \"sampel-palnet\"\n * ```\n *\n */\nexport type PatpNoSig = string;\n\n/**\n * The name of a clay mark, as a string\n *\n * @example\n * ```typescript\n * \"graph-update\"\n * ```\n */\nexport type Mark = string;\n\n/**\n * The name of a gall agent, as a string\n *\n * @example\n *\n * ```typescript\n * \"graph-store\"\n * ```\n */\nexport type GallAgent = string;\n\n/**\n * Description of an outgoing poke\n *\n * @typeParam Action - Typescript type of the data being poked\n */\nexport interface Poke<Action> {\n  /**\n   * Ship to poke. If left empty, the api lib will populate it with the ship that it is connected to.\n   *\n   * @remarks\n   *\n   * This should always be the ship that you are connected to\n   *\n   */\n  ship?: PatpNoSig;\n  /**\n   */\n  app: GallAgent;\n  /**\n   * Mark of the cage to be poked\n   *\n   */\n  mark: Mark;\n  /**\n   * Vase of the cage of to be poked, as JSON\n   */\n  json: Action;\n}\n\nexport interface NounPoke {\n  /**\n   * Ship to poke. If left empty, the api lib will populate it with the ship that it is connected to.\n   *\n   * @remarks\n   *\n   * This should always be the ship that you are connected to\n   *\n   */\n  ship?: PatpNoSig;\n  /**\n   */\n  app: GallAgent;\n  /**\n   * Mark of the cage to be poked\n   *\n   */\n  mark: Mark;\n\n  noun: Noun;\n  onError?: (e: Noun) => void;\n}\n\n/**\n * Description of a scry request\n */\nexport interface Scry {\n  /** {@inheritDoc GallAgent} */\n  app: GallAgent;\n  /** {@inheritDoc Path} */\n  path: Path;\n  /** {@inheritDoc Timeout} */\n  timeout?: number;\n}\n\n/**\n * Description of a thread request\n *\n * @typeParam Action - Typescript type of the data being poked\n */\nexport interface Thread<Action> {\n  /**\n   * The mark of the input vase\n   */\n  inputMark: Mark;\n  /**\n   * The mark of the output vase\n   */\n  outputMark: Mark;\n  /**\n   * Name of the thread\n   *\n   * @example\n   * ```typescript\n   * \"graph-add-nodes\"\n   * ```\n   */\n  threadName: string;\n  /**\n   * Desk of thread\n   */\n  desk?: string;\n  /**\n   * Data of the input vase\n   */\n  body: Action;\n\n  timeout?: number;\n}\n\nexport type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete';\n\nexport interface PokeHandlers {\n  onSuccess?: () => void;\n  onError?: (e: any) => void;\n}\n\nexport type PokeInterface<T> = PokeHandlers & Poke<T>;\nexport type NounPokeInterface = PokeHandlers & NounPoke;\n\nexport interface AuthenticationInterface {\n  ship: string;\n  url: string;\n  code: string;\n  verbose?: boolean;\n}\n\n/**\n * Subscription event handlers\n *\n */\nexport interface SubscriptionInterface {\n  /**\n   * Handle negative %watch-ack\n   */\n  err?(error: any, id: string): void;\n  /**\n   * Handle %fact\n   */\n  event?(data: any, mark: string, id: number): void;\n  /**\n   * Handle %kick\n   */\n  quit?(data: any): void;\n}\n\nexport type OnceSubscriptionErr = 'quit' | 'nack' | 'timeout';\n\nexport interface SubscriptionRequestInterface extends SubscriptionInterface {\n  /**\n   * The app to subscribe to\n   * @example\n   * `\"graph-store\"`\n   */\n  app: GallAgent;\n  /**\n   * The path to which to subscribe\n   * @example\n   * `\"/keys\"`\n   */\n  path: Path;\n  /**\n   * Whether to resubscribe this exact subscription on quit\n   */\n  resubOnQuit?: boolean;\n  ship?: string;\n}\n\nexport interface headers {\n  'Content-Type': string;\n  Cookie?: string;\n}\n\nexport interface CustomEventHandler {\n  (data: any, response: string): void;\n}\n\nexport interface SSEOptions {\n  headers: {\n    Cookie?: string;\n  };\n  withCredentials?: boolean;\n}\n\nexport interface Ack extends Record<string, any> {\n  action: Action;\n  'event-id': number;\n}\n\nexport interface Message extends Record<string, any> {\n  action: Action;\n  id: number;\n}\n\nexport class ResumableError extends Error {}\n\nexport class FatalError extends Error {}\n\nexport class ReapError extends Error {}\n\nexport class AuthError extends Error {}\n\nexport class SSETimeoutError extends Error {}\n\nexport class SSEBadResponseError extends Error {\n  public status: number;\n  public text?: string;\n  constructor(message: string, status: number, text?: string) {\n    super(message);\n    this.status = status;\n    this.text = text;\n  }\n}\n","/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\nexport interface EventSourceMessage {\n  /** The event ID to set the EventSource object's last event ID value. */\n  id: string;\n  /** A string identifying the type of event described. */\n  event: string;\n  /** The event data */\n  data: string;\n  /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n  retry?: number;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n  stream: ReadableStream<Uint8Array>,\n  onChunk: (arr: Uint8Array) => void,\n  responseTimeout?: number\n) {\n  const reader = stream.getReader();\n  let result: ReadableStreamReadResult<Uint8Array> = {\n    done: false,\n    value: new Uint8Array(),\n  };\n\n  while (result && !result.done) {\n    result = await Promise.race([\n      reader.read(),\n      new Promise<ReadableStreamReadResult<Uint8Array>>((_, reject) => {\n        setTimeout(\n          () => reject(new Error('getBytes timed out')),\n          responseTimeout\n        );\n      }),\n    ]);\n\n    if (!result.value) {\n      // empty chunk, skip it\n      console.warn('Empty chunk received from server');\n      continue;\n    }\n\n    try {\n      onChunk(result.value);\n    } catch (err) {\n      console.error('Error processing chunk:', err);\n    }\n  }\n}\n\nconst enum ControlChars {\n  NewLine = 10,\n  CarriageReturn = 13,\n  Space = 32,\n  Colon = 58,\n}\n\n/**\n * Parses arbitary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n  onLine: (line: Uint8Array, fieldLength: number) => void\n) {\n  let buffer: Uint8Array | undefined;\n  let position: number; // current read position\n  let fieldLength: number; // length of the `field` portion of the line\n  let discardTrailingNewline = false;\n\n  // return a function that can process each incoming byte chunk:\n  return function onChunk(arr: Uint8Array) {\n    if (buffer === undefined) {\n      buffer = arr;\n      position = 0;\n      fieldLength = -1;\n    } else {\n      // we're still parsing the old line. Append the new bytes into buffer:\n      buffer = concat(buffer, arr);\n    }\n\n    const bufLength = buffer.length;\n    let lineStart = 0; // index where the current line starts\n    while (position < bufLength) {\n      if (discardTrailingNewline) {\n        if (buffer[position] === ControlChars.NewLine) {\n          lineStart = ++position; // skip to next char\n        }\n\n        discardTrailingNewline = false;\n      }\n\n      // start looking forward till the end of line:\n      let lineEnd = -1; // index of the \\r or \\n char\n      for (; position < bufLength && lineEnd === -1; ++position) {\n        switch (buffer[position]) {\n          case ControlChars.Colon:\n            if (fieldLength === -1) {\n              // first colon in line\n              fieldLength = position - lineStart;\n            }\n            break;\n          case ControlChars.CarriageReturn:\n            discardTrailingNewline = true;\n          // eslint-disable-next-line no-fallthrough\n          case ControlChars.NewLine:\n            lineEnd = position;\n            break;\n        }\n      }\n\n      if (lineEnd === -1) {\n        // We reached the end of the buffer but the line hasn't ended.\n        // Wait for the next arr and then continue parsing:\n        break;\n      }\n\n      // we've reached the line end, send it out:\n      onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n      lineStart = position; // we're now on the next line\n      fieldLength = -1;\n    }\n\n    if (lineStart === bufLength) {\n      buffer = undefined; // we've finished reading it\n    } else if (lineStart !== 0) {\n      // Create a new view into buffer beginning at lineStart so we don't\n      // need to copy over the previous lines when we get the new arr:\n      buffer = buffer.subarray(lineStart);\n      position -= lineStart;\n    }\n  };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n  onMessage?: (msg: EventSourceMessage) => void,\n  onId?: (id: string) => void,\n  onRetry?: (retry: number) => void\n) {\n  let message = newMessage();\n  const decoder = new TextDecoder();\n\n  // return a function that can process each incoming line buffer:\n  return function onLine(line: Uint8Array, fieldLength: number) {\n    if (line.length === 0) {\n      // empty line denotes end of message. Trigger the callback and start a new message:\n      onMessage?.(message);\n      message = newMessage();\n    } else if (fieldLength > 0) {\n      // exclude comments and lines with no values\n      // line is of format \"<field>:<value>\" or \"<field>: <value>\"\n      // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n      const field = decoder.decode(line.subarray(0, fieldLength));\n      const valueOffset =\n        fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n      const value = decoder.decode(line.subarray(valueOffset));\n\n      switch (field) {\n        case 'data':\n          // if this message already has data, append the new value to the old.\n          // otherwise, just set to the new value:\n          message.data = message.data ? message.data + '\\n' + value : value; // otherwise,\n          break;\n        case 'event':\n          message.event = value;\n          break;\n        case 'id':\n          message = newMessage();\n          onId?.((message.id = value));\n          break;\n        case 'retry':\n          // eslint-disable-next-line no-case-declarations\n          const retry = parseInt(value, 10);\n          if (!isNaN(retry)) {\n            // per spec, ignore non-integers\n            onRetry?.((message.retry = retry));\n          }\n          break;\n      }\n    }\n  };\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n  const res = new Uint8Array(a.length + b.length);\n  res.set(a);\n  res.set(b, a.length);\n  return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n  // data, event, and id must be initialized to empty strings:\n  // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n  // retry should be initialized to undefined so we return a consistent shape\n  // to the js engine all the time: https://mathiasbynens.be/notes/shapes-ics#takeaways\n  return {\n    data: '',\n    event: '',\n    id: '',\n    retry: undefined,\n  };\n}\n","import {\n  FatalError,\n  ReapError,\n  SSEBadResponseError,\n  SSETimeoutError,\n} from '../types';\nimport { EventSourceMessage, getBytes, getLines, getMessages } from './parse';\n\nexport const EventStreamContentType = 'text/event-stream';\n\nconst DefaultRetryInterval = 1000;\nconst LastEventId = 'last-event-id';\n\nexport interface FetchEventSourceInit extends RequestInit {\n  /**\n   * The request headers. FetchEventSource only supports the Record<string,string> format.\n   */\n  headers?: Record<string, string>;\n\n  /**\n   * Called when a response is received. Use this to validate that the response\n   * actually matches what you expect (and throw if it doesn't.) If not provided,\n   * will default to a basic validation to ensure the content-type is text/event-stream.\n   */\n  onopen?: (response: Response, reconnection: boolean) => Promise<void>;\n\n  /**\n   * Called when a message is received. NOTE: Unlike the default browser\n   * EventSource.onmessage, this callback is called for _all_ events,\n   * even ones with a custom `event` field.\n   */\n  onmessage?: (ev: EventSourceMessage) => void;\n\n  /**\n   * Called when a response finishes. If you don't expect the server to kill\n   * the connection, you can throw an exception here and retry using onerror.\n   */\n  onclose?: () => void;\n\n  /**\n   * Called when there is any error making the request / processing messages /\n   * handling callbacks etc. Use this to control the retry strategy: if the\n   * error is fatal, rethrow the error inside the callback to stop the entire\n   * operation. Otherwise, you can return an interval (in milliseconds) after\n   * which the request will automatically retry (with the last-event-id).\n   * If this callback is not specified, or it returns undefined, fetchEventSource\n   * will treat every error as retriable and will try again after 1 second.\n   */\n  onerror?: (err: any) => number | null | undefined | void;\n\n  /**\n   * If true, will keep the request open even if the document is hidden.\n   * By default, fetchEventSource will close the request and reopen it\n   * automatically when the document becomes visible again.\n   */\n  openWhenHidden?: boolean;\n\n  /** The Fetch function to use. Defaults to window.fetch */\n  fetch?: typeof fetch;\n\n  /** How many millisedonds to wait for bytes before timing out */\n  responseTimeout?: number;\n}\n\nexport function fetchEventSource(\n  input: RequestInfo,\n  {\n    signal: inputSignal,\n    headers: inputHeaders,\n    onopen: inputOnOpen,\n    onmessage,\n    onclose,\n    onerror,\n    openWhenHidden,\n    fetch: inputFetch,\n    responseTimeout,\n    ...rest\n  }: FetchEventSourceInit\n) {\n  return new Promise<void>((resolve, reject) => {\n    // make a copy of the input headers since we may modify it below:\n    const headers = { ...inputHeaders };\n    if (!headers.accept) {\n      headers.accept = EventStreamContentType;\n    }\n\n    let curRequestController: AbortController;\n    function onVisibilityChange() {\n      curRequestController.abort(); // close existing request on every visibility change\n      if (!document.hidden) {\n        create(); // page is now visible again, recreate request.\n      }\n    }\n\n    if (typeof document !== 'undefined' && !openWhenHidden) {\n      document.addEventListener('visibilitychange', onVisibilityChange);\n    }\n\n    let retryInterval = DefaultRetryInterval;\n    let retryTimer: ReturnType<typeof setTimeout>;\n    function dispose() {\n      if (typeof document !== 'undefined' && !openWhenHidden) {\n        document.removeEventListener('visibilitychange', onVisibilityChange);\n      }\n      clearTimeout(retryTimer);\n      curRequestController.abort();\n    }\n\n    // if the incoming signal aborts, dispose resources and resolve:\n    inputSignal?.addEventListener('abort', () => {\n      dispose();\n      resolve(); // don't waste time constructing/logging errors\n    });\n\n    const fetchFn = inputFetch ?? fetch;\n    const onopen = inputOnOpen ?? defaultOnOpen;\n    let isReconnect = false;\n    async function create() {\n      curRequestController = new AbortController();\n      try {\n        const response = (await Promise.race([\n          fetchFn(input, {\n            ...rest,\n            headers,\n            signal: curRequestController.signal,\n          }),\n          new Promise((_, reject) => {\n            setTimeout(\n              () => reject(new SSETimeoutError('Request timed out')),\n              responseTimeout\n            );\n          }),\n        ])) as Response;\n\n        if (response.status === 404) {\n          dispose();\n          onerror?.(new ReapError('Channel reaped'));\n          resolve();\n          return;\n        } else if (response.status === 500) {\n          dispose();\n          onerror?.(new SSEBadResponseError('Server error', 500));\n          resolve();\n          return;\n        }\n\n        if (response.status < 200 || response.status >= 300) {\n          throw new SSEBadResponseError(\n            'Invalid server response',\n            response.status\n          );\n        }\n\n        await onopen(response, isReconnect);\n        // reset reconnect status\n        if (isReconnect) {\n          isReconnect = false;\n        }\n\n        await getBytes(\n          response.body!,\n          getLines(\n            getMessages(\n              onmessage,\n              (id) => {\n                if (id) {\n                  // store the id and send it back on the next retry:\n                  headers[LastEventId] = id;\n                } else {\n                  // don't send the last-event-id header anymore:\n                  delete headers[LastEventId];\n                }\n              },\n              (retry) => {\n                retryInterval = retry;\n              }\n            )\n          ),\n          responseTimeout\n        );\n\n        onclose?.();\n        dispose();\n        resolve();\n      } catch (err) {\n        if (!curRequestController.signal.aborted) {\n          // if we haven't aborted the request ourselves:\n          try {\n            isReconnect = true;\n            // check if we need to retry:\n            curRequestController.abort();\n            const interval: any = onerror?.(err) ?? retryInterval;\n            clearTimeout(retryTimer);\n            retryTimer = setTimeout(create, interval);\n          } catch (innerErr) {\n            // we should not retry anymore:\n            dispose();\n            reject(innerErr);\n          }\n        }\n      }\n    }\n\n    create();\n  });\n}\n\nfunction defaultOnOpen(response: Response) {\n  const contentType = response.headers.get('content-type');\n  if (!contentType?.startsWith(EventStreamContentType)) {\n    throw new Error(\n      `Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`\n    );\n  }\n}\n","import { Atom, Noun, cue, jam } from '@urbit/nockjs';\n\nexport function camelize(str: string) {\n  return str\n    .replace(/\\s(.)/g, function ($1: string) {\n      return $1.toUpperCase();\n    })\n    .replace(/\\s/g, '')\n    .replace(/^(.)/, function ($1: string) {\n      return $1.toLowerCase();\n    });\n}\n\nexport function uncamelize(str: string, separator = '-') {\n  // Replace all capital letters by separator followed by lowercase one\n  str = str.replace(/[A-Z]/g, function (letter: string) {\n    return separator + letter.toLowerCase();\n  });\n  return str.replace(new RegExp('^' + separator), '');\n}\n\nexport async function unpackJamBytes(buf: ArrayBuffer): Promise<Noun> {\n  const hex = [...new Uint8Array(buf)]\n    .reverse() //  endianness shenanigans\n    .map((x) => x.toString(16).padStart(2, '0'))\n    .join('');\n  return cue(Atom.fromString(hex, 16));\n}\n\nexport function packJamBytes(non: Noun): BodyInit {\n  return new Uint8Array(jam(non).bytes());\n}\n\n/**\n * Returns a hex string of given length.\n *\n * Poached from StackOverflow.\n *\n * @param len Length of hex string to return.\n */\nexport function hexString(len: number): string {\n  const maxlen = 8;\n  const min = Math.pow(16, Math.min(len, maxlen) - 1);\n  const max = Math.pow(16, Math.min(len, maxlen)) - 1;\n  const n = Math.floor(Math.random() * (max - min + 1)) + min;\n  let r = n.toString(16);\n  while (r.length < len) {\n    r = r + hexString(len - maxlen);\n  }\n  return r;\n}\n\n/**\n * Generates a random UID.\n *\n * Copied from https://github.com/urbit/urbit/blob/137e4428f617c13f28ed31e520eff98d251ed3e9/pkg/interface/src/lib/util.js#L3\n */\nexport function uid(): string {\n  let str = '0v';\n  str += Math.ceil(Math.random() * 8) + '.';\n  for (let i = 0; i < 5; i++) {\n    let _str = Math.ceil(Math.random() * 10000000).toString(32);\n    _str = ('00000' + _str).substr(-5, 5);\n    str += _str + '.';\n  }\n  return str.slice(0, -1);\n}\n","import { parse, render } from '@urbit/aura';\nimport { Atom, Cell, Noun, dejs, enjs, jam } from '@urbit/nockjs';\nimport { isBrowser } from 'browser-or-node';\n\nimport { TimeoutError } from '../api';\nimport { createDevLogger } from '../debug';\nimport { desig } from '../urbit';\nimport { readArrayBufferFromBlob } from '../utils';\nimport * as utils from '../utils';\nimport { EventEmitter } from '../utils/EventEmitter';\nimport { UrbitHttpApiEvent, UrbitHttpApiEventType } from './events';\nimport {\n  EventSourceMessage,\n  FetchEventSourceInit,\n  fetchEventSource,\n} from './fetch-event-source';\nimport {\n  Ack,\n  AuthError,\n  AuthenticationInterface,\n  FatalError,\n  Message,\n  NounPoke,\n  NounPokeInterface,\n  PokeHandlers,\n  PokeInterface,\n  ReapError,\n  SSEBadResponseError,\n  SSEOptions,\n  SSETimeoutError,\n  Scry,\n  SubscriptionRequestInterface,\n  Thread,\n  headers,\n} from './types';\nimport { hexString, unpackJamBytes } from './utils';\n\nconst logger = createDevLogger('UrbitHttpApi', false);\n\n//TODO  move into nockjs utils\nfunction isNoun(a: any): a is Noun {\n  return a instanceof Atom || a instanceof Cell;\n}\n\ntype UrbitHttpApiEventMap = {\n  [E in keyof UrbitHttpApiEvent]: (event: UrbitHttpApiEvent[E]) => void;\n};\n\n/**\n * A class for interacting with an urbit ship, given its URL and code\n */\nexport class Urbit {\n  /**\n   * Event emitter for debugging, see events.ts for full list of events\n   */\n  private emitter = new EventEmitter<UrbitHttpApiEventMap>();\n\n  /**\n   * UID will be used for the channel: The current unix time plus a random hex string\n   */\n  private uid: string = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`;\n\n  /**\n   * lastEventId is an auto-updated index of which events have been *sent* over this channel.\n   * lastHeardEventId is the latest event we have heard back about.\n   * lastAcknowledgedEventId is the latest event we have sent an ack for.\n   */\n  private lastEventId: number = 0;\n  private lastHeardEventId: number = -1;\n  private lastAcknowledgedEventId: number = -1;\n\n  /**\n   * SSE Client is null for now; we don't want to start polling until it the channel exists\n   */\n  private sseClientInitialized: boolean = false;\n\n  /**\n   * Cookie gets set when we log in.\n   */\n  cookie?: string;\n\n  /**\n   * A registry of requestId to successFunc/failureFunc\n   *\n   * These functions are registered during a +poke and are executed\n   * in the onServerEvent()/onServerError() callbacks. Only one of\n   * the functions will be called, and the outstanding poke will be\n   * removed after calling the success or failure function.\n   */\n\n  private outstandingPokes: Map<number, PokeHandlers> = new Map();\n\n  /**\n   * A registry of requestId to subscription functions.\n   *\n   * These functions are registered during a +subscribe and are\n   * executed in the onServerEvent()/onServerError() callbacks. The\n   * event function will be called whenever a new piece of data on this\n   * subscription is available, which may be 0, 1, or many times. The\n   * disconnect function may be called exactly once.\n   */\n  private outstandingSubscriptions: Map<number, SubscriptionRequestInterface> =\n    new Map();\n\n  /**\n   * Our abort controller, used to close the connection\n   */\n  private channelAbort = new AbortController();\n\n  /**\n   * Identity of the ship we're connected to\n   */\n  nodeId?: string | null;\n\n  /**\n   * Our identity, with which we are authenticated into the ship\n   */\n  our?: string | null;\n\n  /**\n   * If verbose, logs output eagerly.\n   */\n  verbose?: boolean;\n\n  /**\n   * number of consecutive errors in connecting to the eventsource\n   */\n  private errorCount = 0;\n\n  /**\n   * Custom fetch implementation to use.\n   */\n  fetchFn: typeof fetch = (input: RequestInfo | URL, init?: RequestInit) => fetch(input, init);\n\n  /** This is basic interpolation to get the channel URL of an instantiated Urbit connection. */\n  private get channelUrl(): string {\n    return `${this.url}/~/channel/${this.uid}`;\n  }\n\n  private get fetchOptions(): any {\n    const headers: headers = {\n      'Content-Type': 'application/json',\n    };\n\n    // In Node.js, manually set cookie header\n    if (!isBrowser && this.cookie) {\n      headers['Cookie'] = this.cookie;\n    }\n\n    return {\n      credentials: isBrowser ? 'include' : undefined,\n      accept: '*',\n      headers,\n    };\n  }\n\n  private fetchOptionsNoun(\n    method: 'PUT' | 'GET' = 'PUT',\n    mode: 'noun' | 'json' = 'noun'\n  ): any {\n    let type;\n    switch (mode) {\n      case 'noun':\n        type = 'application/x-urb-jam';\n        break;\n      case 'json':\n        type = 'application/json';\n        break;\n    }\n    const headers: Record<string, string | undefined> = {};\n    switch (method) {\n      case 'PUT':\n        headers['Content-Type'] = type;\n        headers['Accept'] = type;\n        break;\n      case 'GET':\n        headers['X-Channel-Format'] = type;\n        break;\n    }\n    if (!isBrowser) {\n      headers.Cookie = this.cookie;\n    }\n    return {\n      credentials: 'include',\n      accept: '*',\n      headers,\n    };\n  }\n\n  /**\n   * Constructs a new Urbit connection.\n   *\n   * @param url  The URL (with protocol and port) of the ship to be accessed. If\n   * the airlock is running in a webpage served by the ship, this should just\n   * be the empty string.\n   * @param code The access code for the ship at that address\n   */\n  constructor(\n    public url: string,\n    public code?: string,\n    public desk?: string,\n    fetchFn?: typeof fetch\n  ) {\n    if (isBrowser) {\n      window.addEventListener('beforeunload', this.delete);\n    }\n    if (fetchFn) {\n      this.fetchFn = fetchFn;\n    }\n    return this;\n  }\n\n  /**\n   * All-in-one hook-me-up.\n   *\n   * Given a ship, url, and code, this returns an airlock connection\n   * that is ready to go. It `|hi`s itself to create the channel,\n   * then opens the channel via EventSource.\n   *\n   */\n  //TODO  rename this to connect() and only do constructor & event source setup.\n  //      that way it can be used with the assumption that you're already\n  //      authenticated.\n  static async authenticate({\n    ship,\n    url,\n    code,\n    verbose = false,\n  }: AuthenticationInterface) {\n    const airlock = new Urbit(\n      url.startsWith('http') ? url : `http://${url}`,\n      code\n    );\n    airlock.verbose = verbose;\n    airlock.nodeId = ship;\n    await airlock.connect();\n    await airlock.poke({\n      app: 'hood',\n      mark: 'helm-hi',\n      json: 'opening airlock',\n    });\n    await airlock.eventSource();\n    return airlock;\n  }\n\n  private emit<T extends UrbitHttpApiEventType>(\n    event: T,\n    ...data: Parameters<UrbitHttpApiEventMap[T]>\n  ) {\n    this.emitter.emit(event, ...data);\n  }\n\n  on<T extends keyof UrbitHttpApiEventMap>(\n    event: T,\n    callback: UrbitHttpApiEventMap[T]\n  ): void {\n    this.emitter.on(event, callback);\n\n    this.verbose && console.log(event, 'listening active');\n    if (event === 'init') {\n      this.emitter.emit('init', {\n        uid: this.uid,\n        subscriptions: [...this.outstandingSubscriptions.entries()].map(\n          ([k, v]) => ({ id: k, app: v.app, path: v.path })\n        ),\n      });\n    }\n  }\n\n  /**\n   * Gets the name of the ship accessible at this.url and stores it to this.ship\n   *\n   */\n  async getShipName(): Promise<void> {\n    if (this.nodeId) {\n      return Promise.resolve();\n    }\n\n    const nameResp = await this.fetchFn(`${this.url}/~/host`, {\n      method: 'get',\n      credentials: 'include',\n    });\n    const name = await nameResp.text();\n    this.nodeId = name;\n  }\n\n  /**\n   * Gets the name of the ship accessible at this.url and stores it to this.ship\n   *\n   */\n  async getOurName(): Promise<void> {\n    const headers: Record<string, string> = {};\n    if (!isBrowser && this.cookie) {\n      headers['Cookie'] = this.cookie;\n    }\n    const nameResp = await this.fetchFn(`${this.url}/~/name`, {\n      method: 'get',\n      credentials: 'include',\n      headers,\n    });\n    const name = await nameResp.text();\n    this.our = name;\n  }\n\n  /**\n   * Connects to the Urbit ship. Nothing can be done until this is called.\n   * That's why we roll it into this.authenticate\n   * TODO  as of urbit/urbit#6561, this is no longer true, and we are able\n   *       to interact with the ship using a guest identity.\n   */\n  //TODO  rename to authenticate() and call connect() at the end\n  async connect(): Promise<void> {\n    if (this.verbose) {\n      console.log(\n        `password=${this.code} `,\n        isBrowser\n          ? 'Connecting in browser context at ' + `${this.url}/~/login`\n          : 'Connecting from node context'\n      );\n    }\n    return this.fetchFn(`${this.url}/~/login`, {\n      method: 'post',\n      body: `password=${this.code}`,\n      credentials: 'include',\n    }).then(async (response: Response) => {\n      if (this.verbose) {\n        console.log('Received authentication response', response);\n      }\n      if (response.status < 200 || response.status >= 300) {\n        throw new Error('Login failed with status ' + response.status);\n      }\n      const cookie = response.headers.get('set-cookie');\n      if (!this.nodeId && cookie) {\n        const match = new RegExp(/urbauth-(~[\\w-]+)/).exec(cookie)?.[1];\n        this.nodeId = match;\n      }\n      if (!isBrowser) {\n        // Parse just the cookie key=value from Set-Cookie header.\n        // The header includes attributes like \"Path=/; Max-Age=...\" but\n        // we only want to send the actual cookie value in subsequent requests.\n        this.cookie = cookie?.split(';')[0].trim() || undefined;\n      }\n      await this.getShipName();\n      await this.getOurName();\n    });\n  }\n\n  /**\n   * Initializes the SSE pipe for the appropriate channel.\n   */\n  async eventSource(): Promise<void> {\n    if (this.sseClientInitialized) {\n      return Promise.resolve();\n    }\n    if (this.lastEventId === 0) {\n      this.emit('status-update', { status: 'opening' });\n      // Can't receive events until the channel is open,\n      // so poke and open then\n      await this.poke({\n        app: 'hood',\n        mark: 'helm-hi',\n        json: 'Opening API channel',\n      });\n      return;\n    }\n    this.sseClientInitialized = true;\n    return new Promise((resolve, reject) => {\n      const sseOptions: SSEOptions = {\n        headers: {},\n      };\n      if (isBrowser) {\n        sseOptions.withCredentials = true;\n      }\n      fetchEventSource(this.channelUrl, {\n        ...this.fetchOptions,\n        signal: this.channelAbort.signal,\n        reactNative: { textStreaming: true },\n        openWhenHidden: true,\n        responseTimeout: 25000,\n        fetch: this.fetchFn,\n        onopen: async (response, isReconnect) => {\n          if (this.verbose) {\n            console.log('Opened eventsource', response);\n          }\n          if (response.ok) {\n            this.errorCount = 0;\n            this.emit('status-update', {\n              status: isReconnect ? 'reconnected' : 'active',\n            });\n            resolve();\n            return; // everything's good\n          } else {\n            const err = new Error('failed to open eventsource');\n            reject(err);\n          }\n        },\n        onmessage: (event: EventSourceMessage) => {\n          if (this.verbose) {\n            console.log('Received SSE: ', event);\n          }\n          if (!event.id) return;\n          const eventId = parseInt(event.id, 10);\n          this.emit('fact', {\n            id: eventId,\n            data: event.data,\n            time: Date.now(),\n          });\n          if (eventId <= this.lastHeardEventId) {\n            if (this.verbose) {\n              console.log('dropping old or out-of-order event', {\n                eventId,\n                lastHeard: this.lastHeardEventId,\n              });\n            }\n            return;\n          }\n          this.lastHeardEventId = eventId;\n          this.emit('id-update', { lastHeard: this.lastHeardEventId });\n          if (eventId - this.lastAcknowledgedEventId > 20) {\n            this.ack(eventId);\n          }\n\n          if (event.data && JSON.parse(event.data)) {\n            const data: any = JSON.parse(event.data);\n\n            if (this.verbose) {\n              console.log(`received data`, data);\n            }\n\n            if (\n              data.response === 'poke' &&\n              this.outstandingPokes.has(data.id)\n            ) {\n              const funcs = this.outstandingPokes.get(data.id);\n              if ('ok' in data && funcs) {\n                funcs.onSuccess?.();\n              } else if ('err' in data && funcs) {\n                console.error(data.err);\n                funcs.onError?.(data.err);\n              } else {\n                console.error('Invalid poke response', data);\n              }\n              this.outstandingPokes.delete(data.id);\n            } else if (\n              data.response === 'subscribe' &&\n              this.outstandingSubscriptions.has(data.id)\n            ) {\n              const funcs = this.outstandingSubscriptions.get(data.id);\n              if ('err' in data && funcs) {\n                console.error(data.err);\n                funcs.err?.(data.err, data.id);\n                this.outstandingSubscriptions.delete(data.id);\n              }\n            } else if (\n              data.response === 'diff' &&\n              this.outstandingSubscriptions.has(data.id)\n            ) {\n              const funcs = this.outstandingSubscriptions.get(data.id);\n              try {\n                funcs?.event?.(data.json, data.mark ?? 'json', data.id);\n              } catch (e) {\n                console.error('Failed to call subscription event callback', e);\n              }\n            } else if (\n              data.response === 'quit' &&\n              this.outstandingSubscriptions.has(data.id)\n            ) {\n              const sub = this.outstandingSubscriptions.get(data.id);\n              sub?.quit?.(data);\n              this.outstandingSubscriptions.delete(data.id);\n              this.emit('subscription', {\n                id: data.id,\n                status: 'close',\n              });\n              if (sub?.resubOnQuit) {\n                this.subscribe(sub);\n              }\n            } else if (this.verbose) {\n              console.log([...this.outstandingSubscriptions.keys()]);\n              console.log('Unrecognized response', data);\n            }\n          }\n        },\n        onerror: (error) => {\n          this.errorCount++;\n          this.emit('error', {\n            time: Date.now(),\n            msg: JSON.stringify(error),\n            error,\n          });\n          if (error instanceof ReapError) {\n            this.emit('channel-reaped', { time: Date.now() });\n            this.seamlessReset();\n            return;\n          }\n          if (!(error instanceof FatalError)) {\n            const context: any = {};\n            if (error instanceof SSEBadResponseError) {\n              if (error.status === 500) {\n                this.seamlessReset();\n                return;\n              }\n              context.message = error.message;\n              context.requestStatus = error.status;\n            }\n            context.message = error.message;\n            this.emit('status-update', { status: 'reconnecting', context });\n            return Math.min(5000, Math.pow(2, this.errorCount - 1) * 750);\n          }\n          this.emit('status-update', { status: 'errored' });\n          throw error;\n        },\n        onclose: () => {\n          console.log('e');\n          throw new Error('Ship unexpectedly closed the connection');\n        },\n      });\n    });\n  }\n\n  /**\n   * Reset airlock, abandoning current subscriptions and wiping state\n   *\n   */\n  reset() {\n    if (this.verbose) {\n      console.log('resetting');\n    }\n    this.delete();\n    this.uid = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`;\n    this.emit('reset', { uid: this.uid });\n    this.lastEventId = 0;\n    this.lastHeardEventId = -1;\n    this.lastAcknowledgedEventId = -1;\n    this.outstandingSubscriptions = new Map();\n    this.outstandingPokes = new Map();\n    this.sseClientInitialized = false;\n  }\n\n  seamlessReset() {\n    // called if a channel was reaped by %eyre before we reconnected\n    // so we have to make a new channel.\n    this.uid = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`;\n    this.emit('seamless-reset', { uid: this.uid });\n    this.emit('status-update', { status: 'initial' });\n    this.sseClientInitialized = false;\n    this.lastEventId = 0;\n    this.lastHeardEventId = -1;\n    this.lastAcknowledgedEventId = -1;\n    const oldSubs = [...this.outstandingSubscriptions.entries()];\n    this.outstandingSubscriptions = new Map();\n    oldSubs.forEach(([id, sub]) => {\n      sub.quit?.({\n        id,\n        response: 'quit',\n      });\n      this.emit('subscription', {\n        id,\n        status: 'close',\n      });\n\n      if (sub.resubOnQuit) {\n        this.subscribe(sub);\n      }\n    });\n\n    this.outstandingPokes.forEach((poke, id) => {\n      poke.onError?.('Channel was reaped');\n    });\n    this.outstandingPokes = new Map();\n  }\n\n  /**\n   * Autoincrements the next event ID for the appropriate channel.\n   */\n  private getEventId(): number {\n    this.lastEventId += 1;\n    this.emit('id-update', { current: this.lastEventId });\n    return this.lastEventId;\n  }\n\n  /**\n   * Acknowledges an event.\n   *\n   * @param eventId The event to acknowledge.\n   */\n  private async ack(eventId: number): Promise<number | void> {\n    this.lastAcknowledgedEventId = eventId;\n    this.emit('id-update', { lastAcknowledged: eventId });\n    const message: Ack = {\n      action: 'ack',\n      'event-id': eventId,\n    };\n    await this.sendJSONtoChannel(message);\n    return eventId;\n  }\n\n  //NOTE  every arg is interpreted (through nockjs.dwim) as a noun, which\n  //      should result in a noun nesting inside of the xx $eyre-command type\n  private async sendNounsToChannel(...args: (Noun | any)[]): Promise<void> {\n    const options = this.fetchOptionsNoun('PUT', 'noun');\n    const body = render('uw', jam(dejs.list(args)).number);\n    this.validatePokeBodySize(body);\n\n    const response = await this.fetchFn(this.channelUrl, {\n      ...options,\n      signal: this.channelAbort.signal,\n      method: 'PUT',\n      body,\n    });\n    if (!response.ok) {\n      console.log(response.status, response.statusText, await response.text());\n      throw new Error('Failed to PUT channel command(s)');\n    }\n    if (!this.sseClientInitialized) {\n      if (this.verbose) {\n        console.log('initializing event source');\n      }\n      await Promise.all([this.getOurName(), this.getShipName()]);\n\n      if (this.our !== this.nodeId) {\n        throw new AuthError('invalid session');\n      }\n\n      await this.eventSource();\n    }\n  }\n\n  private async sendJSONtoChannel(...json: (Message | Ack)[]): Promise<void> {\n    const body = JSON.stringify(json);\n    this.validatePokeBodySize(body);\n\n    const response = await this.fetchFn(this.channelUrl, {\n      ...this.fetchOptions,\n      signal: this.channelAbort.signal,\n      method: 'PUT',\n      body,\n    });\n\n    if (!response.ok) {\n      throw new Error('Failed to PUT channel');\n    }\n    if (!this.sseClientInitialized) {\n      if (this.verbose) {\n        console.log('initializing event source');\n      }\n      await Promise.all([this.getOurName(), this.getShipName()]);\n\n      if (this.our !== this.nodeId) {\n        console.log('our name does not match ship name');\n        console.log('our:', this.our);\n        console.log('ship:', this.nodeId);\n        console.log('messages:', json);\n        throw new AuthError('invalid session');\n      }\n\n      await this.eventSource();\n    }\n  }\n\n  /**\n   * Validates the size of the poke body.\n   * This prevents us from accidentally sending large payloads (eg base64 images)\n   * @param body The body to validate.\n   */\n  validatePokeBodySize(body: string) {\n    if (body.length / 1024 > 512) {\n      logger.trackError('Body too large to send to channel');\n      throw new Error('Body too large to send to channel');\n    }\n  }\n\n  /**\n   * Creates a subscription, waits for a fact and then unsubscribes\n   *\n   * @param app Name of gall agent to subscribe to\n   * @param path Path to subscribe to\n   * @param timeout Optional timeout before ending subscription\n   *\n   * @returns The first fact on the subcription\n   */\n  async subscribeOnce<T = any>(\n    app: string,\n    path: string,\n    ship?: string,\n    timeout?: number\n  ) {\n    return new Promise<T>((resolve, reject) => {\n      let done = false;\n      const quit = () => {\n        if (!done) {\n          reject('quit');\n        }\n      };\n      const event = (e: T, mark: string, id: number) => {\n        if (!done) {\n          resolve(e);\n          this.unsubscribe(id);\n        }\n      };\n      const request = {\n        app,\n        path,\n        ship,\n        resubOnQuit: false,\n        event,\n        err: reject,\n        quit,\n      };\n\n      this.subscribe(request).then((subId) => {\n        if (timeout) {\n          setTimeout(() => {\n            if (!done) {\n              done = true;\n              reject('timeout');\n              this.unsubscribe(subId);\n            }\n          }, timeout);\n        }\n      });\n    });\n  }\n\n  async pokeNoun(params: NounPokeInterface): Promise<number> {\n    params.onSuccess = params.onSuccess || (() => {});\n    params.onError = params.onError || (() => {});\n    const { app, mark, noun, ship } = {\n      ship: this.nodeId?.replace('~', '') || '',\n      ...params,\n    };\n\n    if (this.lastEventId === 0) {\n      this.emit('status-update', { status: 'opening' });\n    }\n\n    const eventId = this.getEventId();\n    this.outstandingPokes.set(eventId, params);\n\n    if (isNoun(noun)) {\n      const shipAtom = new Atom(parse('p', `~${ship}`));\n      const non = ['poke', eventId, shipAtom, app, mark, noun];\n      await this.sendNounsToChannel(non);\n    } else {\n      throw new Error('pokeNoun requires a noun');\n    }\n    return eventId;\n  }\n\n  /**\n   * Pokes a ship with data.\n   *\n   * @param app The app to poke\n   * @param mark The mark of the data being sent\n   * @param json The data to send\n   */\n  async poke<T>(params: PokeInterface<T>): Promise<number> {\n    const { app, mark, json, ship, onSuccess, onError } = {\n      onSuccess: () => {},\n      onError: () => {},\n      ship: desig(this.nodeId ?? ''),\n      ...params,\n    };\n\n    if (this.lastEventId === 0) {\n      this.emit('status-update', { status: 'opening' });\n    }\n\n    const message: Message = {\n      id: this.getEventId(),\n      action: 'poke',\n      ship,\n      app,\n      mark,\n      json,\n    };\n\n    return new Promise((resolve, reject) => {\n      this.outstandingPokes.set(message.id, {\n        onSuccess: () => {\n          onSuccess();\n          resolve(message.id);\n        },\n        onError: (err) => {\n          onError(err);\n          reject(err);\n        },\n      });\n      this.sendJSONtoChannel(message).catch(reject);\n    });\n  }\n\n  /**\n   * Subscribes to a path on an app on a ship.\n   *\n   *\n   * @param app The app to subsribe to\n   * @param path The path to which to subscribe\n   * @param handlers Handlers to deal with various events of the subscription\n   */\n  async subscribe(params: SubscriptionRequestInterface): Promise<number> {\n    const { app, path, ship, resubOnQuit, err, event, quit } = {\n      err: () => {},\n      event: () => {},\n      quit: () => {},\n      resubOnQuit: true,\n      ...params,\n      ship: desig(params.ship ?? this.nodeId ?? ''),\n    };\n\n    if (this.lastEventId === 0) {\n      this.emit('status-update', { status: 'opening' });\n    }\n\n    const message: Message = {\n      id: this.getEventId(),\n      action: 'subscribe',\n      ship,\n      app,\n      path,\n    };\n\n    this.outstandingSubscriptions.set(message.id, {\n      app,\n      path,\n      resubOnQuit,\n      err,\n      event,\n      quit,\n    });\n\n    this.emit('subscription', {\n      id: message.id,\n      app,\n      path,\n      status: 'open',\n    });\n\n    await this.sendJSONtoChannel(message);\n\n    return message.id;\n  }\n\n  /**\n   * Unsubscribes to a given subscription.\n   *\n   * @param subscription\n   */\n  async unsubscribe(subscription: number) {\n    return this.sendJSONtoChannel({\n      id: this.getEventId(),\n      action: 'unsubscribe',\n      subscription,\n    }).then(() => {\n      this.emit('subscription', {\n        id: subscription,\n        status: 'close',\n      });\n      this.outstandingSubscriptions.delete(subscription);\n    });\n  }\n\n  /**\n   * Deletes the connection to a channel.\n   */\n  async delete() {\n    this.channelAbort.abort();\n    this.channelAbort = new AbortController();\n    const body = JSON.stringify([\n      {\n        id: this.getEventId(),\n        action: 'delete',\n      },\n    ]);\n    if (isBrowser) {\n      navigator.sendBeacon(this.channelUrl, body);\n    } else {\n      const response = await this.fetchFn(this.channelUrl, {\n        ...this.fetchOptions,\n        signal: this.channelAbort.signal,\n        method: 'POST',\n        body: body,\n      });\n      if (!response.ok) {\n        throw new Error('Failed to DELETE channel in node context');\n      }\n    }\n  }\n\n  async checkIsNodeBusy(): Promise<'available' | 'busy' | 'unknown'> {\n    try {\n      const response = await this.fetchFn(`${this.url}/~_~/healthz`, {\n        method: 'GET',\n      });\n      if (response.status === 204) {\n        return 'available';\n      }\n      if (response.status === 429) {\n        return 'busy';\n      }\n      logger.trackEvent('Unexpected node busy response', {\n        status: response.status,\n      });\n      return 'unknown';\n    } catch (e) {\n      logger.trackEvent('Failed to check if node is busy', { error: e });\n      return 'unknown';\n    }\n  }\n\n  /**\n   * Scry into an gall agent at a path\n   *\n   * @typeParam T - Type of the scry result\n   *\n   * @remarks\n   *\n   * Equivalent to\n   * ```hoon\n   * .^(T %gx /(scot %p our)/[app]/(scot %da now)/[path]/json)\n   * ```\n   * The returned cage must have a conversion to JSON for the scry to succeed\n   *\n   * @param params The scry request\n   * @returns The scry result\n   */\n  async scry<T = any>(params: Scry): Promise<T> {\n    const { result } = await this.scryWithInfo(params);\n    return result;\n  }\n\n  async scryWithInfo<T = any>(\n    params: Scry\n  ): Promise<{\n    responseStatus: number;\n    responseSizeInBytes: number;\n    result: T;\n  }> {\n    const { app, path, timeout } = params;\n    const signal = timeout ? utils.createTimeoutSignal(timeout) : undefined;\n    const response = await this.fetchFn(\n      `${this.url}/~/scry/${app}${path}.json`,\n      {\n        ...this.fetchOptions,\n        signal,\n      }\n    );\n    signal?.cleanup();\n\n    if (!response.ok) {\n      return Promise.reject(response);\n    }\n\n    const result = await response.json();\n    const responseSize = response.headers.get('content-length');\n    return {\n      responseStatus: response.status,\n      responseSizeInBytes: Number(responseSize),\n      result,\n    };\n  }\n\n  async scryNoun(params: Scry): Promise<Noun> {\n    const { result } = await this.scryNounWithInfo(params);\n    return result;\n  }\n\n  async scryNounWithInfo(params: Scry): Promise<{\n    responseStatus: number;\n    responseSizeInBytes: number;\n    result: Noun;\n  }> {\n    const { app, path } = params;\n\n    try {\n      const response = await this.fetchFn(\n        `${this.url}/~/scry/${app}${path}.noun`,\n        {\n          ...this.fetchOptionsNoun('GET', 'noun'),\n        }\n      );\n\n      if (!response.ok) {\n        return Promise.reject(response);\n      }\n\n      const responseBlob = await response.blob();\n      const buffer = await readArrayBufferFromBlob(responseBlob);\n\n      try {\n        const unpacked = await unpackJamBytes(buffer);\n        const responseSize = response.headers.get('content-length');\n        return {\n          responseStatus: response.status,\n          responseSizeInBytes: Number(responseSize),\n          result: unpacked,\n        };\n      } catch (e) {\n        console.error('Unpack failed', e);\n        throw e;\n      }\n    } catch (e) {\n      console.error(e);\n      throw e;\n    }\n  }\n\n  /**\n   * Run a thread\n   *\n   *\n   * @param inputMark   The mark of the data being sent\n   * @param outputMark  The mark of the data being returned\n   * @param threadName  The thread to run\n   * @param body        The data to send to the thread\n   * @returns  The return value of the thread\n   */\n  async thread<T = any>(params: Thread<T>): Promise<Response> {\n    const {\n      inputMark,\n      outputMark,\n      threadName,\n      body,\n      timeout,\n      desk = this.desk,\n    } = params;\n    if (!desk) {\n      throw new Error('Must supply desk to run thread from');\n    }\n\n    const signal = timeout ? utils.createTimeoutSignal(timeout) : undefined;\n\n    const result = await this.fetchFn(\n      `${this.url}/spider/${desk}/${inputMark}/${threadName}/${outputMark}.json`,\n      {\n        ...this.fetchOptions,\n        signal,\n        method: 'POST',\n        body: JSON.stringify(body),\n      }\n    );\n    signal?.cleanup();\n    return result;\n  }\n\n  async getSpinHints(): Promise<string> {\n    return new Promise<string>((resolve, reject) => {\n      const controller = new AbortController();\n      let messageReceived = false;\n\n      fetchEventSource(`${this.url}/~_~/spin`, {\n        signal: controller.signal,\n        // @ts-expect-error reactNative not in types but is essential\n        reactNative: { textStreaming: true },\n        openWhenHidden: true,\n        responseTimeout: 25000,\n        fetch: this.fetchFn,\n        onmessage(event) {\n          if (!messageReceived) {\n            messageReceived = true;\n            controller.abort();\n            resolve(event.data);\n          }\n        },\n        onerror(error) {\n          controller.abort();\n          reject(error);\n        },\n      });\n    });\n  }\n\n  /**\n   * Perform a standard HTTP request using the channel's authentication\n   *\n   * @param path The path to request (relative to the ship's URL)\n   * @param options Request options (method, headers, body, etc.)\n   * @returns The response from the request\n   */\n  async request<T>(\n    path: string,\n    options: RequestInit = {},\n    timeout?: number\n  ): Promise<T> {\n    // Ensure path starts with a slash if not provided\n    if (!path.startsWith('/')) {\n      path = '/' + path;\n    }\n\n    const signal = timeout ? utils.createTimeoutSignal(timeout) : undefined;\n    // Prepare request options with authentication\n    const requestOptions: RequestInit = {\n      ...this.fetchOptions,\n      ...options,\n      // Merge headers properly\n      headers: {\n        ...this.fetchOptions.headers,\n        ...(options.headers || {}),\n      },\n      signal,\n    };\n\n    // If we're in a Node.js environment, add the cookie for authentication\n    if (!isBrowser && this.cookie) {\n      requestOptions.headers = {\n        ...requestOptions.headers,\n        Cookie: this.cookie,\n      };\n    }\n\n    // Make the request\n    const response = await this.fetchFn(`${this.url}${path}`, requestOptions);\n    signal?.cleanup();\n\n    // Handle response\n    if (!response.ok) {\n      return Promise.reject(response);\n    }\n\n    // Determine response type and parse accordingly\n    const contentType = response.headers.get('content-type');\n    if (contentType?.includes('application/json')) {\n      return response.json();\n    } else if (contentType?.includes('text/')) {\n      return response.text() as unknown as T;\n    } else {\n      return response.blob() as unknown as T;\n    }\n  }\n\n  /**\n   * Utility function to connect to a ship that has its *.arvo.network domain configured.\n   *\n   * @param name Name of the ship e.g. zod\n   * @param code Code to log in\n   */\n  static async onArvoNetwork(ship: string, code: string): Promise<Urbit> {\n    const url = `https://${ship}.arvo.network`;\n    return await Urbit.authenticate({ ship, url, code });\n  }\n}\n\nexport default Urbit;\n","export const getLandscapeAuthCookie = async (\n  shipUrl: string,\n  accessCode: string\n) => {\n  const response = await fetch(`${shipUrl}/~/login`, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',\n    },\n    body: `password=${accessCode}`,\n    credentials: 'include',\n  });\n\n  if (response.status < 200 || response.status > 299) {\n    throw new Error('Failed to authenticate. Is your access code correct?');\n  }\n\n  return response.headers.get('set-cookie')?.split(';')[0];\n};\n","import { Noun } from '@urbit/nockjs';\nimport _ from 'lodash';\n\nimport { createDevLogger, escapeLog, isDev, runIfDev } from '../debug';\nimport { AnalyticsEvent, getConstants } from '../domain';\nimport * as Hosting from '../domain/hosting';\nimport {\n  AuthError,\n  ChannelStatus,\n  NounPokeInterface,\n  PokeInterface,\n  Thread,\n  Urbit,\n} from '../http-api';\nimport { preSig } from '../urbit';\nimport { getLandscapeAuthCookie } from './landscapeApi';\n\nconst logger = createDevLogger('urbit', false);\n\nconst DEFAULT_SCRY_TIMEOUT = 60 * 1000; // 1 minute\nconst DEFAULT_THREAD_TIMEOUT = 90 * 1000; // 90 seconds\n\ninterface Config\n  extends Pick<\n    ClientParams,\n    'getCode' | 'handleAuthFailure' | 'shipUrl' | 'onQuitOrReset'\n  > {\n  client: Urbit | null;\n  subWatchers: Watchers;\n  pendingAuth: Promise<string | void> | null;\n  lastStatus: string;\n}\n\ntype Predicate = (event: any, mark: string) => boolean;\ninterface Watcher {\n  id: string;\n  predicate: Predicate;\n  resolve: (value: void | PromiseLike<void>) => void;\n  reject: (reason?: any) => void;\n}\n\ntype Watchers = Record<string, Map<string, Watcher>>;\n\nexport type PokeParams = {\n  app: string;\n  mark: string;\n  json: any;\n};\n\nexport type NounPokeParams = {\n  app: string;\n  mark: string;\n  noun: Noun;\n};\n\nexport class BadResponseError extends Error {\n  constructor(\n    public status: number,\n    public body: string\n  ) {\n    super();\n  }\n}\n\nexport class TimeoutError extends Error {\n  connectionStatus: string;\n  timeoutDuration: number | null;\n\n  constructor({\n    connectionStatus,\n    timeoutDuration,\n  }: {\n    connectionStatus?: string;\n    timeoutDuration?: number;\n  }) {\n    super(`TimeoutError: ${connectionStatus}`);\n    this.connectionStatus = connectionStatus || 'unknown';\n    this.timeoutDuration = timeoutDuration ?? null;\n  }\n}\n\ninterface UrbitEndpoint {\n  app: string;\n  path: string;\n}\n\nexport interface ClientParams {\n  shipName: string;\n  shipUrl: string;\n  verbose?: boolean;\n  fetchFn?: typeof fetch;\n  getCode?: () => Promise<string>;\n  handleAuthFailure?: () => void;\n  onQuitOrReset?: (cause: 'subscriptionQuit' | 'reset') => void;\n  onChannelStatusChange?: (status: ChannelStatus) => void;\n  /** Inject a pre-configured Urbit client instead of creating one */\n  client?: Urbit;\n}\n\nconst config: Config = {\n  client: null,\n  lastStatus: '',\n  shipUrl: '',\n  subWatchers: {},\n  pendingAuth: null,\n  onQuitOrReset: undefined,\n  getCode: undefined,\n  handleAuthFailure: undefined,\n};\n\nexport const client = new Proxy(\n  {},\n  {\n    get: function (target, prop, receiver) {\n      if (!config.client) {\n        throw new Error('Urbit client not set.');\n      }\n      return Reflect.get(config.client, prop, receiver);\n    },\n  }\n) as Urbit;\n\nexport const getCurrentUserId = () => {\n  if (!client.nodeId) {\n    throw new Error('Client not initialized');\n  }\n  return client.nodeId;\n};\n\nexport const getCurrentUserIsHosted = () => {\n  if (!client.nodeId) {\n    throw new Error('Client not initialized');\n  }\n\n  // prefer referencing client URL if available\n  if (client.url) {\n    return Hosting.nodeUrlIsHosted(client.url);\n  }\n\n  /*\n    On web, client URL is implicit based on location\n    Note: during development, the true URL is supplied via the environment. Localhost is\n    set up to redirect there\n  */\n  const env = getConstants();\n  const implicitUrl = isDev() ? env.DEV_SHIP_URL : window.location.hostname;\n  return Hosting.nodeUrlIsHosted(implicitUrl);\n};\n\nexport async function configureClient({\n  shipName,\n  shipUrl,\n  verbose,\n  fetchFn,\n  getCode,\n  handleAuthFailure,\n  onQuitOrReset,\n  onChannelStatusChange,\n  client: injectedClient,\n}: ClientParams) {\n  // If no pre-authenticated client was injected and we have a way to get\n  // the auth code, get it now so we can pass it to the Urbit constructor.\n  const code = !injectedClient && getCode ? await getCode() : '';\n  \n  config.client = injectedClient || config.client || new Urbit(shipUrl, code, '', fetchFn);\n  config.client.verbose = verbose;\n  config.client.nodeId = preSig(shipName);\n  config.shipUrl = shipUrl;\n  config.onQuitOrReset = onQuitOrReset;\n  config.getCode = getCode;\n  config.handleAuthFailure = handleAuthFailure;\n  config.subWatchers = {};\n\n  // Connect and start event source if we got a code (client needs to authenticate)\n  if (code) {\n    await config.client.connect();\n    await config.client.eventSource();\n  }\n\n  // the below event handlers will only fire if verbose is set to true\n  config.client.on('status-update', (event) => {\n    logger.trackEvent(AnalyticsEvent.NodeConnectionDebug, {\n      context: 'status update',\n      connectionStatus: event.status,\n      statusUpdateContext: event.context ? event.context : null,\n    });\n    config.lastStatus = event.status;\n    onChannelStatusChange?.(event.status);\n  });\n\n  config.client.on('fact', (fact) => {\n    logger.log(\n      'received message',\n      runIfDev(() => escapeLog(JSON.stringify(fact)))\n    );\n  });\n\n  config.client.on('seamless-reset', () => {\n    logger.log('client seamless-reset');\n    logger.trackEvent(AnalyticsEvent.NodeConnectionDebug, {\n      context: 'seamless-reset',\n    });\n    config.onQuitOrReset?.('reset');\n  });\n\n  config.client.on('error', (error) => {\n    logger.log('client error', error);\n  });\n\n  config.client.on('channel-reaped', () => {\n    logger.trackEvent(AnalyticsEvent.NodeConnectionDebug, {\n      context: 'client channel reaped',\n    });\n    logger.log('client channel-reaped');\n  });\n}\n\nexport function internalRemoveClient() {\n  config.client?.delete();\n  config.client = null;\n  config.subWatchers = {};\n}\n\nfunction printEndpoint(endpoint: UrbitEndpoint) {\n  return `${endpoint.app}${endpoint.path}`;\n}\n\nexport async function subscribe<T>(\n  endpoint: UrbitEndpoint,\n  handler: (update: T, id?: number) => void\n): Promise<number> {\n  const doSub = async (err?: (error: any, id: string) => void) => {\n    if (!config.client) {\n      throw new Error('Client not initialized');\n    }\n    if (config.pendingAuth) {\n      await config.pendingAuth;\n    }\n    logger.log('subscribing to', printEndpoint(endpoint));\n    return config.client.subscribe({\n      app: endpoint.app,\n      path: endpoint.path,\n      event: (event: any, mark: string, id?: number) => {\n        logger.debug(\n          `got subscription event on ${printEndpoint(endpoint)}:`,\n          event\n        );\n\n        // first check if anything is watching the subscription for\n        // tracked pokes\n        const endpointKey = printEndpoint(endpoint);\n        const endpointWatchers = config.subWatchers[endpointKey];\n        logger.debug(\n          `checking for endpoint watchers on ${endpointKey}:`,\n          endpointWatchers\n        );\n        if (endpointWatchers) {\n          endpointWatchers.forEach((watcher) => {\n            if (watcher.predicate(event, mark)) {\n              logger.debug(`watcher ${watcher.id} predicate met`, event);\n              watcher.resolve();\n              endpointWatchers.delete(watcher.id);\n            } else {\n              logger.debug(`watcher ${watcher.id} predicate failed`, event);\n            }\n          });\n        }\n\n        // then pass the event along to the subscription handler\n        handler(event, id);\n      },\n      quit: () => {\n        logger.log('subscription quit on', printEndpoint(endpoint));\n        config.onQuitOrReset?.('subscriptionQuit');\n      },\n      err: (error, id) => {\n        logger.trackError(`subscribe error on ${printEndpoint(endpoint)}`, {\n          stack: error,\n        });\n\n        if (err) {\n          logger.log(\n            'calling error handler for subscription',\n            printEndpoint(endpoint)\n          );\n          err(error, id);\n        }\n      },\n    });\n  };\n\n  const retry = async (err: any) => {\n    logger.error('bad subscribe', printEndpoint(endpoint), err);\n    if (!(err instanceof AuthError)) {\n      throw err;\n    }\n\n    config.pendingAuth = reauth();\n    return doSub();\n  };\n\n  try {\n    return doSub(retry);\n  } catch (err) {\n    return retry(err);\n  }\n}\n\nexport async function subscribeOnce<T>(\n  endpoint: UrbitEndpoint,\n  timeout?: number,\n  ship?: string,\n  requestConfig?: { tag?: string }\n) {\n  if (!config.client) {\n    throw new Error('Client not initialized');\n  }\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  logger.log('subscribing once to', printEndpoint(endpoint));\n  try {\n    return config.client.subscribeOnce<T>(\n      endpoint.app,\n      endpoint.path,\n      ship,\n      timeout\n    );\n  } catch (err) {\n    if (err !== 'timeout' && err !== 'quit') {\n      logger.trackError(`bad subscribeOnce ${printEndpoint(endpoint)}`, {\n        stack: err,\n      });\n    } else if (err === 'timeout') {\n      logger.error('subscribeOnce timed out', printEndpoint(endpoint));\n      logger.trackEvent(AnalyticsEvent.ErrorSubscribeOnceTimeout, {\n        requestTag: requestConfig?.tag,\n        subEndpoint: printEndpoint(endpoint),\n        connectionStatus: config.lastStatus,\n        timeoutDuration: timeout,\n      });\n    } else {\n      logger.error('subscribeOnce quit', printEndpoint(endpoint));\n    }\n\n    if (!(err instanceof AuthError)) {\n      throw err;\n    }\n\n    await reauth();\n    return config.client.subscribeOnce<T>(\n      endpoint.app,\n      endpoint.path,\n      ship,\n      timeout\n    );\n  }\n}\n\nexport async function unsubscribe(id: number) {\n  if (!config.client) {\n    throw new Error('Client not initialized');\n  }\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  try {\n    return config.client.unsubscribe(id);\n  } catch (err) {\n    logger.error('bad unsubscribe', id, err);\n    if (err instanceof AuthError) {\n      await reauth();\n      return config.client.unsubscribe(id);\n    }\n  }\n}\n\nexport async function pokeNoun<T>({ app, mark, noun }: NounPokeParams) {\n  const doPoke = async (params?: Partial<NounPokeInterface>) => {\n    if (!config.client) {\n      throw new Error('Client not initialized');\n    }\n    if (config.pendingAuth) {\n      await config.pendingAuth;\n    }\n    logger.log('noun poke', { app, mark });\n    return config.client.pokeNoun({\n      ...params,\n      app,\n      mark,\n      noun,\n    });\n  };\n  const retry = async (err: any) => {\n    logger.trackError(`NOUN POKE: bad poke to ${app} with mark ${mark}`, {\n      stack: err,\n      noun: noun,\n    });\n    if (!(err instanceof AuthError)) {\n      throw err;\n    }\n\n    await reauth();\n    return doPoke();\n  };\n\n  try {\n    return doPoke({ onError: retry });\n  } catch (err) {\n    retry(err);\n  }\n}\n\nexport async function poke({ app, mark, json }: PokeParams) {\n  logger.log('poke', app, mark, json);\n  const trackDuration = createDurationTracker(AnalyticsEvent.Poke, {\n    app,\n    mark,\n  });\n  const doPoke = async (params?: Partial<PokeInterface<any>>) => {\n    if (!config.client) {\n      throw new Error('Client not initialized');\n    }\n    if (config.pendingAuth) {\n      await config.pendingAuth;\n    }\n    return config.client.poke({\n      ...params,\n      app,\n      mark,\n      json,\n    });\n  };\n  const retry = async (err: any) => {\n    logger.trackError(`bad poke to ${app} with mark ${mark}`, {\n      stack: err,\n      body: json,\n    });\n    if (!(err instanceof AuthError)) {\n      trackDuration('error');\n      throw err;\n    }\n\n    await reauth();\n    return doPoke();\n  };\n\n  try {\n    const result = await doPoke();\n    trackDuration('success');\n    return result;\n  } catch (err) {\n    const result = await retry(err);\n    trackDuration('success');\n    return result;\n  }\n}\n\nexport async function trackedPoke<T, R = T>(\n  params: PokeParams,\n  endpoint: UrbitEndpoint,\n  predicate: (event: R) => boolean,\n  requestConfig?: { tag?: string; timeout?: number }\n) {\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  const trackDuration = createDurationTracker(AnalyticsEvent.TrackedPoke, {\n    app: params.app,\n    mark: params.mark,\n  });\n  let pokeCompleted = false;\n  try {\n    const tracking = track(\n      endpoint,\n      predicate,\n      requestConfig?.timeout ?? 20000\n    );\n    const poking = poke(params).then(() => (pokeCompleted = true));\n    await Promise.all([tracking, poking]);\n    trackDuration('success');\n  } catch (e) {\n    logger.error(`tracked poke failed`, e);\n    trackDuration('error');\n    if (e instanceof TimeoutError) {\n      logger.trackEvent(AnalyticsEvent.ErrorTrackedPokeTimeout, {\n        requestTag: requestConfig?.tag,\n        pokeParams: params,\n        subEndpoint: printEndpoint(endpoint),\n        connectionStatus: config.lastStatus,\n        timeoutDuration: e.timeoutDuration,\n        pokeCompleted,\n      });\n    }\n    throw e;\n  }\n}\n\nexport async function trackedPokeNoun<T, R = T>(\n  params: NounPokeParams,\n  endpoint: UrbitEndpoint,\n  predicate: (event: R) => boolean,\n  requestConfig?: { tag: string; timeout?: number }\n) {\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  const trackDuration = createDurationTracker(AnalyticsEvent.TrackedPoke, {\n    app: params.app,\n    mark: params.mark,\n  });\n  let pokeCompleted = false;\n  try {\n    const tracking = track(\n      endpoint,\n      predicate,\n      requestConfig?.timeout ?? 20000\n    );\n    const poking = pokeNoun(params).then(() => (pokeCompleted = true));\n    await Promise.all([tracking, poking]);\n    trackDuration('success');\n  } catch (e) {\n    logger.error(`tracked poke failed`, e);\n    trackDuration('error');\n    if (e instanceof TimeoutError) {\n      logger.trackEvent(AnalyticsEvent.ErrorTrackedPokeTimeout, {\n        requestTag: requestConfig?.tag,\n        pokeParams: params,\n        subEndpoint: printEndpoint(endpoint),\n        connectionStatus: config.lastStatus,\n        timeoutDuration: e.timeoutDuration,\n        pokeCompleted,\n      });\n    }\n    throw e;\n  }\n}\n\nasync function track<R>(\n  endpoint: UrbitEndpoint,\n  predicate: (event: R) => boolean,\n  timeout = 15000\n) {\n  const endpointKey = printEndpoint(endpoint);\n  return new Promise((resolve, reject) => {\n    const watchers = config.subWatchers[endpointKey] || new Map();\n    const id = _.uniqueId();\n\n    config.subWatchers[endpointKey] = watchers.set(id, {\n      id,\n      predicate,\n      resolve,\n      reject,\n    });\n\n    if (timeout) {\n      setTimeout(() => {\n        if (watchers.has(id)) {\n          watchers.delete(id);\n          reject(\n            new TimeoutError({\n              connectionStatus: config.lastStatus,\n              timeoutDuration: timeout,\n            })\n          );\n        }\n      }, timeout);\n    }\n  });\n}\n\nexport async function checkIsNodeBusy() {\n  return config.client?.checkIsNodeBusy() || Promise.resolve('unknown');\n}\n\nexport async function checkIsNodeBusyWithHints(): Promise<{\n  nodeBusyStatus: 'available' | 'busy' | 'unknown';\n  hints?: string;\n}> {\n  if (!config.client) {\n    throw new Error('Client not initialized');\n  }\n\n  const result = await client.getSpinHints();\n  if (result === '/root') {\n    return { nodeBusyStatus: 'available' };\n  }\n\n  return { nodeBusyStatus: 'busy', hints: result };\n}\n\nexport async function scry<T>({\n  app,\n  path,\n  timeout,\n}: {\n  app: string;\n  path: string;\n  timeout?: number;\n}) {\n  if (!config.client) {\n    throw new Error('Client not initialized');\n  }\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  logger.log('scry', app, path);\n  const trackDuration = createDurationTracker(AnalyticsEvent.Scry, {\n    app,\n    path: redactPath(path),\n    shouldTimeoutAfter: timeout ?? DEFAULT_SCRY_TIMEOUT,\n  });\n  try {\n    const { result, responseSizeInBytes, responseStatus } =\n      await config.client.scryWithInfo<T>({\n        app,\n        path,\n        timeout: timeout ?? DEFAULT_SCRY_TIMEOUT,\n      });\n    trackDuration('success', { responseSizeInBytes, responseStatus });\n    return result;\n  } catch (res) {\n    logger.log('bad scry', app, path, res.status);\n    if (res.status === 403) {\n      logger.log('scry failed with 403, authing to try again');\n      await reauth();\n      const { result, responseSizeInBytes, responseStatus } =\n        await config.client.scryWithInfo<T>({ app, path });\n      trackDuration('success', { responseSizeInBytes, responseStatus });\n      return result;\n    }\n    trackDuration('error', {\n      errorMessage: res.message,\n      responseStatus: res.status,\n    });\n    throw new BadResponseError(res.status, res.toString());\n  }\n}\n\nexport async function scryNoun({\n  app,\n  path,\n  timeout,\n}: {\n  app: string;\n  path: string;\n  timeout?: number;\n}) {\n  if (!config.client) {\n    throw new Error('Client not initialized');\n  }\n  if (config.pendingAuth) {\n    await config.pendingAuth;\n  }\n  logger.log('scry noun', app, path);\n  const trackDuration = createDurationTracker(AnalyticsEvent.ScryNoun, {\n    app,\n    path: redactPath(path),\n    shouldTimeoutAfter: timeout ?? DEFAULT_SCRY_TIMEOUT,\n  });\n  try {\n    const { result, responseSizeInBytes, responseStatus } =\n      await config.client.scryNounWithInfo({\n        app,\n        path,\n        timeout: timeout ?? DEFAULT_SCRY_TIMEOUT,\n      });\n    trackDuration('success', { responseSizeInBytes, responseStatus });\n    return result;\n  } catch (res) {\n    logger.log('bad scry', app, path, res.status);\n    if (res.status === 403) {\n      logger.log('scry failed with 403, authing to try again');\n      await reauth();\n      const { result, responseSizeInBytes, responseStatus } =\n        await config.client.scryNounWithInfo({ app, path });\n      trackDuration('success', { responseSizeInBytes, responseStatus });\n      return result;\n    }\n    trackDuration('error', {\n      message: res.message,\n      responseStatus: res.status,\n    });\n    throw new BadResponseError(res.status, res.toString());\n  }\n}\n\nexport async function thread<T, R = any>(params: Thread<T>): Promise<R> {\n  if (!params.desk) {\n    throw new Error('Must supply desk to run thread from');\n  }\n\n  if (!config.client) {\n    throw new Error('Cannot call thread before client is initialized');\n  }\n\n  const trackDuration = createDurationTracker(AnalyticsEvent.Thread, {\n    desk: params.desk,\n    inputMark: params.inputMark,\n    threadName: params.threadName,\n    outputMark: params.outputMark,\n    shouldTimeoutAfter: params.timeout ?? DEFAULT_THREAD_TIMEOUT,\n  });\n  const requestContext: any = {};\n\n  try {\n    const response = await config.client.thread<T>({\n      ...params,\n      timeout: params.timeout ?? DEFAULT_THREAD_TIMEOUT,\n    });\n    if (!response.ok) {\n      const errorText = await response.text();\n      requestContext.responseStatus = response.status;\n      requestContext.responseText = errorText;\n      throw new BadResponseError(response.status, errorText);\n    }\n\n    trackDuration('success');\n    return response.json();\n  } catch (err) {\n    trackDuration('error', { ...requestContext, errorMessage: err.toString() });\n    throw err;\n  }\n}\n\nexport async function request<T>(\n  path: string,\n  options: RequestInit = {},\n  timeout?: number\n) {\n  if (!config.client) {\n    throw new Error('Cannot make request before client is initialized');\n  }\n\n  return config.client.request<T>(path, options, timeout);\n}\n\n// Remove any identifiable information from path\n// ~solfer-magfed/my-group => [id]/my-group\n// chat/~solfer-magfed/my-channel/ => chat/[id]/\n// ~solfer-magfed/ => [id]/\nfunction redactPath(path: string) {\n  return path.replace(/~.+?(?:\\/.+?)(\\/|$)/g, '[id]/');\n}\n\nasync function reauth() {\n  if (!config.getCode) {\n    logger.log('No getCode function provided for auth');\n    if (config.handleAuthFailure) {\n      logger.log('calling auth failure handler');\n      return config.handleAuthFailure();\n    }\n\n    throw new Error('Unable to authenticate with urbit');\n  }\n\n  if (config.pendingAuth) {\n    return config.pendingAuth;\n  }\n\n  try {\n    let tries = 0;\n    logger.log('getting urbit code');\n    const code = await config.getCode();\n    config.pendingAuth = new Promise<string>((resolve, reject) => {\n      const tryAuth = async () => {\n        try {\n          logger.log('trying to auth with code', code);\n          const authCookie = await getLandscapeAuthCookie(config.shipUrl, code);\n\n          if (!authCookie && tries < 3) {\n            logger.log('auth failed, trying again', tries);\n            tries++;\n            setTimeout(tryAuth, 1000 + 2 ** tries * 1000);\n            return;\n          }\n\n          if (!authCookie) {\n            config.pendingAuth = null;\n            if (config.handleAuthFailure) {\n              logger.log('auth failed, calling auth failure handler');\n              config.handleAuthFailure();\n            }\n\n            reject(new Error(\"Couldn't authenticate with urbit\"));\n            return;\n          }\n\n          // Apply cookie to client for Node.js requests\n          if (config.client) {\n            config.client.cookie = authCookie;\n          }\n\n          config.pendingAuth = null;\n          resolve(authCookie);\n          return;\n        } catch (e) {\n          reject(new Error(`Error during reauth: ${e}`));\n        }\n      };\n\n      tryAuth();\n    });\n\n    return await config.pendingAuth;\n  } catch (e) {\n    logger.error('error getting urbit code', e);\n    config.pendingAuth = null;\n    if (config.handleAuthFailure) {\n      return config.handleAuthFailure();\n    }\n\n    throw e;\n  }\n}\n\nfunction createDurationTracker<T extends Record<string, any>>(\n  event: AnalyticsEvent,\n  data: T\n) {\n  const startTime = Date.now();\n  return (status: 'success' | 'error', properties?: Record<string, any>) => {\n    logger.trackEvent(event, {\n      ...data,\n      ...properties,\n      status,\n      scryStatus: status,\n      duration: Date.now() - startTime,\n    });\n  };\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(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))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar defaultOptions = {\n    delayFirstAttempt: false,\n    jitter: \"none\",\n    maxDelay: Infinity,\n    numOfAttempts: 10,\n    retry: function () { return true; },\n    startingDelay: 100,\n    timeMultiple: 2\n};\nfunction getSanitizedOptions(options) {\n    var sanitized = __assign(__assign({}, defaultOptions), options);\n    if (sanitized.numOfAttempts < 1) {\n        sanitized.numOfAttempts = 1;\n    }\n    return sanitized;\n}\nexports.getSanitizedOptions = getSanitizedOptions;\n//# sourceMappingURL=options.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction fullJitter(delay) {\n    var jitteredDelay = Math.random() * delay;\n    return Math.round(jitteredDelay);\n}\nexports.fullJitter = fullJitter;\n//# sourceMappingURL=full.jitter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction noJitter(delay) {\n    return delay;\n}\nexports.noJitter = noJitter;\n//# sourceMappingURL=no.jitter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar full_jitter_1 = require(\"./full/full.jitter\");\nvar no_jitter_1 = require(\"./no/no.jitter\");\nfunction JitterFactory(options) {\n    switch (options.jitter) {\n        case \"full\":\n            return full_jitter_1.fullJitter;\n        case \"none\":\n        default:\n            return no_jitter_1.noJitter;\n    }\n}\nexports.JitterFactory = JitterFactory;\n//# sourceMappingURL=jitter.factory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar jitter_factory_1 = require(\"../jitter/jitter.factory\");\nvar Delay = /** @class */ (function () {\n    function Delay(options) {\n        this.options = options;\n        this.attempt = 0;\n    }\n    Delay.prototype.apply = function () {\n        var _this = this;\n        return new Promise(function (resolve) { return setTimeout(resolve, _this.jitteredDelay); });\n    };\n    Delay.prototype.setAttemptNumber = function (attempt) {\n        this.attempt = attempt;\n    };\n    Object.defineProperty(Delay.prototype, \"jitteredDelay\", {\n        get: function () {\n            var jitter = jitter_factory_1.JitterFactory(this.options);\n            return jitter(this.delay);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Delay.prototype, \"delay\", {\n        get: function () {\n            var constant = this.options.startingDelay;\n            var base = this.options.timeMultiple;\n            var power = this.numOfDelayedAttempts;\n            var delay = constant * Math.pow(base, power);\n            return Math.min(delay, this.options.maxDelay);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Delay.prototype, \"numOfDelayedAttempts\", {\n        get: function () {\n            return this.attempt;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return Delay;\n}());\nexports.Delay = Delay;\n//# sourceMappingURL=delay.base.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var 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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (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};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"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 (_) 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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar delay_base_1 = require(\"../delay.base\");\nvar SkipFirstDelay = /** @class */ (function (_super) {\n    __extends(SkipFirstDelay, _super);\n    function SkipFirstDelay() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SkipFirstDelay.prototype.apply = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, this.isFirstAttempt ? true : _super.prototype.apply.call(this)];\n            });\n        });\n    };\n    Object.defineProperty(SkipFirstDelay.prototype, \"isFirstAttempt\", {\n        get: function () {\n            return this.attempt === 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SkipFirstDelay.prototype, \"numOfDelayedAttempts\", {\n        get: function () {\n            return this.attempt - 1;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return SkipFirstDelay;\n}(delay_base_1.Delay));\nexports.SkipFirstDelay = SkipFirstDelay;\n//# sourceMappingURL=skip-first.delay.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var 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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar delay_base_1 = require(\"../delay.base\");\nvar AlwaysDelay = /** @class */ (function (_super) {\n    __extends(AlwaysDelay, _super);\n    function AlwaysDelay() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return AlwaysDelay;\n}(delay_base_1.Delay));\nexports.AlwaysDelay = AlwaysDelay;\n//# sourceMappingURL=always.delay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar skip_first_delay_1 = require(\"./skip-first/skip-first.delay\");\nvar always_delay_1 = require(\"./always/always.delay\");\nfunction DelayFactory(options, attempt) {\n    var delay = initDelayClass(options);\n    delay.setAttemptNumber(attempt);\n    return delay;\n}\nexports.DelayFactory = DelayFactory;\nfunction initDelayClass(options) {\n    if (!options.delayFirstAttempt) {\n        return new skip_first_delay_1.SkipFirstDelay(options);\n    }\n    return new always_delay_1.AlwaysDelay(options);\n}\n//# sourceMappingURL=delay.factory.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (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};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"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 (_) 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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar options_1 = require(\"./options\");\nvar delay_factory_1 = require(\"./delay/delay.factory\");\n/**\n * Executes a function with exponential backoff.\n * @param request the function to be executed\n * @param options options to customize the backoff behavior\n * @returns Promise that resolves to the result of the `request` function\n */\nfunction backOff(request, options) {\n    if (options === void 0) { options = {}; }\n    return __awaiter(this, void 0, void 0, function () {\n        var sanitizedOptions, backOff;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    sanitizedOptions = options_1.getSanitizedOptions(options);\n                    backOff = new BackOff(request, sanitizedOptions);\n                    return [4 /*yield*/, backOff.execute()];\n                case 1: return [2 /*return*/, _a.sent()];\n            }\n        });\n    });\n}\nexports.backOff = backOff;\nvar BackOff = /** @class */ (function () {\n    function BackOff(request, options) {\n        this.request = request;\n        this.options = options;\n        this.attemptNumber = 0;\n    }\n    BackOff.prototype.execute = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_1, shouldRetry;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.attemptLimitReached) return [3 /*break*/, 7];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 4, , 6]);\n                        return [4 /*yield*/, this.applyDelay()];\n                    case 2:\n                        _a.sent();\n                        return [4 /*yield*/, this.request()];\n                    case 3: return [2 /*return*/, _a.sent()];\n                    case 4:\n                        e_1 = _a.sent();\n                        this.attemptNumber++;\n                        return [4 /*yield*/, this.options.retry(e_1, this.attemptNumber)];\n                    case 5:\n                        shouldRetry = _a.sent();\n                        if (!shouldRetry || this.attemptLimitReached) {\n                            throw e_1;\n                        }\n                        return [3 /*break*/, 6];\n                    case 6: return [3 /*break*/, 0];\n                    case 7: throw new Error(\"Something went wrong.\");\n                }\n            });\n        });\n    };\n    Object.defineProperty(BackOff.prototype, \"attemptLimitReached\", {\n        get: function () {\n            return this.attemptNumber >= this.options.numOfAttempts;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    BackOff.prototype.applyDelay = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var delay;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        delay = delay_factory_1.DelayFactory(this.options, this.attemptNumber);\n                        return [4 /*yield*/, delay.apply()];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    return BackOff;\n}());\n//# sourceMappingURL=backoff.js.map","// Standalone type definitions - no Drizzle dependency\n\nexport type ChannelType = 'chat' | 'notebook' | 'gallery' | 'dm' | 'groupDm';\nexport type PostDeliveryStatus =\n  | 'enqueued'\n  | 'pending'\n  | 'sent'\n  | 'failed'\n  | 'needs_verification';\nexport type PinType = 'group' | 'channel' | 'dm' | 'groupDm';\nexport type GroupPrivacy = 'public' | 'private' | 'secret';\nexport type GroupJoinStatus = 'joining' | 'errored';\nexport type ActivityBucket = 'all' | 'mentions' | 'replies';\nexport type AttestationType = 'phone' | 'node' | 'twitter' | 'dummy';\nexport type AttestationDiscoverability = 'public' | 'verified' | 'hidden';\nexport type AttestationStatus = 'waiting' | 'pending' | 'verified';\n\nexport interface Contact {\n  id: string;\n  peerNickname?: string | null;\n  customNickname?: string | null;\n  nickname?: string | null;\n  peerAvatarImage?: string | null;\n  customAvatarImage?: string | null;\n  avatarImage?: string | null;\n  bio?: string | null;\n  status?: string | null;\n  color?: string | null;\n  coverImage?: string | null;\n  isBlocked?: boolean | null;\n  isContact?: boolean | null;\n  isContactSuggestion?: boolean | null;\n  pinnedGroups?: ContactPinnedGroup[] | null;\n  attestations?: (Attestation | ContactAttestation)[] | null;\n}\n\nexport interface ContactPinnedGroup {\n  contactId: string;\n  groupId: string;\n}\n\nexport interface Group {\n  id: string;\n  iconImage?: string | null;\n  iconImageColor?: string | null;\n  coverImage?: string | null;\n  coverImageColor?: string | null;\n  title?: string | null;\n  description?: string | null;\n  privacy?: GroupPrivacy | null;\n  haveInvite?: boolean | null;\n  haveRequestedInvite?: boolean | null;\n  currentUserIsMember: boolean;\n  currentUserIsHost: boolean;\n  hostUserId: string;\n  isNew?: boolean | null;\n  isPersonalGroup?: boolean | null;\n  joinStatus?: GroupJoinStatus | null;\n  lastPostId?: string | null;\n  lastPostAt?: number | null;\n  syncedAt?: number | null;\n  pendingMembersDismissedAt?: number | null;\n  memberCount?: number | null;\n  channels?: Channel[] | null;\n  flaggedPosts?: GroupFlaggedPosts[] | null;\n  navSections?: GroupNavSection[] | null;\n  roles?: GroupRole[] | null;\n  members?: ChatMember[] | null;\n  bannedMembers?: GroupMemberBan[] | null;\n  pendingMembers?: GroupMemberInvite[] | null;\n  joinRequests?: GroupJoinRequest[] | null;\n  bannedRanks?: GroupRankBan[] | null;\n}\n\nexport interface Channel {\n  id: string;\n  type: ChannelType;\n  groupId?: string | null;\n  iconImage?: string | null;\n  iconImageColor?: string | null;\n  coverImage?: string | null;\n  coverImageColor?: string | null;\n  title?: string | null;\n  description?: string | null;\n  contactId?: string | null;\n  addedToGroupAt?: number | null;\n  currentUserIsMember?: boolean | null;\n  currentUserIsHost?: boolean | null;\n  postCount?: number | null;\n  unreadCount?: number | null;\n  firstUnreadPostId?: string | null;\n  lastPostId?: string | null;\n  lastPostAt?: number | null;\n  lastPostSequenceNum?: number | null;\n  isPendingChannel?: boolean | null;\n  isNewMatchedContact?: boolean | null;\n  isDmInvite?: boolean | null;\n  syncedAt?: number | null;\n  remoteUpdatedAt?: number | null;\n  lastViewedAt?: number | null;\n  contentConfiguration?: any | null;\n  order?: string[] | null;\n  members?: ChatMember[] | null;\n  readerRoles?: ChannelReader[] | null;\n  writerRoles?: ChannelWriter[] | null;\n}\n\nexport interface ChannelReader {\n  channelId: string;\n  roleId: string;\n}\n\nexport interface ChannelWriter {\n  channelId: string;\n  roleId: string;\n}\n\nexport type PostType = 'block' | 'chat' | 'notice' | 'note' | 'reply' | 'delete';\n\nexport interface Post {\n  id: string;\n  authorId: string;\n  channelId: string;\n  groupId?: string | null;\n  parentId?: string | null;\n  type: PostType;\n  title?: string | null;\n  image?: string | null;\n  description?: string | null;\n  cover?: string | null;\n  content?: any | null;\n  receivedAt: number;\n  sentAt: number;\n  replyCount?: number | null;\n  replyTime?: number | null;\n  replyContactIds?: string[] | null;\n  textContent?: string | null;\n  hasAppReference?: boolean | null;\n  hasChannelReference?: boolean | null;\n  hasGroupReference?: boolean | null;\n  hasLink?: boolean | null;\n  hasImage?: boolean | null;\n  hidden?: boolean | null;\n  isEdited?: boolean | null;\n  isDeleted?: boolean | null;\n  isSequenceStub?: boolean | null;\n  deletedAt?: number | null;\n  deliveryStatus?: PostDeliveryStatus | null;\n  editStatus?: PostDeliveryStatus | null;\n  deleteStatus?: PostDeliveryStatus | null;\n  lastEditContent?: any | null;\n  lastEditTitle?: string | null;\n  lastEditImage?: string | null;\n  sequenceNum?: number | null;\n  syncedAt?: number | null;\n  backendTime?: string | null;\n  blob?: string | null;\n  draft?: any | null;\n  images?: PostImage[] | null;\n  reactions?: Reaction[] | null;\n  replies?: Post[] | null;\n  author?: Contact | null;\n}\n\nexport interface PostFlags {\n  hasAppReference?: boolean | null;\n  hasChannelReference?: boolean | null;\n  hasGroupReference?: boolean | null;\n  hasImage?: boolean | null;\n  hasLink?: boolean | null;\n}\n\nexport interface PostMetadata {\n  title?: string | null;\n  image?: string | null;\n  description?: string | null;\n  cover?: string | null;\n}\n\nexport interface ReplyMeta {\n  replyCount: number;\n  replyTime: number | null;\n  replyContactIds: string[];\n}\n\nexport interface Reaction {\n  contactId: string;\n  postId: string;\n  value: string;\n}\n\nexport interface Pin {\n  type: PinType;\n  index: number;\n  itemId: string;\n}\n\nexport interface ChannelUnread {\n  channelId: string;\n  type: 'channel' | 'dm';\n  notify: boolean;\n  count: number;\n  countWithoutThreads: number;\n  updatedAt: number;\n  firstUnreadPostId?: string | null;\n  firstUnreadPostReceivedAt?: number | null;\n}\n\nexport interface ThreadUnreadState {\n  channelId?: string | null;\n  threadId?: string | null;\n  notify?: boolean | null;\n  count?: number | null;\n  updatedAt: number;\n  firstUnreadPostId?: string | null;\n  firstUnreadPostReceivedAt?: number | null;\n}\n\nexport interface GroupUnread {\n  groupId: string;\n  notify?: boolean | null;\n  count?: number | null;\n  notifyCount?: number | null;\n  updatedAt: number;\n}\n\nexport interface BaseUnread {\n  id: string;\n  notify?: boolean | null;\n  count?: number | null;\n  notifyCount?: number | null;\n  updatedAt: number;\n  notifTimestamp?: string | null;\n}\n\nexport interface ActivityEvent {\n  id: string;\n  bucketId: ActivityBucket;\n  sourceId: string;\n  type: string;\n  timestamp: number;\n  postId?: string | null;\n  authorId?: string | null;\n  parentId?: string | null;\n  parentAuthorId?: string | null;\n  channelId?: string | null;\n  groupId?: string | null;\n  isMention?: boolean | null;\n  shouldNotify?: boolean | null;\n  content?: any | null;\n  groupEventUserId?: string | null;\n  contactUserId?: string | null;\n  contactUpdateType?: string | null;\n  contactUpdateValue?: string | null;\n  contactUpdateGroups?: { groupId: string; activityEventId: string }[] | null;\n}\n\nexport interface Settings {\n  id: string;\n  theme?: string | null;\n  disableAppTileUnreads?: boolean | null;\n  disableAvatars?: boolean | null;\n  disableRemoteContent?: boolean | null;\n  disableSpellcheck?: boolean | null;\n  disableNicknames?: boolean | null;\n  orderedGroupPins?: any | null;\n  sideBarSort?: 'alphabetical' | 'arranged' | 'recent' | null;\n  groupSideBarSort?: any | null;\n  showActivityMessage?: boolean | null;\n  logActivity?: boolean | null;\n  enableTelemetry?: boolean | null;\n  analyticsId?: string | null;\n  seenWelcomeCard?: boolean | null;\n  newGroupFlags?: any | null;\n  groupsNavState?: string | null;\n  messagesNavState?: string | null;\n  messagesFilter?: string | null;\n  gallerySettings?: string | null;\n  notebookSettings?: any | null;\n  activitySeenTimestamp?: number | null;\n  completedWayfindingSplash?: boolean | null;\n  completedWayfindingTutorial?: boolean | null;\n  disableTlonInfraEnhancement?: boolean | null;\n}\n\nexport interface ChatMember {\n  membershipType: 'group' | 'channel';\n  chatId?: string | null;\n  contactId: string;\n  joinedAt?: number | null;\n  status?: 'invited' | 'joined' | null;\n  contact?: Contact | null;\n  roles?: ChatMemberGroupRole[] | null;\n}\n\nexport interface GroupRole {\n  id: string;\n  groupId?: string | null;\n  iconImage?: string | null;\n  iconImageColor?: string | null;\n  coverImage?: string | null;\n  coverImageColor?: string | null;\n  title?: string | null;\n  description?: string | null;\n}\n\nexport interface ChatMemberGroupRole {\n  groupId: string;\n  contactId: string;\n  roleId: string;\n}\n\nexport interface GroupNavSection {\n  id: string;\n  sectionId: string;\n  groupId?: string | null;\n  iconImage?: string | null;\n  iconImageColor?: string | null;\n  coverImage?: string | null;\n  coverImageColor?: string | null;\n  title?: string | null;\n  description?: string | null;\n  sectionIndex?: number | null;\n  channels?: GroupNavSectionChannel[] | null;\n}\n\nexport interface GroupNavSectionChannel {\n  groupNavSectionId?: string | null;\n  channelId?: string | null;\n  channelIndex?: number | null;\n}\n\nexport interface GroupMemberInvite {\n  groupId: string;\n  contactId: string;\n  invitedAt?: number | null;\n}\n\nexport interface GroupMemberBan {\n  groupId: string;\n  contactId: string;\n  bannedAt?: number | null;\n}\n\nexport interface GroupJoinRequest {\n  groupId: string;\n  contactId: string;\n  requestedAt?: number | null;\n}\n\nexport interface GroupRankBan {\n  groupId: string;\n  rankId: string;\n  bannedAt?: number | null;\n}\n\nexport interface GroupFlaggedPosts {\n  groupId: string;\n  postId: string;\n  channelId: string;\n  flaggedByContactId: string;\n  flaggedAt?: number | null;\n}\n\nexport interface VolumeSettings {\n  itemId: string;\n  itemType: 'group' | 'channel' | 'thread' | 'base';\n  level: string;\n}\n\nexport interface PostImage {\n  postId?: string | null;\n  src?: string | null;\n  alt?: string | null;\n  width?: number | null;\n  height?: number | null;\n}\n\nexport interface Attestation {\n  id: string;\n  provider: string;\n  type: AttestationType;\n  value?: string | null;\n  initiatedAt?: number | null;\n  discoverability: AttestationDiscoverability;\n  status: AttestationStatus;\n  statusMessage?: string | null;\n  contactId: string;\n  providerUrl?: string | null;\n  provingTweetId?: string | null;\n  signature?: string | null;\n}\n\nexport interface ContactAttestation {\n  contactId: string;\n  attestationId: string;\n}\n\nexport interface SystemContact {\n  id: string;\n  firstName?: string | null;\n  lastName?: string | null;\n  phoneNumber?: string | null;\n  email?: string | null;\n  contactId?: string | null;\n}\n\nexport interface SystemContactSentInvite {\n  invitedTo?: string | null;\n  systemContactId?: string | null;\n  invitedAt?: number | null;\n}\n\nexport interface ActivityInit {\n  baseUnread?: BaseUnread;\n  groupUnreads: GroupUnread[];\n  channelUnreads: ChannelUnread[];\n  threadActivity: ThreadUnreadState[];\n}\n\nexport interface ClientMeta {\n  title?: string | null;\n  coverImage?: string | null;\n  iconImage?: string | null;\n  description?: string | null;\n  coverImageColor?: string | null;\n  iconImageColor?: string | null;\n}\n\nexport interface ChangesResult {\n  groups: Group[];\n  posts: Post[];\n  contacts: Contact[];\n  unreads: ActivityInit;\n  deletedChannelIds: string[];\n}\n\nexport interface PendingMemberDismissal {\n  groupId: string;\n  dismissedAt: number;\n}\n\nexport type PendingMemberDismissals = PendingMemberDismissal[];\n\nexport interface GroupEvent extends ActivityEvent {\n  type: 'group-ask';\n  group: Group;\n  groupId: string;\n  groupEventUserId: string;\n  groupEventUser: Contact;\n}\n\nexport function isGroupEvent(event: ActivityEvent): event is GroupEvent {\n  return Boolean(\n    event.type === 'group-ask' && event.groupEventUserId && event.groupId\n  );\n}\n\nexport function isSystemContact(\n  contact: Contact | SystemContact\n): contact is SystemContact {\n  const hasPhone = 'phoneNumber' in contact;\n  const hasEmail = 'email' in contact;\n  return hasPhone || hasEmail;\n}\n\n// Constants\nexport const SETTINGS_SINGLETON_KEY = 'settings';\nexport const BASE_UNREADS_SINGLETON_KEY = 'base_unreads';\n\n// Chat type (union of group and channel chats)\nexport type Chat = {\n  id: string;\n  pin: Pin | null;\n  volumeSettings: VolumeSettings | null;\n  timestamp: number;\n  isPending: boolean;\n  unreadCount: number;\n} & ({ type: 'group'; group: Group } | { type: 'channel'; channel: Channel });\n\nexport interface GroupedChats {\n  pinned: Chat[];\n  unpinned: Chat[];\n  pending: Chat[];\n}\n\n// AppInfo type\nexport interface AppInfo {\n  desk: string;\n  cass: { da: string; ud: number };\n  hash: string;\n  sync: { ship: string; desk: string } | null;\n  groupsVersion?: string;\n  groupsHash?: string;\n  groupsSyncNode?: string;\n}\n\n// Storage interface for hosting tokens\nexport interface StorageItem<T> {\n  getValue: () => T | null;\n  setValue: (value: T | null) => void;\n}\n\n// Hosting storage stubs\nexport const hostingAuthToken: StorageItem<string> = {\n  getValue: () => null,\n  setValue: () => {},\n};\n\nexport const hostingUserId: StorageItem<string> = {\n  getValue: () => null,\n  setValue: () => {},\n};\n","export default () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n","import { render, valid } from '@urbit/aura';\nimport anyAscii from 'any-ascii';\nimport { differenceInDays, endOfToday, format } from 'date-fns';\nimport emojiRegex from 'emoji-regex';\nimport { BackoffOptions, backOff } from 'exponential-backoff';\n\nimport * as api from '../api';\nimport {\n  isDmChannelId,\n  isGroupChannelId,\n  isGroupDmChannelId,\n} from '../api/apiUtils';\nimport * as db from '../db';\nimport * as domain from '../domain';\nimport * as ub from '../urbit';\nimport { Stringified } from '../utils';\n\nexport { isDmChannelId, isGroupChannelId, isGroupDmChannelId };\n\nexport const IMAGE_REGEX =\n  /(\\.jpg|\\.img|\\.png|\\.gif|\\.tiff|\\.jpeg|\\.webp|\\.svg)(?:\\?.*)?$/i;\nexport const AUDIO_REGEX = /(\\.mp3|\\.wav|\\.ogg|\\.m4a)(?:\\?.*)?$/i;\nexport const VIDEO_REGEX = /(\\.mov|\\.mp4|\\.ogv|\\.webm)(?:\\?.*)?$/i;\nexport const URL_REGEX = /^https?:\\/\\/[^\\s]+$/i;\nexport const PATP_REGEX = /(~[a-z0-9-]+)/i;\nexport const IMAGE_URL_REGEX =\n  /^(http(s?):)([/.\\w\\s-:]|%2*)*\\.(?:jpg|img|png|gif|tiff|jpeg|webp|svg)(?:\\?.*)?$/i;\nexport const REF_REGEX = /\\/1\\/(chan|group|desk)\\/[^\\s]+/g;\nexport const REF_URL_REGEX = /^\\/1\\/(chan|group|desk)\\/[^\\s]+/;\n// sig and hep explicitly left out\nexport const PUNCTUATION_REGEX = /[.,/#!$%^&*;:{}=_`()]/g;\n\n// Characters that look like tilde (~) and could be confusing\nexport const SIG_LIKES = [\n  '\\u007E', // ~ (tilde)\n  '\\u02DC', // ˜ (small tilde)\n  '\\u223C', // ∼ (tilde operator)\n  '\\u301C', // 〜 (wave dash)\n  '\\uFF5E', // ～ (fullwidth tilde)\n  '\\u2053', // ⁓ (swung dash)\n  '\\u2241', // ≁ (not tilde)\n];\n\nexport function isValidUrl(str?: string): boolean {\n  return str ? !!URL_REGEX.test(str) : false;\n}\n\nexport type NicknameValidationErrorType =\n  | 'confusable_characters'\n  | 'invalid_patp'\n  | 'wrong_user_id';\n\nexport type NicknameValidationResult =\n  | { isValid: true }\n  | {\n      isValid: false;\n      errorType: NicknameValidationErrorType;\n    };\n\n/**\n * Validates a nickname against several rules:\n * - Cannot contain characters that look like ~ (confusable characters)\n * - If it contains ~, it must be a valid patp\n * - If it contains a patp, it must be the current user's ID\n *\n * Uses Unicode normalization (NFKC) to handle confusable characters before validation.\n *\n * @param nickname The nickname to validate\n * @param currentUserId The current user's ID (patp)\n * @returns A validation result object with isValid flag and optional errorType\n */\nexport function validateNickname(\n  nickname: string,\n  currentUserId: string\n): NicknameValidationResult {\n  if (!nickname || nickname.length === 0) {\n    return { isValid: true };\n  }\n\n  // Normalize unicode characters to handle confusables\n  const normalizedNickname = nickname.normalize('NFKC');\n\n  // Check for confusable characters (characters that look like ~)\n  for (let i = 0; i < normalizedNickname.length; i++) {\n    const char = normalizedNickname[i];\n    const isConfusable = SIG_LIKES.some((sig: string) => sig === char);\n\n    if (isConfusable && char !== '~') {\n      return {\n        isValid: false,\n        errorType: 'confusable_characters',\n      };\n    }\n  }\n\n  // Check for patps in the nickname (use normalized version)\n  if (normalizedNickname.includes('~')) {\n    const matches = normalizedNickname.match(new RegExp(PATP_REGEX, 'gi'));\n    if (matches) {\n      for (const match of matches) {\n        if (!valid('p', match)) {\n          return {\n            isValid: false,\n            errorType: 'invalid_patp',\n          };\n        }\n        if (match !== currentUserId) {\n          return {\n            isValid: false,\n            errorType: 'wrong_user_id',\n          };\n        }\n      }\n    }\n  }\n\n  return { isValid: true };\n}\n\n/**\n * Returns a user-friendly error message for a nickname validation error.\n * @param errorType The type of validation error\n * @returns A human-readable error message\n */\nexport function getNicknameErrorMessage(\n  errorType: NicknameValidationErrorType\n): string {\n  switch (errorType) {\n    case 'confusable_characters':\n      return 'Nickname cannot contain characters that look like ~';\n    case 'invalid_patp':\n      return 'You can only use your own ID in your nickname';\n    case 'wrong_user_id':\n      return 'You can only use your own ID in your nickname';\n  }\n}\n\nexport async function asyncWithDefault<T>(\n  cb: () => Promise<T>,\n  def: T\n): Promise<T> {\n  try {\n    return await cb();\n  } catch (error) {\n    console.error(error);\n    return def;\n  }\n}\n\nexport function getFlagParts(flag: string) {\n  const parts = flag.split('/');\n\n  return {\n    ship: parts[0],\n    name: parts[1],\n  };\n}\n\nexport function getNestParts(nest: string) {\n  const parts = nest.split('/');\n  if (parts.length !== 3) {\n    throw new Error(`Invalid nest format: ${nest}`);\n  }\n\n  return {\n    type: parts[0],\n    ship: parts[1],\n    name: parts[2],\n  };\n}\n\nexport function getPrettyAppName(kind: 'chat' | 'diary' | 'heap') {\n  switch (kind) {\n    case 'chat':\n      return 'Chat';\n    case 'diary':\n      return 'Notebook';\n    case 'heap':\n      return 'Gallery';\n  }\n}\n\nexport async function jsonFetch<T>(\n  info: RequestInfo,\n  init?: RequestInit\n): Promise<T> {\n  try {\n    const res = await fetch(info, init);\n\n    if (!res.ok) {\n      throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n    }\n\n    const data = await res.json();\n    return data as T;\n  } catch (error) {\n    if (error instanceof Error) {\n      console.error('jsonFetch error:', error.message);\n      throw error;\n    } else {\n      console.error('jsonFetch unknown error:', error);\n      throw new Error('Unknown error occurred during fetch');\n    }\n  }\n}\n\nconst isFacebookGraphDependent = (url: string) => {\n  const caseDesensitizedURL = url.toLowerCase();\n  return (\n    caseDesensitizedURL.includes('facebook.com') ||\n    caseDesensitizedURL.includes('instagram.com')\n  );\n};\n\nexport const validOembedCheck = (embed: any, url: string) => {\n  if (!isFacebookGraphDependent(url)) {\n    if (embed?.html) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexport function isImageUrl(url: string) {\n  return IMAGE_URL_REGEX.test(url);\n}\n\nexport function makePrettyTime(date: Date) {\n  return format(date, 'HH:mm');\n}\n\nexport function makePrettyTimeFromMs(ms: number) {\n  const minutes = Math.floor(ms / 60000);\n  const seconds = Math.floor((ms % 60000) / 1000);\n  return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n}\n\nexport function makePrettyDay(date: Date) {\n  const diff = differenceInDays(endOfToday(), date);\n  switch (diff) {\n    case 0:\n      return 'Today';\n    case 1:\n      return 'Yesterday';\n    default:\n      return `${format(date, 'LLLL')} ${format(date, 'do')}`;\n  }\n}\n\nexport function makePrettyDaysSince(date: Date) {\n  const diff = differenceInDays(endOfToday(), date);\n  switch (diff) {\n    case 0:\n      return 'Today';\n    case 1:\n      return 'Yesterday';\n    default:\n      return `${diff}d ago`;\n  }\n}\n\nexport function makePrettyShortDate(date: Date) {\n  return format(date, `MMMM do, yyyy`);\n}\n\nexport function makeShortDate(date: Date) {\n  return format(date, 'M/d/yy');\n}\n\nexport interface DayTimeDisplay {\n  original: Date;\n  diff: number;\n  day: string;\n  time: string;\n  asString: string;\n}\n\nexport function makePrettyDayAndTime(date: Date): DayTimeDisplay {\n  const diff = differenceInDays(endOfToday(), date);\n  const time = makePrettyTime(date);\n  let day = '';\n  switch (true) {\n    case diff === 0:\n      day = 'Today';\n      break;\n    case diff === 1:\n      day = 'Yesterday';\n      break;\n    case diff > 1 && diff < 8:\n      day = format(date, 'cccc');\n      break;\n    default:\n      day = `${format(date, 'LLLL')} ${format(date, 'do')}`;\n  }\n\n  return {\n    original: date,\n    diff,\n    time,\n    day,\n    asString: `${day} • ${time}`,\n  };\n}\n\nexport interface DateDayTimeDisplay extends DayTimeDisplay {\n  fullDate: string;\n}\n\nexport function makePrettyDayAndDateAndTime(date: Date): DateDayTimeDisplay {\n  const fullDate = `${format(date, 'LLLL')} ${format(date, 'do')}, ${format(\n    date,\n    'yyyy'\n  )}`;\n  const dayTime = makePrettyDayAndTime(date);\n\n  if (dayTime.diff >= 8) {\n    return {\n      ...dayTime,\n      fullDate,\n      asString: `${fullDate} • ${dayTime.time}`,\n    };\n  }\n\n  return {\n    ...dayTime,\n    fullDate,\n    asString: `${dayTime.asString} • ${fullDate}`,\n  };\n}\n\nconst emojiTestRegex = emojiRegex();\n\nexport function containsOnlyEmoji(input: string): boolean {\n  const normalized = input.trim();\n\n  if (normalized.length === 0) {\n    return false;\n  }\n\n  if (normalized.length > 10) {\n    return false;\n  }\n  // Lots of gotchas trying to figure out length of an emoji string. This is a\n  // reasonably reliable way to do it in hermes. Should keep an eye on perf.\n  // Some info here: https://stackoverflow.com/questions/54369513/how-to-count-the-correct-length-of-a-string-with-emojis-in-javascript\n  return [...normalized].every((char) => {\n    return !!char.match(emojiTestRegex);\n  });\n}\n\nexport function normalizeUrbitColor(color?: string | null): string | null {\n  if (!color) {\n    return null;\n  }\n\n  if (color.startsWith('#')) {\n    return color;\n  }\n\n  const noDots = color.replace('.', '');\n  const prefixStripped = color.startsWith('0x') ? noDots.slice(2) : noDots;\n  const lengthAdjustedColor = prefixStripped.toUpperCase().padStart(6, '0');\n  return `#${lengthAdjustedColor}`;\n}\n\n/**\n * Generates a safe ID from a given text.\n * @param text The text to generate a safe ID from.\n * @param prefix Optional prefix for the ID, defaults to 'id'.\n * @returns A safe ID.\n */\nexport const generateSafeId = (text: string, prefix: string = 'id') => {\n  if (!text.match(/[a-zA-Z0-9]/)) {\n    return `${prefix}-${Math.random().toString(36).substring(2, 10)}`;\n  }\n  return text.toLowerCase().replace(/\\s/g, '-');\n};\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\nconst timezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;\n\n/**\n * Returns true if the two dates happened on current calendar day, in local\n * timezone.\n *\n * TODO: Currently this calculation will be off by an hour when crossing\n * daylight savings time. We're doing it this way because date operations are\n * quite slow in RN/Hermes.\n */\nexport const isSameDay = (a: number, b: number) => {\n  const dayA = Math.floor((a - timezoneOffset) / MS_PER_DAY);\n  const dayB = Math.floor((b - timezoneOffset) / MS_PER_DAY);\n  return dayA === dayB;\n};\n\nexport const isToday = (date: number) => {\n  return isSameDay(date, Date.now());\n};\n\nexport const appendContactIdToReplies = (\n  existingReplies: string[],\n  contactId: string\n): string[] => {\n  const newArray = [...existingReplies];\n  const index = newArray.indexOf(contactId);\n  if (index !== -1) {\n    newArray.splice(index, 1);\n  }\n  newArray.push(contactId);\n  return newArray;\n};\n\nexport function convertToAscii(str: string): string {\n  const ascii = anyAscii(str);\n  return ascii.toLowerCase().replaceAll(/[^a-zA-Z0-9-]/g, '-');\n}\n\nexport const createShortCodeFromTitle = (title: string): string => {\n  const shortCode = convertToAscii(title).replace(\n    /[^a-z]*([a-z][-\\w\\d]+)/i,\n    '$1'\n  );\n  return shortCode;\n};\n\nexport function extractInlinesFromContent(story: api.PostContent): ub.Inline[] {\n  const inlines =\n    story !== null\n      ? (story.filter((v) => 'inline' in v) as ub.VerseInline[]).flatMap(\n          (i) => i.inline\n        )\n      : [];\n\n  return inlines;\n}\n\nexport function extractReferencesFromContent(\n  story: api.PostContent\n): domain.ContentReference[] {\n  const references =\n    story !== null\n      ? (story.filter(\n          (s) => 'type' in s && s.type == 'reference'\n        ) as domain.ContentReference[])\n      : [];\n\n  return references;\n}\n\nexport function extractBlocksFromContent(story: api.PostContent): ub.Block[] {\n  const blocks =\n    story !== null\n      ? (story.filter((v) => 'block' in v) as ub.VerseBlock[]).flatMap(\n          (b) => b.block\n        )\n      : [];\n\n  return blocks;\n}\n\nexport const extractContentTypes = (\n  content: Stringified<api.PostContent> | api.PostContent\n): {\n  inlines: ub.Inline[];\n  references: domain.ContentReference[];\n  blocks: ub.Block[];\n  story: api.PostContent;\n} => {\n  const story = typeof content === 'string' ? JSON.parse(content) : content;\n  const inlines = extractInlinesFromContent(story);\n  const references = extractReferencesFromContent(story);\n  const blocks = extractBlocksFromContent(story);\n\n  return { inlines, references, blocks, story };\n};\n\nexport const extractContentTypesFromPost = (\n  post: db.Post | { content: api.PostContent }\n): {\n  inlines: ub.Inline[];\n  references: domain.ContentReference[];\n  blocks: ub.Block[];\n  story: api.PostContent;\n} => {\n  const { inlines, references, blocks, story } = extractContentTypes(\n    post.content as Stringified<api.PostContent>\n  );\n\n  return { inlines, references, blocks, story };\n};\n\nexport const isTextPost = (post: db.Post) => {\n  const { inlines, references, blocks } = extractContentTypesFromPost(post);\n  return blocks.length === 0 && inlines.length > 0 && references.length === 0;\n};\n\nexport const isReferencePost = (post: db.Post) => {\n  const { inlines, references, blocks } = extractContentTypesFromPost(post);\n  return blocks.length === 0 && inlines.length === 0 && references.length === 1;\n};\n\nexport const isImagePost = (post: db.Post) => {\n  const { blocks } = extractContentTypesFromPost(post);\n  return blocks.length === 1 && blocks.some((b) => 'image' in b);\n};\n\nexport const isRichLinkPost = (post: db.Post) => {\n  const { blocks } = extractContentTypesFromPost(post);\n  return blocks.length === 1 && blocks.some((b) => 'link' in b);\n};\n\nexport function getRichLinkMetadata(block: ub.Block):\n  | {\n      url: string;\n      title?: string;\n      description?: string;\n      image?: string;\n    }\n  | undefined {\n  if (!('link' in block)) {\n    return undefined;\n  }\n  const { link } = block;\n  const {\n    url,\n    meta: { title, description, image },\n  } = link;\n  return {\n    url,\n    title,\n    description,\n    image,\n  };\n}\n\nexport const findFirstImageBlock = (blocks: ub.Block[]): ub.Image | null => {\n  return blocks.find((b) => 'image' in b) as ub.Image;\n};\n\nexport const textPostIsLinkedImage = (post: db.Post): boolean => {\n  const postIsJustText = isTextPost(post);\n  if (!postIsJustText) {\n    return false;\n  }\n\n  const { inlines } = extractContentTypesFromPost(post);\n\n  if (inlines.length <= 2) {\n    const [first] = inlines;\n    if (typeof first === 'object' && 'link' in first) {\n      const link = first as ub.Link;\n      const { href } = link.link;\n      const isImage = IMAGE_REGEX.test(href);\n\n      return isImage;\n    }\n  }\n\n  return false;\n};\n\nexport const textPostIsLink = (post: db.Post): boolean => {\n  const postIsJustText = isTextPost(post);\n  if (!postIsJustText) {\n    return false;\n  }\n\n  const postIsImage = textPostIsLinkedImage(post);\n  if (postIsImage) {\n    return false;\n  }\n\n  const { inlines } = extractContentTypesFromPost(post);\n\n  if (inlines.length <= 2) {\n    const [first] = inlines;\n    if (typeof first === 'object' && 'link' in first) {\n      const link = first as ub.Link;\n      const { href } = link.link;\n      const isLink = URL_REGEX.test(href);\n\n      return isLink;\n    }\n  }\n\n  return false;\n};\n\nexport const textPostIsReference = (post: db.Post): boolean => {\n  const { inlines, references } = extractContentTypesFromPost(post);\n  if (references.length === 0) {\n    return false;\n  }\n\n  if (inlines.length === 2) {\n    const [first] = inlines;\n    const isRefString =\n      typeof first === 'string' && REF_REGEX.test(first as string);\n\n    if (isRefString) {\n      return true;\n    }\n  }\n\n  if (\n    inlines.length === 1 &&\n    typeof inlines[0] === 'object' &&\n    'break' in inlines[0]\n  ) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const getPostTypeFromChannelId = ({\n  channelId,\n  parentId,\n}: {\n  channelId?: string | null;\n  parentId?: string | null;\n}): db.PostType => {\n  if (!channelId) return 'chat';\n  const isDm = isDmChannelId(channelId) || isGroupDmChannelId(channelId);\n  if (parentId) {\n    return 'reply';\n  } else if (isDm) {\n    return 'chat';\n  } else {\n    const idType = channelId.split('/')[0];\n    if (idType === 'diary') {\n      return 'note';\n    } else if (idType === 'heap') {\n      return 'block';\n    } else {\n      return 'chat';\n    }\n  }\n};\n\nexport const getCompositeGroups = (\n  groups: db.Group[],\n  base: Partial<db.Group>[]\n): db.Group[] => {\n  const baseIndex = base.reduce(\n    (acc, curr) => {\n      if (curr.id) {\n        acc[curr.id] = curr;\n      }\n      return acc;\n    },\n    {} as Record<string, Partial<db.Group>>\n  );\n\n  return groups.map((group) => {\n    const baseGroup = baseIndex[group.id] ?? {};\n    return { ...baseGroup, ...group };\n  });\n};\n\nexport type RetryConfig = Pick<\n  BackoffOptions,\n  'startingDelay' | 'numOfAttempts' | 'maxDelay'\n>;\n\nexport const withRetry = <T>(fn: () => Promise<T>, config?: RetryConfig) => {\n  return backOff(fn, {\n    delayFirstAttempt: false,\n    startingDelay: config?.startingDelay ?? 1000,\n    numOfAttempts: config?.numOfAttempts ?? 4,\n    maxDelay: config?.maxDelay,\n  });\n};\n\n/**\n * Random id value for group or channel, 4 bits of entropy, eg 0v2a.lmibb -> v2almibb\n */\nexport function getRandomId() {\n  const id = render('uv', BigInt(Math.floor(Math.random() * 0xffffffff)));\n  return id.replace(/\\./g, '').slice(1);\n}\n\n/**\n * Simple one way transform for identifying distinct values while\n * obscuring sensitive information, eg ~latter-bolden/garden -> rfn4hj\n */\nexport function simpleHash(input: string) {\n  let hash = 0;\n  for (let i = 0; i < input.length; i++) {\n    const char = input.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash = hash & hash;\n  }\n  return Math.abs(hash).toString(36);\n}\n\nconst wayfindingGroup = domain.PersonalGroupSlugs;\nfunction isWayfindingChannel(id: string | null | undefined): boolean {\n  if (!id) return false;\n  if (isDmChannelId(id)) return false;\n  if (isGroupDmChannelId(id)) return false;\n\n  const channelParts = getNestParts(id);\n  return [\n    wayfindingGroup.chatSlug,\n    wayfindingGroup.collectionSlug,\n    wayfindingGroup.notebookSlug,\n  ].includes(channelParts.name);\n}\n\nfunction isWayfindingGroup(id: string | null | undefined): boolean {\n  if (!id) return false;\n  const groupParts = getFlagParts(id);\n  return groupParts.name === wayfindingGroup.slug;\n}\n\nexport function getModelAnalytics({\n  post,\n  group,\n  channel,\n}: {\n  post?: Partial<db.Post> | null;\n  group?: Partial<db.Group> | null;\n  channel?: Partial<db.Channel> | null;\n}) {\n  const details: Record<string, string | boolean | null> = {};\n\n  const isWayfindingGroupId = isWayfindingGroup(group?.id);\n  const channelId = channel?.id || post?.channelId;\n  const isWayfindingChannelId = isWayfindingChannel(channelId);\n\n  if (isWayfindingGroupId || isWayfindingChannelId) {\n    details.isPersonalGroup = true;\n  }\n\n  const isTlonTeamDM = channelId === '~wittyr-witbes'; // Tlon Team node\n  if (isTlonTeamDM) {\n    details.isTlonTeamDM = true;\n  }\n\n  // we want to mask all group/channel IDs unless:\n  // 1. it's the default wayfinding group\n  // 2. it's the Tlon Team DM\n  const getMaskedId = (id: string | null | undefined) => {\n    if (!id) return null;\n    if (isWayfindingGroupId || isWayfindingChannelId) {\n      return id;\n    }\n\n    if (isTlonTeamDM) {\n      return id;\n    }\n\n    return id ? simpleHash(id) : null;\n  };\n\n  if (post) {\n    details.postId = post.sentAt ? simpleHash(post.sentAt.toString()) : null;\n    details.channelId = getMaskedId(post.channelId);\n  }\n\n  if (channel) {\n    details.channelId = getMaskedId(channel.id);\n    details.channelType = channel.type ?? null;\n    details.groupId = getMaskedId(channel.groupId);\n  }\n\n  if (group) {\n    details.groupId = getMaskedId(group.id);\n    details.groupType =\n      (group.channels?.length ?? 1) > 1 ? 'multi-topic' : 'groupchat';\n    details.groupPrivacy = group.privacy ?? null;\n  }\n\n  return details;\n}\n\nexport function escapeRegExp(text: string): string {\n  return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n","import { createDevLogger } from '../debug';\nimport { getCanonicalPostId } from './apiUtils';\n\nconst logger = createDevLogger('harkApi', true);\n\nexport const getPostInfoFromWer = (\n  wer: string\n): { id: string; authorId: string; isDm: boolean } | null => {\n  try {\n    const isDm = getIsDmFromWer(wer);\n    const isChannelPost = getIsChannelPostFromWer(wer);\n    const parts = wer.split('/');\n    const isGroupChannelReply = parts.length > 10;\n\n    if (parts.length < 2) {\n      return null;\n    }\n\n    if (isDm && parts[5]) {\n      return {\n        id: getCanonicalPostId(parts[5]),\n        authorId: parts[4],\n        isDm,\n      };\n    }\n\n    if (isChannelPost && isGroupChannelReply && parts[9]) {\n      return {\n        id: getCanonicalPostId(parts[9]),\n        authorId: '',\n        isDm,\n      };\n    }\n\n    return null;\n  } catch (e) {\n    logger.error('getPostInfoFromWer failed', e, wer);\n    return null;\n  }\n};\n\nexport const getIsDmFromWer = (wer: string): boolean => {\n  const parts = wer.split('/');\n  if (parts.length < 2) {\n    return false;\n  }\n  const type = parts[1];\n  return type === 'dm';\n};\n\nexport const getIsChannelPostFromWer = (wer: string): boolean => {\n  const parts = wer.split('/');\n  if (parts.length < 2) {\n    return false;\n  }\n  const type = parts[1];\n  return type === 'groups';\n};\n","import { render, da } from '@urbit/aura';\nimport { Atom, Cell, Noun, enjs } from '@urbit/nockjs';\n\n// TODO: nockjs should export these\nexport type Json =\n  | null\n  | boolean\n  | number\n  | string\n  | Json[]\n  | {\n      [key: string]: Json;\n    };\nexport type EnjsFunction = (n: Noun) => Json;\n\nexport const giveNull: EnjsFunction = () => null;\nexport const maybe =\n  (fn: EnjsFunction): EnjsFunction =>\n  (noun: Noun) => {\n    if (noun instanceof Atom) {\n      return null;\n    }\n\n    return fn(noun.tail);\n  };\n\nexport const getPatp: EnjsFunction = (noun: Noun) => {\n  if (noun instanceof Cell) {\n    throw new Error(`malformed patp ${noun.toString()}`);\n  }\n\n  return render('p', noun.number);\n};\n\nexport const getUv: EnjsFunction = runIfAtom((a) => render('uv', a.number));\n\nexport const time: EnjsFunction = runIfAtom((a) => da.toUnix(a.number));\n\nexport function getMapAsObject<T>(\n  noun: Noun,\n  key: EnjsFunction,\n  value: EnjsFunction\n): Record<string, T> {\n  return Object.fromEntries(\n    enjs.tree((n: Noun) => {\n      if (!(n instanceof Cell)) {\n        throw new Error('malformed map');\n      }\n\n      return [key(n.head), value(n.tail)];\n    })(noun) as [string, T][]\n  );\n}\n\nexport function runIfAtom(fn: (atom: Atom) => Json): EnjsFunction {\n  return (noun: Noun) => {\n    if (noun instanceof Cell) {\n      throw new Error('malformed atom');\n    }\n\n    return fn(noun);\n  };\n}\n\nexport const logNoun =\n  (fn: EnjsFunction, str: string): EnjsFunction =>\n  (noun: Noun) => {\n    console.log(str, noun.toString());\n    return fn(noun);\n  };\n\ninterface frondOpt {\n  tag: string;\n  get: EnjsFunction;\n}\n\ninterface frondValueOpt<T> {\n  tag: string;\n  get: (noun: Noun) => T;\n}\n\nexport function getFrondValue<T>(opts: frondValueOpt<T>[]): (n: Noun) => T {\n  return (noun: Noun) => {\n    if (!(noun instanceof Cell)) {\n      throw new Error('malformed frond');\n    }\n\n    const tag = enjs.cord(noun.head);\n\n    const opt = opts.find((o) => o.tag === tag);\n\n    if (!opt) {\n      throw new Error('unknown frond tag');\n    }\n\n    return opt.get(noun.tail);\n  };\n}\n","import * as api from '../api';\nimport { ContentReference } from '../domain';\nimport * as ub from '../urbit';\nimport { assertNever } from '../utils';\nimport { PostBlobDataEntry, parsePostBlob } from './content-helpers';\nimport { VIDEO_REGEX, containsOnlyEmoji } from './utils';\n\n// Inline types\n\nexport type StyleInlineData = {\n  type: 'style';\n  style: 'bold' | 'italic' | 'strikethrough' | 'code';\n  children: InlineData[];\n};\n\nexport type TextInlineData = {\n  type: 'text';\n  text: string;\n};\n\nexport type MentionInlineData = {\n  type: 'mention';\n  contactId: string;\n};\n\nexport type GroupMentionInlineData = {\n  type: 'groupMention';\n  group: 'all' | string;\n};\n\nexport type LineBreakInlineData = {\n  type: 'lineBreak';\n};\n\nexport type LinkInlineData = {\n  type: 'link';\n  href: string;\n  text: string;\n};\n\nexport type TaskInlineData = {\n  type: 'task';\n  checked: boolean;\n  children: InlineData[];\n};\n\nexport type InlineData =\n  | StyleInlineData\n  | TextInlineData\n  | MentionInlineData\n  | GroupMentionInlineData\n  | LineBreakInlineData\n  | LinkInlineData\n  | TaskInlineData;\n\nexport type InlineType = InlineData['type'];\n\nexport type InlineFromType<T extends InlineType> = Extract<\n  InlineData,\n  { type: T }\n>;\n\n// Block content types\n\nexport type BlockquoteBlockData = {\n  type: 'blockquote';\n  content: InlineData[];\n};\n\nexport type ParagraphBlockData = {\n  type: 'paragraph';\n  content: InlineData[];\n};\n\nexport type BigEmojiBlockData = {\n  type: 'bigEmoji';\n  emoji: string;\n};\n\nexport type ImageBlockData = {\n  type: 'image';\n  src: string;\n  height: number;\n  width: number;\n  alt: string;\n};\n\nexport type VideoBlockData = {\n  type: 'video';\n  src: string;\n  height: number;\n  width: number;\n  alt: string;\n};\n\nexport type FileUploadBlockData = {\n  type: 'file';\n  file: PostBlobDataEntry;\n};\n\nexport type LinkBlockData = {\n  type: 'link';\n  url: string;\n  title?: string;\n  description?: string;\n  siteName?: string;\n  siteIconUrl?: string;\n  previewImageUrl?: string;\n  previewImageWidth?: string;\n  previewImageHeight?: string;\n};\n\nexport type ReferenceBlockData = ContentReference;\n\nexport type CodeBlockData = {\n  type: 'code';\n  content: string;\n  lang?: string;\n};\n\nexport type HeaderBlockData = {\n  type: 'header';\n  level: ub.HeaderLevel;\n  children: InlineData[];\n};\n\nexport type RuleBlockData = {\n  type: 'rule';\n};\n\nexport type ListBlockData = {\n  type: 'list';\n  list: ListData;\n};\n\nexport type ListData = {\n  content: InlineData[];\n  type?: 'ordered' | 'unordered' | 'tasklist';\n  children?: ListData[];\n};\n\nexport type BlockData =\n  | BlockquoteBlockData\n  | ParagraphBlockData\n  | ImageBlockData\n  | VideoBlockData\n  | FileUploadBlockData\n  | LinkBlockData\n  | ReferenceBlockData\n  | CodeBlockData\n  | HeaderBlockData\n  | RuleBlockData\n  | ListBlockData\n  | BigEmojiBlockData;\n\nexport type BlockType = BlockData['type'];\n\nexport type BlockFromType<T extends BlockType> = Extract<\n  BlockData,\n  { type: T }\n>;\n\nexport type PostContent = BlockData[];\n\nexport interface PlaintextPreviewConfig {\n  blockSeparator: string;\n  includeLinebreaks: boolean;\n  includeRefTag: boolean;\n  indentDepth?: number;\n}\nexport namespace PlaintextPreviewConfig {\n  export const defaultConfig: PlaintextPreviewConfig = Object.freeze({\n    blockSeparator: '\\n',\n    includeLinebreaks: true,\n    includeRefTag: true,\n  });\n\n  export const inlineConfig: PlaintextPreviewConfig = Object.freeze({\n    blockSeparator: ' ',\n    includeLinebreaks: false,\n    includeRefTag: false,\n  });\n}\n\nexport function plaintextPreviewOf(\n  content: PostContent,\n  config: PlaintextPreviewConfig = PlaintextPreviewConfig.defaultConfig\n): string {\n  return content\n    .map((block) => {\n      switch (block.type) {\n        case 'blockquote':\n          return `> ${plaintextPreviewOfInlineString(block.content, config)}`;\n        case 'paragraph':\n          return plaintextPreviewOfInlineString(block.content, config);\n        case 'image':\n          return '(Image)';\n        case 'video':\n          return '(Video)';\n        case 'reference':\n          return config.includeRefTag ? '(Ref)' : '';\n        case 'code':\n          return `\\`\\`\\`${block.lang ?? ''}\\n${block.content}\\n\\`\\`\\``;\n        case 'header':\n          return plaintextPreviewOfInlineString(block.children, config);\n        case 'rule':\n          return '---';\n        case 'list':\n          return plaintextPreviewOfListData(block.list, config);\n        case 'bigEmoji':\n          return block.emoji;\n      }\n    })\n    .join(config.blockSeparator)\n    .trim();\n}\n\nfunction plaintextPreviewOfListData(\n  list: ListData,\n  config: PlaintextPreviewConfig\n): string {\n  const out: string[] = [];\n  out.push(plaintextPreviewOfInlineString(list.content, config));\n  if (list.children != null) {\n    const delimiter = (index: number) => {\n      switch (list.type) {\n        case undefined:\n        // fallthrough\n        case 'tasklist':\n        // fallthrough\n        case 'unordered':\n          return '-';\n        case 'ordered':\n          return `${index + 1}.`;\n      }\n    };\n    const currentIndentDepth = config.indentDepth ?? 0;\n    const effectiveIndentDepth = config.includeLinebreaks\n      ? currentIndentDepth\n      : 0;\n    out.push(\n      ...list.children.map(\n        (child, index) =>\n          `${'\\t'.repeat(effectiveIndentDepth)}${delimiter(index)} ${plaintextPreviewOfListData(\n            child,\n            {\n              ...config,\n              indentDepth: currentIndentDepth + 1,\n            }\n          )}`\n      )\n    );\n  }\n  return out.join(config.blockSeparator);\n}\n\nexport function plaintextPreviewOfInlineString(\n  inlines: InlineData[],\n  config: PlaintextPreviewConfig\n): string {\n  return inlines\n    .map((inline) => plaintextPreviewOfInline(inline, config))\n    .join('');\n}\nexport function plaintextPreviewOfInline(\n  inline: InlineData,\n  config: PlaintextPreviewConfig\n): string {\n  switch (inline.type) {\n    case 'style':\n      return plaintextPreviewOfInlineString(inline.children, config);\n    case 'text':\n      return inline.text;\n    case 'mention':\n      return inline.contactId;\n    case 'groupMention':\n      return `@${inline.group}`;\n    case 'lineBreak':\n      return '\\n';\n    case 'link':\n      return inline.text;\n    case 'task': {\n      let out = inline.checked ? '[x] ' : '[ ] ';\n      out += plaintextPreviewOfInlineString(inline.children, config);\n      return out;\n    }\n  }\n}\n\n/**\n * Preprocess content for rendering. Alterations include:\n * - Removing line breaks at end of content\n * - Identifying and extract block-like inlines to the top level (block quotes,\n *   code blocks, etc.)\n * - Simplifying data structure so that we can easily switch on type while\n *   rendering.\n *\n * I don't love that this happens each time a post is rendered -- I'd like to\n * move to something like this for all local content representation, only\n * converting it to the current format for interaction with the api.\n *\n * The format is very loosely inspired by ProseMirror's internal representation,\n * and could be converted to be compatible pretty easily.\n */\nexport function convertContent(\n  input: unknown,\n  blob: string | undefined | null\n): PostContent {\n  const out: PostContent = [];\n\n  if (blob != null) {\n    const blobData = parsePostBlob(blob);\n    for (const entry of blobData) {\n      switch (entry.type) {\n        case 'file': {\n          out.push({\n            type: 'file',\n            file: entry,\n          });\n          break;\n        }\n\n        case 'unknown': {\n          out.push({\n            type: 'blockquote',\n            content: [\n              { type: 'text', text: 'Upgrade your app to see this post' },\n            ],\n          });\n          break;\n        }\n      }\n    }\n  }\n\n  if (!input) {\n    return out;\n  }\n\n  const story: api.PostContent =\n    typeof input === 'string' ? JSON.parse(input) : input;\n\n  if (!story) {\n    return out;\n  }\n\n  out.push(...convertContentSafe(story));\n  return out;\n}\n\n/**\n * Same as `convertContent`, but does not parse the input, and\n * applies more type strictness at callsite.\n */\nexport function convertContentSafe(\n  story: Exclude<api.PostContent, null>\n): PostContent {\n  const blocks: PostContent = [];\n  for (const verse of story) {\n    if ('type' in verse && verse.type === 'reference') {\n      blocks.push(verse);\n    } else if ('block' in verse) {\n      const convertedBlock = convertBlock(verse.block);\n      blocks.push(convertedBlock);\n    } else if ('inline' in verse) {\n      blocks.push(...convertTopLevelInline(verse));\n    } else {\n      console.warn('Unhandled verse type:', { verse });\n      blocks.push({\n        type: 'paragraph',\n        content: [{ type: 'text', text: 'Unknown content type' }],\n      });\n    }\n  }\n\n  return blocks;\n}\n\n/**\n * Convert an array of inlines to an array of blocks. The existing inline will\n * be split if it contains block-like inlines (again, blockquote, code block,\n * etc.)\n */\n\nfunction convertTopLevelInline(verse: ub.VerseInline): BlockData[] {\n  const blocks: BlockData[] = [];\n  let currentInlines: ub.Inline[] = [];\n\n  function flushCurrentBlock() {\n    if (currentInlines.length) {\n      const isOnlyWhitespace = currentInlines.every(\n        (item) => typeof item === 'string' && (item as string).trim() === ''\n      );\n\n      if (!isOnlyWhitespace) {\n        const convertedInlines = convertInlineContent(currentInlines);\n        if (convertedInlines.length) {\n          blocks.push({\n            type: 'paragraph',\n            content: convertedInlines,\n          });\n        }\n      }\n      currentInlines = [];\n    }\n  }\n\n  if (\n    // Start with cheaper checks to rule out most cases\n    verse.inline.length < 3 &&\n    (!verse.inline[1] || ub.isBreak(verse.inline[1])) &&\n    typeof verse.inline[0] === 'string' &&\n    verse.inline[0].length < 12 &&\n    containsOnlyEmoji(verse.inline[0].trim())\n  ) {\n    return [\n      {\n        type: 'bigEmoji',\n        emoji: verse.inline[0],\n      },\n    ];\n  }\n\n  verse.inline.forEach((inline) => {\n    if (ub.isBlockquote(inline)) {\n      flushCurrentBlock();\n      blocks.push({\n        type: 'blockquote',\n        content: convertInlineContent(inline.blockquote),\n      });\n    } else if (ub.isBlockCode(inline)) {\n      flushCurrentBlock();\n      blocks.push({\n        type: 'code',\n        content: inline.code,\n      });\n    } else {\n      currentInlines.push(inline);\n    }\n  });\n  flushCurrentBlock();\n  return blocks;\n}\n\nfunction convertBlock(block: ub.Block): BlockData {\n  const is = ub.Block.is;\n  const errorMessage = (text: string): BlockData => ({\n    type: 'paragraph',\n    content: [{ type: 'text', text }],\n  });\n\n  switch (true) {\n    case is(block, 'image'): {\n      if (VIDEO_REGEX.test(block.image.src)) {\n        return {\n          type: 'video',\n          ...block.image,\n        };\n      } else {\n        return {\n          type: 'image',\n          ...block.image,\n        };\n      }\n    }\n\n    case is(block, 'listing'): {\n      return {\n        type: 'list',\n        list: convertListing(block.listing),\n      };\n    }\n    case is(block, 'header'): {\n      return {\n        type: 'header',\n        level: block.header.tag,\n        children: convertInlineContent(block.header.content),\n      };\n    }\n    case is(block, 'code'): {\n      return {\n        type: 'code',\n        content: block.code.code,\n        lang: block.code.lang,\n      };\n    }\n    case is(block, 'rule'): {\n      return {\n        type: 'rule',\n      };\n    }\n    case is(block, 'cite'): {\n      return (\n        api.toContentReference(block.cite) ?? errorMessage('Failed to parse')\n      );\n    }\n    case is(block, 'link'): {\n      return {\n        ...block.link.meta,\n        type: 'link',\n        url: block.link.url,\n      };\n    }\n    default: {\n      assertNever(block);\n\n      console.warn('Unhandled block type:', { block });\n      return errorMessage('Unknown content type');\n    }\n  }\n}\n\nfunction convertListing(listing: ub.Listing): ListData {\n  if (ub.isList(listing)) {\n    return {\n      type: listing.list.type,\n      content: convertInlineContent(listing.list.contents),\n      children: listing.list.items.map(convertListing),\n    };\n  } else {\n    return {\n      content: convertInlineContent(listing.item),\n    };\n  }\n}\n\nfunction convertInlineContent(inlines: ub.Inline[]): InlineData[] {\n  const nodes: InlineData[] = [];\n  inlines.forEach((inline, i) => {\n    if (typeof inline === 'string') {\n      nodes.push({\n        type: 'text',\n        text: inline,\n      });\n    } else if (ub.isBold(inline)) {\n      nodes.push({\n        type: 'style',\n        style: 'bold',\n        children: convertInlineContent(inline.bold),\n      });\n    } else if (ub.isItalics(inline)) {\n      nodes.push({\n        type: 'style',\n        style: 'italic',\n        children: convertInlineContent(inline.italics),\n      });\n    } else if (ub.isStrikethrough(inline)) {\n      nodes.push({\n        type: 'style',\n        style: 'strikethrough',\n        children: convertInlineContent(inline.strike),\n      });\n    } else if (ub.isInlineCode(inline)) {\n      nodes.push({\n        type: 'style',\n        style: 'code',\n        children: [{ type: 'text', text: inline['inline-code'] }],\n      });\n    } else if (ub.isLink(inline)) {\n      nodes.push({\n        type: 'link',\n        href: inline.link.href,\n        text: inline.link.content ?? inline.link.href,\n      });\n    } else if (ub.isBreak(inline)) {\n      // Most content has a final line break after it -- we don't want to render it.\n      if (i !== inlines.length - 1) {\n        nodes.push({\n          type: 'lineBreak',\n        });\n      }\n    } else if (ub.isShip(inline)) {\n      nodes.push({\n        type: 'mention',\n        contactId: inline.ship,\n      });\n    } else if (ub.isSect(inline)) {\n      nodes.push({\n        type: 'groupMention',\n        group: !inline.sect ? 'all' : inline.sect,\n      });\n    } else if (ub.isTask(inline)) {\n      nodes.push({\n        type: 'task',\n        checked: inline.task.checked,\n        children: convertInlineContent(inline.task.content),\n      });\n    } else {\n      console.warn('Unhandled inline type:', { inline });\n      nodes.push({\n        type: 'text',\n        text: 'Unknown content type',\n      });\n    }\n  });\n  return nodes;\n}\n\nexport function prependInline(\n  content: BlockData[],\n  inline: InlineData\n): BlockData[] {\n  if (content[0]?.type === 'paragraph') {\n    return [\n      {\n        ...content[0],\n        content: [inline, ...content[0].content],\n      },\n      ...content.slice(1),\n    ];\n  } else {\n    return [\n      {\n        type: 'paragraph',\n        content: [inline],\n      },\n      ...content,\n    ];\n  }\n}\n\nexport function appendInline(\n  content: BlockData[],\n  inline: InlineData\n): BlockData[] {\n  const lastBlock = content.at(-1);\n  if (lastBlock?.type === 'paragraph') {\n    return [\n      ...content.slice(0, -1),\n      {\n        ...lastBlock,\n        content: [...lastBlock.content, inline],\n      },\n    ];\n  } else {\n    return [\n      ...content,\n      {\n        type: 'paragraph',\n        content: [inline],\n      },\n    ];\n  }\n}\n\nexport function getTextContent(\n  postContent: Exclude<api.PostContent, null>,\n  config?: PlaintextPreviewConfig\n): string;\nexport function getTextContent(\n  postContent: api.PostContent,\n  config?: PlaintextPreviewConfig\n): string | null;\nexport function getTextContent(\n  postContent: api.PostContent,\n  config: PlaintextPreviewConfig = PlaintextPreviewConfig.defaultConfig\n): string | null {\n  return postContent == null\n    ? null\n    : plaintextPreviewOf(convertContentSafe(postContent), config);\n}\n","import { da } from '@urbit/aura';\nimport { backOff } from 'exponential-backoff';\n\nimport * as db from '../db';\nimport { BASE_UNREADS_SINGLETON_KEY } from '../db/types';\nimport { createDevLogger, runIfDev } from '../debug';\nimport { normalizeUrbitColor } from '../logic';\nimport * as ub from '../urbit';\nimport {\n  formatUd,\n  getCanonicalPostId,\n  getChannelIdType,\n  parseGroupChannelId,\n  parseGroupId,\n  udToDate,\n} from './apiUtils';\nimport { poke, scry, subscribe } from './urbit';\n\nconst logger = createDevLogger('activityApi', false);\n\nexport async function getGroupAndChannelUnreads() {\n  const activity = await scry<ub.Activity>({\n    app: 'activity',\n    path: '/v4/activity',\n  });\n  const deserialized = toClientUnreads(activity);\n  return deserialized;\n}\n\nexport async function getThreadUnreadsByChannel(channel: db.Channel) {\n  let scryPath = '';\n  if (getChannelIdType(channel.id) === 'channel' && channel.groupId) {\n    const groupParts = parseGroupId(channel.groupId);\n    const channelParts = parseGroupChannelId(channel.id);\n    const pathParts = [\n      'v4',\n      'activity',\n      'threads',\n      groupParts.host,\n      groupParts.name,\n      channelParts.kind,\n      channelParts.host,\n      channelParts.name,\n    ].join('/');\n    scryPath = `/${pathParts}/`;\n  } else {\n    scryPath = `/v4/activity/dm-threads/${channel.id}/`;\n  }\n  const activity = await scry<ub.Activity>({\n    app: 'activity',\n    path: scryPath,\n  });\n\n  const deserialized = toClientUnreads(activity);\n  return deserialized.threadActivity;\n}\nexport async function getVolumeSettings(): Promise<ub.VolumeSettings> {\n  const settings = await scry<ub.VolumeSettings>({\n    app: 'activity',\n    path: '/volume-settings',\n  });\n  return settings;\n}\n\nexport const ACTIVITY_SOURCE_PAGESIZE = 30;\nexport async function getInitialActivity() {\n  const response = await scry<ub.InitActivityFeeds>({\n    app: 'activity',\n    path: `/v5/feed/init/${ACTIVITY_SOURCE_PAGESIZE}`,\n  });\n\n  const events = fromInitFeedToBucketedActivityEvents(response);\n  const relevantUnreads = toClientUnreads(response.summaries);\n  return {\n    events,\n    relevantUnreads,\n  };\n}\n\nexport function fromInitFeedToBucketedActivityEvents(\n  feeds: Omit<ub.InitActivityFeeds, 'summaries'>\n) {\n  return [\n    ...fromFeedToActivityEvents(feeds.all, 'all'),\n    ...fromFeedToActivityEvents(feeds.mentions, 'mentions'),\n    ...fromFeedToActivityEvents(feeds.replies, 'replies'),\n  ];\n}\n\n// Whereas the initial feed scry returns all, mentions, and replies, for paginated\n// fetching of more data, we grab by particular bucket\nexport async function getPagedActivityByBucket({\n  cursor,\n  bucket,\n}: {\n  cursor: number;\n  bucket: db.ActivityBucket;\n}): Promise<{\n  events: db.ActivityEvent[];\n  nextCursor: number | null;\n  relevantUnreads: db.ActivityInit;\n}> {\n  logger.log(\n    `fetching next activity page for bucket ${bucket} with cursor`,\n    cursor\n  );\n  const urbitCursor = formatUd(da.fromUnix(cursor).toString());\n  const path = `/v5/feed/${bucket}/${ACTIVITY_SOURCE_PAGESIZE}/${urbitCursor}/`;\n  const { feed, summaries } = await scry<ub.ActivityFeed>({\n    app: 'activity',\n    path,\n  });\n\n  const events = fromFeedToActivityEvents(feed, bucket);\n  const relevantUnreads = toClientUnreads(summaries);\n  const nextCursor = extractNextCursor(feed);\n\n  return { events, nextCursor, relevantUnreads };\n}\n\nexport function fromFeedToActivityEvents(\n  feed: ub.ActivityBundle[],\n  bucket: db.ActivityBucket\n): db.ActivityEvent[] {\n  const stream: EnhancedStream = {};\n  feed.forEach((feedItem) => {\n    const sourceId = feedItem['source-key'];\n    feedItem.events.forEach(({ time, event }) => {\n      stream[time] = { sourceId, ...event };\n    });\n  });\n\n  return toActivityEvents(stream, bucket);\n}\n\nfunction extractNextCursor(feed: ub.ActivityBundle[]): number | null {\n  if (feed.length === 0) {\n    return null;\n  }\n\n  const lastItem = feed[feed.length - 1];\n  const lastEvent = lastItem.events[0];\n  return udToDate(lastEvent.time);\n}\n\nexport type EnhancedStream = Record<\n  string,\n  ub.ActivityEvent & { sourceId: string }\n>;\nfunction toActivityEvents(\n  stream: EnhancedStream,\n  bucketId: db.ActivityBucket\n): db.ActivityEvent[] {\n  return Object.entries(stream)\n    .map(([id, event]) =>\n      toActivityEvent({ id, event, bucketId, sourceId: event.sourceId })\n    )\n    .filter(Boolean) as db.ActivityEvent[];\n}\n\nfunction toActivityEvent({\n  id,\n  sourceId,\n  bucketId,\n  event,\n}: {\n  id: string | number;\n  sourceId: string;\n  event: ub.ActivityEvent;\n  bucketId: db.ActivityBucket;\n}): db.ActivityEvent | null {\n  const timestamp = typeof id === 'number' ? id : udToDate(id);\n  const shouldNotify = event.notified;\n  const baseFields = {\n    id: id.toString(),\n    timestamp,\n    shouldNotify,\n    bucketId,\n    sourceId,\n  };\n\n  if ('post' in event) {\n    const postEvent = event.post;\n    const { authorId, postId } = getInfoFromMessageKey(postEvent.key);\n    return {\n      ...baseFields,\n      type: 'post',\n      postId,\n      authorId,\n      channelId: postEvent.channel,\n      groupId: postEvent.group,\n      content: postEvent.content,\n      isMention: postEvent.mention,\n    };\n  }\n\n  if ('reply' in event) {\n    const replyEvent = event.reply;\n    const { authorId, postId } = getInfoFromMessageKey(replyEvent.key);\n    const { postId: parentId, authorId: parentAuthorId } =\n      getInfoFromMessageKey(replyEvent.parent);\n    return {\n      ...baseFields,\n      type: 'reply',\n      postId,\n      parentId,\n      authorId,\n      parentAuthorId,\n      channelId: replyEvent.channel,\n      groupId: replyEvent.group,\n      content: replyEvent.content,\n      isMention: replyEvent.mention,\n    };\n  }\n\n  if ('dm-post' in event) {\n    const dmEvent = event['dm-post'];\n    const { authorId, postId } = getInfoFromMessageKey(dmEvent.key, true);\n    return {\n      ...baseFields,\n      type: 'post',\n      postId,\n      authorId,\n      channelId: 'ship' in dmEvent.whom ? dmEvent.whom.ship : dmEvent.whom.club,\n      content: dmEvent.content,\n      isMention: dmEvent.mention,\n    };\n  }\n\n  if ('dm-reply' in event) {\n    const replyEvent = event['dm-reply'];\n    const { authorId, postId } = getInfoFromMessageKey(replyEvent.key, true);\n    const { postId: parentId, authorId: parentAuthorId } =\n      getInfoFromMessageKey(replyEvent.parent, true);\n    return {\n      ...baseFields,\n      type: 'reply',\n      authorId,\n      postId,\n      parentId,\n      parentAuthorId,\n      channelId:\n        'ship' in replyEvent.whom ? replyEvent.whom.ship : replyEvent.whom.club,\n      content: replyEvent.content,\n      isMention: replyEvent.mention,\n    };\n  }\n\n  if ('flag-post' in event) {\n    const flagEvent = event['flag-post'];\n    const { authorId, postId } = getInfoFromMessageKey(flagEvent.key);\n    return {\n      ...baseFields,\n      type: 'flag-post',\n      postId,\n      authorId,\n      channelId: flagEvent.channel,\n      groupId: flagEvent.group,\n    };\n  }\n\n  if ('flag-reply' in event) {\n    const flagEvent = event['flag-reply'];\n    const { authorId, postId } = getInfoFromMessageKey(flagEvent.key);\n    const { postId: parentId, authorId: parentAuthorId } =\n      getInfoFromMessageKey(flagEvent.parent);\n    return {\n      ...baseFields,\n      type: 'flag-reply',\n      postId,\n      parentId,\n      parentAuthorId,\n      authorId,\n      channelId: flagEvent.channel,\n      groupId: flagEvent.group,\n    };\n  }\n\n  if ('group-ask' in event) {\n    return {\n      ...baseFields,\n      type: 'group-ask',\n      groupId: event['group-ask'].group,\n      groupEventUserId: event['group-ask'].ship,\n    };\n  }\n\n  if ('contact' in event) {\n    const contactEvent = event.contact;\n    const update = parseContactUpdateEvent(baseFields.id, event);\n    if (!update) {\n      return null;\n    }\n\n    return {\n      ...baseFields,\n      type: 'contact',\n      contactUserId: contactEvent.who,\n      ...update,\n    };\n  }\n\n  return null;\n}\n\nexport function parseContactUpdateEvent(\n  eventId: string,\n  event: ub.ContactEvent\n): Partial<db.ActivityEvent> | null {\n  const update = event.contact.update;\n\n  if (!update) {\n    return null;\n  }\n\n  if ('nickname' in update) {\n    return {\n      contactUpdateType: 'nickname',\n      contactUpdateValue: update.nickname?.value ?? '',\n    };\n  }\n\n  if ('bio' in update) {\n    return {\n      contactUpdateType: 'bio',\n      contactUpdateValue: update.bio?.value ?? '',\n    };\n  }\n\n  if ('status' in update) {\n    return {\n      contactUpdateType: 'status',\n      contactUpdateValue: update.status?.value ?? '',\n    };\n  }\n\n  if ('color' in update) {\n    return {\n      contactUpdateType: 'color',\n      contactUpdateValue: normalizeUrbitColor(update.color?.value ?? ''),\n    };\n  }\n\n  if ('avatar' in update) {\n    return {\n      contactUpdateType: 'avatarImage',\n      contactUpdateValue: update.avatar?.value ?? '',\n    };\n  }\n\n  if ('groups' in update) {\n    const groupIds = update.groups?.value.map((g) => g.value) ?? [];\n    if (groupIds.length === 0) {\n      return null;\n    }\n\n    return {\n      contactUpdateType: 'pinnedGroups',\n      contactUpdateValue:\n        update.groups?.value.map((g) => g.value).join(',') ?? '',\n      contactUpdateGroups:\n        groupIds.map((groupId) => ({\n          groupId,\n          activityEventId: eventId,\n        })) ?? [],\n    };\n  }\n\n  return null;\n}\n\nfunction getInfoFromMessageKey(\n  key: { id: string; time: string },\n  isDm?: boolean\n) {\n  const authorId = key.id.split('/')[0];\n  const postId = getCanonicalPostId(isDm ? key.id : key.time);\n  return { authorId, postId };\n}\n\nexport type ActivityEvent =\n  | { type: 'updateBaseUnread'; unread: db.BaseUnread }\n  | {\n      type: 'updateChannelUnread';\n      activity: db.ChannelUnread;\n    }\n  | { type: 'updateThreadUnread'; activity: db.ThreadUnreadState }\n  | { type: 'updateGroupUnread'; unread: db.GroupUnread }\n  | {\n      type: 'updateItemVolume';\n      volumeUpdate: db.VolumeSettings;\n    }\n  | {\n      type: 'removeItemVolume';\n      itemId: string;\n      itemType: string;\n    }\n  | {\n      type: 'updatePushNotificationsSetting';\n      value: ub.PushNotificationsSetting;\n    }\n  | { type: 'addActivityEvent'; events: db.ActivityEvent[] };\n\nexport function subscribeToActivity(handler: (event: ActivityEvent) => void) {\n  subscribe<ub.ActivityUpdate>(\n    { app: 'activity', path: '/v4' },\n    async (update: ub.ActivityUpdate) => {\n      logger.log(\n        'activity update',\n        runIfDev(() => JSON.stringify(update))\n      );\n      // handle unreads\n      if ('activity' in update) {\n        Object.entries(update.activity).forEach((activityEntry) => {\n          const [sourceId, summary] = activityEntry;\n          const source = sourceIdToSource(sourceId);\n\n          switch (source.type) {\n            case 'base':\n              handler({\n                type: 'updateBaseUnread',\n                unread: {\n                  id: BASE_UNREADS_SINGLETON_KEY,\n                  count: summary.count,\n                  notify: summary.notify,\n                  notifyCount: summary['notify-count'],\n                  updatedAt: summary.recency,\n                  notifTimestamp: summary['recency-uv'],\n                },\n              });\n              break;\n            case 'group':\n              handler({\n                type: 'updateGroupUnread',\n                unread: toGroupUnread(source.groupId, summary),\n              });\n              break;\n            case 'channel':\n              handler({\n                type: 'updateChannelUnread',\n                activity: toChannelUnread(source.channelId, summary, 'dm'),\n              });\n              break;\n            case 'thread':\n              handler({\n                type: 'updateThreadUnread',\n                activity: toThreadUnread(\n                  source.channelId,\n                  source.threadId,\n                  summary,\n                  source.channelType\n                ),\n              });\n              break;\n          }\n        });\n      }\n\n      // handle volume settings\n      if ('adjust' in update) {\n        const { source, volume } = update.adjust;\n        const sourceId = ub.sourceToString(source);\n\n        if (sourceId === 'base') {\n          const level: ub.NotificationLevel = volume\n            ? ub.getLevelFromVolumeMap(volume)\n            : 'default';\n          return handler({\n            type: 'updateItemVolume',\n            volumeUpdate: {\n              itemId: 'base',\n              itemType: 'base',\n              level,\n            },\n          });\n        }\n\n        if ('group' in source) {\n          if (volume) {\n            return handler({\n              type: 'updateItemVolume',\n              volumeUpdate: {\n                itemId: source.group,\n                itemType: 'group',\n                level: ub.getLevelFromVolumeMap(volume),\n              },\n            });\n          } else {\n            return handler({\n              type: 'removeItemVolume',\n              itemId: source.group,\n              itemType: 'group',\n            });\n          }\n        }\n\n        if ('channel' in source || 'dm' in source) {\n          const channelId =\n            'channel' in source\n              ? source.channel.nest\n              : 'ship' in source.dm\n                ? source.dm.ship\n                : source.dm.club;\n          if (volume) {\n            return handler({\n              type: 'updateItemVolume',\n              volumeUpdate: {\n                itemId: channelId,\n                itemType: 'channel',\n                level: ub.getLevelFromVolumeMap(volume),\n              },\n            });\n          } else {\n            return handler({\n              type: 'removeItemVolume',\n              itemId: channelId,\n              itemType: 'channel',\n            });\n          }\n        }\n\n        if ('thread' in source || 'dm-thread' in source) {\n          const postId = getPostIdFromSource(source);\n          if (volume) {\n            return handler({\n              type: 'updateItemVolume',\n              volumeUpdate: {\n                itemId: postId,\n                itemType: 'thread',\n                level: ub.getLevelFromVolumeMap(volume),\n              },\n            });\n          } else {\n            return handler({\n              type: 'removeItemVolume',\n              itemId: postId,\n              itemType: 'thread',\n            });\n          }\n        }\n      }\n\n      // handle push notification settings\n      if ('allow-notifications' in update) {\n        const notifsAllowed = update['allow-notifications'];\n\n        return handler({\n          type: 'updatePushNotificationsSetting',\n          value: notifsAllowed,\n        });\n      }\n\n      // handle new activity events\n      if ('add' in update) {\n        const id = update.add.time;\n        const sourceId = update.add['source-key'];\n        const rawEvent = update.add.event;\n\n        const activityEvent = toActivityEvent({\n          id,\n          sourceId,\n          bucketId: 'all',\n          event: rawEvent,\n        });\n\n        const events = [];\n        if (activityEvent) {\n          events.push(activityEvent);\n          if (activityEvent?.isMention) {\n            events.push({\n              ...activityEvent,\n              bucketId: 'mentions' as db.ActivityBucket,\n            });\n          }\n          if (activityEvent?.type === 'reply') {\n            events.push({\n              ...activityEvent,\n              bucketId: 'replies' as db.ActivityBucket,\n            });\n          }\n        }\n\n        if (events.length > 0) {\n          return handler({ type: 'addActivityEvent', events });\n        }\n      }\n    }\n  );\n}\n\nexport function activityAction(action: ub.ActivityAction) {\n  return {\n    app: 'activity',\n    mark: 'activity-action',\n    json: action,\n  };\n}\n\nexport const readAll = async () => {\n  const action = activityAction({\n    read: {\n      source: { base: null },\n      action: { all: { time: null, deep: true } },\n    },\n  });\n  logger.log(`reading all activity`, action);\n\n  return backOff(() => poke(action), {\n    delayFirstAttempt: false,\n    startingDelay: 2000,\n    numOfAttempts: 4,\n  });\n};\n\nexport const readGroup = async (group: db.Group, deep: boolean = false) => {\n  const source: ub.Source = { group: group.id };\n  const action = activityAction({\n    read: { source, action: { all: { time: null, deep } } },\n  });\n  logger.log(`reading group ${group.id}`, action);\n\n  return backOff(() => poke(action), {\n    delayFirstAttempt: false,\n    startingDelay: 2000,\n    numOfAttempts: 4,\n  });\n};\n\nexport const readChannel = async ({\n  channelId,\n  channelType,\n  groupId,\n  deep,\n}: {\n  channelId: string;\n  channelType: db.ChannelType;\n  groupId?: string | null;\n  deep?: boolean;\n}) => {\n  let source: ub.Source;\n  if (channelType === 'dm') {\n    source = { dm: { ship: channelId } };\n  } else if (channelType == 'groupDm') {\n    source = { dm: { club: channelId } };\n  } else {\n    source = { channel: { nest: channelId, group: groupId! } };\n  }\n\n  const action = activityAction({\n    read: { source, action: { all: { time: null, deep: !!deep } } },\n  });\n  logger.log(`reading channel ${channelId}`, action);\n\n  // simple retry logic to avoid failed read leading to lingering unread state\n  return backOff(() => poke(action), {\n    delayFirstAttempt: false,\n    startingDelay: 2000,\n    numOfAttempts: 4,\n  });\n};\n\nexport const readThread = async ({\n  parentPost,\n  channel,\n}: {\n  post: db.Post;\n  parentPost: db.Post;\n  channel: db.Channel;\n}) => {\n  logger.log(\n    'reading thread',\n    channel.id,\n    parentPost.id,\n    parentPost.backendTime\n  );\n  let source: ub.Source;\n  if (channel.type === 'dm') {\n    if (!parentPost.backendTime) {\n      throw new Error(\n        `Cannot read thread without post.backendTime for message key, ${parentPost.id}`\n      );\n    }\n\n    source = {\n      'dm-thread': {\n        whom: { ship: channel.id },\n        key: {\n          id: `${parentPost.authorId}/${parentPost.id}`,\n          time: parentPost.backendTime,\n        },\n      },\n    };\n  } else if (channel.type == 'groupDm') {\n    if (!parentPost.backendTime) {\n      throw new Error(\n        `Cannot read thread without post.backendTime for message key, ${parentPost.id}`\n      );\n    }\n\n    source = {\n      'dm-thread': {\n        whom: { club: channel.id },\n        key: {\n          id: `${parentPost.authorId}/${parentPost.id}`,\n          time: parentPost.backendTime,\n        },\n      },\n    };\n  } else {\n    source = {\n      thread: {\n        channel: channel.id,\n        group: channel.groupId!,\n        key: {\n          id: `${parentPost.authorId}/${parentPost.id}`,\n          time: parentPost.id,\n        },\n      },\n    };\n  }\n\n  const action = activityAction({\n    read: { source, action: { all: { time: null, deep: false } } },\n  });\n\n  // simple retry logic to avoid failed read leading to lingering unread state\n  return backOff(() => poke(action), {\n    delayFirstAttempt: false,\n    startingDelay: 2000,\n    numOfAttempts: 4,\n  });\n};\n\nexport function markInvitesRead() {\n  return backOff(\n    () =>\n      poke(\n        activityAction({\n          'clear-group-invites': null,\n        })\n      ),\n    {\n      delayFirstAttempt: false,\n      startingDelay: 2000,\n      numOfAttempts: 4,\n    }\n  );\n}\n\n// We need to pass a particular data structure to the backend when referencing\n// threads. It's subtly different depending on whether it's %chat or %channels based\nexport function getMessageKey(\n  channel: db.Channel,\n  post: db.Post\n): { id: string; time: string } {\n  if (channel.type === 'dm' || channel.type === 'groupDm') {\n    if (!post.backendTime) {\n      throw Error(\n        `Cannot get message key without post.backendTime, ${post.id}`\n      );\n    }\n    return {\n      id: `${post.authorId}/${post.id}`,\n      time: post.backendTime,\n    };\n  }\n\n  return {\n    id: `${post.authorId}/${post.id}`,\n    time: post.id,\n  };\n}\n\n/*\n  The following helpers are used to produce \"sources\" which is what %activity uses to refer\n  to particular activity-emitting contexts (groups, channels, threads). They nest under eachother, so\n  a thread will have a parent channel source, which in turn will have a parent group source\n\n  Sources can be represented as a string or an object (see urbit/activity.ts for details).\n*/\n\ninterface ClientBaseSource {\n  type: 'base';\n}\n\ninterface ClientGroupSource {\n  type: 'group';\n  groupId: string;\n}\n\ninterface ClientChannelSource {\n  type: 'channel';\n  channelId: string;\n}\n\ninterface ClientThreadSource {\n  type: 'thread';\n  channelId: string;\n  channelType: db.ChannelUnread['type'];\n  threadId: string;\n}\n\ninterface ClientUnknownSource {\n  type: 'unknown'; // for source types we don't care about\n}\n\ninterface ClientContactSource {\n  type: 'contact';\n  contactUserId: string;\n}\n\nexport type ClientSource =\n  | ClientBaseSource\n  | ClientGroupSource\n  | ClientChannelSource\n  | ClientThreadSource\n  | ClientUnknownSource\n  | ClientContactSource;\n\nexport function sourceIdToSource(sourceId: string): ClientSource {\n  if (sourceId === 'base') {\n    return { type: 'base' };\n  }\n\n  const parts = sourceId.split('/');\n  const sourceType = parts[0];\n\n  if (sourceType === 'group') {\n    const host = parts[1];\n    const name = parts[2];\n    return { type: 'group', groupId: `${host}/${name}` };\n  }\n\n  if (sourceType === 'channel') {\n    const kind = parts[1];\n    const host = parts[2];\n    const name = parts[3];\n    return { type: 'channel', channelId: `${kind}/${host}/${name}` };\n  }\n\n  if (sourceType === 'ship' || sourceType === 'club') {\n    const channelId = parts[1];\n    return { type: 'channel', channelId };\n  }\n\n  if (sourceType === 'thread') {\n    const kind = parts[1];\n    const host = parts[2];\n    const name = parts[3];\n    const threadId = getCanonicalPostId(parts[4]);\n    return {\n      type: 'thread',\n      channelType: 'channel',\n      channelId: `${kind}/${host}/${name}`,\n      threadId,\n    };\n  }\n\n  if (sourceType === 'dm-thread') {\n    const channelId = parts[1];\n    const threadId = getCanonicalPostId(`${parts[2]}/${parts[3]}`);\n    return { type: 'thread', channelType: 'dm', channelId, threadId };\n  }\n\n  if (sourceType === 'contact') {\n    const contactUserId = parts[1];\n    return {\n      type: 'contact',\n      contactUserId,\n    };\n  }\n\n  return { type: 'unknown' };\n}\n\nexport function getThreadSource({\n  channel,\n  post,\n}: {\n  channel: db.Channel;\n  post: db.Post;\n}): {\n  source: ub.Source;\n  sourceId: string;\n} {\n  let source: ub.Source;\n  if (channel.type === 'dm') {\n    source = {\n      'dm-thread': {\n        whom: { ship: channel.id },\n        key: getMessageKey(channel, post),\n      },\n    };\n  } else if (channel.type === 'groupDm') {\n    source = {\n      'dm-thread': {\n        whom: { club: channel.id },\n        key: getMessageKey(channel, post),\n      },\n    };\n  } else {\n    source = {\n      thread: {\n        channel: channel.id,\n        group: channel.groupId!,\n        key: getMessageKey(channel, post),\n      },\n    };\n  }\n\n  const sourceId = ub.sourceToString(source);\n\n  return { source, sourceId };\n}\n\nexport function getRootSourceFromChat(chat: db.Chat): {\n  source: ub.Source;\n  sourceId: string;\n} {\n  let source: ub.Source;\n  if (chat.type === 'group') {\n    source = { group: chat.id };\n  } else if (chat.channel.type === 'dm') {\n    source = { dm: { ship: chat.channel.id } };\n  } else if (chat.channel.type === 'groupDm') {\n    source = { dm: { club: chat.channel.id } };\n  } else {\n    throw new Error('Cannot get source for non-dm channel chat');\n  }\n\n  const sourceId = ub.sourceToString(source);\n\n  return { source, sourceId };\n}\n\nfunction getChannelIdFromSource(source: ub.Source): string {\n  if ('dm' in source) {\n    return 'ship' in source.dm ? source.dm.ship : source.dm.club;\n  }\n\n  if ('channel' in source) {\n    return source.channel.nest;\n  }\n\n  if ('thread' in source) {\n    return source.thread.channel;\n  }\n\n  if ('dm-thread' in source) {\n    return 'ship' in source['dm-thread'].whom\n      ? source['dm-thread'].whom.ship\n      : source['dm-thread'].whom.club;\n  }\n\n  return '';\n}\n\nfunction getPostIdFromSource(source: ub.Source): string {\n  if ('thread' in source) {\n    return getCanonicalPostId(source.thread.key.time);\n  }\n\n  if ('dm-thread' in source) {\n    return getCanonicalPostId(source['dm-thread'].key.id);\n  }\n\n  return '';\n}\n\n/*\n  Volume settings are %activity's way of managing what kind of activity events should be\n  considered \"meaningful\". These are what's manipulated when you mute a resource for example.\n*/\n\nexport async function adjustVolumeSetting(\n  source: ub.Source,\n  volume: ub.VolumeMap | null\n) {\n  const action = activityAction({ adjust: { source, volume } });\n  return poke(action);\n}\n\n// This is a global, top level filter for which kinds of activity events are allowed to send\n// push notifications to your device. If an activity event has the notify flag set, and passes\n// the filter, then a push will be triggered.\nexport async function setPushNotificationsSetting(\n  allow: ub.PushNotificationsSetting\n) {\n  const action = activityAction({ 'allow-notifications': allow });\n  return poke(action);\n}\n\nexport async function getPushNotificationsSetting(): Promise<ub.PushNotificationsSetting> {\n  return scry<ub.PushNotificationsSetting>({\n    app: 'activity',\n    path: '/notifications-allowed',\n  });\n}\n\nexport type ActivityUpdateQueue = {\n  baseUnread?: db.BaseUnread;\n  groupUnreads: db.GroupUnread[];\n  channelUnreads: db.ChannelUnread[];\n  threadUnreads: db.ThreadUnreadState[];\n  volumeUpdates: db.VolumeSettings[];\n  volumeRemovals: string[];\n  activityEvents: db.ActivityEvent[];\n};\n\nexport const toClientUnreads = (activity: ub.Activity): db.ActivityInit => {\n  const groupUnreads: db.GroupUnread[] = [];\n  const channelUnreads: db.ChannelUnread[] = [];\n  const threadActivity: db.ThreadUnreadState[] = [];\n  let baseUnread: db.BaseUnread | undefined = undefined;\n\n  Object.entries(activity).forEach(([sourceId, summary]) => {\n    if (sourceId === 'base') {\n      baseUnread = {\n        id: BASE_UNREADS_SINGLETON_KEY,\n        count: summary.count,\n        notify: summary.notify,\n        notifyCount: summary['notify-count'],\n        updatedAt: summary.recency,\n      };\n    }\n    const [activityId, ...rest] = sourceId.split('/');\n    if (activityId === 'ship' || activityId === 'club') {\n      const channelId = rest.join('/');\n      channelUnreads.push(toChannelUnread(channelId, summary, 'dm'));\n    }\n\n    if (activityId === 'group') {\n      const groupId = rest.join('/');\n      groupUnreads.push(toGroupUnread(groupId, summary));\n    }\n\n    if (activityId === 'channel') {\n      const channelId = rest.join('/');\n      channelUnreads.push(toChannelUnread(channelId, summary, 'channel'));\n    }\n\n    if (activityId === 'thread' || activityId === 'dm-thread') {\n      const channelId =\n        activityId === 'dm-thread' ? rest[0] : rest.slice(0, 3).join('/');\n      const threadId = rest[rest.length - 1];\n      threadActivity.push(\n        toThreadUnread(\n          channelId,\n          threadId,\n          summary,\n          activityId === 'dm-thread' ? 'dm' : 'channel'\n        )\n      );\n    }\n  });\n\n  return { baseUnread, channelUnreads, threadActivity, groupUnreads };\n};\n\nexport const toGroupUnread = (\n  groupId: string,\n  summary: ub.ActivitySummary\n): db.GroupUnread => {\n  return {\n    groupId,\n    count: summary.count,\n    notify: summary.notify,\n    updatedAt: summary.recency,\n    notifyCount: summary['notify-count'],\n  };\n};\n\nexport const toChannelUnread = (\n  channelId: string,\n  summary: ub.ActivitySummary,\n  type: db.ChannelUnread['type']\n): db.ChannelUnread => {\n  const summaryKey = type === 'dm' ? 'id' : 'time';\n  const firstUnreadPostId =\n    summary.unread && summary.unread[summaryKey]\n      ? getCanonicalPostId(summary.unread[summaryKey])\n      : null;\n  return {\n    channelId,\n    type,\n    updatedAt: summary.recency,\n    count: summary.count,\n    notify: summary.notify,\n    countWithoutThreads: summary.unread?.count ?? 0,\n    firstUnreadPostId,\n    firstUnreadPostReceivedAt: firstUnreadPostId\n      ? udToDate(firstUnreadPostId)\n      : null,\n  };\n};\n\nexport const toThreadUnread = (\n  channelId: string,\n  threadId: string,\n  summary: ub.ActivitySummary,\n  type: db.ChannelUnread['type']\n): db.ThreadUnreadState => {\n  const summaryKey = type === 'dm' ? 'id' : 'time';\n  const firstUnreadPostId =\n    summary.unread && summary.unread[summaryKey]\n      ? getCanonicalPostId(summary.unread[summaryKey])\n      : null;\n  return {\n    channelId,\n    threadId: getCanonicalPostId(threadId),\n    updatedAt: summary.recency,\n    count: summary.count,\n    notify: summary.notify,\n    firstUnreadPostId,\n    firstUnreadPostReceivedAt: firstUnreadPostId\n      ? udToDate(firstUnreadPostId)\n      : null,\n  };\n};\n","import type { JSONValue } from '../types/JSONValue';\nimport { ValuesOf } from '../utils';\n\ninterface BaseParameterSpec {\n  displayName: string;\n}\n\ninterface BooleanParameterSpec extends BaseParameterSpec {\n  type: 'boolean';\n}\n\ninterface StringParameterSpec extends BaseParameterSpec {\n  type: 'string';\n}\n\ninterface RadioParameterSpec extends BaseParameterSpec {\n  type: 'radio';\n  options: { displayName: string; value: string }[];\n}\n\ntype ParameterSpec =\n  | BooleanParameterSpec\n  | StringParameterSpec\n  | RadioParameterSpec;\n\nexport interface ComponentSpec<EnumTag extends string = string> {\n  displayName: string;\n  enumTag: EnumTag;\n  parametersSchema?: Record<string, ParameterSpec>;\n}\n\nfunction standardCollectionParameters(): Record<string, ParameterSpec> {\n  return {\n    showAuthors: {\n      displayName: 'Show authors',\n      type: 'boolean',\n    },\n    showReplies: {\n      displayName: 'Show replies',\n      type: 'boolean',\n    },\n  };\n}\n\nexport const allCollectionRenderers = {\n  'tlon.r0.collection.chat': {\n    displayName: 'Chat',\n    enumTag: 'chat',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.gallery': {\n    displayName: 'Gallery',\n    enumTag: 'gallery',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.notebook': {\n    displayName: 'Notebook',\n    enumTag: 'notebook',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.carousel': {\n    displayName: 'Carousel',\n    enumTag: 'carousel',\n    parametersSchema: {\n      ...standardCollectionParameters(),\n      scrollDirection: {\n        displayName: 'Scroll direction',\n        type: 'radio',\n        options: [\n          {\n            displayName: 'Horizontal',\n            value: 'horizontal',\n          },\n          {\n            displayName: 'Vertical',\n            value: 'vertical',\n          },\n        ],\n      },\n    },\n  },\n  'tlon.r0.collection.cards': {\n    displayName: 'Cards',\n    enumTag: 'cards',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.sign': {\n    displayName: 'Sign',\n    enumTag: 'sign',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.boardroom': {\n    displayName: 'Boardroom',\n    enumTag: 'boardroom',\n    parametersSchema: standardCollectionParameters(),\n  },\n  'tlon.r0.collection.strobe': {\n    displayName: 'Strobe',\n    enumTag: 'strobe',\n    parametersSchema: {\n      ...standardCollectionParameters(),\n      interval: {\n        displayName: 'Frame rate in milliseconds',\n        type: 'string',\n      },\n    },\n  },\n  'tlon.r0.collection.summaries': {\n    displayName: 'Summaries',\n    enumTag: 'summaries',\n    parametersSchema: standardCollectionParameters(),\n  },\n} as const satisfies Record<string, ComponentSpec>;\n\nexport const allDraftInputs = {\n  'tlon.r0.input.chat': {\n    displayName: 'Chat',\n    enumTag: 'chat',\n  },\n  'tlon.r0.input.gallery': {\n    displayName: 'Gallery',\n    enumTag: 'gallery',\n  },\n  'tlon.r0.input.notebook': {\n    displayName: 'Notebook',\n    enumTag: 'notebook',\n  },\n  'tlon.r0.input.yo': {\n    displayName: 'Yo',\n    enumTag: 'yo',\n    parametersSchema: {\n      text: {\n        displayName: 'Message text',\n        type: 'string',\n      },\n    },\n  },\n  'tlon.r0.input.mic': {\n    displayName: 'Mic',\n    enumTag: 'mic',\n  },\n  'tlon.r0.input.color': {\n    displayName: 'Color',\n    enumTag: 'color',\n  },\n} as const satisfies Record<string, ComponentSpec>;\n\nexport const allContentRenderers = {\n  'tlon.r0.content.chat': {\n    displayName: 'Chat',\n    enumTag: 'chat',\n  },\n  'tlon.r0.content.gallery': {\n    displayName: 'Gallery',\n    enumTag: 'gallery',\n    parametersSchema: {\n      embedded: {\n        displayName: 'Show frame',\n        type: 'boolean',\n      },\n      contentSize: {\n        displayName: 'Content size',\n        type: 'radio',\n        options: [\n          {\n            displayName: 'Large',\n            value: '$l',\n          },\n          {\n            displayName: 'Small',\n            value: '$s',\n          },\n        ],\n      },\n    },\n  },\n  'tlon.r0.content.notebook': {\n    displayName: 'Notebook',\n    enumTag: 'notebook',\n  },\n  'tlon.r0.content.audio': {\n    displayName: 'Audio',\n    enumTag: 'audio',\n  },\n  'tlon.r0.content.color': {\n    displayName: 'Color',\n    enumTag: 'color',\n  },\n  'tlon.r0.content.raw': {\n    displayName: 'Raw',\n    enumTag: 'raw',\n    parametersSchema: {\n      fontFamily: {\n        displayName: 'Font family',\n        type: 'string',\n      },\n    },\n  },\n  'tlon.r0.content.yell': {\n    displayName: 'Yell',\n    enumTag: 'yell',\n  },\n  'tlon.r0.content.scratchpad': {\n    displayName: 'Scratchpad',\n    enumTag: 'scratchpad',\n  },\n} as const satisfies Record<string, ComponentSpec>;\n\nexport const CollectionRendererId = makeEnum(allCollectionRenderers);\nexport type CollectionRendererId = ValuesOf<typeof CollectionRendererId>;\n\nexport const DraftInputId = makeEnum(allDraftInputs);\nexport type DraftInputId = ValuesOf<typeof DraftInputId>;\n\nexport const PostContentRendererId = makeEnum(allContentRenderers);\nexport type PostContentRendererId = ValuesOf<typeof PostContentRendererId>;\n\ntype ParameterizedId<Id extends string> = {\n  id: Id;\n  configuration?: Record<string, JSONValue>;\n};\n\nnamespace ParameterizedId {\n  export function id<Id extends string>(id: ParameterizedId<Id>): Id {\n    return typeof id === 'string' ? id : id.id;\n  }\n  export function coerce<Id extends string>(\n    id: Id | ParameterizedId<Id>\n  ): ParameterizedId<Id> {\n    return typeof id === 'string' ? { id } : id;\n  }\n}\n\n/**\n * Configures the custom components used to create content in a channel.\n */\nexport interface ChannelContentConfiguration {\n  /**\n   * Which controls are available when composing a new post?\n   */\n  draftInput: DraftInputId | ParameterizedId<DraftInputId>;\n\n  /**\n   * How should we render a given post content type?\n   *\n   * This spec takes precedence over the client's default renderer mapping, but\n   * does not take precedence over any mapping specified in a post's metadata.\n   */\n  defaultPostContentRenderer:\n    | PostContentRendererId\n    | ParameterizedId<PostContentRendererId>;\n\n  /**\n   * How should we render the entire collection of posts? (list, grid, etc)\n   */\n  defaultPostCollectionRenderer:\n    | CollectionRendererId\n    | ParameterizedId<CollectionRendererId>;\n}\n\nexport namespace ChannelContentConfiguration {\n  export function defaultConfiguration(): ChannelContentConfiguration {\n    return {\n      draftInput: { id: DraftInputId.chat },\n      defaultPostContentRenderer: { id: PostContentRendererId.chat },\n      defaultPostCollectionRenderer: { id: CollectionRendererId.chat },\n    };\n  }\n\n  export function draftInput(\n    configuration: ChannelContentConfiguration\n  ): ParameterizedId<DraftInputId> {\n    return ParameterizedId.coerce(configuration.draftInput);\n  }\n  export function defaultPostContentRenderer(\n    configuration: ChannelContentConfiguration\n  ): ParameterizedId<PostContentRendererId> {\n    return ParameterizedId.coerce(configuration.defaultPostContentRenderer);\n  }\n  export function defaultPostCollectionRenderer(\n    configuration: ChannelContentConfiguration\n  ): ParameterizedId<CollectionRendererId> {\n    return ParameterizedId.coerce(configuration.defaultPostCollectionRenderer);\n  }\n}\n\n/**\n * We use a channel's `description` field to store structured data. This\n * module provides helpers for managing that data.\n */\nexport namespace StructuredChannelDescriptionPayload {\n  type Encoded = string | null | undefined;\n  interface Decoded {\n    channelContentConfiguration?: ChannelContentConfiguration;\n    description?: string;\n  }\n\n  export function encode(payload: Decoded): Encoded {\n    return JSON.stringify(payload);\n  }\n\n  /**\n   * Attempts to decode a `description` string into a structured payload.\n   *\n   * - If `description` is null/undefined, returns a payload with no\n   *   description nor configuration.\n   * - If `description` is not valid JSON, returns a payload with the\n   *   description as the input string.\n   * - If `description` validates as the expected\n   *   `StructuredChannelDescriptionPayload` JSON, returns the decoded payload.\n   */\n  export function decode(encoded: Encoded): Decoded {\n    // TODO: This should be validated - we'll be deserializing untrusted data\n    if (encoded == null) {\n      return {};\n    }\n    try {\n      const out = JSON.parse(encoded);\n      if (typeof out !== 'object' || !out) {\n        return {};\n      }\n\n      if ('channelContentConfiguration' in out) {\n        if (typeof out.channelContentConfiguration !== 'object') {\n          throw new Error('Invalid configuration');\n        }\n        // add a little robustness - if the configuration is missing a field,\n        // just add a default in to avoid crashing\n        out.channelContentConfiguration = ((raw) => {\n          const cfg = {\n            draftInput: DraftInputId.chat,\n            defaultPostContentRenderer: PostContentRendererId.chat,\n            defaultPostCollectionRenderer: CollectionRendererId.chat,\n            ...raw,\n          } as ChannelContentConfiguration;\n\n          // add defaults to some standard params\n          const collCfgWithDefaults = ParameterizedId.coerce(\n            cfg.defaultPostCollectionRenderer\n          );\n          collCfgWithDefaults.configuration = {\n            showAuthors: true,\n            showReplies: true,\n            ...collCfgWithDefaults.configuration,\n          };\n\n          return cfg;\n        })(out.channelContentConfiguration);\n      }\n      return out;\n    } catch (_err) {\n      return { description: encoded.length === 0 ? undefined : encoded };\n    }\n  }\n}\n\n/**\n * Makes an enum-like value from a set of component specs.\n *\n * ```ts\n * const enumlike = makeEnum({\n *   foo: { enumTag: 'myFoo' },\n *   bar: { enumTag: 'myBar' },\n * });\n * enumlike.myFoo; // 'foo'\n * ```\n */\nfunction makeEnum<SpecSet extends Record<string, ComponentSpec>>(\n  specSet: SpecSet\n) {\n  return Object.entries(specSet).reduce(\n    (acc, [id, { enumTag }]) => {\n      (acc as any)[enumTag] = id;\n      return acc;\n    },\n    {} as {\n      [K in keyof typeof specSet as (typeof specSet)[K]['enumTag']]: K;\n    }\n  );\n}\n","import * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport * as ub from '../urbit';\nimport {\n  deriveFullWrit,\n  deriveFullWritReply,\n  fromClientMeta,\n  getCanonicalPostId,\n  toClientMeta,\n} from './apiUtils';\nimport {\n  ChannelContentConfiguration,\n  StructuredChannelDescriptionPayload,\n} from './channelContentConfig';\nimport { toPostData, toPostReplyData, toReplyMeta } from './postsApi';\nimport { getCurrentUserId, poke, scry, subscribe, trackedPoke } from './urbit';\n\nconst logger = createDevLogger('chatApi', false);\n\nexport const markChatRead = (whom: string) =>\n  poke({\n    app: 'chat',\n    mark: 'chat-remark-action',\n    json: {\n      whom,\n      diff: { read: null },\n    },\n  });\n\nexport const createGroupDm = ({\n  id,\n  members,\n}: {\n  id: string;\n  members: string[];\n}) => {\n  return poke({\n    app: 'chat',\n    mark: 'chat-club-create',\n    json: {\n      id,\n      hive: [...members],\n    },\n  });\n};\n\nexport const respondToDMInvite = ({\n  channel,\n  accept,\n}: {\n  channel: db.Channel;\n  accept: boolean;\n}) => {\n  const currentUserId = getCurrentUserId();\n\n  if (channel.type === 'dm') {\n    return poke({\n      app: 'chat',\n      mark: 'chat-dm-rsvp',\n      json: {\n        ship: channel.id,\n        ok: accept,\n      },\n    });\n  }\n\n  const action = multiDmAction(channel.id, {\n    team: { ship: currentUserId, ok: accept },\n  });\n  return poke(action);\n};\n\nexport const updateDMMeta = async ({\n  channelId,\n  meta,\n}: {\n  channelId: string;\n  meta: db.ClientMeta;\n}) => {\n  return await trackedPoke<ub.WritResponse | ub.ClubAction | string[]>(\n    multiDmAction(channelId, { meta: fromClientMeta(meta) }),\n    { app: 'chat', path: '/' },\n    (event) => {\n      if (!('diff' in event)) {\n        return false;\n      }\n      const { diff } = event;\n      return 'meta' in diff && event.id === channelId;\n    },\n    { tag: 'updateDMMeta' }\n  );\n};\n\nexport type ChatEvent =\n  | { type: 'showPost'; postId: string }\n  | { type: 'hidePost'; postId: string }\n  | { type: 'syncDmInvites'; channels: db.Channel[] }\n  | { type: 'groupDmsUpdate' }\n  | { type: 'addPost'; post: db.Post; replyMeta?: db.ReplyMeta | null }\n  | { type: 'deletePost'; postId: string }\n  | { type: 'addReaction'; postId: string; userId: string; react: string }\n  | { type: 'deleteReaction'; postId: string; userId: string }\n  | { type: 'unknown' };\n\nexport function subscribeToChatUpdates(\n  eventHandler: (event: ChatEvent) => void\n) {\n  subscribe(\n    {\n      app: 'chat',\n      path: '/v3',\n    },\n    (event: ub.WritResponse | ub.ClubAction | string[]) => {\n      logger.log('raw chat sub event', event);\n\n      if ('show' in event) {\n        // show/unhide post event\n        logger.log('show/unhide post', event.show);\n        const postId = getCanonicalPostId(event.show as string);\n        return eventHandler({ type: 'showPost', postId });\n      }\n\n      if ('hide' in event) {\n        // hide post event\n        logger.log('hide post', event.hide);\n        const postId = getCanonicalPostId(event.hide as string);\n        return eventHandler({ type: 'hidePost', postId });\n      }\n\n      // check for DM invites sync\n      if (Array.isArray(event)) {\n        // dm invites - this is the complete list of pending invites\n        return eventHandler({\n          type: 'syncDmInvites',\n          channels: toClientDms(event, true),\n        });\n      }\n\n      // and club events\n      if ('diff' in event) {\n        const diff = event.diff;\n        if ('uid' in diff && 'delta' in diff) {\n          logger.log('club event');\n          return eventHandler({\n            type: 'groupDmsUpdate',\n          });\n        }\n      }\n\n      // otherwise, handle as if it's a writ response\n      if (!('response' in event)) {\n        logger.log('unknown event type');\n        return eventHandler({ type: 'unknown' });\n      }\n\n      const channelId = event.whom;\n      const id = getCanonicalPostId(event.id);\n      const delta = event.response;\n\n      if ('add' in delta) {\n        logger.log('add dm', id, delta);\n        const writ = deriveFullWrit(id, delta);\n        const post = toPostData(channelId, writ);\n        return eventHandler({ type: 'addPost', post });\n      }\n\n      if ('del' in delta) {\n        logger.log('del dm', id, delta);\n        return eventHandler({ type: 'deletePost', postId: id });\n      }\n\n      if ('add-react' in delta) {\n        logger.log('add react', id, delta);\n        const addReact = delta['add-react'];\n        \n        // Check if this is a shortcode reaction from chat/DM\n        if (/^:[a-zA-Z0-9_+-]+:?$/.test(addReact.react)) {\n          logger.trackError('Shortcode reaction from chat/DM server', {\n            postId: id,\n            channelId,\n            userId: addReact.author,\n            react: addReact.react,\n            context: 'chat_dm_reaction'\n          });\n        }\n        \n        return eventHandler({\n          type: 'addReaction',\n          postId: id,\n          userId: addReact.author,\n          react: addReact.react,\n        });\n      }\n\n      if ('del-react' in delta) {\n        logger.log('del react', id, delta);\n        const userId = delta['del-react'];\n        return eventHandler({\n          type: 'deleteReaction',\n          postId: id,\n          userId,\n        });\n      }\n\n      if ('reply' in delta) {\n        const replyId = getCanonicalPostId(delta.reply.id);\n        const replyDelta = delta.reply.delta;\n\n        if ('add' in replyDelta) {\n          logger.log('add dm reply', id, delta);\n          const writReply = deriveFullWritReply({\n            id: replyId,\n            parentId: id,\n            delta: replyDelta,\n          });\n          const post = toPostReplyData(channelId, id, writReply);\n          const replyMeta = delta.reply.meta;\n          return eventHandler({\n            type: 'addPost',\n            post,\n            replyMeta: toReplyMeta(replyMeta),\n          });\n        }\n\n        if ('del' in replyDelta) {\n          logger.log('del dm reply', id, delta);\n          return eventHandler({ type: 'deletePost', postId: replyId });\n        }\n\n        if ('add-react' in replyDelta) {\n          logger.log('add react reply', id, delta);\n          const addReact = replyDelta['add-react'];\n          \n          // Check if this is a shortcode reaction from chat/DM reply\n          if (/^:[a-zA-Z0-9_+-]+:?$/.test(addReact.react)) {\n            logger.trackError('Shortcode reaction from chat/DM reply server', {\n              postId: replyId,\n              parentId: id,\n              channelId,\n              userId: addReact.author,\n              react: addReact.react,\n              context: 'chat_dm_reply_reaction'\n            });\n          }\n          \n          return eventHandler({\n            type: 'addReaction',\n            postId: replyId,\n            userId: addReact.author,\n            react: addReact.react,\n          });\n        }\n\n        if ('del-react' in replyDelta) {\n          logger.log('del react reply', id, delta);\n          const userId = replyDelta['del-react'];\n          return eventHandler({\n            type: 'deleteReaction',\n            postId: replyId,\n            userId,\n          });\n        }\n      }\n    }\n  );\n}\n\nexport function getBlockedUsers() {\n  return scry<ub.BlockedShips>({ app: 'chat', path: '/blocked' });\n}\n\nexport function blockUser(userId: string) {\n  return poke({\n    app: 'chat',\n    mark: 'chat-block-ship',\n    json: { ship: userId },\n  });\n}\n\nexport function unblockUser(userId: string) {\n  return poke({\n    app: 'chat',\n    mark: 'chat-unblock-ship',\n    json: { ship: userId },\n  });\n}\n\nexport function multiDmAction(id: string, delta: ub.ClubDelta) {\n  return {\n    app: 'chat',\n    mark: 'chat-club-action-0',\n    json: {\n      id,\n      diff: {\n        uid: '0v3',\n        delta,\n      },\n    },\n  };\n}\n\nexport type GetDmsResponse = db.Channel[];\n\nexport const getDms = async (): Promise<GetDmsResponse> => {\n  const result = (await scry({ app: 'chat', path: '/dm' })) as string[];\n  return toClientDms(result);\n};\n\nexport const toClientDms = (\n  dmContacts: string[],\n  areInvites?: boolean\n): db.Channel[] => {\n  return dmContacts.map((id) => toClientDm(id, areInvites));\n};\n\nexport const toClientDm = (id: string, isInvite?: boolean): db.Channel => {\n  return {\n    id,\n    type: 'dm' as const,\n    title: '',\n    description: '',\n    isDmInvite: !!isInvite,\n    contactId: id,\n    members: [{ chatId: id, contactId: id, membershipType: 'channel' }],\n  };\n};\n\nexport const getGroupDms = async (): Promise<GetDmsResponse> => {\n  const result = (await scry({ app: 'chat', path: '/clubs' })) as ub.Clubs;\n  return toClientGroupDms(result);\n};\n\nexport const toClientGroupDms = (groupDms: ub.Clubs): GetDmsResponse => {\n  const currentUserId = getCurrentUserId();\n  return Object.entries(groupDms)\n    .map(([id, club]): db.Channel | null => {\n      const joinedMembers = club.team.map(\n        (member): db.ChatMember => ({\n          contactId: member,\n          chatId: id,\n          membershipType: 'channel',\n          status: 'joined',\n        })\n      );\n      const invitedMembers = club.hive.map(\n        (member): db.ChatMember => ({\n          contactId: member,\n          chatId: id,\n          membershipType: 'channel',\n          status: 'invited',\n        })\n      );\n\n      const isJoined = joinedMembers.some(\n        (member) => member.contactId === currentUserId\n      );\n      const isInvited = invitedMembers.some(\n        (member) => member.contactId === currentUserId\n      );\n      // clubs continue to show up after being declined, so we need to make sure you're\n      // either a member or invited before importing it\n      if (!isJoined && !isInvited) {\n        return null;\n      }\n\n      const metaFields = toClientMeta(club.meta);\n\n      // Channel meta is different from other metas, since we can overload the\n      // `description` to fit other channel-specific data.\n      // Attempt to decode that extra info here.\n      const decodedDesc = StructuredChannelDescriptionPayload.decode(\n        metaFields.description\n      );\n\n      return {\n        id,\n        type: 'groupDm',\n        ...metaFields,\n        isDmInvite: !isJoined && isInvited,\n        members: [...joinedMembers, ...invitedMembers],\n        contentConfiguration: decodedDesc.channelContentConfiguration,\n        description: decodedDesc.description,\n      };\n    })\n    .filter(Boolean) as db.Channel[];\n};\n","import { da, render } from '@urbit/aura';\nimport { Poke } from '../http-api';\n\nimport * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport { ContentReference } from '../domain';\nimport {\n  IMAGE_URL_REGEX,\n  PlaintextPreviewConfig,\n  getTextContent,\n} from '../logic';\nimport * as ub from '../urbit';\nimport {\n  ClubAction,\n  DmAction,\n  HiddenMessages,\n  HiddenPosts,\n  KindData,\n  KindDataChat,\n  ReplyDelta,\n  Story,\n  WritDelta,\n  WritDeltaAdd,\n  WritDeltaAddReact,\n  WritDeltaDelReact,\n  WritDiff,\n  checkNest,\n  getChannelType,\n  whomIsDm,\n} from '../urbit';\nimport {\n  formatDateParam,\n  formatScryPath,\n  formatUd,\n  getCanonicalPostId,\n  getChannelIdType,\n  isDmChannelId,\n  isGroupChannelId,\n  isGroupDmChannelId,\n  toPostEssay,\n  udToDate,\n  with404Handler,\n} from './apiUtils';\nimport { channelAction } from './channelsApi';\nimport { multiDmAction } from './chatApi';\nimport { poke, scry, subscribeOnce } from './urbit';\n\nconst logger = createDevLogger('postsApi', false);\n\nexport type Cursor = string | Date;\nexport type PostContent = (ub.Verse | ContentReference)[] | null;\nexport type PostContentAndFlags = [PostContent, db.PostFlags | null];\n\nexport function chatAction(\n  whom: string,\n  id: string,\n  delta: WritDelta\n): Poke<DmAction | ClubAction> {\n  if (whomIsDm(whom)) {\n    const action: Poke<DmAction> = {\n      app: 'chat',\n      mark: 'chat-dm-action-1',\n      json: {\n        ship: whom,\n        diff: {\n          id,\n          delta,\n        },\n      },\n    };\n    return action;\n  }\n\n  const diff: WritDiff = { id, delta };\n  const action: Poke<ClubAction> = {\n    app: 'chat',\n    mark: 'chat-club-action-1',\n    json: {\n      id: whom,\n      diff: {\n        uid: '0v3',\n        delta: { writ: diff },\n      },\n    },\n  };\n\n  return action;\n}\n\nexport async function getPostReference({\n  channelId,\n  postId,\n  replyId,\n}: {\n  channelId: string;\n  postId: string;\n  replyId?: string;\n}) {\n  const path = `/said/${channelId}/post/${postId}${\n    replyId ? '/' + replyId : ''\n  }`;\n  const data = await subscribeOnce<ub.Said>(\n    { app: 'channels', path },\n    3000,\n    undefined,\n    { tag: 'getPostReference' }\n  );\n  const post = toPostReference(data);\n  // The returned post id can be different than the postId we requested?? But the\n  // post is going to be requested by the original id, so set manually :/\n  post.id = postId;\n  return post;\n}\n\nfunction toPostReference(said: ub.Said) {\n  const channelId = said.nest;\n  if ('reply' in said.reference) {\n    return toPostReplyData(\n      channelId,\n      said.reference.reply['id-post'],\n      said.reference.reply.reply\n    );\n  } else if ('post' in said.reference) {\n    return toPostData(channelId, said.reference.post);\n  } else {\n    throw new Error('invalid response' + JSON.stringify(said, null, 2));\n  }\n}\n\nfunction channelPostAction(nest: ub.Nest, action: ub.PostAction) {\n  checkNest(nest);\n\n  return channelAction(nest, {\n    post: action,\n  });\n}\n\nexport const sendPost = async ({\n  channelId,\n  authorId,\n  sentAt,\n  content,\n  blob,\n  metadata,\n}: {\n  channelId: string;\n  authorId: string;\n  sentAt: number;\n  content: Story;\n  blob?: string;\n  metadata?: db.PostMetadata;\n}) => {\n  logger.log('sending post', { channelId, authorId, sentAt, content });\n  const channelType = getChannelType(channelId);\n\n  if (channelType === 'dm' || channelType === 'groupDm') {\n    const delta: WritDeltaAdd = {\n      add: {\n        essay: {\n          content,\n          sent: sentAt,\n          author: authorId,\n          kind: '/chat',\n          meta: null,\n          blob: blob ?? null,\n        },\n        time: null,\n      },\n    };\n\n    const action = chatAction(\n      channelId,\n      `${delta.add.essay.author}/${formatUd(da.fromUnix(delta.add.essay.sent).toString())}`,\n      delta\n    );\n    await poke(action);\n    return;\n  }\n\n  const essay = toPostEssay({\n    content,\n    blob,\n    authorId,\n    sentAt,\n    channelType,\n    metadata: metadata\n      ? {\n          title: metadata.title || '',\n          image: metadata.image || '',\n          description: metadata.description || '',\n          cover: metadata.cover || '',\n        }\n      : undefined,\n  });\n\n  const action = channelPostAction(channelId, {\n    add: essay,\n  });\n\n  await poke(action);\n  logger.log('post sent', { channelId, authorId, sentAt, content });\n};\n\nexport const editPost = async ({\n  channelId,\n  postId,\n  authorId,\n  sentAt,\n  content,\n  parentId,\n  metadata,\n  blob,\n}: {\n  channelId: string;\n  postId: string;\n  authorId: string;\n  sentAt: number;\n  content: Story;\n  parentId?: string;\n  metadata?: db.PostMetadata;\n  blob?: string;\n}) => {\n  logger.log('editing post', { channelId, postId, authorId, sentAt, content });\n  const channelType = getChannelType(channelId);\n  if (isDmChannelId(channelId) || isGroupDmChannelId(channelId)) {\n    logger.error('Cannot edit a post in a DM or group DM');\n    throw new Error('Cannot edit a post in a DM or group DM');\n  }\n\n  if (parentId) {\n    logger.log('editing a reply');\n    const memo: ub.Memo = {\n      author: authorId,\n      content,\n      sent: sentAt,\n    };\n\n    const action: ub.Action = {\n      post: {\n        reply: {\n          id: parentId,\n          action: {\n            edit: {\n              id: postId,\n              memo,\n            },\n          },\n        },\n      },\n    };\n\n    logger.log('sending action', action);\n    await poke(channelAction(channelId, action));\n    logger.log('action sent');\n    return;\n  }\n\n  logger.log('editing a post');\n\n  const essay = toPostEssay({\n    content,\n    authorId,\n    sentAt,\n    channelType,\n    blob,\n    metadata: metadata\n      ? {\n          title: metadata.title || '',\n          image: metadata.image || '',\n          description: metadata.description || '',\n          cover: metadata.cover || '',\n        }\n      : undefined,\n  });\n\n  const action = channelPostAction(channelId, {\n    edit: {\n      id: postId,\n      essay,\n    },\n  });\n\n  logger.log('sending action', action);\n  await poke(action);\n  logger.log('action sent');\n};\n\nexport const sendReply = async ({\n  channelId,\n  parentId,\n  parentAuthor,\n  content,\n  sentAt,\n  authorId,\n}: {\n  authorId: string;\n  channelId: string;\n  parentId: string;\n  parentAuthor: string;\n  content: Story;\n  sentAt: number;\n}) => {\n  if (isDmChannelId(channelId) || isGroupDmChannelId(channelId)) {\n    const delta: ub.ReplyDelta = {\n      reply: {\n        id: `${authorId}/${formatUd(da.fromUnix(sentAt).toString())}`,\n        meta: null,\n        delta: {\n          add: {\n            memo: {\n              content,\n              author: authorId,\n              sent: sentAt,\n            },\n            time: null,\n          },\n        },\n      },\n    };\n\n    const action = chatAction(channelId, `${parentAuthor}/${parentId}`, delta);\n    await poke(action);\n    return;\n  }\n\n  const postAction: ub.PostAction = {\n    reply: {\n      id: parentId,\n      action: {\n        add: {\n          content,\n          author: authorId,\n          sent: sentAt,\n        },\n      },\n    },\n  };\n\n  const action = channelPostAction(channelId, postAction);\n  await poke(action);\n};\nexport interface GetSequencedPostsOptions {\n  channelId: string;\n  start: number;\n  end: number;\n  includeReplies?: boolean;\n}\n\nexport const getSequencedChannelPosts = async (\n  options: GetSequencedPostsOptions\n) => {\n  const encodedStart = formatUd(options.start.toString());\n  const encodedEnd = formatUd(options.end.toString());\n\n  const type = getChannelIdType(options.channelId);\n  const app = type === 'channel' ? 'channels' : 'chat';\n  const endpoint = formatScryPath(\n    ...[\n      type === 'dm' ? 'v3/dm' : null,\n      type === 'club' ? 'v3/club' : null,\n      type === 'channel' ? 'v4' : null,\n    ],\n    options.channelId,\n    type === 'channel' ? 'posts' : 'writs',\n    'range',\n    encodedStart,\n    encodedEnd,\n    ...[\n      type === 'channel' ? (options.includeReplies ? 'post' : 'outline') : null,\n      type !== 'channel' ? (options.includeReplies ? 'heavy' : 'light') : null,\n    ]\n  );\n\n  const response = await scry<ub.PagedPosts | ub.PagedWrits>({\n    app: app,\n    path: endpoint,\n  });\n\n  const clientPosts = toPagedPostsData(options.channelId, response).posts;\n  const withoutGaps = fillSequenceGaps(clientPosts, {\n    lowerBound: options.start,\n    upperBound: options.end,\n  });\n\n  if (withoutGaps.numStubs > 0) {\n    logger.log('filled sequence gaps', {\n      channelId: options.channelId,\n      start: options.start,\n      end: options.end,\n      numStubs: withoutGaps.numStubs,\n    });\n  }\n\n  return {\n    posts: withoutGaps.posts,\n    newestSequenceNum: Number(response.newest),\n  };\n};\n\nexport type GetChannelPostsOptions = {\n  channelId: string;\n  count?: number;\n  includeReplies?: boolean;\n  mode: 'older' | 'newer' | 'around' | 'newest';\n  cursor?: Cursor;\n  sequenceBoundary?: number | null;\n};\n\nexport interface GetChannelPostsResponse {\n  older?: string | null;\n  newer?: string | null;\n  posts: db.Post[];\n  deletedPosts?: db.Post[];\n  totalPosts?: number;\n}\n\nexport const getInitialPosts = async (config: {\n  channelCount: number;\n  postCount: number;\n}) => {\n  const response = await scry<ub.PostsInit>({\n    app: 'groups-ui',\n    path: `/v5/init-posts/${config.channelCount}/${config.postCount}`,\n  });\n\n  const channelPosts = Object.entries(response.channels).flatMap(\n    ([channelId, posts]) => (posts ? toPostsData(channelId, posts).posts : [])\n  );\n  const chatPosts = Object.entries(response.chat).flatMap(([chatId, posts]) =>\n    posts ? toPostsData(chatId, posts).posts : []\n  );\n\n  return [...channelPosts, ...chatPosts];\n};\n\nexport const getChannelPosts = async ({\n  channelId,\n  cursor,\n  mode = 'older',\n  count = 20,\n  includeReplies = false,\n  sequenceBoundary = null,\n}: GetChannelPostsOptions) => {\n  const type = getChannelIdType(channelId);\n  const app = type === 'channel' ? 'channels' : 'chat';\n  const path = formatScryPath(\n    ...[\n      type === 'dm' ? 'v3/dm' : null,\n      type === 'club' ? 'v3/club' : null,\n      type === 'channel' ? 'v4' : null,\n    ],\n    channelId,\n    type === 'channel' ? 'posts' : 'writs',\n    mode,\n    cursor ? formatCursor(cursor) : null,\n    count,\n    ...[\n      type === 'channel' ? (includeReplies ? 'post' : 'outline') : null,\n      type !== 'channel' ? (includeReplies ? 'heavy' : 'light') : null,\n    ]\n  );\n\n  const response = await with404Handler(\n    scry<ub.PagedWrits | ub.PagedPosts>({\n      app,\n      path,\n    }),\n    { posts: [] }\n  );\n  const postsResponse = toPagedPostsData(channelId, response);\n  const { posts: finalPosts, numStubs } = fillSequenceGaps(\n    postsResponse.posts,\n    { upperBound: null, lowerBound: null }\n  );\n\n  return {\n    ...postsResponse,\n    posts: finalPosts,\n    numStubs,\n    numDeletes: postsResponse.deletedPosts?.length ?? 0,\n    newestSequenceNum: response.newest,\n  };\n};\n\n// we need to account for gaps in sequence numbers to avoid ever locking up\n// if there's a contiguity bug on the backends. To accomplish this\n// without reintroducing windowing, we insert dummy posts whenever fetching a known\n// contiguous block of posts\nexport function fillSequenceGaps(\n  responsePosts: db.Post[],\n  config: { upperBound: number | null; lowerBound: number | null }\n): { posts: db.Post[]; numStubs: number } {\n  // --- Step 1: Handle empty input ---\n  if (!responsePosts.length) {\n    return { posts: [], numStubs: 0 };\n  }\n\n  // --- Step 2: If not provided explicitly, use the data to determine the window ---\n  const explicitWindowProvided =\n    config.lowerBound !== null && config.upperBound !== null;\n  let minSeq = config.lowerBound ?? Infinity;\n  let maxSeq = config.upperBound ?? 0;\n  let numStubs = 0;\n\n  const existingPostMap = new Map<number, db.Post>();\n  for (const post of responsePosts) {\n    if (typeof post.sequenceNum !== 'number') {\n      // this should never happen\n      logger.trackError('post missing sequence number while filling gaps');\n      continue;\n    }\n\n    if (!explicitWindowProvided) {\n      if (post.sequenceNum < minSeq) {\n        minSeq = post.sequenceNum;\n      }\n      if (post.sequenceNum > maxSeq) {\n        maxSeq = post.sequenceNum;\n      }\n    }\n    existingPostMap.set(post.sequenceNum, post);\n  }\n\n  // --- Step 3: Iterate through the range and fill gaps ---\n  const mergedPosts: db.Post[] = [];\n  const examplePost = responsePosts[0];\n  let previousSentAt = examplePost.sentAt;\n  for (let i = minSeq; i <= maxSeq; i++) {\n    const existingPost = existingPostMap.get(i);\n    if (existingPost) {\n      previousSentAt = existingPost.sentAt;\n      mergedPosts.push(existingPost);\n    } else {\n      const nextSentAt = previousSentAt + 1;\n      mergedPosts.push(\n        toSequenceStubPost({\n          channelId: examplePost.channelId,\n          type: examplePost.type,\n          sentAt: nextSentAt,\n          sequenceNum: i,\n        })\n      );\n      previousSentAt = nextSentAt;\n      numStubs++;\n    }\n  }\n\n  return { posts: mergedPosts, numStubs };\n}\n\nexport type PostWithUpdateTime = {\n  channelId: string;\n  updatedAt: number;\n  latestPost: db.Post;\n};\n\nexport type GetLatestPostsResponse = PostWithUpdateTime[];\n\nexport const getLatestPosts = async ({\n  afterCursor,\n  count,\n}: {\n  afterCursor?: Cursor;\n  count?: number;\n}): Promise<GetLatestPostsResponse> => {\n  try {\n    const { channels, dms } = await scry<ub.CombinedHeads>({\n      app: 'groups-ui',\n      path: formatScryPath(\n        'v3/heads',\n        afterCursor ? formatCursor(afterCursor) : null,\n        count\n      ),\n    });\n\n    return [...channels, ...dms].map((head) => {\n      const channelId = 'nest' in head ? head.nest : head.whom;\n      const latestPost = toPostData(channelId, head.latest);\n      return {\n        channelId: channelId,\n        updatedAt: head.recency,\n        latestPost,\n      };\n    });\n  } catch (e) {\n    logger.trackError('failed to sync heads', {\n      errorMessage: e.message,\n      errorStack: e.stack,\n    });\n    return [];\n  }\n};\n\nexport interface GetChangedPostsOptions {\n  channelId: string;\n  startCursor: Cursor;\n  endCursor: Cursor;\n  afterTime: Date;\n}\n\nexport type GetChangedPostsResponse = GetChannelPostsResponse;\n\nexport const getChangedPosts = async ({\n  channelId,\n  startCursor,\n  endCursor,\n  afterTime,\n}: GetChangedPostsOptions): Promise<GetChangedPostsResponse> => {\n  if (!isGroupChannelId(channelId)) {\n    throw new Error(\n      `invalid channel id  ${channelId}:\n      server does not implement this endpoint for non-group channels`\n    );\n  }\n  const response = await scry<ub.PagedPosts>({\n    app: 'channels',\n    path: formatScryPath(\n      `v1/${channelId}/posts/changes`,\n      formatCursor(startCursor),\n      formatCursor(endCursor),\n      render('da', da.fromUnix(afterTime.valueOf()))\n    ),\n  });\n  return toPagedPostsData(channelId, response);\n};\n\nexport async function addReaction({\n  channelId,\n  postId,\n  emoji,\n  our,\n  postAuthor,\n  parentAuthorId,\n  parentId,\n}: {\n  channelId: string;\n  postId: string;\n  emoji: string;\n  our: string;\n  postAuthor: string;\n  parentAuthorId?: string;\n  parentId?: string;\n}) {\n  // Log if we're sending a shortcode to the server\n  if (/^:[a-zA-Z0-9_+-]+:?$/.test(emoji)) {\n    logger.trackError('Sending shortcode reaction to server', {\n      channelId,\n      postId,\n      emoji,\n      context: 'addReaction_api',\n      stack: new Error().stack,\n    });\n  }\n\n  const isDmOrGroupDm =\n    isDmChannelId(channelId) || isGroupDmChannelId(channelId);\n\n  if (isDmOrGroupDm) {\n    if (isDmChannelId(channelId)) {\n      if (parentId) {\n        if (!parentId || !parentAuthorId) {\n          logger.trackError('Parent post not found', {\n            postId,\n            parentId,\n            parentAuthorId,\n            context: 'addReaction_parentPostNotFound',\n          });\n          return;\n        }\n        const fullParentId = `${parentAuthorId}/${parentId}`;\n\n        const delta: ReplyDelta = {\n          reply: {\n            id: `${postAuthor}/${postId}`,\n            meta: null,\n            delta: {\n              'add-react': {\n                author: our,\n                react: emoji,\n              },\n            },\n          },\n        };\n        await poke(chatAction(channelId, fullParentId, delta));\n      } else {\n        const delta: WritDeltaAddReact = {\n          'add-react': {\n            react: emoji,\n            author: our,\n          },\n        };\n        const action = chatAction(channelId, `${postAuthor}/${postId}`, delta);\n        await poke(action);\n      }\n      return;\n    } else {\n      // Group DM reactions\n      if (parentId) {\n        if (!parentId || !parentAuthorId) {\n          logger.trackError('Parent post not found', {\n            postId,\n            parentId,\n            parentAuthorId,\n            context: 'addReaction_parentPostNotFound',\n          });\n          return;\n        }\n        const fullParentId = `${parentAuthorId}/${parentId}`;\n\n        const delta: ReplyDelta = {\n          reply: {\n            id: `${postAuthor}/${postId}`,\n            meta: null,\n            delta: {\n              'add-react': {\n                react: emoji,\n                author: our,\n              },\n            },\n          },\n        };\n        await poke(chatAction(channelId, fullParentId, delta));\n      } else {\n        const delta: WritDeltaAddReact = {\n          'add-react': {\n            react: emoji,\n            author: our,\n          },\n        };\n        await poke(chatAction(channelId, `${postAuthor}/${postId}`, delta));\n      }\n      return;\n    }\n  }\n\n  if (parentId) {\n    await poke(\n      channelAction(channelId, {\n        post: {\n          reply: {\n            id: parentId,\n            action: {\n              'add-react': {\n                id: postId,\n                react: emoji,\n                ship: our,\n              },\n            },\n          },\n        },\n      })\n    );\n  } else {\n    await poke(\n      channelAction(channelId, {\n        post: {\n          'add-react': {\n            id: postId,\n            react: emoji,\n            ship: our,\n          },\n        },\n      })\n    );\n  }\n}\n\nexport async function removeReaction({\n  channelId,\n  postId,\n  our,\n  postAuthor,\n  parentId,\n  parentAuthorId,\n}: {\n  channelId: string;\n  postId: string;\n  our: string;\n  postAuthor: string;\n  parentId?: string;\n  parentAuthorId?: string;\n}) {\n  const isDmOrGroupDm =\n    isDmChannelId(channelId) || isGroupDmChannelId(channelId);\n\n  if (isDmOrGroupDm) {\n    if (isDmChannelId(channelId)) {\n      if (parentId) {\n        if (!parentId || !parentAuthorId) {\n          logger.trackError('Parent post not found', {\n            postId,\n            parentId,\n            parentAuthorId,\n            context: 'removeReaction_parentPostNotFound',\n          });\n          return;\n        }\n        const fullParentId = `${parentAuthorId}/${parentId}`;\n\n        const delta: ReplyDelta = {\n          reply: {\n            id: `${postAuthor}/${postId}`,\n            meta: null,\n            delta: {\n              'del-react': our,\n            },\n          },\n        };\n        return poke(chatAction(channelId, fullParentId, delta));\n      } else {\n        const delta: WritDeltaDelReact = {\n          'del-react': our,\n        };\n        return poke(chatAction(channelId, `${postAuthor}/${postId}`, delta));\n      }\n    } else {\n      // Group DM reactions\n      if (parentId) {\n        if (!parentId || !parentAuthorId) {\n          logger.trackError('Parent post not found', {\n            postId,\n            parentId,\n            parentAuthorId,\n            context: 'removeReaction_parentPostNotFound',\n          });\n          return;\n        }\n        const fullParentId = `${parentAuthorId}/${parentId}`;\n\n        const delta: ReplyDelta = {\n          reply: {\n            id: `${postAuthor}/${postId}`,\n            meta: null,\n            delta: {\n              'del-react': our,\n            },\n          },\n        };\n        return poke(chatAction(channelId, fullParentId, delta));\n      } else {\n        const delta: WritDeltaDelReact = {\n          'del-react': our,\n        };\n        return poke(chatAction(channelId, `${postAuthor}/${postId}`, delta));\n      }\n    }\n  }\n\n  if (parentId) {\n    return await poke(\n      channelAction(channelId, {\n        post: {\n          reply: {\n            id: parentId,\n            action: {\n              'del-react': {\n                id: postId,\n                ship: our,\n              },\n            },\n          },\n        },\n      })\n    );\n  } else {\n    return await poke(\n      channelAction(channelId, {\n        post: {\n          'del-react': {\n            id: postId,\n            ship: our,\n          },\n        },\n      })\n    );\n  }\n}\n\nexport async function showPost(post: db.Post) {\n  if (isGroupChannelId(post.channelId)) {\n    const action = {\n      app: 'channels',\n      mark: 'channel-action-1',\n      json: {\n        'toggle-post': {\n          show: post.id,\n        },\n      },\n    };\n\n    return poke(action);\n  }\n\n  const writId = `${post.authorId}/${post.id}`;\n\n  const action = {\n    app: 'chat',\n    mark: 'chat-toggle-message',\n    json: {\n      show: writId,\n    },\n  };\n\n  return poke(action);\n}\n\nexport async function hidePost(post: db.Post) {\n  if (isGroupChannelId(post.channelId)) {\n    const action = {\n      app: 'channels',\n      mark: 'channel-action-1',\n      json: {\n        'toggle-post': {\n          hide: post.id,\n        },\n      },\n    };\n\n    return poke(action);\n  }\n\n  const writId = `${post.authorId}/${post.id}`;\n  const action = {\n    app: 'chat',\n    mark: 'chat-toggle-message',\n    json: {\n      hide: writId,\n    },\n  };\n\n  return poke(action);\n}\n\nexport const toClientHiddenPosts = (hiddenPostIds: string[]) => {\n  return hiddenPostIds.map((postId) => getCanonicalPostId(postId));\n};\n\nexport async function reportPost(\n  currentUserId: string,\n  groupId: string,\n  channelId: string,\n  post: db.Post\n) {\n  await hidePost(post);\n\n  const action = {\n    app: 'groups',\n    mark: 'group-action-4',\n    json: {\n      group: {\n        flag: groupId,\n        'a-group': {\n          'flag-content': {\n            nest: channelId,\n            'post-key': {\n              post: post.parentId ? post.parentId : post.id,\n              reply: post.parentId ? post.id : null,\n            },\n            src: currentUserId,\n          },\n        },\n      },\n    },\n  };\n\n  return await poke(action);\n}\n\nexport const getHiddenPosts = async () => {\n  const hiddenPosts = await scry<HiddenPosts>({\n    app: 'channels',\n    path: '/hidden-posts',\n  });\n\n  return hiddenPosts.map((postId) => getCanonicalPostId(postId));\n};\n\nexport const getHiddenDMPosts = async () => {\n  const hiddenDMPosts = await scry<HiddenMessages>({\n    app: 'chat',\n    path: '/hidden-messages',\n  });\n\n  return hiddenDMPosts.map((postId) => getCanonicalPostId(postId));\n};\n\nexport async function deletePost(\n  channelId: string,\n  postId: string,\n  authorId: string\n) {\n  const action = isDmChannelId(channelId)\n    ? chatAction(channelId, `${authorId}/${postId}`, {\n        del: null,\n      })\n    : isGroupDmChannelId(channelId)\n      ? multiDmAction(channelId, {\n          writ: {\n            id: `${authorId}/${postId}`,\n            delta: {\n              del: null,\n            },\n          },\n        })\n      : channelAction(channelId, {\n          post: {\n            del: postId,\n          },\n        });\n\n  // todo: we need to use a tracked poke here (or settle on a different pattern\n  // for expressing request response semantics)\n  return await poke(action);\n}\n\nexport async function deleteReply(params: {\n  channelId: string;\n  parentId: string;\n  parentAuthorId: string;\n  postId: string;\n  authorId: string;\n}) {\n  let action = null;\n\n  if (isDmChannelId(params.channelId)) {\n    action = chatAction(\n      params.channelId,\n      `${params.parentAuthorId}/${params.parentId}`,\n      {\n        reply: {\n          id: `${params.authorId}/${params.postId}`,\n          meta: null,\n          delta: {\n            del: null,\n          },\n        },\n      }\n    );\n  } else if (isGroupDmChannelId(params.channelId)) {\n    action = multiDmAction(params.channelId, {\n      writ: {\n        id: `${params.parentAuthorId}/${params.parentId}`,\n        delta: {\n          reply: {\n            id: `${params.authorId}/${params.postId}`,\n            meta: null,\n            delta: {\n              del: null,\n            },\n          },\n        },\n      },\n    });\n  } else {\n    action = channelAction(params.channelId, {\n      post: {\n        reply: {\n          id: params.parentId,\n          action: {\n            del: params.postId,\n          },\n        },\n      },\n    });\n  }\n\n  return await poke(action);\n}\n\nexport const getPostWithReplies = async ({\n  postId,\n  channelId,\n  authorId,\n}: {\n  postId: string;\n  channelId: string;\n  authorId: string;\n}) => {\n  logger.log('fetching post with replies', { postId, channelId, authorId });\n  if (\n    !authorId &&\n    (isDmChannelId(channelId) || isGroupDmChannelId(channelId))\n  ) {\n    throw new Error(\n      'author id is required to fetch posts for a dm or group dm'\n    );\n  }\n\n  let app: 'chat' | 'channels';\n  let path: string;\n\n  if (isDmChannelId(channelId)) {\n    app = 'chat';\n    path = `/v2/dm/${channelId}/writs/writ/id/${authorId}/${postId}`;\n  } else if (isGroupDmChannelId(channelId)) {\n    app = 'chat';\n    path = `/v2/club/${channelId}/writs/writ/id/${authorId}/${postId}`;\n  } else if (isGroupChannelId(channelId)) {\n    app = 'channels';\n    path = `/v4/${channelId}/posts/post/${postId}`;\n  } else {\n    throw new Error('invalid channel id');\n  }\n\n  const post = await scry<ub.Post>({\n    app,\n    path,\n  });\n\n  const postData = toPostData(channelId, post);\n  return postData;\n};\n\nexport interface DeletedPost {\n  id: string;\n  channelId: string;\n}\n\nexport function toPagedPostsData(\n  channelId: string,\n  data: ub.PagedPosts | ub.PagedWrits\n): GetChannelPostsResponse {\n  const posts = 'writs' in data ? data.writs : data.posts;\n  const postsData = toPostsData(channelId, posts);\n  return {\n    older: data.older ? formatUd(data.older) : null,\n    newer: data.newer ? formatUd(data.newer) : null,\n    totalPosts: data.total,\n    ...postsData,\n  };\n}\n\nexport function toPostsData(\n  channelId: string,\n  posts: ub.Posts | ub.Writs | Record<string, ub.Reply>\n): { posts: db.Post[]; deletedPosts: db.Post[] } {\n  const entries = Object.entries(posts);\n  const deletedPosts: db.Post[] = [];\n  const otherPosts: db.Post[] = [];\n\n  for (const [, post] of entries) {\n    // post will only be null if it was deleted and we're interacting with an\n    // outdated version of the backend. we just ignore that here, which means\n    // that deleted posts will be converted to stubs and not be displayed, but\n    // only temporarily until the backend is updated.\n    if (post === null) {\n      continue;\n    }\n    const postData = toPostData(channelId, post);\n    if (isPostTombstone(post)) {\n      deletedPosts.push(postData);\n    }\n    otherPosts.push(postData);\n  }\n\n  otherPosts.sort((a, b) => (a.receivedAt ?? 0) - (b.receivedAt ?? 0));\n\n  return {\n    posts: otherPosts,\n    deletedPosts,\n  };\n}\n\nfunction getAuthorId(author: ub.Author) {\n  if (typeof author === 'string') {\n    return author;\n  } else {\n    return author.ship;\n  }\n}\n\nexport function toPostData(\n  channelId: string,\n  post: ub.Post | ub.PostTombstone | ub.Writ | ub.PostDataResponse\n): db.Post {\n  const channelType = channelId.split('/')[0];\n  const getPostType = (\n    post: ub.Post | ub.PostTombstone | ub.Writ | ub.PostDataResponse\n  ) => {\n    if (isNotice(post)) {\n      return 'notice';\n    }\n\n    if (channelType === 'chat') {\n      return 'chat';\n    } else if (channelType === 'diary') {\n      return 'note';\n    } else if (channelType === 'heap') {\n      return 'block';\n    } else {\n      return 'chat';\n    }\n  };\n  const type = getPostType(post);\n\n  if (isPostTombstone(post)) {\n    return {\n      id: getCanonicalPostId(post.id),\n      authorId: getAuthorId(post.author),\n      channelId,\n      type,\n      sentAt: getReceivedAtFromId(post.id),\n      isDeleted: true,\n      deletedAt: post['deleted-at'],\n      receivedAt: getReceivedAtFromId(post.id),\n      sequenceNum: post.seq ? Number(post.seq) : null,\n    };\n  }\n\n  const [content, flags] = toPostContent(post?.essay.content);\n  const id = getCanonicalPostId(post.seal.id);\n  const backendTime =\n    post.seal && 'time' in post.seal\n      ? getCanonicalPostId(post.seal.time.toString())\n      : null;\n\n  const replyData = isPostDataResponse(post)\n    ? getReplyData(id, channelId, post)\n    : null;\n\n  // This is used for backwards compatibility with older gallery posts from\n  // the old web frontend, where a user could just link an image that would be\n  // rendered as a an image post in a gallery. This is not a feature that is\n  // supported by the current frontend, but we still need to be able to render\n  // these posts correctly.\n  const galleryImageLink =\n    channelType === 'heap' &&\n    content &&\n    content.length === 1 &&\n    'inline' in content[0] &&\n    content[0].inline.length === 1 &&\n    typeof content[0].inline[0] === 'object' &&\n    'link' in content[0].inline[0] &&\n    content[0].inline[0].link.href.match(IMAGE_URL_REGEX)\n      ? content[0].inline[0].link.href\n      : null;\n\n  const galleryImageLinkContent: ub.Verse[] = [\n    {\n      block: {\n        // @ts-expect-error - we don't know image size\n        image: {\n          src: galleryImageLink ?? '',\n          alt: 'heap image',\n        },\n      },\n    },\n  ];\n\n  // top level posts will have a sequence number, but replies will not\n  let sequenceNum = null;\n  if ('seq' in post.seal) {\n    sequenceNum = Number(post.seal.seq);\n  }\n\n  return {\n    id,\n    channelId,\n    type,\n    backendTime,\n    sequenceNum,\n    // Kind data will override\n    title: post.essay.meta?.title ?? '',\n    image: post.essay.meta?.image ?? '',\n    description: post.essay.meta?.description ?? '',\n    cover: post.essay.meta?.cover ?? '',\n    authorId: getAuthorId(post.essay.author),\n    isEdited: 'revision' in post && post.revision !== '0',\n    content: galleryImageLink\n      ? JSON.stringify(galleryImageLinkContent)\n      : JSON.stringify(content),\n    textContent: getTextContent(\n      post?.essay.content,\n      PlaintextPreviewConfig.inlineConfig\n    ),\n    sentAt: post.essay.sent,\n    receivedAt: getReceivedAtFromId(id),\n    replyCount: post?.seal.meta.replyCount,\n    replyTime: post?.seal.meta.lastReply,\n    replyContactIds: post?.seal.meta.lastRepliers,\n    images: getContentImages(id, post.essay?.content),\n    reactions: (() => {\n      const reacts = post?.seal.reacts ?? {};\n      // Check for shortcodes in initial post reactions\n      if (Object.keys(reacts).length > 0) {\n        const shortcodeReactions = Object.entries(reacts).filter(\n          ([, v]) => typeof v === 'string' && /^:[a-zA-Z0-9_+-]+:?$/.test(v)\n        );\n\n        if (shortcodeReactions.length > 0) {\n          logger.trackError('Shortcode reactions in initial post load', {\n            postId: id,\n            channelId,\n            shortcodeReactions: shortcodeReactions.map(([k, v]) => ({\n              user: k,\n              value: v,\n            })),\n            allReacts: reacts,\n            context: 'initial_post_load',\n          });\n        }\n      }\n      return toReactionsData(reacts, id);\n    })(),\n    replies: replyData,\n    deliveryStatus: null,\n    syncedAt: Date.now(),\n    blob: post.essay.blob ?? null,\n    ...flags,\n  };\n}\n\nfunction getReceivedAtFromId(postId: string) {\n  return udToDate(postId.split('/').pop() ?? postId);\n}\n\nfunction isPostDataResponse(\n  post: ub.Post | ub.Writ | ub.PostDataResponse\n): post is ub.PostDataResponse {\n  return !!(post.seal.replies && !Array.isArray(post.seal.replies));\n}\n\nfunction isPostTombstone(\n  post:\n    | ub.Post\n    | ub.PostTombstone\n    | ub.Writ\n    | ub.PostDataResponse\n    | ub.WritReply\n    | ub.Reply\n): post is ub.PostTombstone {\n  return 'type' in post && post.type === 'tombstone';\n}\n\nfunction getReplyData(\n  postId: string,\n  channelId: string,\n  post: ub.PostDataResponse\n): db.Post[] {\n  return Object.entries(post.seal.replies ?? {}).map(([, reply]) =>\n    toPostReplyData(channelId, postId, reply)\n  );\n}\nexport function toReplyMeta(meta?: ub.ReplyMeta | null): db.ReplyMeta | null {\n  if (!meta) {\n    return null;\n  }\n  return {\n    replyCount: meta.replyCount,\n    replyTime: meta.lastReply,\n    replyContactIds: meta.lastRepliers,\n  };\n}\n\nexport function toPostReplyData(\n  channelId: string,\n  postId: string,\n  reply: ub.Reply | ub.WritReply | ub.PostTombstone\n): db.Post {\n  if (isPostTombstone(reply)) {\n    return {\n      id: getCanonicalPostId(reply.id),\n      parentId: getCanonicalPostId(postId),\n      authorId: getAuthorId(reply.author),\n      channelId,\n      type: 'reply',\n      sentAt: getReceivedAtFromId(reply.id),\n      isDeleted: true,\n      deletedAt: reply['deleted-at'],\n      receivedAt: getReceivedAtFromId(reply.id),\n      sequenceNum: null,\n      syncedAt: Date.now(),\n    };\n  }\n\n  const [content, flags] = toPostContent(reply.memo.content);\n  const id = getCanonicalPostId(reply.seal.id);\n  const backendTime =\n    reply.seal && 'time' in reply.seal\n      ? getCanonicalPostId(reply.seal.time.toString())\n      : null;\n  return {\n    id,\n    channelId,\n    type: 'reply',\n    authorId: getAuthorId(reply.memo.author),\n    isEdited: !!reply.revision && reply.revision !== '0',\n    parentId: getCanonicalPostId(postId),\n    reactions: toReactionsData(reply.seal.reacts, id),\n    content: JSON.stringify(content),\n    textContent: getTextContent(reply.memo.content),\n    sentAt: reply.memo.sent,\n    // replies aren't sequenced, seq 0 is never genuine. drizzle has trouble\n    // targeting nulls for onConflictDoUpdate so we use a default value instead\n    sequenceNum: 0,\n    backendTime,\n    receivedAt: getReceivedAtFromId(id),\n    replyCount: 0,\n    images: getContentImages(id, reply.memo.content),\n    syncedAt: Date.now(),\n    ...flags,\n  };\n}\n\nexport function toSequenceStubPost({\n  channelId,\n  type,\n  sequenceNum,\n  sentAt,\n}: {\n  channelId: string;\n  type: db.PostType;\n  sequenceNum: number;\n  sentAt?: number;\n}): db.Post {\n  const stubPost: db.Post = {\n    id: `sequence-stub-${channelId}-${sequenceNum}`,\n    type,\n    channelId,\n    authorId: '~zod',\n    sentAt: sentAt ?? Date.now(),\n    receivedAt: sentAt ?? Date.now(),\n    content: null,\n    hidden: false,\n    sequenceNum,\n    isSequenceStub: true,\n  };\n  return stubPost;\n}\n\nexport function toPostContent(story?: ub.Story): PostContentAndFlags {\n  if (!story) {\n    return [null, null];\n  }\n  const flags: db.PostFlags = {\n    hasAppReference: false,\n    hasChannelReference: false,\n    hasGroupReference: false,\n    hasLink: false,\n    hasImage: false,\n  };\n  const convertedContent = story.map((verse) => {\n    if ('block' in verse && 'cite' in verse.block) {\n      const reference = toContentReference(verse.block.cite);\n      if (reference) {\n        if (reference.referenceType === 'app') {\n          flags.hasAppReference = true;\n        } else if (reference.referenceType === 'channel') {\n          flags.hasChannelReference = true;\n        } else if (reference.referenceType === 'group') {\n          flags.hasGroupReference = true;\n        }\n        return reference;\n      }\n    }\n    return verse;\n  });\n  return [convertedContent, flags];\n}\n\nexport function toUrbitStory(content: PostContent): Story {\n  if (!content) {\n    return [];\n  }\n  return content.map((item) => {\n    if ('type' in item) {\n      return {\n        block: {\n          cite: contentReferenceToCite(item),\n        },\n      };\n    }\n    return item;\n  });\n}\n\nexport function toContentReference(cite: ub.Cite): ContentReference | null {\n  if ('chan' in cite) {\n    const channelId = cite.chan.nest;\n    // I've seen these forms of reference path:\n    // /msg/170141184506828851385935487131294105600\n    // /msg/170141184506312077223314290444316180480/170141184506312235291442423303751335936\n    // /msg/~sogrum-savluc/170.141.184.505.979.681.243.072.382.329.337.971.474\n    const messageIdRegex = /\\/([0-9\\.]+(?=[$\\/]?))/g;\n    const [postId, replyId] = Array.from(\n      cite.chan.where.matchAll(messageIdRegex)\n    ).map((m) => {\n      return m[1].replace(/\\./g, '');\n    });\n    if (!postId) {\n      console.error('found invalid ref', cite);\n      return null;\n    }\n    return {\n      type: 'reference',\n      referenceType: 'channel',\n      channelId,\n      postId: formatUd(postId),\n      replyId: replyId ? formatUd(replyId) : undefined,\n    };\n  } else if ('group' in cite) {\n    return { type: 'reference', referenceType: 'group', groupId: cite.group };\n  } else if ('desk' in cite) {\n    const parts = cite.desk.flag.split('/');\n    const userId = parts[0];\n    const appId = parts[1];\n    if (!userId || !appId) {\n      console.error('found invalid ref', cite);\n      return null;\n    }\n    return { type: 'reference', referenceType: 'app', userId, appId };\n  }\n  return null;\n}\n\nexport function contentReferenceToCite(reference: ContentReference): ub.Cite {\n  if (reference.referenceType === 'channel') {\n    return {\n      chan: {\n        nest: reference.channelId,\n        where: `/msg/${reference.postId}${\n          reference.replyId ? '/' + reference.replyId : ''\n        }`,\n      },\n    };\n  } else if (reference.referenceType === 'group') {\n    return {\n      group: reference.groupId,\n    };\n  } else if (reference.referenceType === 'app') {\n    return {\n      desk: {\n        flag: `${reference.userId}/${reference.appId}`,\n        where: '',\n      },\n    };\n  }\n  throw new Error('invalid reference');\n}\n\nfunction parseKindData(kindData?: ub.KindData): db.PostMetadata | undefined {\n  if (!kindData) {\n    return;\n  }\n  if ('diary' in kindData) {\n    return kindData.diary;\n  } else if ('heap' in kindData) {\n    return {\n      title: kindData.heap,\n    };\n  }\n}\n\nfunction isNotice(\n  post: ub.Post | ub.PostTombstone | ub.Writ | ub.PostDataResponse | null\n) {\n  if (!post || isPostTombstone(post)) {\n    return false;\n  }\n\n  return post?.essay.kind === '/chat/notice';\n}\n\nfunction isChatData(data: KindData): data is KindDataChat {\n  return 'chat' in (data ?? {});\n}\n\nexport function getContentImages(postId: string, content?: ub.Story | null) {\n  return (content || []).reduce<db.PostImage[]>((memo, story) => {\n    if (ub.isBlockVerse(story) && ub.isImage(story.block)) {\n      memo.push({ ...story.block.image, postId });\n    }\n    return memo;\n  }, []);\n}\n\nexport function toReactionsData(\n  reacts: Record<string, ub.React>,\n  postId: string\n): db.Reaction[] {\n  return Object.entries(reacts)\n    .filter(([, r]) => {\n      const isString = typeof r === 'string';\n      if (!isString) {\n        logger.log('toReactionsData: filtering out non-string reaction', {\n          postId,\n          reaction: r,\n          type: typeof r,\n        });\n      }\n      return isString;\n    })\n    .map(([name, reaction]) => {\n      // Detect and log shortcode patterns\n      if (\n        typeof reaction === 'string' &&\n        /^:[a-zA-Z0-9_+-]+:?$/.test(reaction)\n      ) {\n        logger.trackError('Shortcode reaction detected in toReactionsData', {\n          postId,\n          contactId: name,\n          reaction,\n          context: 'channel_reactions',\n          stack: new Error().stack, // To trace where this is called from\n        });\n      }\n\n      return {\n        contactId: name,\n        postId,\n        value: reaction as string,\n      };\n    });\n}\n\nfunction formatCursor(cursor: Cursor) {\n  if (typeof cursor === 'string') {\n    return cursor;\n  } else {\n    return formatDateParam(cursor);\n  }\n}\n","import { render, da } from '@urbit/aura';\nimport { Poke } from '../http-api';\n\nimport * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport * as ub from '../urbit';\nimport { Action, ChannelsAction, Posts } from '../urbit';\nimport { encodeString } from '../urbit/utils';\nimport { Stringified } from '../utils';\nimport {\n  getCanonicalPostId,\n  getChannelIdType,\n  isGroupChannelId,\n} from './apiUtils';\nimport { toPostData, toPostReplyData, toReactionsData } from './postsApi';\nimport {\n  poke,\n  scry,\n  subscribe,\n  subscribeOnce,\n  thread,\n  trackedPoke,\n} from './urbit';\n\nconst logger = createDevLogger('channelsApi', false);\n\nexport function channelAction(\n  channelId: string,\n  action: Action\n): Poke<ChannelsAction> {\n  return {\n    app: 'channels',\n    mark: 'channel-action-1',\n    json: {\n      channel: {\n        nest: channelId,\n        action,\n      },\n    },\n  };\n}\n\nexport type AddPostUpdate = { type: 'addPost'; post: db.Post };\nexport type PostReactionsUpdate = {\n  type: 'updateReactions';\n  postId: string;\n  reactions: db.Reaction[];\n};\nexport type UnknownUpdate = { type: 'unknown' };\nexport type PendingUpdate = { type: 'markPostSent'; cacheId: string };\nexport type DeletePostUpdate = {\n  type: 'deletePost';\n  postId: string;\n  channelId: string;\n};\nexport type HidePostUpdate = { type: 'hidePost'; postId: string };\nexport type ShowPostUpdate = { type: 'showPost'; postId: string };\nexport type WritersUpdate = {\n  type: 'updateWriters';\n  channelId: string;\n  writers: string[];\n  groupId: string | null;\n};\nexport type OrderUpdate = {\n  type: 'updateOrder';\n  channelId: string;\n  order: string[];\n};\nexport type CreateChannelUpdate = {\n  type: 'createChannel';\n  channelId: string;\n  writers: string[];\n  groupId: string | null;\n};\n\nexport type JoinChannelSuccessUpdate = {\n  type: 'joinChannelSuccess';\n  channelId: string;\n};\n\nexport type InitialPostsOnChannelJoin = {\n  type: 'initialPostsOnChannelJoin';\n  channelId: string;\n  posts: db.Post[];\n};\n\nexport type LeaveChannelSuccessUpdate = {\n  type: 'leaveChannelSuccess';\n  channelId: string;\n};\n\nexport type MarkChannelReadUpdate = {\n  type: 'markChannelRead';\n  channelId: string;\n};\n\nexport type MetaUpdate = {\n  type: 'channelMetaUpdate';\n  meta: Stringified<ub.ChannelMetadataSchemaV1> | null;\n};\n\nexport type ChannelsUpdate =\n  | AddPostUpdate\n  | PostReactionsUpdate\n  | UnknownUpdate\n  | PendingUpdate\n  | DeletePostUpdate\n  | HidePostUpdate\n  | ShowPostUpdate\n  | MetaUpdate\n  | CreateChannelUpdate\n  | JoinChannelSuccessUpdate\n  | LeaveChannelSuccessUpdate\n  | InitialPostsOnChannelJoin\n  // | MarkChannelReadUpdate\n  | OrderUpdate\n  | WritersUpdate;\n\nexport const createChannel = async ({\n  id,\n  ...channelPayload\n}: ub.Create & { id: string }) => {\n  return trackedPoke<ub.ChannelsResponse>(\n    {\n      app: 'channels',\n      mark: 'channel-action-1',\n      json: {\n        create: channelPayload,\n      },\n    },\n    { app: 'channels', path: '/v2' },\n    (event) => {\n      return 'create' in event.response && event.nest === id;\n    },\n    { tag: 'createChannel' }\n  );\n};\n\nexport async function updateChannelMeta(\n  channelId: string,\n  metaPayload: Stringified<ub.ChannelMetadataSchemaV1> | null\n) {\n  return trackedPoke<ub.ChannelsResponse>(\n    {\n      app: 'channels',\n      mark: 'channel-action',\n      json: {\n        channel: {\n          nest: channelId,\n          action: {\n            meta: metaPayload,\n          },\n        },\n      },\n    },\n    { app: 'channels', path: '/v2' },\n    (event) => {\n      return 'meta' in event.response;\n    }\n  );\n}\n\nexport const setupChannelFromTemplate = async (\n  exampleChannelId: string,\n  targetChannelId: string\n) => {\n  return thread({\n    desk: 'groups',\n    inputMark: 'hook-setup-template-args',\n    outputMark: 'json',\n    threadName: 'channel-setup-from-template',\n    body: {\n      example: exampleChannelId,\n      target: targetChannelId,\n    },\n  });\n};\n\nexport const subscribeToChannelsUpdates = async (\n  eventHandler: (update: ChannelsUpdate) => void\n) => {\n  subscribe(\n    { app: 'channels', path: '/v2' },\n    (rawEvent: ub.ChannelsSubscribeResponse) => {\n      logger.log('channels received event', rawEvent);\n      eventHandler(toChannelsUpdate(rawEvent));\n    }\n  );\n};\n\nexport function toClientChannelsInit(\n  channels: ub.Channels,\n  readersMap: Record<string, string[]>\n) {\n  return Object.entries(channels).map(([id, channel]) => {\n    return toClientChannelInit(id, channel, readersMap[id] ?? []);\n  });\n}\n\nexport type ChannelInit = {\n  channelId: string;\n  order: string[];\n  writers: string[];\n  readers: string[];\n};\n\nexport function toClientChannelInit(\n  id: string,\n  channel: ub.Channel,\n  readers: string[]\n): ChannelInit {\n  return {\n    channelId: id,\n    writers: channel.perms.writers ?? [],\n    readers,\n    order: channel.order.map((x) => getCanonicalPostId(x)),\n  };\n}\n\nexport const toChannelsUpdate = (\n  channelEvent: ub.ChannelsSubscribeResponse\n): ChannelsUpdate => {\n  logger.log('channel event', {\n    channelEvent,\n  });\n\n  // hide events\n  if (channelEvent.hide !== undefined) {\n    const postId = getCanonicalPostId(channelEvent.hide);\n    logger.log('hide post event');\n    return { type: 'hidePost', postId };\n  }\n\n  // show events\n  if (channelEvent.show !== undefined) {\n    const postId = getCanonicalPostId(channelEvent.show);\n    logger.log('show post event');\n    return { type: 'showPost', postId };\n  }\n\n  const channelId = channelEvent.nest;\n\n  if ('response' in channelEvent) {\n    if ('order' in channelEvent.response) {\n      return {\n        type: 'updateOrder',\n        channelId,\n        order: channelEvent.response.order.map((id) => getCanonicalPostId(id)),\n      };\n    }\n\n    if ('perm' in channelEvent.response) {\n      return {\n        type: 'updateWriters',\n        channelId,\n        writers: channelEvent.response.perm.writers,\n        groupId: channelEvent.response.perm.group,\n      };\n    }\n\n    if ('meta' in channelEvent.response) {\n      return {\n        type: 'channelMetaUpdate',\n        meta: channelEvent.response.meta,\n      };\n    }\n\n    // not clear that this is necessary\n    if ('create' in channelEvent.response) {\n      return {\n        type: 'createChannel',\n        channelId,\n        writers: channelEvent.response.create.writers,\n        groupId: channelEvent.response.create.group,\n      };\n    }\n\n    if ('join' in channelEvent.response) {\n      return {\n        type: 'joinChannelSuccess',\n        channelId,\n      };\n    }\n\n    // not clear that this is necessary\n    // if ('read' in channelEvent.response) {\n    // return {\n    // type: 'markChannelRead',\n    // channelId,\n    // };\n    // }\n\n    if ('leave' in channelEvent.response) {\n      return {\n        type: 'leaveChannelSuccess',\n        channelId,\n      };\n    }\n\n    if ('posts' in channelEvent.response) {\n      const { posts: postsFromBackend }: { posts: Posts } =\n        channelEvent.response;\n\n      const posts = Object.entries(postsFromBackend)\n        .filter(([_, post]) => post !== null)\n        .map(([_, post]) => {\n          return toPostData(channelId, post!);\n        });\n\n      return { type: 'initialPostsOnChannelJoin', channelId, posts };\n    }\n\n    if ('post' in channelEvent.response) {\n      // post events\n      if (!('reply' in channelEvent.response.post['r-post'])) {\n        const postId = getCanonicalPostId(channelEvent.response.post.id);\n        const postResponse = channelEvent.response.post['r-post'];\n\n        if ('set' in postResponse) {\n          if (postResponse.set !== null) {\n            const postToAdd = { id: postId, ...postResponse.set };\n\n            logger.log(`add post event`);\n            return { type: 'addPost', post: toPostData(channelId, postToAdd) };\n          }\n\n          logger.log('delete post event');\n          return { type: 'deletePost', postId, channelId };\n        } else if ('reacts' in postResponse && postResponse.reacts !== null) {\n          // Check for shortcodes in raw reactions from server\n          const shortcodeReactions = Object.entries(postResponse.reacts).filter(([, v]) => \n            typeof v === 'string' && /^:[a-zA-Z0-9_+-]+:?$/.test(v)\n          );\n          \n          if (shortcodeReactions.length > 0) {\n            logger.trackError('Shortcode reactions received from server (post)', {\n              postId,\n              shortcodeReactions: shortcodeReactions.map(([k, v]) => ({ user: k, value: v })),\n              allReacts: postResponse.reacts,\n              context: 'channel_post_update'\n            });\n          }\n          \n          const updatedReacts = toReactionsData(postResponse.reacts, postId);\n          logger.log('update reactions event');\n          return { type: 'updateReactions', postId, reactions: updatedReacts };\n        }\n      }\n\n      // reply events\n      if ('reply' in channelEvent.response.post['r-post']) {\n        const postId = getCanonicalPostId(channelEvent.response.post.id);\n        const replyId = getCanonicalPostId(\n          channelEvent.response.post['r-post'].reply.id\n        );\n        const replyResponse =\n          channelEvent.response.post['r-post'].reply['r-reply'];\n        if ('set' in replyResponse) {\n          if (replyResponse.set !== null) {\n            logger.log(`add reply event`);\n            return {\n              type: 'addPost',\n              post: toPostReplyData(channelId, postId, replyResponse.set),\n            };\n          }\n\n          logger.log('delete reply event');\n          return { type: 'deletePost', postId: replyId, channelId };\n        } else if ('reacts' in replyResponse && replyResponse.reacts !== null) {\n          // Check for shortcodes in raw reply reactions from server\n          const shortcodeReactions = Object.entries(replyResponse.reacts).filter(([, v]) => \n            typeof v === 'string' && /^:[a-zA-Z0-9_+-]+:?$/.test(v)\n          );\n          \n          if (shortcodeReactions.length > 0) {\n            logger.trackError('Shortcode reactions received from server (reply)', {\n              replyId,\n              shortcodeReactions: shortcodeReactions.map(([k, v]) => ({ user: k, value: v })),\n              allReacts: replyResponse.reacts,\n              context: 'channel_reply_update'\n            });\n          }\n          \n          const updatedReacts = toReactionsData(replyResponse.reacts, replyId);\n          logger.log('update reply reactions event');\n          return {\n            type: 'updateReactions',\n            postId: replyId,\n            reactions: updatedReacts,\n          };\n        }\n      }\n    }\n\n    // pending messages (on ship, not on group)\n    if ('pending' in channelEvent.response) {\n      const cacheId = channelEvent.response.pending.id;\n      return {\n        type: 'markPostSent',\n        cacheId: getCanonicalPostId(da.fromUnix(cacheId.sent).toString()),\n      };\n    }\n  }\n\n  logger.log(`unknown event`, channelEvent);\n  return { type: 'unknown' };\n};\n\nexport const createNewGroupDefaultChannel = async ({\n  groupId,\n  currentUserId,\n}: {\n  groupId: string;\n  currentUserId: string;\n}) => {\n  const randomNumber = Math.floor(Math.random() * 10000);\n  const channelPayload: ub.Create = {\n    kind: 'chat',\n    group: groupId,\n    name: `welcome-${randomNumber}`,\n    title: 'Welcome',\n    description: 'Welcome to your new group!',\n    meta: null,\n    readers: [],\n    writers: [],\n  };\n\n  return trackedPoke<ub.ChannelsResponse>(\n    {\n      app: 'channels',\n      mark: 'channel-action',\n      json: {\n        create: channelPayload,\n      },\n    },\n    { app: 'channels', path: '/v2' },\n    (event) => {\n      const { response, nest } = event;\n      return (\n        'create' in response &&\n        nest ===\n          `${channelPayload.kind}/${currentUserId}/${channelPayload.name}`\n      );\n    },\n    { tag: 'createNewGroupDefaultChannel' }\n  );\n};\n\nexport const searchChannel = async (params: {\n  channelId: string;\n  query: string;\n  cursor?: string;\n}) => {\n  const SINGLE_PAGE_SEARCH_DEPTH = 500;\n  const isGroupChannel = isGroupChannelId(params.channelId);\n  const encodedQuery = encodeString(params.query);\n\n  let response;\n  if (isGroupChannel) {\n    // channels agent\n    response = await scry<ub.ChannelScam>({\n      app: 'channels',\n      path: `/${params.channelId}/search/bounded/text/${\n        params.cursor ? render('ud', BigInt(params.cursor ?? 0)) : ''\n      }/${SINGLE_PAGE_SEARCH_DEPTH}/${encodedQuery}`,\n    });\n  } else {\n    // chat agent\n    const type = getChannelIdType(params.channelId) === 'dm' ? 'dm' : 'club';\n    response = await scry<ub.ChatScam>({\n      app: 'chat',\n      path: `/${type}/${params.channelId}/search/bounded/text/${\n        params.cursor ? render('ud', BigInt(params.cursor ?? 0)) : ''\n      }/${SINGLE_PAGE_SEARCH_DEPTH}/${encodedQuery}`,\n    });\n  }\n\n  // note: we avoid incurring the cost of sorting here since the main consumer (useChannelSearch)\n  // aggregates results across multiple pages\n  const posts: db.Post[] = response.scan\n    .map((scanItem) => {\n      if ('post' in scanItem) {\n        return toPostData(params.channelId, scanItem.post);\n      }\n      if ('writ' in scanItem) {\n        return toPostData(params.channelId, scanItem.writ);\n      }\n      if ('reply' in scanItem) {\n        const parentId = isGroupChannel\n          ? getCanonicalPostId(scanItem.reply['id-post'])\n          : getCanonicalPostId(scanItem.reply.reply.seal['parent-id']);\n        return toPostReplyData(\n          params.channelId,\n          parentId,\n          scanItem.reply.reply\n        );\n      }\n      return false;\n    })\n    .filter((post) => post !== false) as db.Post[];\n\n  const cursor = response.last;\n\n  return { posts, cursor };\n};\n\nexport const setOrder = async (\n  channelId: string,\n  arrangedPostIds: string[]\n) => {\n  await poke({\n    app: 'channels',\n    mark: 'channel-action',\n    json: {\n      channel: {\n        nest: channelId,\n        action: {\n          order: arrangedPostIds,\n        },\n      },\n    },\n  });\n};\n\nexport const leaveChannel = async (channelId: string) => {\n  return trackedPoke<ub.ChannelsResponse>(\n    {\n      app: 'channels',\n      mark: 'channel-action',\n      json: {\n        channel: {\n          nest: channelId,\n          action: {\n            leave: null,\n          },\n        },\n      },\n    },\n    { app: 'channels', path: '/v2' },\n    (event) => {\n      return 'leave' in event.response && event.response.leave === channelId;\n    },\n    { tag: 'leaveChannel' }\n  );\n};\n\nexport const joinChannel = async (channelId: string, groupId: string) => {\n  return trackedPoke<ub.ChannelsResponse>(\n    {\n      app: 'channels',\n      mark: 'channel-action',\n      json: {\n        channel: {\n          nest: channelId,\n          action: {\n            join: groupId,\n          },\n        },\n      },\n    },\n    { app: 'channels', path: '/v2' },\n    (event) => {\n      return 'join' in event.response && event.nest === channelId;\n    },\n    { tag: 'joinChannel' }\n  );\n};\n\nexport async function getChannelHooksPreview(channelId: string) {\n  return subscribeOnce<ub.ChannelHooksPreview>(\n    {\n      app: 'channels',\n      path: `/v1/hooks/preview/${channelId}`,\n    },\n    10_000\n  );\n}\n\nexport async function addChannelWriters({\n  channelId,\n  writers,\n}: {\n  channelId: string;\n  writers: string[];\n}) {\n  return poke(channelAction(channelId, { 'add-writers': writers }));\n}\n\nexport async function removeChannelWriters({\n  channelId,\n  writers,\n}: {\n  channelId: string;\n  writers: string[];\n}) {\n  return poke(channelAction(channelId, { 'del-writers': writers }));\n}\n","import { Poke } from '../http-api';\n\nimport * as db from '../db';\nimport { GroupPrivacy } from '../db/types';\nimport { createDevLogger } from '../debug';\nimport * as domain from '../domain';\nimport { AnalyticsEvent, AnalyticsSeverity } from '../domain';\nimport type * as ub from '../urbit';\nimport {\n  FlaggedContent,\n  GroupChannelV7,\n  Rank,\n  extractGroupPrivacy,\n  getChannelType,\n} from '../urbit';\nimport { parseGroupChannelId, parseGroupId, toClientMeta } from './apiUtils';\nimport { StructuredChannelDescriptionPayload } from './channelContentConfig';\nimport {\n  BadResponseError,\n  getCurrentUserId,\n  poke,\n  scry,\n  subscribe,\n  subscribeOnce,\n  thread,\n  trackedPoke,\n} from './urbit';\n\nconst logger = createDevLogger('groupsApi', false);\n\nfunction groupAction4(action: ub.GroupActionV4) {\n  return {\n    app: 'groups',\n    mark: 'group-action-4',\n    json: action,\n  };\n}\n\nfunction groupNavigationBatchUpdate(\n  flag: string,\n  navigation: ub.GroupNavigationUpdate\n): Poke<ub.GroupNavigationBatchUpdate> {\n  return {\n    app: 'groups',\n    mark: 'group-action-4',\n    json: {\n      group: {\n        flag,\n        'a-group': {\n          navigation,\n        },\n      },\n    },\n  };\n}\n\nexport const getPinnedItems = async () => {\n  const pinnedItems = await scry<ub.PinnedGroupsResponse>({\n    app: 'groups-ui',\n    path: '/pins',\n  });\n  return toClientPinnedItems(pinnedItems);\n};\n\nexport const toClientPinnedItems = (rawItems: string[]): db.Pin[] => {\n  const items = rawItems.map(toClientPinnedItem);\n  return items.reverse();\n};\n\nexport const toClientPinnedItem = (rawItem: string, index: number): db.Pin => {\n  const type = getPinnedItemType(rawItem);\n  return {\n    type,\n    index,\n    itemId: rawItem,\n  };\n};\n\nexport function acceptGroupJoin({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          entry: {\n            ask: {\n              ships: contactIds,\n              'a-ask': 'approve',\n            },\n          },\n        },\n      },\n    })\n  );\n}\n\nexport function rejectGroupJoin({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          entry: {\n            ask: {\n              ships: contactIds,\n              'a-ask': 'deny',\n            },\n          },\n        },\n      },\n    })\n  );\n}\n\nexport function cancelGroupJoin(groupId: string) {\n  return poke({\n    app: 'groups',\n    mark: 'group-cancel',\n    json: groupId,\n  });\n}\n\nexport function inviteGroupMembers({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      invite: {\n        flag: groupId,\n        ships: contactIds,\n        'a-invite': {\n          token: null,\n          note: null,\n        },\n      },\n    })\n  );\n}\n\nexport function rescindGroupInvitationRequest(groupId: string) {\n  logger.log('api rescinding', groupId);\n  return poke({\n    app: 'groups',\n    mark: 'group-rescind',\n    json: groupId,\n  });\n}\n\nexport async function kickUsersFromGroup({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          seat: {\n            ships: contactIds,\n            'a-seat': {\n              del: null,\n            },\n          },\n        },\n      },\n    })\n  );\n}\n\nexport async function banUsersFromGroup({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          entry: {\n            ban: {\n              'add-ships': contactIds,\n            },\n          },\n        },\n      },\n    })\n  );\n}\n\nexport async function unbanUsersFromGroup({\n  groupId,\n  contactIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n}) {\n  return poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          entry: {\n            ban: {\n              'del-ships': contactIds,\n            },\n          },\n        },\n      },\n    })\n  );\n}\n\nexport async function leaveGroup(groupId: string) {\n  return poke({\n    app: 'groups',\n    mark: 'group-leave',\n    json: groupId,\n  });\n}\n\nexport function requestGroupInvitation(groupId: string) {\n  logger.log('api knocking', groupId);\n  return poke({\n    app: 'groups',\n    mark: 'group-knock',\n    json: groupId,\n  });\n}\n\nexport async function updateGroupPrivacy(params: {\n  groupId: string;\n  oldPrivacy: GroupPrivacy;\n  newPrivacy: GroupPrivacy;\n}) {\n  // In v8/v9, privacy is a single unified setting that includes secret/private/public\n  return poke(\n    groupAction4({\n      group: {\n        flag: params.groupId,\n        'a-group': {\n          entry: {\n            privacy: params.newPrivacy,\n          },\n        },\n      },\n    })\n  );\n}\n\nexport const getPinnedItemType = (rawItem: string) => {\n  if (rawItem.startsWith('~')) {\n    if (rawItem.split('/').length === 2) {\n      return 'group';\n    }\n    return 'dm';\n  } else {\n    if (rawItem.split('/').length === 3) {\n      return 'channel';\n    }\n    return 'groupDm';\n  }\n};\n\nexport const unpinItem = async (itemId: string) => {\n  return await poke({\n    app: 'groups-ui',\n    mark: 'ui-action',\n    json: {\n      pins: {\n        del: itemId,\n      },\n    },\n  });\n};\n\nexport const pinItem = async (itemId: string) => {\n  return await poke({\n    app: 'groups-ui',\n    mark: 'ui-action',\n    json: {\n      pins: {\n        add: itemId,\n      },\n    },\n  });\n};\n\nexport const getChannelPreview = async (\n  channelId: string\n): Promise<db.Channel | null> => {\n  const channelPreview = await subscribeOnce<ub.ChannelPreview>(\n    {\n      app: 'groups',\n      path: `/chan/${channelId}`,\n    },\n    undefined,\n    undefined,\n    { tag: 'getChannelPreview' }\n  );\n\n  if (!channelPreview) {\n    return null;\n  }\n\n  return toClientChannelFromPreview({\n    id: channelId,\n    channel: channelPreview,\n    groupId: channelPreview.group.flag,\n  });\n};\n\nexport const getGroupPreview = async (groupId: string) => {\n  const result = await subscribeOnce<ub.GroupPreview>(\n    {\n      app: 'groups',\n      path: `/gangs/${groupId}/preview`,\n    },\n    undefined,\n    undefined,\n    { tag: 'getGroupPreview' }\n  );\n\n  return toClientGroupFromPreview(groupId, result);\n};\n\nexport const findGroupsHostedBy = async (userId: string) => {\n  const result = await subscribeOnce<ub.GroupIndex>(\n    {\n      app: 'groups',\n      path: `/gangs/index/${userId}`,\n    },\n    30_000,\n    undefined,\n    { tag: 'findGroupsHostedBy' }\n  );\n\n  logger.log('findGroupsHostedBy result', result);\n\n  return toClientGroupsFromPreview(result);\n};\n\nconst GENERATED_GROUP_TITLE_END_CHAR = '\\u2060';\n\nexport const createGroup = async ({\n  group,\n  placeHolderTitle,\n  memberIds,\n}: {\n  group: db.Group;\n  memberIds?: string[];\n  placeHolderTitle?: string;\n}): Promise<db.Group> => {\n  const payload: ub.GroupCreateThreadInput = {\n    groupId: group.id,\n    meta: {\n      title: group.title\n        ? group.title\n        : placeHolderTitle + GENERATED_GROUP_TITLE_END_CHAR,\n      description: '',\n      image: group.iconImage ?? '',\n      cover: '',\n    },\n    guestList: memberIds ?? [],\n    channels: (group.channels ?? []).map((channel) => ({\n      channelId: channel.id,\n      meta: {\n        title: channel.title ?? '',\n        description: channel.description ?? '',\n        image: '',\n        cover: '',\n      },\n    })),\n  };\n\n  try {\n    const result = await thread<ub.GroupCreateThreadInput, ub.GroupV7>({\n      desk: 'groups',\n      inputMark: 'group-create-thread',\n      threadName: 'group-create-1',\n      outputMark: 'group-ui-2',\n      body: payload,\n    });\n    logger.trackEvent(AnalyticsEvent.DebugGroupCreate, {\n      context: 'group-create-thread request succeeded',\n    });\n\n    return toClientGroupV7(group.id, result, true);\n  } catch (err) {\n    if (err instanceof BadResponseError) {\n      logger.trackEvent('Create Group Error', {\n        severity: AnalyticsSeverity.Critical,\n        status: err.status,\n        error: err.toString(),\n        context: 'group-create-thread request failed',\n      });\n    } else {\n      logger.trackEvent('Create Group Error', {\n        severity: AnalyticsSeverity.Critical,\n        errorMessage: err.message,\n        errorStack: err.stack,\n        context: 'group-create-thread unexpected error',\n      });\n    }\n    throw err;\n  }\n};\n\nexport const getGroup = async (groupId: string) => {\n  const path = `/v2/ui/groups/${groupId}`;\n\n  const groupData = await scry<ub.GroupV7>({ app: 'groups', path });\n  return toClientGroupV7(groupId, groupData, true);\n};\n\nexport const getGroups = async () => {\n  // v2 scry path returns v9 format (with admissions/seats)\n  const groupData = await scry<ub.GroupsV7>({\n    app: 'groups',\n    path: '/v2/groups',\n  });\n  return toClientGroupsV7(groupData, true);\n};\n\nexport const updateGroupMeta = async ({\n  groupId,\n  meta,\n}: {\n  groupId: string;\n  meta: ub.GroupMeta;\n}) => {\n  return await trackedPoke<ub.V1GroupResponse>(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          meta,\n        },\n      },\n    }),\n    { app: 'groups', path: '/v1/groups' },\n    (event) => {\n      if (!('r-group' in event)) {\n        return false;\n      }\n\n      const rGroup = event['r-group'];\n      return 'meta' in rGroup && event.flag === groupId;\n    },\n    { tag: 'updateGroupMeta' }\n  );\n};\n\nexport const deleteGroup = async (groupId: string) => {\n  return await trackedPoke<ub.V1GroupResponse>(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          delete: null,\n        },\n      },\n    }),\n    { app: 'groups', path: '/v1/groups' },\n    (event) => {\n      if (!('r-group' in event)) {\n        return false;\n      }\n\n      return 'delete' in event['r-group'] && event.flag === groupId;\n    },\n    { tag: 'deleteGroup' }\n  );\n};\n\nexport const addNavSection = async ({\n  groupId,\n  navSection,\n}: {\n  groupId: string;\n  navSection: db.GroupNavSection;\n}) => {\n  return await trackedPoke<ub.V1GroupResponse>(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          section: {\n            'section-id': navSection.sectionId,\n            'a-section': {\n              add: {\n                title: navSection.title ?? '',\n                description: navSection.description ?? '',\n                image: navSection.iconImage ?? navSection.coverImageColor ?? '',\n                cover:\n                  navSection.coverImage ?? navSection.coverImageColor ?? '',\n              },\n            },\n          },\n        },\n      },\n    }),\n    { app: 'groups', path: '/v1/groups' },\n    (event) => {\n      if (!('r-group' in event)) {\n        return false;\n      }\n\n      const rGroup = event['r-group'];\n      return 'section' in rGroup && event.flag === groupId;\n    },\n    { tag: 'addNavSection' }\n  );\n};\n\nexport const deleteNavSection = async ({\n  sectionId,\n  groupId,\n}: {\n  sectionId: string;\n  groupId: string;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          section: {\n            'section-id': sectionId,\n            'a-section': {\n              del: null,\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const updateNavSection = async ({\n  groupId,\n  navSection,\n}: {\n  groupId: string;\n  navSection: db.GroupNavSection;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          section: {\n            'section-id': navSection.sectionId,\n            'a-section': {\n              edit: {\n                title: navSection.title ?? '',\n                description: navSection.description ?? '',\n                image: navSection.iconImage ?? navSection.coverImageColor ?? '',\n                cover:\n                  navSection.coverImage ?? navSection.coverImageColor ?? '',\n              },\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const addChannelToNavSection = async ({\n  groupId,\n  navSectionId,\n  channelId,\n}: {\n  groupId: string;\n  navSectionId: string;\n  channelId: string;\n}) => {\n  logger.log('addChannelToNavSection', { groupId, navSectionId, channelId });\n  return await trackedPoke<ub.V1GroupResponse>(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          channel: {\n            nest: channelId,\n            'a-channel': {\n              section: navSectionId,\n            },\n          },\n        },\n      },\n    }),\n    { app: 'groups', path: '/v1/groups' },\n    (event) => {\n      if (!('r-group' in event)) {\n        return false;\n      }\n\n      const rGroup = event['r-group'];\n      return (\n        'channel' in rGroup &&\n        rGroup.channel.nest === channelId &&\n        'section' in rGroup.channel['r-channel']\n      );\n    },\n    { tag: 'addChannelToNavSection' }\n  );\n};\n\nexport const addChannelToGroup = async ({\n  channelId,\n  groupId,\n  sectionId,\n}: {\n  channelId: string;\n  groupId: string;\n  sectionId: string;\n}) => {\n  return await trackedPoke<ub.V1GroupResponse>(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          channel: {\n            nest: channelId,\n            'a-channel': {\n              section: sectionId,\n            },\n          },\n        },\n      },\n    }),\n    { app: 'groups', path: '/v1/groups' },\n    (event) => {\n      if (!('r-group' in event)) {\n        return false;\n      }\n\n      const rGroup = event['r-group'];\n      return (\n        'channel' in rGroup &&\n        rGroup.channel.nest === channelId &&\n        'section' in rGroup.channel['r-channel']\n      );\n    },\n    { tag: 'addChannelToGroup' }\n  );\n};\n\nexport const updateChannel = async ({\n  groupId,\n  channelId,\n  channel,\n}: {\n  groupId: string;\n  channelId: string;\n  channel: GroupChannelV7;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          channel: {\n            nest: channelId,\n            'a-channel': {\n              edit: channel,\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const deleteChannel = async ({\n  groupId,\n  channelId,\n}: {\n  groupId: string;\n  channelId: string;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          channel: {\n            nest: channelId,\n            'a-channel': {\n              del: null,\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const updateGroupNavigation = async ({\n  groupId,\n  navSections,\n}: {\n  groupId: string;\n  navSections: db.GroupNavSection[];\n}) => {\n  const sections: Record<string, ub.GroupNavigationSectionData> = {};\n\n  for (const section of navSections) {\n    sections[section.sectionId] = {\n      meta: {\n        title: section.title ?? '',\n        description: section.description ?? '',\n        image: section.iconImage ?? section.coverImageColor ?? '',\n        cover: section.coverImage ?? section.coverImageColor ?? '',\n      },\n      order: (section.channels ?? [])\n        .sort((a, b) => (a.channelIndex ?? 0) - (b.channelIndex ?? 0))\n        .map((c) => c.channelId)\n        .filter((id): id is string => !!id),\n    };\n  }\n\n  const navigation: ub.GroupNavigationUpdate = {\n    sections,\n    order: navSections\n      .sort((a, b) => (a.sectionIndex ?? 0) - (b.sectionIndex ?? 0))\n      .map((s) => s.sectionId),\n  };\n\n  return await poke(groupNavigationBatchUpdate(groupId, navigation));\n};\n\nexport const addGroupRole = async ({\n  groupId,\n  roleId,\n  meta,\n}: {\n  groupId: string;\n  roleId: string;\n  meta: db.ClientMeta;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          role: {\n            roles: [roleId],\n            'a-role': {\n              add: {\n                title: meta.title ?? '',\n                description: meta.description ?? '',\n                image: '',\n                cover: '',\n              },\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const deleteGroupRole = async ({\n  groupId,\n  roleId,\n}: {\n  groupId: string;\n  roleId: string;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          role: {\n            roles: [roleId],\n            'a-role': {\n              del: null,\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const updateGroupRole = async ({\n  groupId,\n  roleId,\n  meta,\n}: {\n  groupId: string;\n  roleId: string;\n  meta: db.ClientMeta;\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          role: {\n            roles: [roleId],\n            'a-role': {\n              edit: {\n                title: meta.title ?? '',\n                description: meta.description ?? '',\n                image: '',\n                cover: '',\n              },\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const addMembersToRole = async ({\n  groupId,\n  roleId,\n  ships,\n}: {\n  groupId: string;\n  roleId: string;\n  ships: string[];\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          seat: {\n            ships,\n            'a-seat': {\n              'add-roles': [roleId],\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const removeMembersFromRole = async ({\n  groupId,\n  roleId,\n  ships,\n}: {\n  groupId: string;\n  roleId: string;\n  ships: string[];\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          seat: {\n            ships,\n            'a-seat': {\n              'del-roles': [roleId],\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport const removeAllRolesFromMembers = async ({\n  groupId,\n  contactIds,\n  roleIds,\n}: {\n  groupId: string;\n  contactIds: string[];\n  roleIds: string[];\n}) => {\n  return await poke(\n    groupAction4({\n      group: {\n        flag: groupId,\n        'a-group': {\n          seat: {\n            ships: contactIds,\n            'a-seat': {\n              'del-roles': roleIds,\n            },\n          },\n        },\n      },\n    })\n  );\n};\n\nexport type GroupDelete = {\n  type: 'deleteGroup';\n  groupId: string;\n};\n\nexport type GroupAdd = {\n  type: 'addGroup';\n  group: db.Group;\n};\n\nexport type GroupEdit = {\n  type: 'editGroup';\n  groupId: string;\n  meta: db.ClientMeta;\n};\n\nexport type GroupChannelAdd = {\n  type: 'addChannel';\n  channel: db.Channel;\n};\n\nexport type GroupChannelUpdate = {\n  type: 'updateChannel';\n  channel: db.Channel;\n};\n\nexport type GroupChannelJoin = {\n  type: 'joinChannel';\n  channelId: string;\n  groupId: string;\n};\n\nexport type GroupChannelLeave = {\n  type: 'leaveChannel';\n  channelId: string;\n};\n\nexport type GroupChannelDelete = {\n  type: 'deleteChannel';\n  channelId: string;\n};\n\nexport type GroupChannelNavSectionAdd = {\n  type: 'addChannelToNavSection';\n  channelId: string;\n  groupId: string;\n  navSectionId: string;\n  sectionId: string;\n};\n\nexport type GroupNavSectionAdd = {\n  type: 'addNavSection';\n  navSectionId: string;\n  sectionId: string;\n  groupId: string;\n  clientMeta: db.ClientMeta;\n};\n\nexport type GroupNavSectionDelete = {\n  type: 'deleteNavSection';\n  navSectionId: string;\n};\n\nexport type GroupNavSectionEdit = {\n  type: 'editNavSection';\n  navSectionId: string;\n  sectionId: string;\n  clientMeta: db.ClientMeta;\n};\n\nexport type GroupNavSectionMove = {\n  type: 'moveNavSection';\n  navSectionId: string;\n  sectionId: string;\n  index: number;\n};\n\nexport type GroupnavSectionMoveChannel = {\n  type: 'moveChannel';\n  navSectionId: string;\n  sectionId: string;\n  groupId: string;\n  channelId: string;\n  index: number;\n};\n\nexport type GroupSectionOrderUpdate = {\n  type: 'updateSectionOrder';\n  groupId: string;\n  sectionIds: string[];\n};\n\nexport type GroupAddMembers = {\n  type: 'addGroupMembers';\n  ships: string[];\n  groupId: string;\n};\n\nexport type GroupRemoveMembers = {\n  type: 'removeGroupMembers';\n  ships: string[];\n  groupId: string;\n};\n\nexport type GroupAddMembersToRole = {\n  type: 'addGroupMembersToRole';\n  ships: string[];\n  roles: string[];\n  groupId: string;\n};\n\nexport type GroupRemoveMembersFromRole = {\n  type: 'removeGroupMembersFromRole';\n  ships: string[];\n  roles: string[];\n  groupId: string;\n};\n\nexport type GroupRoleAdd = {\n  type: 'addRole';\n  groupId: string;\n  roleId: string;\n  meta: db.ClientMeta;\n};\n\nexport type GroupRoleDelete = {\n  type: 'deleteRole';\n  groupId: string;\n  roleId: string;\n};\n\nexport type GroupRoleEdit = {\n  type: 'editRole';\n  roleId: string;\n  groupId: string;\n  meta: db.ClientMeta;\n};\n\nexport type GroupInviteMembers = {\n  type: 'inviteGroupMembers';\n  groupId: string;\n  ships: string[];\n};\n\nexport type GroupRevokeMemberInvites = {\n  type: 'revokeGroupMemberInvites';\n  groupId: string;\n  ships: string[];\n};\n\nexport type GroupJoinRequest = {\n  type: 'groupJoinRequest';\n  request: db.GroupJoinRequest;\n};\n\nexport type GroupRevokeJoinRequests = {\n  type: 'revokeGroupJoinRequests';\n  groupId: string;\n  ships: string[];\n};\n\nexport type GroupBanMembers = {\n  type: 'banGroupMembers';\n  groupId: string;\n  ships: string[];\n};\n\nexport type GroupUnbanMembers = {\n  type: 'unbanGroupMembers';\n  groupId: string;\n  ships: string[];\n};\n\nexport type GroupBanAzimuthRanks = {\n  type: 'banAzimuthRanks';\n  groupId: string;\n  ranks: Rank[];\n};\n\nexport type GroupUnbanAzimuthRanks = {\n  type: 'unbanAzimuthRanks';\n  groupId: string;\n  ranks: Rank[];\n};\n\nexport type GroupSetAsPublic = {\n  type: 'setGroupAsPublic';\n  groupId: string;\n};\n\nexport type GroupSetAsPrivate = {\n  type: 'setGroupAsPrivate';\n  groupId: string;\n};\n\nexport type GroupSetAsSecret = {\n  type: 'setGroupAsSecret';\n  groupId: string;\n};\n\nexport type GroupSetAsNotSecret = {\n  type: 'setGroupAsNotSecret';\n  groupId: string;\n};\n\nexport type GroupFlagContent = {\n  type: 'flagGroupPost';\n  groupId: string;\n  channelId: string;\n  postId: string;\n  flaggingUser: string;\n};\n\nexport type SetUnjoinedGroups = {\n  type: 'setUnjoinedGroups';\n  groups: db.Group[];\n};\n\nexport type GroupUpdateUnknown = {\n  type: 'unknown';\n};\n\nexport type GroupUpdate =\n  | GroupAdd\n  | GroupDelete\n  | GroupEdit\n  | GroupChannelAdd\n  | GroupChannelUpdate\n  | GroupChannelDelete\n  | GroupChannelJoin\n  | GroupChannelLeave\n  | GroupChannelNavSectionAdd\n  | GroupNavSectionDelete\n  | GroupNavSectionEdit\n  | GroupNavSectionAdd\n  | GroupNavSectionMove\n  | GroupnavSectionMoveChannel\n  | GroupSectionOrderUpdate\n  | GroupAddMembers\n  | GroupRemoveMembers\n  | GroupAddMembersToRole\n  | GroupRemoveMembersFromRole\n  | GroupRoleAdd\n  | GroupRoleDelete\n  | GroupRoleEdit\n  | GroupJoinRequest\n  | GroupRevokeJoinRequests\n  | GroupInviteMembers\n  | GroupRevokeMemberInvites\n  | GroupBanMembers\n  | GroupUnbanMembers\n  | GroupBanAzimuthRanks\n  | GroupUnbanAzimuthRanks\n  | GroupSetAsPublic\n  | GroupSetAsPrivate\n  | GroupSetAsSecret\n  | GroupSetAsNotSecret\n  | GroupFlagContent\n  | SetUnjoinedGroups\n  | GroupUpdateUnknown;\n\nexport const subscribeGroups = async (\n  eventHandler: (update: GroupUpdate) => void\n) => {\n  // Subscribe to v1/groups for all group updates (v9 response format)\n  subscribe<ub.V1GroupResponse>(\n    { app: 'groups', path: '/v1/groups' },\n    (rawEvent) => {\n      const update = toV1GroupsUpdate(rawEvent);\n      if (update) {\n        eventHandler(update);\n      }\n    }\n  );\n\n  // Subscribe to v1/foreigns for foreign group updates\n  subscribe(\n    { app: 'groups', path: '/v1/foreigns' },\n    (rawEvent: ub.Foreigns) => {\n      logger.log('foreignsUpdateEvent', rawEvent);\n      eventHandler(toForeignsGroupsUpdate(rawEvent));\n    }\n  );\n};\n\nexport const toV1GroupsUpdate = (\n  rawEvent: ub.V1GroupResponse\n): GroupUpdate | null => {\n  const groupId = rawEvent.flag;\n  const event = rawEvent['r-group'];\n\n  // Handle group creation\n  if ('create' in event) {\n    return {\n      type: 'addGroup',\n      group: toClientGroupV7(groupId, event.create, true),\n    };\n  }\n\n  // Handle group deletion\n  if ('delete' in event) {\n    return {\n      type: 'deleteGroup',\n      groupId,\n    };\n  }\n\n  // Handle metadata updates\n  if ('meta' in event) {\n    return {\n      type: 'editGroup',\n      meta: toClientMeta(event.meta),\n      groupId,\n    };\n  }\n\n  // Handle role operations\n  if ('role' in event) {\n    const roleData = event.role;\n    const roleId = roleData.roles?.[0];\n    if (!roleId) {\n      logger.warn('Role event received with empty roles array', event);\n      return null;\n    }\n    const rRole = roleData['r-role'];\n\n    if ('add' in rRole) {\n      return {\n        type: 'addRole',\n        roleId,\n        meta: rRole.add,\n        groupId,\n      };\n    }\n\n    if ('del' in rRole) {\n      return {\n        type: 'deleteRole',\n        roleId,\n        groupId,\n      };\n    }\n\n    if ('edit' in rRole) {\n      return {\n        type: 'editRole',\n        roleId,\n        meta: rRole.edit,\n        groupId,\n      };\n    }\n  }\n\n  // Handle member/seat operations\n  if ('seat' in event) {\n    const seatData = event.seat;\n    const ships = seatData.ships;\n    const rSeat = seatData['r-seat'];\n\n    if ('add' in rSeat) {\n      return {\n        type: 'addGroupMembers',\n        ships,\n        groupId,\n      };\n    }\n\n    if ('del' in rSeat) {\n      return {\n        type: 'removeGroupMembers',\n        ships,\n        groupId,\n      };\n    }\n\n    if ('add-roles' in rSeat) {\n      return {\n        type: 'addGroupMembersToRole',\n        ships,\n        roles: rSeat['add-roles'],\n        groupId,\n      };\n    }\n\n    if ('del-roles' in rSeat) {\n      return {\n        type: 'removeGroupMembersFromRole',\n        ships,\n        roles: rSeat['del-roles'],\n        groupId,\n      };\n    }\n  }\n\n  // Handle entry operations (privacy, bans, invitations, join requests)\n  if ('entry' in event) {\n    const entry = event.entry;\n\n    // Handle privacy changes\n    if ('privacy' in entry) {\n      const privacy = entry.privacy;\n      if (privacy === 'secret') {\n        return { type: 'setGroupAsSecret', groupId };\n      } else if (privacy === 'private') {\n        return { type: 'setGroupAsPrivate', groupId };\n      } else if (privacy === 'public') {\n        return { type: 'setGroupAsPublic', groupId };\n      }\n    }\n\n    // Handle ban operations\n    if ('ban' in entry) {\n      const ban = entry.ban;\n\n      if ('add-ships' in ban) {\n        return {\n          type: 'banGroupMembers',\n          ships: ban['add-ships'],\n          groupId,\n        };\n      }\n\n      if ('del-ships' in ban) {\n        return {\n          type: 'unbanGroupMembers',\n          ships: ban['del-ships'],\n          groupId,\n        };\n      }\n\n      if ('add-ranks' in ban) {\n        return {\n          type: 'banAzimuthRanks',\n          ranks: ban['add-ranks'] as Rank[],\n          groupId,\n        };\n      }\n\n      if ('del-ranks' in ban) {\n        return {\n          type: 'unbanAzimuthRanks',\n          ranks: ban['del-ranks'] as Rank[],\n          groupId,\n        };\n      }\n    }\n\n    // Handle join request operations\n    if ('ask' in entry) {\n      const askData = entry.ask;\n\n      if ('add' in askData) {\n        const joinRequestData = askData.add;\n        return {\n          type: 'groupJoinRequest',\n          request: {\n            groupId,\n            requestedAt: joinRequestData.requestedAt,\n            contactId: joinRequestData.ship,\n          },\n        };\n      }\n\n      if ('del' in askData) {\n        return {\n          type: 'revokeGroupJoinRequests',\n          ships: askData.del.ships,\n          groupId,\n        };\n      }\n    }\n\n    // Handle pending invitations\n    if ('pending' in entry) {\n      const pending = entry.pending;\n\n      if ('add' in pending) {\n        return {\n          type: 'inviteGroupMembers',\n          ships: pending.add.ships,\n          groupId,\n        };\n      }\n\n      if ('del' in pending) {\n        return {\n          type: 'revokeGroupMemberInvites',\n          ships: pending.del.ships,\n          groupId,\n        };\n      }\n    }\n  }\n\n  // Handle channel operations\n  if ('channel' in event) {\n    const channelData = event.channel;\n    const channelId = channelData.nest;\n    const rChannel = channelData['r-channel'];\n\n    if ('add' in rChannel) {\n      return {\n        type: 'addChannel',\n        channel: toClientChannel({\n          id: channelId,\n          channel: rChannel.add,\n          groupId,\n        }),\n      };\n    }\n\n    if ('edit' in rChannel) {\n      return {\n        type: 'updateChannel',\n        channel: toClientChannel({\n          id: channelId,\n          channel: rChannel.edit,\n          groupId,\n        }),\n      };\n    }\n\n    if ('del' in rChannel) {\n      return { type: 'deleteChannel', channelId };\n    }\n\n    if ('join' in rChannel) {\n      const isJoined = rChannel.join;\n\n      if (!isJoined) {\n        return { type: 'leaveChannel', channelId };\n      }\n\n      return { type: 'joinChannel', channelId, groupId };\n    }\n\n    if ('section' in rChannel) {\n      const zoneId = rChannel.section;\n      return {\n        type: 'addChannelToNavSection',\n        channelId,\n        groupId,\n        navSectionId: `${groupId}-${zoneId}`,\n        sectionId: zoneId,\n      };\n    }\n  }\n\n  // Handle section/zone operations\n  if ('section' in event) {\n    const sectionData = event.section;\n    const sectionId = sectionData['section-id'];\n    const navSectionId = `${groupId}-${sectionId}`;\n    const rSection = sectionData['r-section'];\n\n    if ('add' in rSection) {\n      return {\n        type: 'addNavSection',\n        navSectionId,\n        sectionId,\n        groupId,\n        clientMeta: toClientMeta(rSection.add),\n      };\n    }\n\n    if ('del' in rSection) {\n      return { type: 'deleteNavSection', navSectionId };\n    }\n\n    if ('edit' in rSection) {\n      return {\n        type: 'editNavSection',\n        navSectionId,\n        sectionId,\n        clientMeta: toClientMeta(rSection.edit),\n      };\n    }\n\n    if ('move' in rSection) {\n      return {\n        type: 'moveNavSection',\n        navSectionId,\n        sectionId,\n        index: rSection.move.idx,\n      };\n    }\n\n    if ('move-nest' in rSection) {\n      return {\n        type: 'moveChannel',\n        navSectionId,\n        sectionId,\n        groupId,\n        channelId: rSection['move-nest'].nest,\n        index: rSection['move-nest'].idx,\n      };\n    }\n  }\n\n  // Handle section-order (batch reordering of all sections)\n  if ('section-order' in event) {\n    return {\n      type: 'updateSectionOrder',\n      groupId,\n      sectionIds: event['section-order'].order,\n    };\n  }\n\n  // Handle flag-content operations\n  if ('flag-content' in event) {\n    const flagData = event['flag-content'];\n    return {\n      type: 'flagGroupPost',\n      groupId,\n      channelId: flagData.nest,\n      postId: flagData['post-key'].reply\n        ? flagData['post-key'].reply\n        : flagData['post-key'].post,\n      flaggingUser: flagData.src,\n    };\n  }\n\n  return null;\n};\n\nconst extractFlaggedPosts = (\n  groupId: string,\n  flaggedContent?: FlaggedContent\n): db.GroupFlaggedPosts[] => {\n  const flaggedPosts: db.GroupFlaggedPosts[] = [];\n\n  if (!flaggedContent) {\n    return flaggedPosts;\n  }\n\n  Object.entries(flaggedContent).forEach(([channelId, posts]) => {\n    Object.entries(posts).forEach(([postId, post]) => {\n      post.flaggers.forEach((flagger) => {\n        flaggedPosts.push({\n          groupId,\n          channelId,\n          postId,\n          flaggedByContactId: flagger,\n        });\n      });\n    });\n  });\n\n  return flaggedPosts;\n};\n\nexport function toClientGroupsV7(\n  groups: Record<string, ub.GroupV7>,\n  isJoined: boolean\n) {\n  if (!groups) {\n    return [];\n  }\n  return Object.entries(groups).map(([id, group]) => {\n    return toClientGroupV7(id, group, isJoined);\n  });\n}\n\nexport function toClientGroupV7(\n  id: string,\n  group: ub.GroupV7,\n  isJoined: boolean\n): db.Group {\n  const currentUserId = getCurrentUserId();\n  const { host: hostUserId } = parseGroupId(id);\n  const rolesById: Record<string, db.GroupRole> = {};\n  const flaggedPosts: db.GroupFlaggedPosts[] = extractFlaggedPosts(\n    id,\n    group['flagged-content']\n  );\n\n  logger.log('admissions', group.admissions);\n\n  // v7 uses admissions.banned instead of cordon.open\n  const bannedMembers: db.GroupMemberBan[] =\n    group.admissions?.banned?.ships?.map((ship) => ({\n      contactId: ship,\n      groupId: id,\n    })) ?? [];\n\n  logger.log('bannedMembers', bannedMembers);\n\n  // v7 uses admissions.requests instead of cordon.shut.ask\n  const joinRequests: db.GroupJoinRequest[] = group.admissions?.requests\n    ? Object.entries(group.admissions.requests).map(([ship, request]) => ({\n        contactId: ship,\n        groupId: id,\n        requestedAt: request.requestedAt || null,\n      }))\n    : [];\n\n  // v7 uses admissions.invited instead of cordon.shut.pending\n  const invitedMembers: db.ChatMember[] = group.admissions?.invited\n    ? Object.entries(group.admissions.invited)\n        // filter out members who have already joined\n        .filter(([ship]) => !group.seats?.[ship])\n        .map(([ship]) => ({\n          membershipType: 'group' as const,\n          contactId: ship,\n          chatId: id,\n          roles: [],\n          status: 'invited' as const,\n          joinedAt: null,\n        }))\n    : [];\n\n  // v7 uses seats instead of fleet (and seats use 'roles' not 'sects')\n  const members: db.ChatMember[] = (\n    group.seats ? Object.entries(group.seats) : []\n  )\n    .map(([userId, seat]) => {\n      return toClientGroupMember({\n        groupId: id,\n        contactId: userId,\n        vessel: {\n          sects: seat.roles, // v7 uses 'roles', v6 used 'sects'\n          joined: seat.joined,\n        },\n        status: 'joined',\n      });\n    })\n    .concat(\n      invitedMembers.map((m) => {\n        return toClientGroupMember({\n          groupId: id,\n          contactId: m.contactId,\n          vessel: {\n            sects: [],\n            joined: 0,\n          },\n          status: 'invited',\n        });\n      })\n    );\n\n  logger.log('joinRequests', joinRequests);\n\n  // v7 uses roles instead of cabals (and role IS the meta, no nested .meta property)\n  const roles = (group.roles ? Object.entries(group.roles) : []).map(\n    ([roleId, role]) => {\n      const data: db.GroupRole = {\n        id: roleId,\n        groupId: id,\n        ...toClientMeta(role), // v7 role IS the meta object\n      };\n      rolesById[roleId] = data;\n      return data;\n    }\n  );\n\n  // Extract current user's roles from seats for channel permission calculation\n  // v7 uses 'roles' instead of 'sects'\n  const currentUserRoles = group.seats?.[currentUserId]?.roles ?? [];\n\n  return {\n    id,\n    roles,\n    privacy: group.admissions.privacy,\n    ...toClientGroupMeta(group.meta),\n    haveInvite: isJoined ? false : undefined,\n    haveRequestedInvite: isJoined ? false : undefined,\n    currentUserIsMember: isJoined,\n    currentUserIsHost: hostUserId === currentUserId,\n    isPersonalGroup:\n      id === `${currentUserId}/${domain.PersonalGroupSlugs.slug}`,\n    joinStatus: undefined, // v7 groups from init are already joined\n    hostUserId,\n    flaggedPosts,\n    navSections: (group['section-order'] ?? [])\n      .map((zoneId, i) => {\n        const zone = group.sections?.[zoneId];\n        if (!zone) {\n          return;\n        }\n        const data: db.GroupNavSection = {\n          id: `${id}-${zoneId}`,\n          sectionId: zoneId,\n          groupId: id,\n          ...toClientMeta(zone.meta),\n          sectionIndex: i,\n          channels: (zone.order ?? []).map((channelId, ci) => {\n            const data: db.GroupNavSectionChannel = {\n              channelIndex: ci,\n              channelId: channelId,\n              groupNavSectionId: `${id}-${zoneId}`,\n            };\n            return data;\n          }),\n        };\n        return data;\n      })\n      .filter((s): s is db.GroupNavSection => !!s),\n    members,\n    bannedMembers,\n    joinRequests,\n    channels: group.channels\n      ? toClientChannels({\n          channels: group.channels,\n          groupId: id,\n          currentUserRoles,\n        })\n      : [],\n  };\n}\n\nexport function toClientGroupsFromPreview(\n  groups: Record<string, ub.GroupPreview>\n) {\n  return Object.entries(groups).map(([id, preview]) => {\n    return toClientGroupFromPreview(id, preview);\n  });\n}\n\nexport function toClientGroupFromPreview(\n  id: string,\n  preview: ub.GroupPreview\n): db.Group {\n  const currentUserId = getCurrentUserId();\n  const { host: hostUserId } = parseGroupId(id);\n\n  return {\n    id,\n    hostUserId,\n    currentUserIsMember: false,\n    currentUserIsHost: hostUserId === currentUserId, // should always be false\n    privacy: extractGroupPrivacy(preview),\n    ...toClientMeta(preview.meta),\n  };\n}\n\nconst toForeignsGroupsUpdate = (foreignsEvent: ub.Foreigns): GroupUpdate => {\n  const groups = toClientGroupsFromForeigns(foreignsEvent);\n  return { type: 'setUnjoinedGroups', groups };\n};\n\nexport function toClientGroupFromForeign(\n  id: string,\n  foreign: ub.Foreign\n): db.Group {\n  const currentUserId = getCurrentUserId();\n  const { host: hostUserId } = parseGroupId(id);\n  const privacy = extractGroupPrivacy(foreign.preview);\n  const joinStatus = getJoinStatusFromForeign(foreign);\n\n  // Filter out invalid (revoked) invites\n  const validInvites = foreign.invites?.filter((inv) => inv.valid) ?? [];\n\n  return {\n    id,\n    hostUserId,\n    privacy,\n    currentUserIsMember: false,\n    currentUserIsHost: hostUserId === currentUserId, // should always be false\n    haveInvite: validInvites.length > 0, // Only count valid invites\n    haveRequestedInvite: foreign.progress === 'ask',\n    joinStatus,\n    ...(foreign.preview ? toClientGroupMeta(foreign.preview.meta) : {}),\n  };\n}\n\nexport function toClientGroupsFromForeigns(\n  foreigns: Record<string, ub.Foreign>\n) {\n  if (!foreigns) return [];\n  return Object.entries(foreigns).map(([id, foreign]) =>\n    toClientGroupFromForeign(id, foreign)\n  );\n}\n\nfunction getJoinStatusFromForeign(foreign: ub.Foreign): db.Group['joinStatus'] {\n  if (!foreign.progress) {\n    return undefined;\n  }\n  switch (foreign.progress) {\n    case 'join':\n    case 'watch':\n      return 'joining';\n    case 'done':\n      return undefined;\n    case 'error':\n      return 'errored';\n    default:\n      return undefined;\n  }\n}\n\nfunction toClientGroupMeta(meta: ub.GroupMeta) {\n  return {\n    ...toClientMeta(meta),\n    title: toClientGroupTitle(meta.title),\n  };\n}\n\nfunction toClientGroupTitle(title: string) {\n  if (title.at(-1) === GENERATED_GROUP_TITLE_END_CHAR) {\n    return '';\n  } else {\n    return title;\n  }\n}\n\nfunction toClientChannels({\n  channels,\n  groupId,\n  currentUserRoles = [],\n}: {\n  channels: Record<string, ub.GroupChannel | ub.GroupChannelV7>;\n  groupId: string;\n  currentUserRoles?: string[];\n}): db.Channel[] {\n  return Object.entries(channels).map(([id, channel]) =>\n    toClientChannel({ id, channel, groupId, currentUserRoles })\n  );\n}\n\nfunction toClientChannel({\n  id,\n  channel,\n  groupId,\n  currentUserRoles = [],\n}: {\n  id: string;\n  channel: ub.GroupChannel | ub.GroupChannelV7;\n  groupId: string;\n  currentUserRoles?: string[];\n}): db.Channel {\n  const { description, channelContentConfiguration } =\n    StructuredChannelDescriptionPayload.decode(channel.meta.description);\n\n  const readerRoles = (channel.readers ?? []).map((roleId) => ({\n    channelId: id,\n    roleId,\n  }));\n\n  const currentUserId = getCurrentUserId();\n  const { host: hostUserId } = parseGroupChannelId(id);\n\n  // Determine currentUserIsMember based on read permissions\n  const isOpenChannel = channel.readers.length === 0;\n  const userHasReadPermission = channel.readers.some((roleId) =>\n    currentUserRoles.includes(roleId)\n  );\n  const currentUserIsMember = isOpenChannel || userHasReadPermission;\n\n  return {\n    id,\n    groupId,\n    type: getChannelType(id),\n    iconImage: omitEmpty(channel.meta.image),\n    title: omitEmpty(channel.meta.title),\n    coverImage: omitEmpty(channel.meta.cover),\n    description,\n    contentConfiguration: channelContentConfiguration,\n    currentUserIsHost: hostUserId === currentUserId,\n    readerRoles,\n    currentUserIsMember,\n  };\n}\n\nfunction toClientChannelFromPreview({\n  id,\n  channel,\n  groupId,\n}: {\n  id: string;\n  channel: ub.ChannelPreview;\n  groupId: string;\n}): db.Channel {\n  const { description, channelContentConfiguration } =\n    StructuredChannelDescriptionPayload.decode(channel.meta.description);\n\n  return {\n    id,\n    groupId,\n    type: getChannelType(id),\n    iconImage: omitEmpty(channel.meta.image),\n    title: omitEmpty(channel.meta.title),\n    coverImage: omitEmpty(channel.meta.cover),\n    description,\n    contentConfiguration: channelContentConfiguration,\n  };\n}\n\nfunction toClientGroupMember({\n  groupId,\n  contactId,\n  vessel,\n  status,\n}: {\n  groupId: string;\n  contactId: string;\n  vessel: { sects: string[]; joined: number };\n  status: 'invited' | 'joined';\n}): db.ChatMember {\n  return {\n    membershipType: 'group',\n    contactId,\n    chatId: groupId,\n    roles: vessel.sects.map((roleId) => ({\n      groupId,\n      contactId,\n      roleId,\n    })),\n    status,\n    joinedAt: vessel.joined,\n  };\n}\n\nfunction omitEmpty(val: string) {\n  return val === '' ? null : val;\n}\n\nexport const joinGroup = async (id: string) =>\n  poke({\n    app: 'groups',\n    mark: 'group-join',\n    json: {\n      flag: id,\n      'join-all': true,\n    },\n  });\n\nexport const rejectGroupInvitation = async (id: string) =>\n  poke({\n    app: 'groups',\n    mark: 'invite-decline',\n    json: id,\n  });\n\nexport type GroupsUpdate =\n  | { type: 'unknown' }\n  | { type: 'addGroups'; groups: db.Group[] }\n  | { type: 'deleteGroup'; groupId: string }\n  | { type: 'setUnjoinedGroups'; groups: db.Group[] };\n","import * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport type * as ub from '../urbit';\nimport { toClientUnreads } from './activityApi';\nimport { ChannelInit, toClientChannelsInit } from './channelsApi';\nimport { toClientDms, toClientGroupDms } from './chatApi';\nimport {\n  toClientGroupsFromForeigns,\n  toClientGroupsV7,\n  toClientPinnedItems,\n} from './groupsApi';\nimport { toClientHiddenPosts } from './postsApi';\nimport { scry } from './urbit';\n\nconst logger = createDevLogger('initApi', false);\n\nexport interface InitData {\n  pins: db.Pin[];\n  groups: db.Group[];\n  unjoinedGroups: db.Group[];\n  channels: db.Channel[];\n  channelPerms: ChannelInit[];\n  joinedGroups: string[];\n  joinedChannels: string[];\n  hiddenPostIds: string[];\n  blockedUsers: string[];\n  unreads: db.ActivityInit;\n}\n\nexport const getInitData = async () => {\n  const response = await scry<ub.GroupsInit6>({\n    app: 'groups-ui',\n    path: '/v6/init',\n  });\n\n  logger.crumb('got init data from api');\n\n  return toInitData(response);\n};\n\nfunction extractChannelReadersFromV7Groups(\n  groups: Record<string, ub.GroupV7>\n): Record<string, string[]> {\n  const readers: Record<string, string[]> = {};\n  Object.entries(groups).forEach(([_groupId, group]) => {\n    if (group.channels) {\n      Object.entries(group.channels).forEach(([channelId, channel]) => {\n        readers[channelId] = channel.readers ?? [];\n      });\n    }\n  });\n  return readers;\n}\n\nexport const toInitData = (response: ub.GroupsInit6): InitData => {\n  logger.crumb('converting init data to client data');\n  logger.log('response.groups:', response.groups);\n\n  const pins = toClientPinnedItems(response.pins);\n\n  const channelReaders = extractChannelReadersFromV7Groups(response.groups);\n\n  const channelsInit = toClientChannelsInit(\n    response.channel.channels,\n    channelReaders\n  );\n\n  logger.crumb('extracting hidden posts');\n\n  const hiddenGroupPosts = response.channel['hidden-posts'] ?? [];\n  const hiddenDmPosts = response.chat['hidden-messages'] ?? [];\n  const hiddenPostIds = toClientHiddenPosts([\n    ...hiddenGroupPosts,\n    ...hiddenDmPosts,\n  ]);\n\n  logger.crumb('extracting blocked users');\n\n  const blockedUsers = response.chat.blocked ?? [];\n\n  logger.crumb('converting groups to client data');\n\n  const groups = toClientGroupsV7(response.groups, true);\n\n  logger.crumb('converting unjoined groups to client data');\n\n  const unjoinedGroups = toClientGroupsFromForeigns(response.foreigns);\n\n  logger.crumb('converting dm channels to client data');\n\n  const dmChannels = toClientDms(response.chat.dms);\n\n  logger.crumb('converting group dm channels to client data');\n\n  const groupDmChannels = toClientGroupDms(response.chat.clubs);\n\n  logger.crumb('converting invited dm channels to client data');\n\n  const invitedDms = toClientDms(response.chat.invited, true);\n\n  logger.crumb('converting unreads to client data');\n\n  const unreads = toClientUnreads(response.activity ?? {});\n\n  logger.crumb('extracting joined groups');\n\n  const joinedGroups = groups.map((group) => group.id);\n  // Not fully reflective of which channels you're a member of, but if a channel is _not_\n  // in here, you're definitely not a member of it\n  logger.crumb('extracting joined channels');\n\n  const joinedChannels = channelsInit.map((channel) => channel.channelId);\n\n  logger.crumb('returning init data');\n\n  return {\n    pins,\n    groups,\n    unjoinedGroups,\n    unreads,\n    channels: [...dmChannels, ...groupDmChannels, ...invitedDms],\n    channelPerms: channelsInit,\n    joinedGroups,\n    joinedChannels,\n    hiddenPostIds,\n    blockedUsers,\n  };\n};\n","import { parse, render, da } from '@urbit/aura';\nimport { Atom, Cell, Noun, cue, dwim, enjs, jam } from '@urbit/nockjs';\nimport _ from 'lodash';\n\nimport * as db from '../db';\nimport { getFrondValue, getPatp, simpleHash } from '../logic';\nimport * as ub from '../urbit';\n\ninterface HalfSign {\n  signType: 'half';\n  signature?: string;\n  when: number;\n  provider?: string;\n  type: db.AttestationType;\n  contactId?: string;\n}\n\ninterface FullSign {\n  signType: 'full';\n  signature?: string;\n  when: number;\n  provider?: string;\n  type: db.AttestationType;\n\n  value: string;\n  proofTweetId?: string;\n  contactId?: string;\n}\n\nexport type Sign = HalfSign | FullSign;\n\nexport function parseSigned(sign: string): Sign | null {\n  // the noun is @uw encoded, first we have to unwrap it\n  const uw = parse('uw', sign);\n  const at = new Atom(uw);\n  const noun = cue(at); // (signed ?(half-sign-data full-sign-data))\n\n  if (!(noun instanceof Cell)) {\n    throw new Error('Bad Sign: not a cell');\n  }\n\n  const providerAtom = noun.head;\n  if (!(providerAtom instanceof Atom)) {\n    throw new Error('Bad Sign: provider not an atom');\n  }\n  const provider = render('p', providerAtom.number);\n\n  const TARGET = 14; // TODO: mask instead of magic #\n  const signedData = noun.at(Atom.fromInt(TARGET)) as Noun | null; // dat (signed-data)\n  if (!signedData) {\n    throw new Error('Bad Sign: could not find dat');\n  }\n\n  const signed = parseSignedData(signedData);\n  if (signed) {\n    signed.provider = provider;\n    signed.signature = sign;\n  }\n\n  return signed;\n}\n\n/*\n +$  half-sign-data\n  [%0 %verified %half when=@da for=@p kind=id-kind]\n +$  full-sign-data\n  [%0 %verified %full when=@da for=@p id=identifier proof=(unit proof)]\n\n  We want to drop the leading %0 and %verified\n*/\nexport function getHeadTaggedAttestation(noun: Noun): Noun {\n  if (!(noun instanceof Cell)) {\n    throw new Error('getHeadTaggedAttestation: not a cell');\n  }\n\n  const tail = noun.tail;\n  if (!(tail instanceof Cell)) {\n    throw new Error('getHeadTaggedAttestation: tail is not a cell');\n  }\n\n  return tail.tail;\n}\n\n/*\n+$  attestation\n  $:  half=(signed half-sign-data)\n      full=(signed full-sign-data)\n  ==\n*/\nexport function parseAttestation(noun: Noun) {\n  // const mask = ex.mask(['_tag', '', '', ['attestation', '']]); TODO: mask instea of magic #\n\n  const fullSignedData = noun.at(Atom.fromInt(30)) as Noun | null;\n  if (!fullSignedData) {\n    throw new Error('Bad attestation: could not find full signed data');\n  }\n\n  return parseSignedData(fullSignedData);\n}\n\nexport function parseSignedData(noun: Noun) {\n  const headTagged = getHeadTaggedAttestation(noun);\n  const attestation = getFrondValue<Sign>([\n    { tag: 'half', get: parseHalfSign },\n    { tag: 'full', get: parseFullSign },\n  ])(headTagged);\n\n  return attestation;\n}\n\n/*\n=/  id-type\n  $%  [%dummy @t]\n      [%urbit @p]\n      [%phone @t]      ::  normalized phone nr, a la +31612345678\n      [%twitter @t]    ::  lowercased handle\n      [%website turf]  ::  domain, tld first\n  ==\n*/\nfunction parseIdentifier(input: Noun): {\n  type: db.AttestationType;\n  value: string;\n} {\n  if (!(input instanceof Cell)) {\n    throw new Error('Bad identifier: not a cell');\n  }\n\n  const type = enjs.cord(input.head);\n  const value = enjs.cord(input.tail);\n\n  if (type !== 'twitter' && type !== 'phone') {\n    throw new Error(`Bad identifier: invalid type ${type}`);\n  }\n\n  return { type, value };\n}\n\n/*\n+$  proof\n  $%  [%link @t]\n      [%tweet id=@t]\n  ==\n*/\nfunction parseProof(input: Noun): {\n  proofTweetId?: string;\n  proofPhoneUrl?: string;\n} {\n  if (!(input instanceof Cell)) {\n    throw new Error('Bad identifier: not a cell');\n  }\n\n  const proofType = enjs.cord(input.head);\n  const proofValue = enjs.cord(input.tail);\n\n  if (proofType === 'tweet') {\n    return { proofTweetId: proofValue };\n  }\n\n  throw new Error(`Bad proof: invalid type ${proofType}`);\n}\n\n// [when=@da for=@p kind=id-kind]\nfunction parseHalfSign(noun: Noun): HalfSign {\n  if (!(noun instanceof Cell)) {\n    throw 'Bad half sign 1';\n  }\n\n  const when = new Date(da.toUnix(BigInt(noun.head.toString()))).getTime();\n  if (!(noun.tail instanceof Cell)) {\n    throw 'Bad half sign 2';\n  }\n\n  const b = noun.tail;\n\n  if (!(b.head instanceof Atom)) {\n    throw new Error('Bad half Sign 3');\n  }\n\n  const contactId = render('p', b.head.number);\n  const type = enjs.cord(b.tail) as db.AttestationType;\n\n  return { signType: 'half', when, type, contactId };\n}\n\n// [when=@da for=@p id=identifier proof=(unit proof)]\nfunction parseFullSign(noun: Noun): FullSign {\n  if (!(noun instanceof Cell)) {\n    throw 'Bad full sign 1';\n  }\n\n  const when = new Date(da.toUnix(BigInt(noun.head.toString()))).getTime();\n  if (!(noun.tail instanceof Cell)) {\n    throw 'Bad full sign 2';\n  }\n\n  const b = noun.tail;\n\n  if (!(b.head instanceof Atom)) {\n    throw new Error('Bad full Sign 3');\n  }\n  const contactId = render('p', b.head.number);\n\n  const c = b.tail;\n  if (!(c instanceof Cell)) {\n    throw new Error('Bad full Sign 4');\n  }\n\n  const identifier = parseIdentifier(c.head);\n  let proof = {} as Partial<FullSign>;\n\n  const maybeProof = c.tail;\n  if (maybeProof instanceof Cell) {\n    proof = parseProof(maybeProof.tail);\n  }\n\n  return {\n    signType: 'full',\n    when,\n    contactId,\n    type: identifier.type,\n    value: identifier.value,\n    ...proof,\n  };\n}\n\n// [=config why=@t =status]\n// function parseRecordEntry(\n//   noun: Noun,\n//   params: { currentUserId: string }\n// ): db.Attestation {\n//   // const axes = ex.mask(['id', 'config', 'why', 'status']);\n\n//   // const id = ex.grab(axes, noun, 'id');\n//   // const config = ex.grab(axes, noun, 'config');\n//   // const why = ex.grab(axes, noun, 'why');\n//   // const status = ex.grab(axes, noun, 'status');\n\n//   const parser = enjs.pairs([\n//     { nom: 'id', get: parseId },\n//     { nom: 'config', get: parseConfig },\n//     { nom: 'why', get: parseWhy },\n//     { nom: 'status', get: parseStatus },\n//   ]);\n\n//   const result = parser(noun) as unknown as {\n//     id: ub.RecordId;\n//     config: db.AttestationDiscoverability;\n//     why: string;\n//     status: Partial<db.Attestation>;\n//   };\n\n//   return {\n//     id: generateAttestationId({\n//       ...result.id,\n//       contactId: params.currentUserId,\n//     }),\n//     ...result.id,\n//     ...result.status,\n//     discoverability: result.config,\n//   };\n// }\n\n// function parseId(noun: Noun): ub.RecordId {\n//   const parser = enjs.pairs([\n//     { nom: 'provider', get: getPatp },\n//     { nom: 'type', get: enjs.cord },\n//     { nom: 'value', get: (n: Noun) => n },\n//   ]);\n\n//   const result = parser(noun) as unknown as {\n//     provider: string;\n//     type: string;\n//     value: Noun;\n//   };\n\n//   return {\n//     provider: result.provider,\n//     type: result.type,\n//     value:\n//       result.type === 'urbit' ? getPatp(result.value) : enjs.cord(result.value),\n//   } as ub.RecordId;\n// }\n\n// export function generateAttestationId(attest: {\n//   provider: string;\n//   type: string;\n//   value: string;\n//   contactId: string;\n// }) {\n//   const attestKey = `${attest.contactId}:${attest.type}:${attest.value}:${attest.provider}`;\n//   return simpleHash(attestKey);\n// }\n\n// function parseConfig(noun: Noun): db.AttestationDiscoverability {\n//   return enjs.cord(noun) as db.AttestationDiscoverability;\n// }\n\n// function parseWhy(noun: Noun): string {\n//   return enjs.cord(noun);\n// }\n\n// function parseStatus(noun: Noun) {\n//   const { status, sign } = getFrondValue<{\n//     status: db.AttestationStatus;\n//     sign: Sign | null;\n//   }>([\n//     { tag: 'want', get: () => ({ status: 'pending', sign: null }) },\n//     { tag: 'wait', get: () => ({ status: 'waiting', sign: null }) },\n//     {\n//       tag: 'done',\n//       get: (noun: Noun) => ({\n//         status: 'verified',\n//         sign: parseAttestation(noun),\n//       }),\n//     },\n//   ])(noun);\n\n//   return {\n//     status,\n//     signature: sign?.signature,\n//     initiatedAt: sign?.when,\n//     provingTweetId: sign?.signType === 'full' ? sign.proofTweetId : null,\n//   };\n// }\n\n// function nounToClientRecords(noun: Noun, contactId: string): db.Attestation[] {\n//   console.log(`noun to client records`, noun);\n//   return enjs.tree((n: Noun) => {\n//     if (!(n instanceof Cell)) {\n//       throw new Error('malformed map');\n//     }\n\n//     if (!(n.head instanceof Cell)) {\n//       throw new Error('malformed record key');\n//     }\n\n//     const provider = getPatp(n.head.head) as string;\n\n//     if (!(n.head.tail instanceof Cell)) {\n//       throw new Error('malformed record key identifier');\n//     }\n\n//     const type = enjs.cord(n.head.tail.head) as db.AttestationType;\n//     const value = getFrondValue([\n//       { tag: 'dummy', get: enjs.cord },\n//       { tag: 'phone', get: enjs.cord },\n//       { tag: 'urbit', get: getPatp },\n//       { tag: 'twitter', get: enjs.cord },\n//     ])(n.head.tail) as string;\n\n//     if (!(n.tail instanceof Cell)) {\n//       throw new Error('malformed record value');\n//     }\n\n//     const config = enjs.cord(n.tail.head) as db.AttestationDiscoverability;\n//     const currentUserId = '~latter-bolden'; // TODO: real curr user id\n//     const a = n.tail.tail;\n//     if (!(a instanceof Cell)) {\n//       throw new Error('malformed record why');\n//     }\n//     const statusMessage = enjs.cord(a.head); // TODO: should we store?\n\n//     const { status, sign } = getFrondValue<{\n//       status: db.AttestationStatus;\n//       sign: NounParsers.Sign | null;\n//     }>([\n//       { tag: 'want', get: () => ({ status: 'pending', sign: null }) },\n//       { tag: 'wait', get: () => ({ status: 'waiting', sign: null }) },\n//       {\n//         tag: 'done',\n//         get: (noun: Noun) => ({\n//           status: 'verified',\n//           sign: parseAttestation(noun, currentUserId),\n//         }),\n//       },\n//     ])(a.tail);\n\n//     const id = parseAttestationId({ provider, type, value, contactId });\n//     const provingTweetId =\n//       sign?.signType === 'full' ? sign.proofTweetId ?? null : null;\n\n//     const verif: db.Attestation = {\n//       id,\n//       contactId,\n//       provider,\n//       type,\n//       value,\n//       initiatedAt: sign?.when ?? null,\n//       discoverability: config,\n//       status,\n//       statusMessage,\n//       provingTweetId,\n//       signature: sign?.signature,\n//     };\n\n//     return verif;\n//   })(noun) as unknown as db.Attestation[];\n// }\n\n// export function parseAttestationId(attest: {\n//   provider: string;\n//   type: string;\n//   value: string;\n//   contactId: string;\n// }) {\n//   const attestKey = `${attest.contactId}:${attest.type}:${attest.value}:${attest.provider}`;\n//   return simpleHash(attestKey);\n// }\n\n// export function parseProof(noun: Noun) {\n//   if (!(noun instanceof Cell)) {\n//     throw new Error('malformed proof bundle, not a cell');\n//   }\n\n//   const head = noun.head;\n//   const tail = noun.tail;\n\n//   const payload = enjs.cord(head);\n//   const url = enjs.cord(tail);\n\n//   return { payload, url };\n// }\n","import { render, parse } from '@urbit/aura';\nimport { Atom, Cell, Noun, dejs, dwim, enjs } from '@urbit/nockjs';\n\nimport * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport { AnalyticsEvent } from '../domain';\nimport { Json, getFrondValue, getPatp, simpleHash } from '../logic';\nimport * as ub from '../urbit';\nimport { encodeString } from '../urbit';\nimport * as NounParsers from './nounParsers';\nimport {\n  getCurrentUserId,\n  pokeNoun,\n  scryNoun,\n  subscribe,\n  subscribeOnce,\n  trackedPokeNoun,\n} from './urbit';\n\nconst logger = createDevLogger('lanyardApi', false);\n\nexport type LanyardUpdate = { type: 'Default' };\nexport function subscribeToLanyardUpdates(\n  eventHandler: (event: LanyardUpdate) => void\n) {\n  subscribe({ app: 'lanyard', path: '/v1/records' }, (event) => {\n    logger.log('raw lanyard sub event', event);\n    eventHandler({ type: 'Default' });\n  });\n}\n\nexport async function checkAttestedSignature(signData: string) {\n  const nonce = Math.floor(Math.random() * 1000000);\n  const encodedNonce = render('uv', BigInt(nonce));\n\n  const query = [\n    null,\n    [null, nonce],\n    ['valid-jam', new Atom(parse('uw', signData))],\n  ];\n  const noun = dwim(query);\n\n  const queryResponseSub = subscribeOnce<ub.QueryResponseEvent>(\n    {\n      app: 'lanyard',\n      path: `/v1/query/${encodedNonce}`,\n    },\n    undefined,\n    undefined,\n    { tag: 'checkAttestedSignature' }\n  );\n\n  await pokeNoun({ app: 'lanyard', mark: 'lanyard-query-1', noun });\n  const queryResponse = await queryResponseSub;\n\n  if (queryResponse) {\n    const sigValidation = queryResponse.query?.result;\n    return Boolean(sigValidation.live && sigValidation.valid);\n  }\n  return false;\n}\n\nexport async function discoverContacts(\n  phoneNums: string[],\n  storedLastSalt: string | null = null,\n  lastPhoneNumberSetSent: string | null = null\n): Promise<{ matches: [string, string][]; nextSalt: string | null }> {\n  try {\n    const nums = await diffContactBook(phoneNums, lastPhoneNumberSetSent);\n    // because parseUx doesn't actually remove the dots\n    const parsedLastSalt = storedLastSalt?.replaceAll('.', '') ?? '0x0';\n    const lastSalt = BigInt(parsedLastSalt);\n    const nonce = Math.floor(Math.random() * 1000000);\n    const encodedNonce = render('uv', BigInt(nonce));\n    const payload = [\n      null,\n      [null, nonce],\n      'whose-bulk',\n      lastSalt,\n      nums.last,\n      nums.add,\n      nums.del,\n    ];\n    const noun = dwim(payload);\n\n    const queryResponseSub = subscribeOnce<ub.WhoseBulkResponseEvent>(\n      {\n        app: 'lanyard',\n        path: `/v1/query/${encodedNonce}`,\n      },\n      undefined,\n      undefined,\n      { tag: 'discoverContacts' }\n    );\n\n    try {\n      await pokeNoun({ app: 'lanyard', mark: 'lanyard-query-1', noun });\n    } catch (e) {\n      logger.trackEvent(AnalyticsEvent.ErrorContactMatching, {\n        error: e,\n        errorMessage: e.message,\n        context: 'discoverContacts',\n      });\n    }\n    try {\n      const queryResponse = await queryResponseSub;\n      logger.log('discoverContacts: queryResponse', queryResponse);\n\n      if (queryResponse && queryResponse.query.nonce === encodedNonce) {\n        if (queryResponse.query.result === 'rate limited') {\n          logger.trackEvent(AnalyticsEvent.ErrorContactMatching, {\n            error: 'rate limited',\n            context: 'discoverContacts',\n            errorMessage: 'rate limited',\n          });\n          return {\n            matches: [],\n            nextSalt: null,\n          };\n        }\n\n        // always store the phone numbers we just successfully sent, will be used to diff\n        // against the next time we send a request\n        const nextSalt = queryResponse.query.result?.['next-salt'];\n        const matches = queryResponse.query.result?.results\n          ? (Object.entries(queryResponse.query.result.results).filter(\n              ([_key, value]) => Boolean(value)\n            ) as [string, string][])\n          : [];\n\n        return {\n          matches,\n          nextSalt,\n        };\n      }\n\n      return {\n        matches: [],\n        nextSalt: null,\n      };\n    } catch (e) {\n      logger.error('error in discoverContacts', e);\n      logger.trackEvent(AnalyticsEvent.ErrorContactMatching, {\n        context: 'discoverContacts',\n        error: e,\n        errorMessage: e.message,\n      });\n      throw e;\n    }\n  } catch (e) {\n    logger.error('error discovering contacts', e);\n    throw e;\n  }\n}\n\nasync function diffContactBook(phoneNums: string[], last: string | null) {\n  logger.log('diffContactBook: last phone contact set', last);\n\n  if (last) {\n    const lastSet = JSON.parse(last);\n    logger.log('diffContactBook: lastSet', lastSet);\n\n    // find new phone numbers (additions)\n    const diff = phoneNums.filter((num) => !lastSet.includes(num));\n    logger.log('diffContactBook: diff', diff);\n    logger.trackEvent(AnalyticsEvent.DebugContactMatching, {\n      context: 'diffContactBook',\n      diffSetLength: diff.length,\n    });\n    // find removed phone numbers (deletions)\n    const delSet = lastSet.filter((num: string) => !phoneNums.includes(num));\n    logger.log('diffContactBook: delSet', delSet);\n    logger.trackEvent(AnalyticsEvent.DebugContactMatching, {\n      context: 'diffContactBook',\n      delSetLength: delSet.length,\n    });\n\n    if (diff.length === 0 && delSet.length === 0) {\n      logger.log('diffContactBook: no changes, returning empty with lastSet');\n      return {\n        last: toPhoneIdentifierSet(lastSet),\n        add: toPhoneIdentifierSet([]),\n        del: toPhoneIdentifierSet([]),\n      };\n    } else {\n      logger.log('diffContactBook: returning diff and del', diff, delSet);\n      return {\n        last: toPhoneIdentifierSet(lastSet),\n        add: toPhoneIdentifierSet(diff),\n        del: toPhoneIdentifierSet(delSet),\n      };\n    }\n  }\n\n  logger.log('diffContactBook: no last set, returning with add');\n  return {\n    last: toPhoneIdentifierSet([]),\n    add: toPhoneIdentifierSet(phoneNums),\n    del: toPhoneIdentifierSet([]),\n  };\n}\n\nfunction toPhoneIdentifierSet(phoneNumbers: string[]) {\n  return dejs.set(phoneNumbers.map((num) => ['phone', num]));\n}\n\nfunction nounToClientRecords(noun: Noun, contactId: string): db.Attestation[] {\n  return enjs.tree((n: Noun) => {\n    if (!(n instanceof Cell)) {\n      throw new Error('malformed map');\n    }\n\n    if (!(n.head instanceof Cell)) {\n      throw new Error('malformed record key');\n    }\n\n    const provider = getPatp(n.head.head) as string;\n\n    if (!(n.head.tail instanceof Cell)) {\n      throw new Error('malformed record key identifier');\n    }\n\n    const type = enjs.cord(n.head.tail.head) as db.AttestationType;\n    const value = getFrondValue([\n      { tag: 'dummy', get: enjs.cord },\n      { tag: 'phone', get: enjs.cord },\n      { tag: 'urbit', get: getPatp },\n      { tag: 'twitter', get: enjs.cord },\n    ])(n.head.tail) as string;\n\n    if (!(n.tail instanceof Cell)) {\n      throw new Error('malformed record value');\n    }\n\n    const config = enjs.cord(n.tail.head) as db.AttestationDiscoverability;\n    const a = n.tail.tail;\n    if (!(a instanceof Cell)) {\n      throw new Error('malformed record why');\n    }\n    const statusMessage = enjs.cord(a.head);\n\n    const { status, sign } = getFrondValue<{\n      status: db.AttestationStatus;\n      sign: NounParsers.Sign | null;\n    }>([\n      { tag: 'want', get: () => ({ status: 'pending', sign: null }) },\n      { tag: 'wait', get: () => ({ status: 'waiting', sign: null }) },\n      {\n        tag: 'done',\n        get: (noun: Noun) => ({\n          status: 'verified',\n          sign: NounParsers.parseAttestation(noun),\n        }),\n      },\n    ])(a.tail);\n\n    const id = parseAttestationId({ provider, type, value, contactId });\n    const provingTweetId =\n      sign?.signType === 'full' ? sign.proofTweetId ?? null : null;\n\n    const verif: db.Attestation = {\n      id,\n      contactId,\n      provider,\n      type,\n      value,\n      initiatedAt: sign?.when ?? null,\n      discoverability: config,\n      status,\n      statusMessage,\n      provingTweetId,\n      signature: sign?.signature,\n    };\n\n    return verif as unknown as Json;\n  })(noun) as unknown as db.Attestation[];\n}\n\nexport function parseAttestationId(attest: {\n  provider: string;\n  type: string;\n  value: string;\n  contactId: string;\n}) {\n  const attestKey = `${attest.contactId}:${attest.type}:${attest.value}:${attest.provider}`;\n  return simpleHash(attestKey);\n}\n\nfunction parseTwitterBundle(noun: Noun) {\n  if (!(noun instanceof Cell)) {\n    throw new Error('malformed proof bundle, not a cell');\n  }\n\n  const head = noun.head;\n  const tail = noun.tail;\n\n  const payload = enjs.cord(head);\n  const url = enjs.cord(tail);\n\n  return { payload, url };\n}\n\nexport async function fetchTwitterConfirmPayload(handle: string) {\n  const result = await scryNoun({\n    app: 'lanyard',\n    path: `/v1/proof/twitter/bundle/${encodeString(handle)}`,\n  });\n\n  try {\n    const parsed = parseTwitterBundle(result);\n    return parsed;\n  } catch (e) {\n    logger.trackEvent(AnalyticsEvent.ErrorNounParse, {\n      parser: 'twitterBundle',\n      error: e,\n      errorMessage: e.message,\n      noun: result.toString(),\n    });\n    throw e;\n  }\n}\n\nexport async function fetchUserAttestations(): Promise<db.Attestation[]> {\n  const currentUserId = getCurrentUserId();\n\n  try {\n    const result = await scryNoun({\n      app: 'lanyard',\n      path: '/v1/records',\n    });\n\n    try {\n      const records = nounToClientRecords(result, currentUserId);\n      return records;\n    } catch (e) {\n      logger.trackEvent(AnalyticsEvent.ErrorNounParse, {\n        parser: 'records',\n        error: e,\n        errorMessage: e.message,\n        noun: nounToClientRecords.toString(),\n      });\n      throw e;\n    }\n  } catch (e) {\n    logger.trackEvent('Error Scrying Lanyard State', {\n      error: e,\n      errorMessage: e.message,\n    });\n    throw e;\n  }\n}\n\nexport async function initiatePhoneVerify(phoneNumber: string) {\n  const payload = [null, ['start', ['phone', phoneNumber]]];\n  const noun = dwim(payload);\n\n  let errorCode: LanyardErrorCode | null = null;\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (event.status?.value !== phoneNumber.toLowerCase()) {\n        return false;\n      }\n\n      if (event.status.status === 'gone') {\n        if (event.status.why.includes('already registered')) {\n          errorCode = LanyardErrorCode.ALREADY_REGISTERED;\n        } else {\n          errorCode = LanyardErrorCode.UNKNOWN;\n        }\n        return true;\n      }\n\n      if (event.status.status === 'pending') {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'initiatePhoneVerify' }\n  );\n\n  if (errorCode) {\n    throw new LanyardError({ errorCode });\n  }\n}\n\nexport async function initiateTwitterAttestation(twitterHandle: string) {\n  const payload = [null, ['start', ['twitter', twitterHandle]]];\n  logger.log('initiateTwitterAttestation', payload);\n  const noun = dwim(payload);\n\n  let errorCode: LanyardErrorCode | null = null;\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (event.status?.value !== twitterHandle.toLowerCase()) {\n        return false;\n      }\n\n      if (event.status.status === 'gone') {\n        if (event.status.why.includes('already registered')) {\n          errorCode = LanyardErrorCode.ALREADY_REGISTERED;\n        } else {\n          errorCode = LanyardErrorCode.UNKNOWN;\n        }\n        return true;\n      }\n\n      if (event.status.status === 'pending') {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'initiateTwitterAttestation' }\n  );\n\n  if (errorCode) {\n    throw new LanyardError({ errorCode });\n  }\n}\n\nexport async function updateAttestationDiscoverability({\n  visibility,\n  value,\n  type,\n}: {\n  value: string;\n  type: db.AttestationType;\n  visibility: db.AttestationDiscoverability;\n}) {\n  const identifier = [type, value.toLowerCase()];\n  const config = [visibility];\n  const command = [null, ['config', identifier, config]];\n\n  const noun = dwim(command);\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordConfigEvent) => {\n      if (event.config?.value !== value.toLowerCase()) {\n        return false;\n      }\n\n      if (event.config.config.discoverable === visibility) {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'updateAttestationVisibility' }\n  );\n}\n\nexport async function updateAttestationProfileDisplay({\n  value,\n  type,\n  displaySetting,\n}: {\n  value: string;\n  type: db.AttestationType;\n  displaySetting: 'full' | 'half' | 'none';\n}) {\n  const identifier = [type, value.toLowerCase()];\n  const command = [null, ['profile', identifier, displaySetting]];\n  const noun = dwim(command);\n  await pokeNoun({ app: 'lanyard', mark: 'lanyard-command-1', noun });\n}\n\nexport enum LanyardErrorCode {\n  ALREADY_REGISTERED = 'VALUE_ALREADY_REGISTERED',\n\n  TWITTER_TWEET_NOT_FOUND = 'TWITTER_TWEET_NOT_FOUND',\n  TWITTER_TWEET_PROTECTED = 'TWITTER_TWEET_PROTECTED',\n  TWITTER_BAD_TWEET = 'TWITTER_BAD_TWEET',\n\n  PHONE_BAD_OTP = 'PHONE_BAD_OTP',\n\n  UNKNOWN = 'UNKNOWN',\n}\nexport class LanyardError extends Error {\n  public errorCode: LanyardErrorCode;\n\n  constructor({ errorCode }: { errorCode: LanyardErrorCode }) {\n    super(errorCode);\n    this.name = 'LanyardError';\n    this.errorCode = errorCode;\n  }\n}\n\nconst BAD_CONFIRM_ERROR = 'tweet rejected';\nexport async function confirmTwitterAttestation(\n  twitterHandle: string,\n  postId: string\n) {\n  const identifier = ['twitter', twitterHandle];\n  const work = ['twitter', 'post', postId];\n  const payload = [null, ['work', identifier, work]];\n\n  const noun = dwim(payload);\n  let errorCode: LanyardErrorCode | null = null;\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (event.status?.value !== twitterHandle.toLowerCase()) {\n        return false;\n      }\n\n      const why = event.status.why ?? '';\n      if (why.includes(BAD_CONFIRM_ERROR)) {\n        if (why.includes('protected')) {\n          errorCode = LanyardErrorCode.TWITTER_TWEET_PROTECTED;\n        } else if (why.includes('not-found')) {\n          errorCode = LanyardErrorCode.TWITTER_TWEET_NOT_FOUND;\n        } else if (why.includes('bad-tweet') || why.includes('bad-handle')) {\n          errorCode = LanyardErrorCode.TWITTER_BAD_TWEET;\n        } else {\n          errorCode = LanyardErrorCode.UNKNOWN;\n        }\n        return true;\n      }\n\n      if (event.status.status === 'verified') {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'confirmTwitterAttestation' }\n  );\n\n  if (errorCode) {\n    throw new LanyardError({ errorCode });\n  }\n}\n\nexport async function initiatePhoneAttestation(phoneNumber: string) {\n  const payload = [null, ['start', ['phone', phoneNumber]]];\n  const noun = dwim(payload);\n\n  let errorCode: LanyardErrorCode | null = null;\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (event.status?.value !== phoneNumber) {\n        return false;\n      }\n\n      if (event.status.status === 'gone') {\n        if (event.status.why.includes('already registered')) {\n          errorCode = LanyardErrorCode.ALREADY_REGISTERED;\n        } else {\n          errorCode = LanyardErrorCode.UNKNOWN;\n        }\n        return true;\n      }\n\n      if (\n        event.status.status === 'pending' ||\n        event.status.status === 'verified'\n      ) {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'initiatePhoneAttestation' }\n  );\n\n  if (errorCode) {\n    throw new LanyardError({ errorCode });\n  }\n}\n\nexport async function confirmPhoneAttestation(\n  phoneNumber: string,\n  otp: string\n) {\n  const identifier = ['phone', phoneNumber];\n  const work = ['phone', otp];\n  const payload = [null, ['work', identifier, work]];\n\n  const noun = dwim(payload);\n  let errorCode: LanyardErrorCode | null = null;\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (!event.status || event.status.value !== phoneNumber) {\n        return false;\n      }\n\n      const { status, why } = event.status;\n\n      if (status === 'pending' && why.includes('invalid otp')) {\n        errorCode = LanyardErrorCode.PHONE_BAD_OTP;\n        return true;\n      }\n\n      if (event.status.status === 'verified') {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'confirmPhoneAttestation' }\n  );\n\n  if (errorCode) {\n    throw new LanyardError({ errorCode });\n  }\n}\n\nexport async function revokeAttestation(params: {\n  type: db.AttestationType;\n  value: string;\n}) {\n  const identifier = [params.type, params.value];\n  const command = [null, ['revoke', identifier]];\n  const noun = dwim(command);\n\n  await trackedPokeNoun(\n    { app: 'lanyard', mark: 'lanyard-command-1', noun },\n    { app: 'lanyard', path: '/v1/records' },\n    (event: ub.RecordStatusEvent) => {\n      if (event.status?.value !== params.value.toLowerCase()) {\n        return false;\n      }\n\n      if (event.status.status === 'gone') {\n        return true;\n      }\n\n      return false;\n    },\n    { tag: 'revokeAttestation' }\n  );\n}\n","import * as db from '../db';\nimport { createDevLogger } from '../debug';\nimport { AnalyticsEvent } from '../domain';\nimport { normalizeUrbitColor } from '../logic';\nimport * as ub from '../urbit';\nimport { parseAttestationId } from './lanyardApi';\nimport * as NounParsers from './nounParsers';\nimport { getCurrentUserId, poke, scry, subscribe } from './urbit';\n\nconst logger = createDevLogger('contactsApi', false);\n\nexport const getContacts = async () => {\n  // this is all peers we know about, with merged profile data for\n  // contacts\n  const peersResponse = await scry<ub.ContactRolodex>({\n    app: 'contacts',\n    path: '/all',\n  });\n\n  // this is all of your contacts, with unmerged profile data + user overrides\n  const contactsResponse = await scry<ub.ContactBookScryResult1>({\n    app: 'contacts',\n    path: '/v1/book',\n  });\n\n  const suggestionsResponse = await scry<string[]>({\n    app: 'groups-ui',\n    path: '/suggested-contacts',\n  });\n\n  return toContactsData({\n    peersResponse: peersResponse,\n    contactsResponse: contactsResponse,\n    suggestionsResponse: suggestionsResponse,\n  });\n};\n\nexport const toContactsData = ({\n  peersResponse,\n  contactsResponse,\n  suggestionsResponse,\n}: {\n  peersResponse: ub.ContactRolodex;\n  contactsResponse: ub.ContactBookScryResult1;\n  suggestionsResponse: string[];\n}) => {\n  const skipContacts = new Set(Object.keys(contactsResponse));\n  const contactSuggestions = new Set(suggestionsResponse);\n\n  const peerProfiles = v0PeersToClientProfiles(peersResponse, {\n    userIdsToOmit: skipContacts,\n    contactSuggestions,\n  });\n  const contactProfiles = contactsToClientProfiles(contactsResponse, {\n    contactSuggestions,\n  });\n\n  return [...peerProfiles, ...contactProfiles];\n};\n\nexport const removeContactSuggestion = async (contactId: string) => {\n  return poke({\n    app: 'groups-ui',\n    mark: 'ui-hide-contact',\n    json: contactId,\n  });\n};\n\nexport const addContactSuggestions = async (contactIds: string[]) => {\n  return poke({\n    app: 'groups-ui',\n    mark: 'ui-add-contact-suggestions',\n    json: contactIds,\n  });\n};\n\nexport const syncUserProfiles = async (userIds: string[]) => {\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: { meet: userIds },\n  });\n};\n\nexport const updateContactMetadata = async (\n  contactId: string,\n  metadata: { nickname?: string; avatarImage?: string }\n) => {\n  const contactUpdate: ub.ContactBookProfileEdit = {};\n  if (metadata.nickname !== undefined) {\n    contactUpdate.nickname = metadata.nickname\n      ? { type: 'text', value: metadata.nickname }\n      : null;\n  }\n\n  if (metadata.avatarImage !== undefined) {\n    contactUpdate.avatar = metadata.avatarImage\n      ? { type: 'look', value: metadata.avatarImage }\n      : null;\n  }\n\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: { edit: { kip: contactId, contact: contactUpdate } },\n  });\n};\n\nexport const addContact = async (contactId: string) => {\n  removeContactSuggestion(contactId);\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: {\n      page: { kip: contactId, contact: {} },\n    },\n  });\n};\n\n// TODO: once we can add in bulk from the backend, do so\nexport const addUserContacts = async (contactIds: string[]) => {\n  const promises = contactIds.map((contactId) => {\n    return addContact(contactId);\n  });\n  return Promise.all(promises);\n};\n\nexport const removeContact = async (contactId: string) => {\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: { wipe: [contactId] },\n  });\n};\n\nexport interface ProfileUpdate {\n  nickname?: string | null;\n  status?: string;\n  bio?: string;\n  avatarImage?: string | null;\n  coverImage?: string;\n}\nexport const updateCurrentUserProfile = async (update: ProfileUpdate) => {\n  const editedFields: ub.ContactEditField[] = [];\n  if (update.nickname !== undefined) {\n    editedFields.push({ nickname: update.nickname ?? '' });\n  }\n\n  if (update.status !== undefined) {\n    editedFields.push({ status: update.status });\n  }\n\n  if (update.bio !== undefined) {\n    editedFields.push({ bio: update.bio });\n  }\n\n  if (update.avatarImage !== undefined) {\n    editedFields.push({ avatar: update.avatarImage ?? '' });\n  }\n\n  if (update.coverImage !== undefined) {\n    editedFields.push({ cover: update.coverImage });\n  }\n\n  const action: ub.ContactEdit = {\n    edit: editedFields,\n  };\n\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action',\n    json: action,\n  });\n};\n\nexport const updateSigilColor = async (color: string | null) => {\n  const contactUpdate: ub.ContactBookProfileEdit = {};\n  if (color) {\n    let urbitColor = color.startsWith('#') ? color.slice(1) : color;\n    if (urbitColor.startsWith('0x')) {\n      urbitColor = urbitColor.slice(2);\n    }\n    urbitColor = urbitColor.toLowerCase().padStart(6, '0');\n    const formattedColor = `${urbitColor.slice(0, 2)}.${urbitColor.slice(2)}`;\n    contactUpdate.color = {\n      type: 'tint',\n      value: formattedColor,\n    };\n  } else {\n    contactUpdate.color = {\n      type: 'tint',\n      value: '0',\n    };\n  }\n\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: { self: contactUpdate },\n  });\n};\n\nexport const addPinnedGroup = async (groupId: string) => {\n  const update: ub.ContactEdit = { edit: [{ 'add-group': groupId }] };\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action',\n    json: update,\n  });\n};\n\nexport const removePinnedGroup = async (groupId: string) => {\n  const update: ub.ContactEdit = { edit: [{ 'del-group': groupId }] };\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action',\n    json: update,\n  });\n};\n\nexport const setPinnedGroups = async (groupIds: string[]) => {\n  const contactUpdate: ub.ContactBookProfileEdit = {};\n  contactUpdate.groups = {\n    type: 'set',\n    value: groupIds.map((groupId) => ({ type: 'flag', value: groupId })),\n  };\n\n  console.log(`contact-action-1`, { self: { contact: contactUpdate } });\n\n  return poke({\n    app: 'contacts',\n    mark: 'contact-action-1',\n    json: { self: contactUpdate },\n  });\n};\n\nexport type ContactsUpdate =\n  | { type: 'upsertContact'; contact: db.Contact }\n  | { type: 'removeContact'; contactId: string };\n\nexport const subscribeToContactUpdates = (\n  handler: (update: ContactsUpdate) => void\n) => {\n  subscribe(\n    {\n      app: 'contacts',\n      path: '/v1/news',\n    },\n    (event: ub.ContactsNewsResponse1) => {\n      // received when someone is marked as a contact or when a contact's profile is updated\n      if (ub.isPageResponse(event) && event.page.kip.startsWith('~')) {\n        const { kip, contact, mod } = event.page;\n        const contactBookEntry = [contact, mod] as ub.ContactBookEntry;\n        return handler({\n          type: 'upsertContact',\n          contact: contactToClientProfile(kip, contactBookEntry),\n        });\n      }\n\n      if (ub.isWipeResponse(event) && event.wipe.kip.startsWith('~')) {\n        return handler({ type: 'removeContact', contactId: event.wipe.kip });\n      }\n\n      // received when we get initial or updated profile info for a non-contact. Note: we also get\n      // a dupe event here if a contact updates their own profile (get a page fact and peer fact)\n      if (ub.isPeerResponse(event) && event.peer.who.startsWith('~')) {\n        const { who, contact } = event.peer;\n        return handler({\n          type: 'upsertContact',\n          contact: v1PeerToClientProfile(who, contact),\n        });\n      }\n    }\n  );\n};\n\n// Used for converting the legacy contacts format to client representation.\nexport const v0PeersToClientProfiles = (\n  contacts: ub.ContactRolodex,\n  config?: {\n    userIdsToOmit?: Set<string>;\n    contactSuggestions?: Set<string>;\n  }\n): db.Contact[] => {\n  return Object.entries(contacts)\n    .filter(([ship]) =>\n      config?.userIdsToOmit ? !config.userIdsToOmit.has(ship) : true\n    )\n    .flatMap(([ship, contact]) =>\n      contact === null\n        ? []\n        : [\n            v0PeerToClientProfile(ship, contact, {\n              isContactSuggestion: config?.contactSuggestions?.has(ship),\n            }),\n          ]\n    );\n};\n\nexport const v0PeerToClientProfile = (\n  id: string,\n  contact: ub.Contact | null,\n  config?: {\n    isContactSuggestion?: boolean;\n  }\n): db.Contact => {\n  const currentUserId = getCurrentUserId();\n  return {\n    id,\n    peerNickname: contact?.nickname ?? null,\n    peerAvatarImage: contact?.avatar ?? null,\n    bio: contact?.bio ?? null,\n    status: contact?.status ?? null,\n    color: contact?.color ? normalizeUrbitColor(contact.color) : null,\n    coverImage: contact?.cover ?? null,\n    pinnedGroups:\n      contact?.groups?.map((groupId) => ({\n        groupId,\n        contactId: id,\n      })) ?? [],\n\n    attestations: parseContactAttestations(id, contact),\n    isContact: false,\n    isContactSuggestion: config?.isContactSuggestion && id !== currentUserId,\n  };\n};\n\nfunction parseContactAttestations(\n  contactId: string,\n  contact?: ub.Contact | ub.ContactBookProfile | null\n): db.ContactAttestation[] | null {\n  if (!contact) {\n    return null;\n  }\n\n  const attestations: db.Attestation[] = [];\n\n  if (\n    contact['lanyard-twitter-0-sign'] &&\n    contact['lanyard-twitter-0-sign'].value\n  ) {\n    try {\n      const sign = NounParsers.parseSigned(\n        contact['lanyard-twitter-0-sign'].value\n      );\n\n      // TODO: check contactId matches signed data\n\n      if (sign) {\n        const signIsGenuine = sign.contactId === contactId;\n        if (signIsGenuine) {\n          const providerUrl = contact['lanyard-twitter-0-url']?.value ?? null;\n          const provider = '~zod'; // TODO: can we get this info?\n          const type = sign.type;\n          const value = sign.signType === 'full' ? sign.value : '';\n          const id = parseAttestationId({ provider, type, value, contactId });\n          const provingTweetId =\n            sign.signType === 'full' ? sign.proofTweetId ?? null : null;\n\n          attestations.push({\n            id,\n            provider,\n            type,\n            value,\n            contactId,\n            initiatedAt: sign.when,\n            discoverability: sign.signType === 'full' ? 'public' : 'verified',\n            status: 'verified',\n            providerUrl,\n            provingTweetId,\n            signature: sign.signature,\n          });\n        } else {\n          logger.trackEvent(AnalyticsEvent.ErrorAttestation, {\n            context: 'forged attestation',\n            type: 'twitter',\n            contactId,\n            sign: contact['lanyard-twitter-0-sign']?.value,\n          });\n        }\n      }\n    } catch (e) {\n      logger.trackEvent(AnalyticsEvent.ErrorNounParse, {\n        parser: 'twitter signed',\n        error: e,\n        errorMessage: e.message,\n        noun: contact['lanyard-twitter-0-sign'].value,\n      });\n    }\n  }\n\n  if (\n    contact['lanyard-phone-0-sign'] &&\n    contact['lanyard-phone-0-sign'].value\n  ) {\n    try {\n      const sign = NounParsers.parseSigned(\n        contact['lanyard-phone-0-sign'].value\n      );\n\n      if (sign) {\n        const signIsGenuine = sign.contactId === contactId;\n        if (signIsGenuine) {\n          const providerUrl = contact['lanyard-phone-0-url']?.value ?? null;\n          const provider = '~zod'; // TODO: can we get this info?\n          const type = sign.type;\n          const value = sign.signType === 'full' ? sign.value : '';\n          const id = parseAttestationId({ provider, type, value, contactId });\n          const provingTweetId =\n            sign.signType === 'full' ? sign.proofTweetId ?? null : null;\n\n          if (sign.contactId !== contactId) {\n            logger.trackEvent(AnalyticsEvent.ErrorAttestation, {\n              context: 'forged attestation',\n              contactId,\n              sign: contact['lanyard-phone-0-sign']?.value,\n            });\n          }\n\n          attestations.push({\n            id,\n            provider,\n            type,\n            value,\n            contactId,\n            initiatedAt: sign.when,\n            discoverability: sign.signType === 'full' ? 'public' : 'verified',\n            status: 'verified',\n            providerUrl,\n            provingTweetId,\n            signature: sign.signature,\n          });\n        } else {\n          logger.trackEvent(AnalyticsEvent.ErrorAttestation, {\n            context: 'forged attestation',\n            type: 'phone',\n            contactId,\n            sign: contact['lanyard-phone-0-sign']?.value,\n          });\n        }\n      }\n    } catch (e) {\n      logger.trackEvent(AnalyticsEvent.ErrorNounParse, {\n        parser: 'phone signed',\n        error: e,\n        errorMessage: e.message,\n        noun: contact['lanyard-phone-0-sign'].value,\n      });\n    }\n  }\n\n  if (attestations.length === 0) {\n    return null;\n  }\n\n  const finalAttests = attestations.map((a) => ({\n    contactId,\n    attestationId: a.id,\n    attestation: a,\n  }));\n\n  return finalAttests;\n}\n\nexport const v1PeersToClientProfiles = (\n  peers: ub.ContactsAllScryResult1,\n  config?: {\n    contactSuggestions?: Set<string>;\n  }\n) => {\n  return Object.entries(peers).map(([ship, contact]) =>\n    v1PeerToClientProfile(ship, contact, {\n      isContactSuggestion: config?.contactSuggestions?.has(ship),\n    })\n  );\n};\n\nexport const v1PeerToClientProfile = (\n  id: string,\n  contact: ub.ContactBookProfile,\n  config?: {\n    isContact?: boolean;\n    isContactSuggestion?: boolean;\n  }\n): db.Contact => {\n  const currentUserId = getCurrentUserId();\n  return {\n    id,\n    peerNickname: contact.nickname?.value ?? null,\n    peerAvatarImage: contact.avatar?.value ?? null,\n    bio: contact.bio?.value ?? null,\n    status: contact.status?.value ?? null,\n    color: contact.color ? normalizeUrbitColor(contact.color.value) : null,\n    coverImage: contact.cover?.value ?? null,\n    pinnedGroups:\n      contact.groups?.value.map((group) => ({\n        groupId: group.value,\n        contactId: id,\n      })) ?? [],\n    attestations: parseContactAttestations(id, contact),\n    isContact: config?.isContact,\n    isContactSuggestion:\n      config?.isContactSuggestion && !config?.isContact && id !== currentUserId,\n  };\n};\n\nexport const contactsToClientProfiles = (\n  contacts: ub.ContactBookScryResult1,\n  config?: {\n    contactSuggestions?: Set<string>;\n  }\n): db.Contact[] => {\n  return Object.entries(contacts).flatMap(([userId, contact]) =>\n    contact === null\n      ? []\n      : [\n          contactToClientProfile(userId, contact, {\n            isContactSuggestion: config?.contactSuggestions?.has(userId),\n          }),\n        ]\n  );\n};\n\nexport const contactToClientProfile = (\n  userId: string,\n  contact: ub.ContactBookEntry,\n  config?: {\n    isContactSuggestion?: boolean;\n  }\n): db.Contact => {\n  const [base, overrides] = contact;\n\n  return {\n    id: userId,\n    peerNickname: base.nickname?.value ?? null,\n    customNickname: overrides?.nickname?.value,\n    peerAvatarImage: base.avatar?.value ?? null,\n    customAvatarImage: overrides?.avatar?.value,\n    status: base.status?.value ?? null,\n    bio: base.bio?.value ?? null,\n    coverImage: base.cover?.value ?? null,\n    color: base.color ? normalizeUrbitColor(base.color.value) : null,\n    pinnedGroups:\n      base.groups?.value.map((group) => ({\n        groupId: group.value,\n        contactId: userId,\n      })) ?? [],\n    attestations: parseContactAttestations(userId, base),\n    isContact: !!overrides,\n    isContactSuggestion: false,\n  };\n};\n","import * as db from '../db';\nimport * as ub from '../urbit';\nimport { poke, scry, subscribe } from './urbit';\n\nconst PENDING_MEMBER_DISMISSAL_PREFIX = 'pendingMemberDismissal:';\nexport function getPendingMemberDismissalKey(groupId: string) {\n  return `${PENDING_MEMBER_DISMISSAL_PREFIX}${groupId}`;\n}\n\nexport function getMessagesFilter(\n  value: string | null | undefined\n): ub.TalkSidebarFilter {\n  if (!value) {\n    return 'Direct Messages';\n  }\n\n  switch (value) {\n    case 'Direct Messages':\n    case 'All Messages':\n    case 'Group Channels':\n      return value;\n    default:\n      throw new Error(`Invalid messages filter: ${value}`);\n  }\n}\n\nfunction getBucket(key: string): string {\n  if (key.startsWith(PENDING_MEMBER_DISMISSAL_PREFIX)) {\n    return 'groups';\n  }\n\n  switch (key) {\n    case 'messagesFilter':\n      return 'talk';\n    case 'activitySeenTimestamp':\n    case 'completedWayfindingSplash':\n    case 'completedWayfindingTutorial':\n    case 'disableTlonInfraEnhancement':\n    case 'enableTelemetry':\n      return 'groups';\n    case 'disableAvatars':\n    case 'disableNicknames':\n    case 'disableRemoteContent':\n    case 'disableAppTileUnreads':\n    case 'disableSpellcheck':\n    case 'showUnreadCounts':\n      return 'calmEngine';\n    case 'theme':\n      return 'display';\n    default:\n      console.warn(\n        `No explicit bucket defined for setting key: ${key}, defaulting to 'groups'`\n      );\n      return 'groups';\n  }\n}\n\nexport const setSetting = async (key: string, val: any) => {\n  return poke({\n    app: 'settings',\n    mark: 'settings-event',\n    json: {\n      'put-entry': {\n        desk: 'groups',\n        'bucket-key': getBucket(key),\n        'entry-key': key,\n        value: val,\n      },\n    },\n  });\n};\n\nexport const getSettings = async (): Promise<{\n  settings: db.Settings;\n  pendingMemberDismissals: db.PendingMemberDismissals;\n}> => {\n  const results = await scry<ub.GroupsDeskSettings>({\n    app: 'settings',\n    path: '/desk/groups',\n  });\n\n  const settings = toClientSettings(results);\n  const pendingMemberDismissals = parsePendingMemberDismissals(results);\n\n  return { settings, pendingMemberDismissals };\n};\n\ntype SidebarSortMode = 'alphabetical' | 'arranged' | 'recent';\n\nconst toClientSidebarSort = (\n  sort: ub.SidebarSortMode | undefined\n): SidebarSortMode => {\n  switch (sort) {\n    case 'A → Z':\n      return 'alphabetical';\n    case 'Arranged':\n      return 'arranged';\n    case 'Recent':\n      return 'recent';\n  }\n\n  return 'arranged';\n};\n\nexport const toClientSettings = (\n  settings: ub.GroupsDeskSettings\n): db.Settings => {\n  return {\n    id: db.SETTINGS_SINGLETON_KEY,\n    theme: settings.desk.display?.theme,\n    disableAppTileUnreads: settings.desk.calmEngine?.disableAppTileUnreads,\n    disableAvatars: settings.desk.calmEngine?.disableAvatars,\n    disableRemoteContent: settings.desk.calmEngine?.disableRemoteContent,\n    disableSpellcheck: settings.desk.calmEngine?.disableSpellcheck,\n    disableNicknames: settings.desk.calmEngine?.disableNicknames,\n    orderedGroupPins: settings.desk.groups?.orderedGroupPins,\n    sideBarSort: toClientSidebarSort(settings.desk.groups?.sideBarSort),\n    groupSideBarSort: settings.desk.groups?.groupSideBarSort,\n    showActivityMessage: settings.desk.groups?.showActivityMessage,\n    enableTelemetry: settings.desk.groups?.enableTelemetry,\n    // DEPRECATED: use enableTelemetry instead, this is kept for settings migration\n    logActivity: settings.desk.groups?.logActivity,\n    analyticsId: settings.desk.groups?.analyticsId,\n    seenWelcomeCard: settings.desk.groups?.seenWelcomeCard,\n    newGroupFlags: settings.desk.groups?.newGroupFlags,\n    groupsNavState: settings.desk.groups?.groupsNavState,\n    messagesNavState: settings.desk.groups?.messagesNavState,\n    messagesFilter: settings.desk.talk?.messagesFilter,\n    gallerySettings: settings.desk.heaps?.heapSettings,\n    notebookSettings: JSON.stringify(settings.desk.diary),\n    activitySeenTimestamp: settings.desk.groups?.activitySeenTimestamp,\n    completedWayfindingSplash:\n      settings.desk.groups?.completedWayfindingSplash ?? false,\n    completedWayfindingTutorial:\n      settings.desk.groups?.completedWayfindingTutorial ?? false,\n    disableTlonInfraEnhancement:\n      settings.desk.groups?.disableTlonInfraEnhancement ?? false,\n  };\n};\n\nexport const parsePendingMemberDismissals = (\n  settings: ub.GroupsDeskSettings\n) => {\n  const dismissals: db.PendingMemberDismissals = [];\n\n  Object.entries(settings.desk.groups || {})\n    .filter(([key]) => key.startsWith(PENDING_MEMBER_DISMISSAL_PREFIX))\n    .forEach(([key, value]) => {\n      const groupId = key.slice(PENDING_MEMBER_DISMISSAL_PREFIX.length);\n      console.log(`Pending member dismissal for group ${groupId}: ${value}`);\n      const parsedVal = Number(value);\n      if (!isNaN(parsedVal)) {\n        dismissals.push({\n          groupId,\n          dismissedAt: parsedVal,\n        });\n      }\n    });\n\n  return dismissals;\n};\n\nexport interface ChargeUpdateInitial {\n  initial: {\n    [desk: string]: Charge;\n  };\n}\n\nexport declare type DocketHref = DocketHrefSite | DocketHrefGlob;\nexport interface DocketHrefGlob {\n  glob: {\n    base: string;\n  };\n}\nexport interface DocketHrefSite {\n  site: string;\n}\nexport interface Docket {\n  title: string;\n  info?: string;\n  color: string;\n  href: DocketHref;\n  website: string;\n  license: string;\n  version: string;\n  image?: string;\n}\nexport interface Charge extends Docket {\n  chad: Chad;\n}\nexport declare type Chad =\n  | HungChad\n  | GlobChad\n  | SiteChad\n  | InstallChad\n  | SuspendChad;\nexport interface HungChad {\n  hung: string;\n}\nexport interface GlobChad {\n  glob: null;\n}\nexport interface SiteChad {\n  site: null;\n}\nexport interface InstallChad {\n  install: null;\n}\nexport interface SuspendChad {\n  suspend: null;\n}\n\nexport interface Pike {\n  hash: string;\n  sync: {\n    desk: string;\n    ship: string;\n  } | null;\n  zest: 'live' | 'dead' | 'held';\n}\nexport interface Pikes {\n  [desk: string]: Pike;\n}\n\nexport async function getAppInfo(): Promise<Partial<db.AppInfo>> {\n  const pikes = await scry<Pikes>({\n    app: 'hood',\n    path: '/kiln/pikes',\n  });\n  const charges = (\n    await scry<ChargeUpdateInitial>({\n      app: 'docket',\n      path: '/charges',\n    })\n  ).initial;\n\n  const groupsPike = pikes?.['groups'] ?? ({} as Pike);\n  const groupsCharge = charges?.['groups'] ?? ({} as any);\n\n  return {\n    groupsVersion: groupsCharge.version ?? 'n/a',\n    groupsHash: groupsPike.hash ?? 'n/a',\n    groupsSyncNode: groupsPike.sync?.ship ?? 'n/a',\n  };\n}\n\nexport type SettingsUpdate = {\n  type: 'updateSetting';\n  setting: Partial<db.Settings>;\n};\n\nexport function subscribeToSettings(handler: (update: SettingsUpdate) => void) {\n  subscribe<ub.SettingsEvent>(\n    {\n      app: 'settings',\n      path: '/desk/groups',\n    },\n    (update) => {\n      if (!('settings-event' in update)) {\n        return;\n      }\n      const event = update['settings-event'];\n\n      if ('put-entry' in event) {\n        const update = event['put-entry'];\n        handler({\n          type: 'updateSetting',\n          setting: {\n            [update['entry-key']]: update.value,\n          },\n        });\n      }\n    }\n  );\n}\n","export const getHttpHandlerExtensionConfiguration = (runtimeConfig) => {\n    return {\n        setHttpHandler(handler) {\n            runtimeConfig.httpHandler = handler;\n        },\n        httpHandler() {\n            return runtimeConfig.httpHandler;\n        },\n        updateHttpClientConfig(key, value) {\n            runtimeConfig.httpHandler?.updateHttpClientConfig(key, value);\n        },\n        httpHandlerConfigs() {\n            return runtimeConfig.httpHandler.httpHandlerConfigs();\n        },\n    };\n};\nexport const resolveHttpHandlerRuntimeConfig = (httpHandlerExtensionConfiguration) => {\n    return {\n        httpHandler: httpHandlerExtensionConfiguration.httpHandler(),\n    };\n};\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n    EndpointURLScheme[\"HTTP\"] = \"http\";\n    EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n    AlgorithmId[\"MD5\"] = \"md5\";\n    AlgorithmId[\"CRC32\"] = \"crc32\";\n    AlgorithmId[\"CRC32C\"] = \"crc32c\";\n    AlgorithmId[\"SHA1\"] = \"sha1\";\n    AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n    const checksumAlgorithms = [];\n    if (runtimeConfig.sha256 !== undefined) {\n        checksumAlgorithms.push({\n            algorithmId: () => AlgorithmId.SHA256,\n            checksumConstructor: () => runtimeConfig.sha256,\n        });\n    }\n    if (runtimeConfig.md5 != undefined) {\n        checksumAlgorithms.push({\n            algorithmId: () => AlgorithmId.MD5,\n            checksumConstructor: () => runtimeConfig.md5,\n        });\n    }\n    return {\n        addChecksumAlgorithm(algo) {\n            checksumAlgorithms.push(algo);\n        },\n        checksumAlgorithms() {\n            return checksumAlgorithms;\n        },\n    };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n    const runtimeConfig = {};\n    clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n        runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n    });\n    return runtimeConfig;\n};\n","export const SMITHY_CONTEXT_KEY = \"__smithy_context\";\n","export class HttpRequest {\n    method;\n    protocol;\n    hostname;\n    port;\n    path;\n    query;\n    headers;\n    username;\n    password;\n    fragment;\n    body;\n    constructor(options) {\n        this.method = options.method || \"GET\";\n        this.hostname = options.hostname || \"localhost\";\n        this.port = options.port;\n        this.query = options.query || {};\n        this.headers = options.headers || {};\n        this.body = options.body;\n        this.protocol = options.protocol\n            ? options.protocol.slice(-1) !== \":\"\n                ? `${options.protocol}:`\n                : options.protocol\n            : \"https:\";\n        this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n        this.username = options.username;\n        this.password = options.password;\n        this.fragment = options.fragment;\n    }\n    static clone(request) {\n        const cloned = new HttpRequest({\n            ...request,\n            headers: { ...request.headers },\n        });\n        if (cloned.query) {\n            cloned.query = cloneQuery(cloned.query);\n        }\n        return cloned;\n    }\n    static isInstance(request) {\n        if (!request) {\n            return false;\n        }\n        const req = request;\n        return (\"method\" in req &&\n            \"protocol\" in req &&\n            \"hostname\" in req &&\n            \"path\" in req &&\n            typeof req[\"query\"] === \"object\" &&\n            typeof req[\"headers\"] === \"object\");\n    }\n    clone() {\n        return HttpRequest.clone(this);\n    }\n}\nfunction cloneQuery(query) {\n    return Object.keys(query).reduce((carry, paramName) => {\n        const param = query[paramName];\n        return {\n            ...carry,\n            [paramName]: Array.isArray(param) ? [...param] : param,\n        };\n    }, {});\n}\n","export class HttpResponse {\n    statusCode;\n    reason;\n    headers;\n    body;\n    constructor(options) {\n        this.statusCode = options.statusCode;\n        this.reason = options.reason;\n        this.headers = options.headers || {};\n        this.body = options.body;\n    }\n    static isInstance(response) {\n        if (!response)\n            return false;\n        const resp = response;\n        return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n    }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport function addExpectContinueMiddleware(options) {\n    return (next) => async (args) => {\n        const { request } = args;\n        if (options.expectContinueHeader !== false &&\n            HttpRequest.isInstance(request) &&\n            request.body &&\n            options.runtime === \"node\" &&\n            options.requestHandler?.constructor?.name !== \"FetchHttpHandler\") {\n            let sendHeader = true;\n            if (typeof options.expectContinueHeader === \"number\") {\n                try {\n                    const bodyLength = Number(request.headers?.[\"content-length\"]) ?? options.bodyLengthChecker?.(request.body) ?? Infinity;\n                    sendHeader = bodyLength >= options.expectContinueHeader;\n                }\n                catch (e) { }\n            }\n            else {\n                sendHeader = !!options.expectContinueHeader;\n            }\n            if (sendHeader) {\n                request.headers.Expect = \"100-continue\";\n            }\n        }\n        return next({\n            ...args,\n            request,\n        });\n    };\n}\nexport const addExpectContinueMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"SET_EXPECT_HEADER\", \"EXPECT_HEADER\"],\n    name: \"addExpectContinueMiddleware\",\n    override: true,\n};\nexport const getAddExpectContinuePlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(addExpectContinueMiddleware(options), addExpectContinueMiddlewareOptions);\n    },\n});\n","export const RequestChecksumCalculation = {\n    WHEN_SUPPORTED: \"WHEN_SUPPORTED\",\n    WHEN_REQUIRED: \"WHEN_REQUIRED\",\n};\nexport const DEFAULT_REQUEST_CHECKSUM_CALCULATION = RequestChecksumCalculation.WHEN_SUPPORTED;\nexport const ResponseChecksumValidation = {\n    WHEN_SUPPORTED: \"WHEN_SUPPORTED\",\n    WHEN_REQUIRED: \"WHEN_REQUIRED\",\n};\nexport const DEFAULT_RESPONSE_CHECKSUM_VALIDATION = RequestChecksumCalculation.WHEN_SUPPORTED;\nexport var ChecksumAlgorithm;\n(function (ChecksumAlgorithm) {\n    ChecksumAlgorithm[\"MD5\"] = \"MD5\";\n    ChecksumAlgorithm[\"CRC32\"] = \"CRC32\";\n    ChecksumAlgorithm[\"CRC32C\"] = \"CRC32C\";\n    ChecksumAlgorithm[\"CRC64NVME\"] = \"CRC64NVME\";\n    ChecksumAlgorithm[\"SHA1\"] = \"SHA1\";\n    ChecksumAlgorithm[\"SHA256\"] = \"SHA256\";\n})(ChecksumAlgorithm || (ChecksumAlgorithm = {}));\nexport var ChecksumLocation;\n(function (ChecksumLocation) {\n    ChecksumLocation[\"HEADER\"] = \"header\";\n    ChecksumLocation[\"TRAILER\"] = \"trailer\";\n})(ChecksumLocation || (ChecksumLocation = {}));\nexport const DEFAULT_CHECKSUM_ALGORITHM = ChecksumAlgorithm.CRC32;\n","export function setCredentialFeature(credentials, feature, value) {\n    if (!credentials.$source) {\n        credentials.$source = {};\n    }\n    credentials.$source[feature] = value;\n    return credentials;\n}\n","export function setFeature(context, feature, value) {\n    if (!context.__aws_sdk_context) {\n        context.__aws_sdk_context = {\n            features: {},\n        };\n    }\n    else if (!context.__aws_sdk_context.features) {\n        context.__aws_sdk_context.features = {};\n    }\n    context.__aws_sdk_context.features[feature] = value;\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nexport const getDateHeader = (response) => HttpResponse.isInstance(response) ? response.headers?.date ?? response.headers?.Date : undefined;\n","export const getSkewCorrectedDate = (systemClockOffset) => new Date(Date.now() + systemClockOffset);\n","import { getSkewCorrectedDate } from \"./getSkewCorrectedDate\";\nexport const isClockSkewed = (clockTime, systemClockOffset) => Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - clockTime) >= 300000;\n","import { isClockSkewed } from \"./isClockSkewed\";\nexport const getUpdatedSystemClockOffset = (clockTime, currentSystemClockOffset) => {\n    const clockTimeInMs = Date.parse(clockTime);\n    if (isClockSkewed(clockTimeInMs, currentSystemClockOffset)) {\n        return clockTimeInMs - Date.now();\n    }\n    return currentSystemClockOffset;\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getDateHeader, getSkewCorrectedDate, getUpdatedSystemClockOffset } from \"../utils\";\nconst throwSigningPropertyError = (name, property) => {\n    if (!property) {\n        throw new Error(`Property \\`${name}\\` is not resolved for AWS SDK SigV4Auth`);\n    }\n    return property;\n};\nexport const validateSigningProperties = async (signingProperties) => {\n    const context = throwSigningPropertyError(\"context\", signingProperties.context);\n    const config = throwSigningPropertyError(\"config\", signingProperties.config);\n    const authScheme = context.endpointV2?.properties?.authSchemes?.[0];\n    const signerFunction = throwSigningPropertyError(\"signer\", config.signer);\n    const signer = await signerFunction(authScheme);\n    const signingRegion = signingProperties?.signingRegion;\n    const signingRegionSet = signingProperties?.signingRegionSet;\n    const signingName = signingProperties?.signingName;\n    return {\n        config,\n        signer,\n        signingRegion,\n        signingRegionSet,\n        signingName,\n    };\n};\nexport class AwsSdkSigV4Signer {\n    async sign(httpRequest, identity, signingProperties) {\n        if (!HttpRequest.isInstance(httpRequest)) {\n            throw new Error(\"The request is not an instance of `HttpRequest` and cannot be signed\");\n        }\n        const validatedProps = await validateSigningProperties(signingProperties);\n        const { config, signer } = validatedProps;\n        let { signingRegion, signingName } = validatedProps;\n        const handlerExecutionContext = signingProperties.context;\n        if (handlerExecutionContext?.authSchemes?.length ?? 0 > 1) {\n            const [first, second] = handlerExecutionContext.authSchemes;\n            if (first?.name === \"sigv4a\" && second?.name === \"sigv4\") {\n                signingRegion = second?.signingRegion ?? signingRegion;\n                signingName = second?.signingName ?? signingName;\n            }\n        }\n        const signedRequest = await signer.sign(httpRequest, {\n            signingDate: getSkewCorrectedDate(config.systemClockOffset),\n            signingRegion: signingRegion,\n            signingService: signingName,\n        });\n        return signedRequest;\n    }\n    errorHandler(signingProperties) {\n        return (error) => {\n            const serverTime = error.ServerTime ?? getDateHeader(error.$response);\n            if (serverTime) {\n                const config = throwSigningPropertyError(\"config\", signingProperties.config);\n                const initialSystemClockOffset = config.systemClockOffset;\n                config.systemClockOffset = getUpdatedSystemClockOffset(serverTime, config.systemClockOffset);\n                const clockSkewCorrected = config.systemClockOffset !== initialSystemClockOffset;\n                if (clockSkewCorrected && error.$metadata) {\n                    error.$metadata.clockSkewCorrected = true;\n                }\n            }\n            throw error;\n        };\n    }\n    successHandler(httpResponse, signingProperties) {\n        const dateHeader = getDateHeader(httpResponse);\n        if (dateHeader) {\n            const config = throwSigningPropertyError(\"config\", signingProperties.config);\n            config.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, config.systemClockOffset);\n        }\n    }\n}\nexport const AWSSDKSigV4Signer = AwsSdkSigV4Signer;\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getSkewCorrectedDate } from \"../utils\";\nimport { AwsSdkSigV4Signer, validateSigningProperties } from \"./AwsSdkSigV4Signer\";\nexport class AwsSdkSigV4ASigner extends AwsSdkSigV4Signer {\n    async sign(httpRequest, identity, signingProperties) {\n        if (!HttpRequest.isInstance(httpRequest)) {\n            throw new Error(\"The request is not an instance of `HttpRequest` and cannot be signed\");\n        }\n        const { config, signer, signingRegion, signingRegionSet, signingName } = await validateSigningProperties(signingProperties);\n        const configResolvedSigningRegionSet = await config.sigv4aSigningRegionSet?.();\n        const multiRegionOverride = (configResolvedSigningRegionSet ??\n            signingRegionSet ?? [signingRegion]).join(\",\");\n        const signedRequest = await signer.sign(httpRequest, {\n            signingDate: getSkewCorrectedDate(config.systemClockOffset),\n            signingRegion: multiRegionOverride,\n            signingService: signingName,\n        });\n        return signedRequest;\n    }\n}\n","import { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport const getSmithyContext = (context) => context[SMITHY_CONTEXT_KEY] || (context[SMITHY_CONTEXT_KEY] = {});\n","export const normalizeProvider = (input) => {\n    if (typeof input === \"function\")\n        return input;\n    const promisified = Promise.resolve(input);\n    return () => promisified;\n};\n","export const resolveAuthOptions = (candidateAuthOptions, authSchemePreference) => {\n    if (!authSchemePreference || authSchemePreference.length === 0) {\n        return candidateAuthOptions;\n    }\n    const preferredAuthOptions = [];\n    for (const preferredSchemeName of authSchemePreference) {\n        for (const candidateAuthOption of candidateAuthOptions) {\n            const candidateAuthSchemeName = candidateAuthOption.schemeId.split(\"#\")[1];\n            if (candidateAuthSchemeName === preferredSchemeName) {\n                preferredAuthOptions.push(candidateAuthOption);\n            }\n        }\n    }\n    for (const candidateAuthOption of candidateAuthOptions) {\n        if (!preferredAuthOptions.find(({ schemeId }) => schemeId === candidateAuthOption.schemeId)) {\n            preferredAuthOptions.push(candidateAuthOption);\n        }\n    }\n    return preferredAuthOptions;\n};\n","import { getSmithyContext } from \"@smithy/util-middleware\";\nimport { resolveAuthOptions } from \"./resolveAuthOptions\";\nfunction convertHttpAuthSchemesToMap(httpAuthSchemes) {\n    const map = new Map();\n    for (const scheme of httpAuthSchemes) {\n        map.set(scheme.schemeId, scheme);\n    }\n    return map;\n}\nexport const httpAuthSchemeMiddleware = (config, mwOptions) => (next, context) => async (args) => {\n    const options = config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config, context, args.input));\n    const authSchemePreference = config.authSchemePreference ? await config.authSchemePreference() : [];\n    const resolvedOptions = resolveAuthOptions(options, authSchemePreference);\n    const authSchemes = convertHttpAuthSchemesToMap(config.httpAuthSchemes);\n    const smithyContext = getSmithyContext(context);\n    const failureReasons = [];\n    for (const option of resolvedOptions) {\n        const scheme = authSchemes.get(option.schemeId);\n        if (!scheme) {\n            failureReasons.push(`HttpAuthScheme \\`${option.schemeId}\\` was not enabled for this service.`);\n            continue;\n        }\n        const identityProvider = scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));\n        if (!identityProvider) {\n            failureReasons.push(`HttpAuthScheme \\`${option.schemeId}\\` did not have an IdentityProvider configured.`);\n            continue;\n        }\n        const { identityProperties = {}, signingProperties = {} } = option.propertiesExtractor?.(config, context) || {};\n        option.identityProperties = Object.assign(option.identityProperties || {}, identityProperties);\n        option.signingProperties = Object.assign(option.signingProperties || {}, signingProperties);\n        smithyContext.selectedHttpAuthScheme = {\n            httpAuthOption: option,\n            identity: await identityProvider(option.identityProperties),\n            signer: scheme.signer,\n        };\n        break;\n    }\n    if (!smithyContext.selectedHttpAuthScheme) {\n        throw new Error(failureReasons.join(\"\\n\"));\n    }\n    return next(args);\n};\n","import { httpAuthSchemeMiddleware } from \"./httpAuthSchemeMiddleware\";\nexport const httpAuthSchemeEndpointRuleSetMiddlewareOptions = {\n    step: \"serialize\",\n    tags: [\"HTTP_AUTH_SCHEME\"],\n    name: \"httpAuthSchemeMiddleware\",\n    override: true,\n    relation: \"before\",\n    toMiddleware: \"endpointV2Middleware\",\n};\nexport const getHttpAuthSchemeEndpointRuleSetPlugin = (config, { httpAuthSchemeParametersProvider, identityProviderConfigProvider, }) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(httpAuthSchemeMiddleware(config, {\n            httpAuthSchemeParametersProvider,\n            identityProviderConfigProvider,\n        }), httpAuthSchemeEndpointRuleSetMiddlewareOptions);\n    },\n});\n","import { deserializerMiddleware } from \"./deserializerMiddleware\";\nimport { serializerMiddleware } from \"./serializerMiddleware\";\nexport const deserializerMiddlewareOption = {\n    name: \"deserializerMiddleware\",\n    step: \"deserialize\",\n    tags: [\"DESERIALIZER\"],\n    override: true,\n};\nexport const serializerMiddlewareOption = {\n    name: \"serializerMiddleware\",\n    step: \"serialize\",\n    tags: [\"SERIALIZER\"],\n    override: true,\n};\nexport function getSerdePlugin(config, serializer, deserializer) {\n    return {\n        applyToStack: (commandStack) => {\n            commandStack.add(deserializerMiddleware(config, deserializer), deserializerMiddlewareOption);\n            commandStack.add(serializerMiddleware(config, serializer), serializerMiddlewareOption);\n        },\n    };\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nconst defaultErrorHandler = (signingProperties) => (error) => {\n    throw error;\n};\nconst defaultSuccessHandler = (httpResponse, signingProperties) => { };\nexport const httpSigningMiddleware = (config) => (next, context) => async (args) => {\n    if (!HttpRequest.isInstance(args.request)) {\n        return next(args);\n    }\n    const smithyContext = getSmithyContext(context);\n    const scheme = smithyContext.selectedHttpAuthScheme;\n    if (!scheme) {\n        throw new Error(`No HttpAuthScheme was selected: unable to sign request`);\n    }\n    const { httpAuthOption: { signingProperties = {} }, identity, signer, } = scheme;\n    const output = await next({\n        ...args,\n        request: await signer.sign(args.request, identity, signingProperties),\n    }).catch((signer.errorHandler || defaultErrorHandler)(signingProperties));\n    (signer.successHandler || defaultSuccessHandler)(output.response, signingProperties);\n    return output;\n};\n","import { httpSigningMiddleware } from \"./httpSigningMiddleware\";\nexport const httpSigningMiddlewareOptions = {\n    step: \"finalizeRequest\",\n    tags: [\"HTTP_SIGNING\"],\n    name: \"httpSigningMiddleware\",\n    aliases: [\"apiKeyMiddleware\", \"tokenMiddleware\", \"awsAuthMiddleware\"],\n    override: true,\n    relation: \"after\",\n    toMiddleware: \"retryMiddleware\",\n};\nexport const getHttpSigningPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(httpSigningMiddleware(config), httpSigningMiddlewareOptions);\n    },\n});\n","export const normalizeProvider = (input) => {\n    if (typeof input === \"function\")\n        return input;\n    const promisified = Promise.resolve(input);\n    return () => promisified;\n};\n","const chars = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;\nexport const alphabetByEncoding = Object.entries(chars).reduce((acc, [i, c]) => {\n    acc[c] = Number(i);\n    return acc;\n}, {});\nexport const alphabetByValue = chars.split(\"\");\nexport const bitsPerLetter = 6;\nexport const bitsPerByte = 8;\nexport const maxLetterValue = 0b111111;\n","import { alphabetByEncoding, bitsPerByte, bitsPerLetter } from \"./constants.browser\";\nexport const fromBase64 = (input) => {\n    let totalByteLength = (input.length / 4) * 3;\n    if (input.slice(-2) === \"==\") {\n        totalByteLength -= 2;\n    }\n    else if (input.slice(-1) === \"=\") {\n        totalByteLength--;\n    }\n    const out = new ArrayBuffer(totalByteLength);\n    const dataView = new DataView(out);\n    for (let i = 0; i < input.length; i += 4) {\n        let bits = 0;\n        let bitLength = 0;\n        for (let j = i, limit = i + 3; j <= limit; j++) {\n            if (input[j] !== \"=\") {\n                if (!(input[j] in alphabetByEncoding)) {\n                    throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n                }\n                bits |= alphabetByEncoding[input[j]] << ((limit - j) * bitsPerLetter);\n                bitLength += bitsPerLetter;\n            }\n            else {\n                bits >>= bitsPerLetter;\n            }\n        }\n        const chunkOffset = (i / 4) * 3;\n        bits >>= bitLength % bitsPerByte;\n        const byteLength = Math.floor(bitLength / bitsPerByte);\n        for (let k = 0; k < byteLength; k++) {\n            const offset = (byteLength - k - 1) * bitsPerByte;\n            dataView.setUint8(chunkOffset + k, (bits & (255 << offset)) >> offset);\n        }\n    }\n    return new Uint8Array(out);\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"./fromUtf8\";\nexport const toUint8Array = (data) => {\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n};\n","export const toUtf8 = (input) => {\n    if (typeof input === \"string\") {\n        return input;\n    }\n    if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n        throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n    }\n    return new TextDecoder(\"utf-8\").decode(input);\n};\n","import { fromUtf8 } from \"@smithy/util-utf8\";\nimport { alphabetByValue, bitsPerByte, bitsPerLetter, maxLetterValue } from \"./constants.browser\";\nexport function toBase64(_input) {\n    let input;\n    if (typeof _input === \"string\") {\n        input = fromUtf8(_input);\n    }\n    else {\n        input = _input;\n    }\n    const isArrayLike = typeof input === \"object\" && typeof input.length === \"number\";\n    const isUint8Array = typeof input === \"object\" &&\n        typeof input.byteOffset === \"number\" &&\n        typeof input.byteLength === \"number\";\n    if (!isArrayLike && !isUint8Array) {\n        throw new Error(\"@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.\");\n    }\n    let str = \"\";\n    for (let i = 0; i < input.length; i += 3) {\n        let bits = 0;\n        let bitLength = 0;\n        for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n            bits |= input[j] << ((limit - j - 1) * bitsPerByte);\n            bitLength += bitsPerByte;\n        }\n        const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n        bits <<= bitClusterCount * bitsPerLetter - bitLength;\n        for (let k = 1; k <= bitClusterCount; k++) {\n            const offset = (bitClusterCount - k) * bitsPerLetter;\n            str += alphabetByValue[(bits & (maxLetterValue << offset)) >> offset];\n        }\n        str += \"==\".slice(0, 4 - bitClusterCount);\n    }\n    return str;\n}\n","import { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nexport class Uint8ArrayBlobAdapter extends Uint8Array {\n    static fromString(source, encoding = \"utf-8\") {\n        if (typeof source === \"string\") {\n            if (encoding === \"base64\") {\n                return Uint8ArrayBlobAdapter.mutate(fromBase64(source));\n            }\n            return Uint8ArrayBlobAdapter.mutate(fromUtf8(source));\n        }\n        throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);\n    }\n    static mutate(source) {\n        Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);\n        return source;\n    }\n    transformToString(encoding = \"utf-8\") {\n        if (encoding === \"base64\") {\n            return toBase64(this);\n        }\n        return toUtf8(this);\n    }\n}\n","const ReadableStreamRef = typeof ReadableStream === \"function\" ? ReadableStream : function () { };\nexport class ChecksumStream extends ReadableStreamRef {\n}\n","export const isReadableStream = (stream) => typeof ReadableStream === \"function\" &&\n    (stream?.constructor?.name === ReadableStream.name || stream instanceof ReadableStream);\nexport const isBlob = (blob) => {\n    return typeof Blob === \"function\" && (blob?.constructor?.name === Blob.name || blob instanceof Blob);\n};\n","import { toBase64 } from \"@smithy/util-base64\";\nimport { isReadableStream } from \"../stream-type-check\";\nimport { ChecksumStream } from \"./ChecksumStream.browser\";\nexport const createChecksumStream = ({ expectedChecksum, checksum, source, checksumSourceLocation, base64Encoder, }) => {\n    if (!isReadableStream(source)) {\n        throw new Error(`@smithy/util-stream: unsupported source type ${source?.constructor?.name ?? source} in ChecksumStream.`);\n    }\n    const encoder = base64Encoder ?? toBase64;\n    if (typeof TransformStream !== \"function\") {\n        throw new Error(\"@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.\");\n    }\n    const transform = new TransformStream({\n        start() { },\n        async transform(chunk, controller) {\n            checksum.update(chunk);\n            controller.enqueue(chunk);\n        },\n        async flush(controller) {\n            const digest = await checksum.digest();\n            const received = encoder(digest);\n            if (expectedChecksum !== received) {\n                const error = new Error(`Checksum mismatch: expected \"${expectedChecksum}\" but received \"${received}\"` +\n                    ` in response header \"${checksumSourceLocation}\".`);\n                controller.error(error);\n            }\n            else {\n                controller.terminate();\n            }\n        },\n    });\n    source.pipeThrough(transform);\n    const readable = transform.readable;\n    Object.setPrototypeOf(readable, ChecksumStream.prototype);\n    return readable;\n};\n","export class ByteArrayCollector {\n    allocByteArray;\n    byteLength = 0;\n    byteArrays = [];\n    constructor(allocByteArray) {\n        this.allocByteArray = allocByteArray;\n    }\n    push(byteArray) {\n        this.byteArrays.push(byteArray);\n        this.byteLength += byteArray.byteLength;\n    }\n    flush() {\n        if (this.byteArrays.length === 1) {\n            const bytes = this.byteArrays[0];\n            this.reset();\n            return bytes;\n        }\n        const aggregation = this.allocByteArray(this.byteLength);\n        let cursor = 0;\n        for (let i = 0; i < this.byteArrays.length; ++i) {\n            const bytes = this.byteArrays[i];\n            aggregation.set(bytes, cursor);\n            cursor += bytes.byteLength;\n        }\n        this.reset();\n        return aggregation;\n    }\n    reset() {\n        this.byteArrays = [];\n        this.byteLength = 0;\n    }\n}\n","import { ByteArrayCollector } from \"./ByteArrayCollector\";\nexport function createBufferedReadableStream(upstream, size, logger) {\n    const reader = upstream.getReader();\n    let streamBufferingLoggedWarning = false;\n    let bytesSeen = 0;\n    const buffers = [\"\", new ByteArrayCollector((size) => new Uint8Array(size))];\n    let mode = -1;\n    const pull = async (controller) => {\n        const { value, done } = await reader.read();\n        const chunk = value;\n        if (done) {\n            if (mode !== -1) {\n                const remainder = flush(buffers, mode);\n                if (sizeOf(remainder) > 0) {\n                    controller.enqueue(remainder);\n                }\n            }\n            controller.close();\n        }\n        else {\n            const chunkMode = modeOf(chunk, false);\n            if (mode !== chunkMode) {\n                if (mode >= 0) {\n                    controller.enqueue(flush(buffers, mode));\n                }\n                mode = chunkMode;\n            }\n            if (mode === -1) {\n                controller.enqueue(chunk);\n                return;\n            }\n            const chunkSize = sizeOf(chunk);\n            bytesSeen += chunkSize;\n            const bufferSize = sizeOf(buffers[mode]);\n            if (chunkSize >= size && bufferSize === 0) {\n                controller.enqueue(chunk);\n            }\n            else {\n                const newSize = merge(buffers, mode, chunk);\n                if (!streamBufferingLoggedWarning && bytesSeen > size * 2) {\n                    streamBufferingLoggedWarning = true;\n                    logger?.warn(`@smithy/util-stream - stream chunk size ${chunkSize} is below threshold of ${size}, automatically buffering.`);\n                }\n                if (newSize >= size) {\n                    controller.enqueue(flush(buffers, mode));\n                }\n                else {\n                    await pull(controller);\n                }\n            }\n        }\n    };\n    return new ReadableStream({\n        pull,\n    });\n}\nexport const createBufferedReadable = createBufferedReadableStream;\nexport function merge(buffers, mode, chunk) {\n    switch (mode) {\n        case 0:\n            buffers[0] += chunk;\n            return sizeOf(buffers[0]);\n        case 1:\n        case 2:\n            buffers[mode].push(chunk);\n            return sizeOf(buffers[mode]);\n    }\n}\nexport function flush(buffers, mode) {\n    switch (mode) {\n        case 0:\n            const s = buffers[0];\n            buffers[0] = \"\";\n            return s;\n        case 1:\n        case 2:\n            return buffers[mode].flush();\n    }\n    throw new Error(`@smithy/util-stream - invalid index ${mode} given to flush()`);\n}\nexport function sizeOf(chunk) {\n    return chunk?.byteLength ?? chunk?.length ?? 0;\n}\nexport function modeOf(chunk, allowBuffer = true) {\n    if (allowBuffer && typeof Buffer !== \"undefined\" && chunk instanceof Buffer) {\n        return 2;\n    }\n    if (chunk instanceof Uint8Array) {\n        return 1;\n    }\n    if (typeof chunk === \"string\") {\n        return 0;\n    }\n    return -1;\n}\n","export const getAwsChunkedEncodingStream = (readableStream, options) => {\n    const { base64Encoder, bodyLengthChecker, checksumAlgorithmFn, checksumLocationName, streamHasher } = options;\n    const checksumRequired = base64Encoder !== undefined &&\n        bodyLengthChecker !== undefined &&\n        checksumAlgorithmFn !== undefined &&\n        checksumLocationName !== undefined &&\n        streamHasher !== undefined;\n    const digest = checksumRequired ? streamHasher(checksumAlgorithmFn, readableStream) : undefined;\n    const reader = readableStream.getReader();\n    return new ReadableStream({\n        async pull(controller) {\n            const { value, done } = await reader.read();\n            if (done) {\n                controller.enqueue(`0\\r\\n`);\n                if (checksumRequired) {\n                    const checksum = base64Encoder(await digest);\n                    controller.enqueue(`${checksumLocationName}:${checksum}\\r\\n`);\n                    controller.enqueue(`\\r\\n`);\n                }\n                controller.close();\n            }\n            else {\n                controller.enqueue(`${(bodyLengthChecker(value) || 0).toString(16)}\\r\\n${value}\\r\\n`);\n            }\n        },\n    });\n};\n","export async function headStream(stream, bytes) {\n    let byteLengthCounter = 0;\n    const chunks = [];\n    const reader = stream.getReader();\n    let isDone = false;\n    while (!isDone) {\n        const { done, value } = await reader.read();\n        if (value) {\n            chunks.push(value);\n            byteLengthCounter += value?.byteLength ?? 0;\n        }\n        if (byteLengthCounter >= bytes) {\n            break;\n        }\n        isDone = done;\n    }\n    reader.releaseLock();\n    const collected = new Uint8Array(Math.min(bytes, byteLengthCounter));\n    let offset = 0;\n    for (const chunk of chunks) {\n        if (chunk.byteLength > collected.byteLength - offset) {\n            collected.set(chunk.subarray(0, collected.byteLength - offset), offset);\n            break;\n        }\n        else {\n            collected.set(chunk, offset);\n        }\n        offset += chunk.length;\n    }\n    return collected;\n}\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nexport function buildQueryString(query) {\n    const parts = [];\n    for (let key of Object.keys(query).sort()) {\n        const value = query[key];\n        key = escapeUri(key);\n        if (Array.isArray(value)) {\n            for (let i = 0, iLen = value.length; i < iLen; i++) {\n                parts.push(`${key}=${escapeUri(value[i])}`);\n            }\n        }\n        else {\n            let qsEntry = key;\n            if (value || typeof value === \"string\") {\n                qsEntry += `=${escapeUri(value)}`;\n            }\n            parts.push(qsEntry);\n        }\n    }\n    return parts.join(\"&\");\n}\n","export function createRequest(url, requestOptions) {\n    return new Request(url, requestOptions);\n}\n","export function requestTimeout(timeoutInMs = 0) {\n    return new Promise((resolve, reject) => {\n        if (timeoutInMs) {\n            setTimeout(() => {\n                const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n                timeoutError.name = \"TimeoutError\";\n                reject(timeoutError);\n            }, timeoutInMs);\n        }\n    });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { createRequest } from \"./create-request\";\nimport { requestTimeout as requestTimeoutFn } from \"./request-timeout\";\nexport const keepAliveSupport = {\n    supported: undefined,\n};\nexport class FetchHttpHandler {\n    config;\n    configProvider;\n    static create(instanceOrOptions) {\n        if (typeof instanceOrOptions?.handle === \"function\") {\n            return instanceOrOptions;\n        }\n        return new FetchHttpHandler(instanceOrOptions);\n    }\n    constructor(options) {\n        if (typeof options === \"function\") {\n            this.configProvider = options().then((opts) => opts || {});\n        }\n        else {\n            this.config = options ?? {};\n            this.configProvider = Promise.resolve(this.config);\n        }\n        if (keepAliveSupport.supported === undefined) {\n            keepAliveSupport.supported = Boolean(typeof Request !== \"undefined\" && \"keepalive\" in createRequest(\"https://[::1]\"));\n        }\n    }\n    destroy() {\n    }\n    async handle(request, { abortSignal, requestTimeout } = {}) {\n        if (!this.config) {\n            this.config = await this.configProvider;\n        }\n        const requestTimeoutInMs = requestTimeout ?? this.config.requestTimeout;\n        const keepAlive = this.config.keepAlive === true;\n        const credentials = this.config.credentials;\n        if (abortSignal?.aborted) {\n            const abortError = new Error(\"Request aborted\");\n            abortError.name = \"AbortError\";\n            return Promise.reject(abortError);\n        }\n        let path = request.path;\n        const queryString = buildQueryString(request.query || {});\n        if (queryString) {\n            path += `?${queryString}`;\n        }\n        if (request.fragment) {\n            path += `#${request.fragment}`;\n        }\n        let auth = \"\";\n        if (request.username != null || request.password != null) {\n            const username = request.username ?? \"\";\n            const password = request.password ?? \"\";\n            auth = `${username}:${password}@`;\n        }\n        const { port, method } = request;\n        const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n        const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n        const requestOptions = {\n            body,\n            headers: new Headers(request.headers),\n            method: method,\n            credentials,\n        };\n        if (this.config?.cache) {\n            requestOptions.cache = this.config.cache;\n        }\n        if (body) {\n            requestOptions.duplex = \"half\";\n        }\n        if (typeof AbortController !== \"undefined\") {\n            requestOptions.signal = abortSignal;\n        }\n        if (keepAliveSupport.supported) {\n            requestOptions.keepalive = keepAlive;\n        }\n        if (typeof this.config.requestInit === \"function\") {\n            Object.assign(requestOptions, this.config.requestInit(request));\n        }\n        let removeSignalEventListener = () => { };\n        const fetchRequest = createRequest(url, requestOptions);\n        const raceOfPromises = [\n            fetch(fetchRequest).then((response) => {\n                const fetchHeaders = response.headers;\n                const transformedHeaders = {};\n                for (const pair of fetchHeaders.entries()) {\n                    transformedHeaders[pair[0]] = pair[1];\n                }\n                const hasReadableStream = response.body != undefined;\n                if (!hasReadableStream) {\n                    return response.blob().then((body) => ({\n                        response: new HttpResponse({\n                            headers: transformedHeaders,\n                            reason: response.statusText,\n                            statusCode: response.status,\n                            body,\n                        }),\n                    }));\n                }\n                return {\n                    response: new HttpResponse({\n                        headers: transformedHeaders,\n                        reason: response.statusText,\n                        statusCode: response.status,\n                        body: response.body,\n                    }),\n                };\n            }),\n            requestTimeoutFn(requestTimeoutInMs),\n        ];\n        if (abortSignal) {\n            raceOfPromises.push(new Promise((resolve, reject) => {\n                const onAbort = () => {\n                    const abortError = new Error(\"Request aborted\");\n                    abortError.name = \"AbortError\";\n                    reject(abortError);\n                };\n                if (typeof abortSignal.addEventListener === \"function\") {\n                    const signal = abortSignal;\n                    signal.addEventListener(\"abort\", onAbort, { once: true });\n                    removeSignalEventListener = () => signal.removeEventListener(\"abort\", onAbort);\n                }\n                else {\n                    abortSignal.onabort = onAbort;\n                }\n            }));\n        }\n        return Promise.race(raceOfPromises).finally(removeSignalEventListener);\n    }\n    updateHttpClientConfig(key, value) {\n        this.config = undefined;\n        this.configProvider = this.configProvider.then((config) => {\n            config[key] = value;\n            return config;\n        });\n    }\n    httpHandlerConfigs() {\n        return this.config ?? {};\n    }\n}\n","import { fromBase64 } from \"@smithy/util-base64\";\nexport const streamCollector = async (stream) => {\n    if ((typeof Blob === \"function\" && stream instanceof Blob) || stream.constructor?.name === \"Blob\") {\n        if (Blob.prototype.arrayBuffer !== undefined) {\n            return new Uint8Array(await stream.arrayBuffer());\n        }\n        return collectBlob(stream);\n    }\n    return collectStream(stream);\n};\nasync function collectBlob(blob) {\n    const base64 = await readToBase64(blob);\n    const arrayBuffer = fromBase64(base64);\n    return new Uint8Array(arrayBuffer);\n}\nasync function collectStream(stream) {\n    const chunks = [];\n    const reader = stream.getReader();\n    let isDone = false;\n    let length = 0;\n    while (!isDone) {\n        const { done, value } = await reader.read();\n        if (value) {\n            chunks.push(value);\n            length += value.length;\n        }\n        isDone = done;\n    }\n    const collected = new Uint8Array(length);\n    let offset = 0;\n    for (const chunk of chunks) {\n        collected.set(chunk, offset);\n        offset += chunk.length;\n    }\n    return collected;\n}\nfunction readToBase64(blob) {\n    return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n            if (reader.readyState !== 2) {\n                return reject(new Error(\"Reader aborted too early\"));\n            }\n            const result = (reader.result ?? \"\");\n            const commaIndex = result.indexOf(\",\");\n            const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;\n            resolve(result.substring(dataOffset));\n        };\n        reader.onabort = () => reject(new Error(\"Read aborted\"));\n        reader.onerror = () => reject(reader.error);\n        reader.readAsDataURL(blob);\n    });\n}\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n    let encodedByte = i.toString(16).toLowerCase();\n    if (encodedByte.length === 1) {\n        encodedByte = `0${encodedByte}`;\n    }\n    SHORT_TO_HEX[i] = encodedByte;\n    HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n    if (encoded.length % 2 !== 0) {\n        throw new Error(\"Hex encoded strings must have an even number length\");\n    }\n    const out = new Uint8Array(encoded.length / 2);\n    for (let i = 0; i < encoded.length; i += 2) {\n        const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n        if (encodedByte in HEX_TO_SHORT) {\n            out[i / 2] = HEX_TO_SHORT[encodedByte];\n        }\n        else {\n            throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n        }\n    }\n    return out;\n}\nexport function toHex(bytes) {\n    let out = \"\";\n    for (let i = 0; i < bytes.byteLength; i++) {\n        out += SHORT_TO_HEX[bytes[i]];\n    }\n    return out;\n}\n","import { streamCollector } from \"@smithy/fetch-http-handler\";\nimport { toBase64 } from \"@smithy/util-base64\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUtf8 } from \"@smithy/util-utf8\";\nimport { isReadableStream } from \"./stream-type-check\";\nconst ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED = \"The stream has already been transformed.\";\nexport const sdkStreamMixin = (stream) => {\n    if (!isBlobInstance(stream) && !isReadableStream(stream)) {\n        const name = stream?.__proto__?.constructor?.name || stream;\n        throw new Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${name}`);\n    }\n    let transformed = false;\n    const transformToByteArray = async () => {\n        if (transformed) {\n            throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED);\n        }\n        transformed = true;\n        return await streamCollector(stream);\n    };\n    const blobToWebStream = (blob) => {\n        if (typeof blob.stream !== \"function\") {\n            throw new Error(\"Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.\\n\" +\n                \"If you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body\");\n        }\n        return blob.stream();\n    };\n    return Object.assign(stream, {\n        transformToByteArray: transformToByteArray,\n        transformToString: async (encoding) => {\n            const buf = await transformToByteArray();\n            if (encoding === \"base64\") {\n                return toBase64(buf);\n            }\n            else if (encoding === \"hex\") {\n                return toHex(buf);\n            }\n            else if (encoding === undefined || encoding === \"utf8\" || encoding === \"utf-8\") {\n                return toUtf8(buf);\n            }\n            else if (typeof TextDecoder === \"function\") {\n                return new TextDecoder(encoding).decode(buf);\n            }\n            else {\n                throw new Error(\"TextDecoder is not available, please make sure polyfill is provided.\");\n            }\n        },\n        transformToWebStream: () => {\n            if (transformed) {\n                throw new Error(ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED);\n            }\n            transformed = true;\n            if (isBlobInstance(stream)) {\n                return blobToWebStream(stream);\n            }\n            else if (isReadableStream(stream)) {\n                return stream;\n            }\n            else {\n                throw new Error(`Cannot transform payload to web stream, got ${stream}`);\n            }\n        },\n    });\n};\nconst isBlobInstance = (stream) => typeof Blob === \"function\" && stream instanceof Blob;\n","export async function splitStream(stream) {\n    if (typeof stream.stream === \"function\") {\n        stream = stream.stream();\n    }\n    const readableStream = stream;\n    return readableStream.tee();\n}\n","import { Uint8ArrayBlobAdapter } from \"@smithy/util-stream\";\nexport const collectBody = async (streamBody = new Uint8Array(), context) => {\n    if (streamBody instanceof Uint8Array) {\n        return Uint8ArrayBlobAdapter.mutate(streamBody);\n    }\n    if (!streamBody) {\n        return Uint8ArrayBlobAdapter.mutate(new Uint8Array());\n    }\n    const fromContext = context.streamCollector(streamBody);\n    return Uint8ArrayBlobAdapter.mutate(await fromContext);\n};\n","export function extendedEncodeURIComponent(str) {\n    return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n        return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n    });\n}\n","export const deref = (schemaRef) => {\n    if (typeof schemaRef === \"function\") {\n        return schemaRef();\n    }\n    return schemaRef;\n};\n","export const operation = (namespace, name, traits, input, output) => ({\n    name,\n    namespace,\n    traits,\n    input,\n    output,\n});\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { operation } from \"../schemas/operation\";\nexport const schemaDeserializationMiddleware = (config) => (next, context) => async (args) => {\n    const { response } = await next(args);\n    const { operationSchema } = getSmithyContext(context);\n    const [, ns, n, t, i, o] = operationSchema ?? [];\n    try {\n        const parsed = await config.protocol.deserializeResponse(operation(ns, n, t, i, o), {\n            ...config,\n            ...context,\n        }, response);\n        return {\n            response,\n            output: parsed,\n        };\n    }\n    catch (error) {\n        Object.defineProperty(error, \"$response\", {\n            value: response,\n            enumerable: false,\n            writable: false,\n            configurable: false,\n        });\n        if (!(\"$metadata\" in error)) {\n            const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;\n            try {\n                error.message += \"\\n  \" + hint;\n            }\n            catch (e) {\n                if (!context.logger || context.logger?.constructor?.name === \"NoOpLogger\") {\n                    console.warn(hint);\n                }\n                else {\n                    context.logger?.warn?.(hint);\n                }\n            }\n            if (typeof error.$responseBodyText !== \"undefined\") {\n                if (error.$response) {\n                    error.$response.body = error.$responseBodyText;\n                }\n            }\n            try {\n                if (HttpResponse.isInstance(response)) {\n                    const { headers = {} } = response;\n                    const headerEntries = Object.entries(headers);\n                    error.$metadata = {\n                        httpStatusCode: response.statusCode,\n                        requestId: findHeader(/^x-[\\w-]+-request-?id$/, headerEntries),\n                        extendedRequestId: findHeader(/^x-[\\w-]+-id-2$/, headerEntries),\n                        cfId: findHeader(/^x-[\\w-]+-cf-id$/, headerEntries),\n                    };\n                }\n            }\n            catch (e) {\n            }\n        }\n        throw error;\n    }\n};\nconst findHeader = (pattern, headers) => {\n    return (headers.find(([k]) => {\n        return k.match(pattern);\n    }) || [void 0, void 1])[1];\n};\n","import { getSmithyContext } from \"@smithy/util-middleware\";\nimport { operation } from \"../schemas/operation\";\nexport const schemaSerializationMiddleware = (config) => (next, context) => async (args) => {\n    const { operationSchema } = getSmithyContext(context);\n    const [, ns, n, t, i, o] = operationSchema ?? [];\n    const endpoint = context.endpointV2?.url && config.urlParser\n        ? async () => config.urlParser(context.endpointV2.url)\n        : config.endpoint;\n    const request = await config.protocol.serializeRequest(operation(ns, n, t, i, o), args.input, {\n        ...config,\n        ...context,\n        endpoint,\n    });\n    return next({\n        ...args,\n        request,\n    });\n};\n","import { schemaDeserializationMiddleware } from \"./schemaDeserializationMiddleware\";\nimport { schemaSerializationMiddleware } from \"./schemaSerializationMiddleware\";\nexport const deserializerMiddlewareOption = {\n    name: \"deserializerMiddleware\",\n    step: \"deserialize\",\n    tags: [\"DESERIALIZER\"],\n    override: true,\n};\nexport const serializerMiddlewareOption = {\n    name: \"serializerMiddleware\",\n    step: \"serialize\",\n    tags: [\"SERIALIZER\"],\n    override: true,\n};\nexport function getSchemaSerdePlugin(config) {\n    return {\n        applyToStack: (commandStack) => {\n            commandStack.add(schemaSerializationMiddleware(config), serializerMiddlewareOption);\n            commandStack.add(schemaDeserializationMiddleware(config), deserializerMiddlewareOption);\n            config.protocol.setSerdeContext(config);\n        },\n    };\n}\n","export function translateTraits(indicator) {\n    if (typeof indicator === \"object\") {\n        return indicator;\n    }\n    indicator = indicator | 0;\n    const traits = {};\n    let i = 0;\n    for (const trait of [\n        \"httpLabel\",\n        \"idempotent\",\n        \"idempotencyToken\",\n        \"sensitive\",\n        \"httpPayload\",\n        \"httpResponseCode\",\n        \"httpQueryParams\",\n    ]) {\n        if (((indicator >> i++) & 1) === 1) {\n            traits[trait] = 1;\n        }\n    }\n    return traits;\n}\n","import { deref } from \"../deref\";\nimport { translateTraits } from \"./translateTraits\";\nconst anno = {\n    it: Symbol.for(\"@smithy/nor-struct-it\"),\n};\nexport class NormalizedSchema {\n    ref;\n    memberName;\n    static symbol = Symbol.for(\"@smithy/nor\");\n    symbol = NormalizedSchema.symbol;\n    name;\n    schema;\n    _isMemberSchema;\n    traits;\n    memberTraits;\n    normalizedTraits;\n    constructor(ref, memberName) {\n        this.ref = ref;\n        this.memberName = memberName;\n        const traitStack = [];\n        let _ref = ref;\n        let schema = ref;\n        this._isMemberSchema = false;\n        while (isMemberSchema(_ref)) {\n            traitStack.push(_ref[1]);\n            _ref = _ref[0];\n            schema = deref(_ref);\n            this._isMemberSchema = true;\n        }\n        if (traitStack.length > 0) {\n            this.memberTraits = {};\n            for (let i = traitStack.length - 1; i >= 0; --i) {\n                const traitSet = traitStack[i];\n                Object.assign(this.memberTraits, translateTraits(traitSet));\n            }\n        }\n        else {\n            this.memberTraits = 0;\n        }\n        if (schema instanceof NormalizedSchema) {\n            const computedMemberTraits = this.memberTraits;\n            Object.assign(this, schema);\n            this.memberTraits = Object.assign({}, computedMemberTraits, schema.getMemberTraits(), this.getMemberTraits());\n            this.normalizedTraits = void 0;\n            this.memberName = memberName ?? schema.memberName;\n            return;\n        }\n        this.schema = deref(schema);\n        if (isStaticSchema(this.schema)) {\n            this.name = `${this.schema[1]}#${this.schema[2]}`;\n            this.traits = this.schema[3];\n        }\n        else {\n            this.name = this.memberName ?? String(schema);\n            this.traits = 0;\n        }\n        if (this._isMemberSchema && !memberName) {\n            throw new Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(true)} missing member name.`);\n        }\n    }\n    static [Symbol.hasInstance](lhs) {\n        const isPrototype = this.prototype.isPrototypeOf(lhs);\n        if (!isPrototype && typeof lhs === \"object\" && lhs !== null) {\n            const ns = lhs;\n            return ns.symbol === this.symbol;\n        }\n        return isPrototype;\n    }\n    static of(ref) {\n        const sc = deref(ref);\n        if (sc instanceof NormalizedSchema) {\n            return sc;\n        }\n        if (isMemberSchema(sc)) {\n            const [ns, traits] = sc;\n            if (ns instanceof NormalizedSchema) {\n                Object.assign(ns.getMergedTraits(), translateTraits(traits));\n                return ns;\n            }\n            throw new Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(ref, null, 2)}.`);\n        }\n        return new NormalizedSchema(sc);\n    }\n    getSchema() {\n        const sc = this.schema;\n        if (Array.isArray(sc) && sc[0] === 0) {\n            return sc[4];\n        }\n        return sc;\n    }\n    getName(withNamespace = false) {\n        const { name } = this;\n        const short = !withNamespace && name && name.includes(\"#\");\n        return short ? name.split(\"#\")[1] : name || undefined;\n    }\n    getMemberName() {\n        return this.memberName;\n    }\n    isMemberSchema() {\n        return this._isMemberSchema;\n    }\n    isListSchema() {\n        const sc = this.getSchema();\n        return typeof sc === \"number\"\n            ? sc >= 64 && sc < 128\n            : sc[0] === 1;\n    }\n    isMapSchema() {\n        const sc = this.getSchema();\n        return typeof sc === \"number\"\n            ? sc >= 128 && sc <= 0b1111_1111\n            : sc[0] === 2;\n    }\n    isStructSchema() {\n        const sc = this.getSchema();\n        if (typeof sc !== \"object\") {\n            return false;\n        }\n        const id = sc[0];\n        return (id === 3 ||\n            id === -3 ||\n            id === 4);\n    }\n    isUnionSchema() {\n        const sc = this.getSchema();\n        if (typeof sc !== \"object\") {\n            return false;\n        }\n        return sc[0] === 4;\n    }\n    isBlobSchema() {\n        const sc = this.getSchema();\n        return sc === 21 || sc === 42;\n    }\n    isTimestampSchema() {\n        const sc = this.getSchema();\n        return (typeof sc === \"number\" &&\n            sc >= 4 &&\n            sc <= 7);\n    }\n    isUnitSchema() {\n        return this.getSchema() === \"unit\";\n    }\n    isDocumentSchema() {\n        return this.getSchema() === 15;\n    }\n    isStringSchema() {\n        return this.getSchema() === 0;\n    }\n    isBooleanSchema() {\n        return this.getSchema() === 2;\n    }\n    isNumericSchema() {\n        return this.getSchema() === 1;\n    }\n    isBigIntegerSchema() {\n        return this.getSchema() === 17;\n    }\n    isBigDecimalSchema() {\n        return this.getSchema() === 19;\n    }\n    isStreaming() {\n        const { streaming } = this.getMergedTraits();\n        return !!streaming || this.getSchema() === 42;\n    }\n    isIdempotencyToken() {\n        return !!this.getMergedTraits().idempotencyToken;\n    }\n    getMergedTraits() {\n        return (this.normalizedTraits ??\n            (this.normalizedTraits = {\n                ...this.getOwnTraits(),\n                ...this.getMemberTraits(),\n            }));\n    }\n    getMemberTraits() {\n        return translateTraits(this.memberTraits);\n    }\n    getOwnTraits() {\n        return translateTraits(this.traits);\n    }\n    getKeySchema() {\n        const [isDoc, isMap] = [this.isDocumentSchema(), this.isMapSchema()];\n        if (!isDoc && !isMap) {\n            throw new Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(true)}`);\n        }\n        const schema = this.getSchema();\n        const memberSchema = isDoc\n            ? 15\n            : schema[4] ?? 0;\n        return member([memberSchema, 0], \"key\");\n    }\n    getValueSchema() {\n        const sc = this.getSchema();\n        const [isDoc, isMap, isList] = [this.isDocumentSchema(), this.isMapSchema(), this.isListSchema()];\n        const memberSchema = typeof sc === \"number\"\n            ? 0b0011_1111 & sc\n            : sc && typeof sc === \"object\" && (isMap || isList)\n                ? sc[3 + sc[0]]\n                : isDoc\n                    ? 15\n                    : void 0;\n        if (memberSchema != null) {\n            return member([memberSchema, 0], isMap ? \"value\" : \"member\");\n        }\n        throw new Error(`@smithy/core/schema - ${this.getName(true)} has no value member.`);\n    }\n    getMemberSchema(memberName) {\n        const struct = this.getSchema();\n        if (this.isStructSchema() && struct[4].includes(memberName)) {\n            const i = struct[4].indexOf(memberName);\n            const memberSchema = struct[5][i];\n            return member(isMemberSchema(memberSchema) ? memberSchema : [memberSchema, 0], memberName);\n        }\n        if (this.isDocumentSchema()) {\n            return member([15, 0], memberName);\n        }\n        throw new Error(`@smithy/core/schema - ${this.getName(true)} has no no member=${memberName}.`);\n    }\n    getMemberSchemas() {\n        const buffer = {};\n        try {\n            for (const [k, v] of this.structIterator()) {\n                buffer[k] = v;\n            }\n        }\n        catch (ignored) { }\n        return buffer;\n    }\n    getEventStreamMember() {\n        if (this.isStructSchema()) {\n            for (const [memberName, memberSchema] of this.structIterator()) {\n                if (memberSchema.isStreaming() && memberSchema.isStructSchema()) {\n                    return memberName;\n                }\n            }\n        }\n        return \"\";\n    }\n    *structIterator() {\n        if (this.isUnitSchema()) {\n            return;\n        }\n        if (!this.isStructSchema()) {\n            throw new Error(\"@smithy/core/schema - cannot iterate non-struct schema.\");\n        }\n        const struct = this.getSchema();\n        const z = struct[4].length;\n        let it = struct[anno.it];\n        if (it && z === it.length) {\n            yield* it;\n            return;\n        }\n        it = Array(z);\n        for (let i = 0; i < z; ++i) {\n            const k = struct[4][i];\n            const v = member([struct[5][i], 0], k);\n            yield (it[i] = [k, v]);\n        }\n        struct[anno.it] = it;\n    }\n}\nfunction member(memberSchema, memberName) {\n    if (memberSchema instanceof NormalizedSchema) {\n        return Object.assign(memberSchema, {\n            memberName,\n            _isMemberSchema: true,\n        });\n    }\n    const internalCtorAccess = NormalizedSchema;\n    return new internalCtorAccess(memberSchema, memberName);\n}\nconst isMemberSchema = (sc) => Array.isArray(sc) && sc.length === 2;\nexport const isStaticSchema = (sc) => Array.isArray(sc) && sc.length >= 5;\n","export class TypeRegistry {\n    namespace;\n    schemas;\n    exceptions;\n    static registries = new Map();\n    constructor(namespace, schemas = new Map(), exceptions = new Map()) {\n        this.namespace = namespace;\n        this.schemas = schemas;\n        this.exceptions = exceptions;\n    }\n    static for(namespace) {\n        if (!TypeRegistry.registries.has(namespace)) {\n            TypeRegistry.registries.set(namespace, new TypeRegistry(namespace));\n        }\n        return TypeRegistry.registries.get(namespace);\n    }\n    register(shapeId, schema) {\n        const qualifiedName = this.normalizeShapeId(shapeId);\n        const registry = TypeRegistry.for(qualifiedName.split(\"#\")[0]);\n        registry.schemas.set(qualifiedName, schema);\n    }\n    getSchema(shapeId) {\n        const id = this.normalizeShapeId(shapeId);\n        if (!this.schemas.has(id)) {\n            throw new Error(`@smithy/core/schema - schema not found for ${id}`);\n        }\n        return this.schemas.get(id);\n    }\n    registerError(es, ctor) {\n        const $error = es;\n        const registry = TypeRegistry.for($error[1]);\n        registry.schemas.set($error[1] + \"#\" + $error[2], $error);\n        registry.exceptions.set($error, ctor);\n    }\n    getErrorCtor(es) {\n        const $error = es;\n        const registry = TypeRegistry.for($error[1]);\n        return registry.exceptions.get($error);\n    }\n    getBaseException() {\n        for (const exceptionKey of this.exceptions.keys()) {\n            if (Array.isArray(exceptionKey)) {\n                const [, ns, name] = exceptionKey;\n                const id = ns + \"#\" + name;\n                if (id.startsWith(\"smithy.ts.sdk.synthetic.\") && id.endsWith(\"ServiceException\")) {\n                    return exceptionKey;\n                }\n            }\n        }\n        return undefined;\n    }\n    find(predicate) {\n        return [...this.schemas.values()].find(predicate);\n    }\n    clear() {\n        this.schemas.clear();\n        this.exceptions.clear();\n    }\n    normalizeShapeId(shapeId) {\n        if (shapeId.includes(\"#\")) {\n            return shapeId;\n        }\n        return this.namespace + \"#\" + shapeId;\n    }\n}\n","import { strictParseByte, strictParseDouble, strictParseFloat32, strictParseShort } from \"./parse-utils\";\nconst DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nexport function dateToUtcString(date) {\n    const year = date.getUTCFullYear();\n    const month = date.getUTCMonth();\n    const dayOfWeek = date.getUTCDay();\n    const dayOfMonthInt = date.getUTCDate();\n    const hoursInt = date.getUTCHours();\n    const minutesInt = date.getUTCMinutes();\n    const secondsInt = date.getUTCSeconds();\n    const dayOfMonthString = dayOfMonthInt < 10 ? `0${dayOfMonthInt}` : `${dayOfMonthInt}`;\n    const hoursString = hoursInt < 10 ? `0${hoursInt}` : `${hoursInt}`;\n    const minutesString = minutesInt < 10 ? `0${minutesInt}` : `${minutesInt}`;\n    const secondsString = secondsInt < 10 ? `0${secondsInt}` : `${secondsInt}`;\n    return `${DAYS[dayOfWeek]}, ${dayOfMonthString} ${MONTHS[month]} ${year} ${hoursString}:${minutesString}:${secondsString} GMT`;\n}\nconst RFC3339 = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?[zZ]$/);\nexport const parseRfc3339DateTime = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n    }\n    const match = RFC3339.exec(value);\n    if (!match) {\n        throw new TypeError(\"Invalid RFC-3339 date-time value\");\n    }\n    const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n    const year = strictParseShort(stripLeadingZeroes(yearStr));\n    const month = parseDateValue(monthStr, \"month\", 1, 12);\n    const day = parseDateValue(dayStr, \"day\", 1, 31);\n    return buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n};\nconst RFC3339_WITH_OFFSET = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(([-+]\\d{2}\\:\\d{2})|[zZ])$/);\nexport const parseRfc3339DateTimeWithOffset = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n    }\n    const match = RFC3339_WITH_OFFSET.exec(value);\n    if (!match) {\n        throw new TypeError(\"Invalid RFC-3339 date-time value\");\n    }\n    const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, offsetStr] = match;\n    const year = strictParseShort(stripLeadingZeroes(yearStr));\n    const month = parseDateValue(monthStr, \"month\", 1, 12);\n    const day = parseDateValue(dayStr, \"day\", 1, 31);\n    const date = buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n    if (offsetStr.toUpperCase() != \"Z\") {\n        date.setTime(date.getTime() - parseOffsetToMilliseconds(offsetStr));\n    }\n    return date;\n};\nconst IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? (\\d{4})$/);\nexport const parseRfc7231DateTime = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-7231 date-times must be expressed as strings\");\n    }\n    let match = IMF_FIXDATE.exec(value);\n    if (match) {\n        const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n        return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n    }\n    match = RFC_850_DATE.exec(value);\n    if (match) {\n        const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n        return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), {\n            hours,\n            minutes,\n            seconds,\n            fractionalMilliseconds,\n        }));\n    }\n    match = ASC_TIME.exec(value);\n    if (match) {\n        const [_, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, yearStr] = match;\n        return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr.trimLeft(), \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n    }\n    throw new TypeError(\"Invalid RFC-7231 date-time value\");\n};\nexport const parseEpochTimestamp = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    let valueAsDouble;\n    if (typeof value === \"number\") {\n        valueAsDouble = value;\n    }\n    else if (typeof value === \"string\") {\n        valueAsDouble = strictParseDouble(value);\n    }\n    else if (typeof value === \"object\" && value.tag === 1) {\n        valueAsDouble = value.value;\n    }\n    else {\n        throw new TypeError(\"Epoch timestamps must be expressed as floating point numbers or their string representation\");\n    }\n    if (Number.isNaN(valueAsDouble) || valueAsDouble === Infinity || valueAsDouble === -Infinity) {\n        throw new TypeError(\"Epoch timestamps must be valid, non-Infinite, non-NaN numerics\");\n    }\n    return new Date(Math.round(valueAsDouble * 1000));\n};\nconst buildDate = (year, month, day, time) => {\n    const adjustedMonth = month - 1;\n    validateDayOfMonth(year, adjustedMonth, day);\n    return new Date(Date.UTC(year, adjustedMonth, day, parseDateValue(time.hours, \"hour\", 0, 23), parseDateValue(time.minutes, \"minute\", 0, 59), parseDateValue(time.seconds, \"seconds\", 0, 60), parseMilliseconds(time.fractionalMilliseconds)));\n};\nconst parseTwoDigitYear = (value) => {\n    const thisYear = new Date().getUTCFullYear();\n    const valueInThisCentury = Math.floor(thisYear / 100) * 100 + strictParseShort(stripLeadingZeroes(value));\n    if (valueInThisCentury < thisYear) {\n        return valueInThisCentury + 100;\n    }\n    return valueInThisCentury;\n};\nconst FIFTY_YEARS_IN_MILLIS = 50 * 365 * 24 * 60 * 60 * 1000;\nconst adjustRfc850Year = (input) => {\n    if (input.getTime() - new Date().getTime() > FIFTY_YEARS_IN_MILLIS) {\n        return new Date(Date.UTC(input.getUTCFullYear() - 100, input.getUTCMonth(), input.getUTCDate(), input.getUTCHours(), input.getUTCMinutes(), input.getUTCSeconds(), input.getUTCMilliseconds()));\n    }\n    return input;\n};\nconst parseMonthByShortName = (value) => {\n    const monthIdx = MONTHS.indexOf(value);\n    if (monthIdx < 0) {\n        throw new TypeError(`Invalid month: ${value}`);\n    }\n    return monthIdx + 1;\n};\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst validateDayOfMonth = (year, month, day) => {\n    let maxDays = DAYS_IN_MONTH[month];\n    if (month === 1 && isLeapYear(year)) {\n        maxDays = 29;\n    }\n    if (day > maxDays) {\n        throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year}: ${day}`);\n    }\n};\nconst isLeapYear = (year) => {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n};\nconst parseDateValue = (value, type, lower, upper) => {\n    const dateVal = strictParseByte(stripLeadingZeroes(value));\n    if (dateVal < lower || dateVal > upper) {\n        throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);\n    }\n    return dateVal;\n};\nconst parseMilliseconds = (value) => {\n    if (value === null || value === undefined) {\n        return 0;\n    }\n    return strictParseFloat32(\"0.\" + value) * 1000;\n};\nconst parseOffsetToMilliseconds = (value) => {\n    const directionStr = value[0];\n    let direction = 1;\n    if (directionStr == \"+\") {\n        direction = 1;\n    }\n    else if (directionStr == \"-\") {\n        direction = -1;\n    }\n    else {\n        throw new TypeError(`Offset direction, ${directionStr}, must be \"+\" or \"-\"`);\n    }\n    const hour = Number(value.substring(1, 3));\n    const minute = Number(value.substring(4, 6));\n    return direction * (hour * 60 + minute) * 60 * 1000;\n};\nconst stripLeadingZeroes = (value) => {\n    let idx = 0;\n    while (idx < value.length - 1 && value.charAt(idx) === \"0\") {\n        idx++;\n    }\n    if (idx === 0) {\n        return value;\n    }\n    return value.slice(idx);\n};\n","export const randomUUID = typeof crypto !== \"undefined\" && crypto.randomUUID && crypto.randomUUID.bind(crypto);\n","import { randomUUID } from \"./randomUUID\";\nconst decimalToHex = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nexport const v4 = () => {\n    if (randomUUID) {\n        return randomUUID();\n    }\n    const rnds = new Uint8Array(16);\n    crypto.getRandomValues(rnds);\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    return (decimalToHex[rnds[0]] +\n        decimalToHex[rnds[1]] +\n        decimalToHex[rnds[2]] +\n        decimalToHex[rnds[3]] +\n        \"-\" +\n        decimalToHex[rnds[4]] +\n        decimalToHex[rnds[5]] +\n        \"-\" +\n        decimalToHex[rnds[6]] +\n        decimalToHex[rnds[7]] +\n        \"-\" +\n        decimalToHex[rnds[8]] +\n        decimalToHex[rnds[9]] +\n        \"-\" +\n        decimalToHex[rnds[10]] +\n        decimalToHex[rnds[11]] +\n        decimalToHex[rnds[12]] +\n        decimalToHex[rnds[13]] +\n        decimalToHex[rnds[14]] +\n        decimalToHex[rnds[15]]);\n};\n","export const LazyJsonString = function LazyJsonString(val) {\n    const str = Object.assign(new String(val), {\n        deserializeJSON() {\n            return JSON.parse(String(val));\n        },\n        toString() {\n            return String(val);\n        },\n        toJSON() {\n            return String(val);\n        },\n    });\n    return str;\n};\nLazyJsonString.from = (object) => {\n    if (object && typeof object === \"object\" && (object instanceof LazyJsonString || \"deserializeJSON\" in object)) {\n        return object;\n    }\n    else if (typeof object === \"string\" || Object.getPrototypeOf(object) === String.prototype) {\n        return LazyJsonString(String(object));\n    }\n    return LazyJsonString(JSON.stringify(object));\n};\nLazyJsonString.fromObject = LazyJsonString.from;\n","export function quoteHeader(part) {\n    if (part.includes(\",\") || part.includes('\"')) {\n        part = `\"${part.replace(/\"/g, '\\\\\"')}\"`;\n    }\n    return part;\n}\n","const ddd = `(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?`;\nconst mmm = `(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)`;\nconst time = `(\\\\d?\\\\d):(\\\\d{2}):(\\\\d{2})(?:\\\\.(\\\\d+))?`;\nconst date = `(\\\\d?\\\\d)`;\nconst year = `(\\\\d{4})`;\nconst RFC3339_WITH_OFFSET = new RegExp(/^(\\d{4})-(\\d\\d)-(\\d\\d)[tT](\\d\\d):(\\d\\d):(\\d\\d)(\\.(\\d+))?(([-+]\\d\\d:\\d\\d)|[zZ])$/);\nconst IMF_FIXDATE = new RegExp(`^${ddd}, ${date} ${mmm} ${year} ${time} GMT$`);\nconst RFC_850_DATE = new RegExp(`^${ddd}, ${date}-${mmm}-(\\\\d\\\\d) ${time} GMT$`);\nconst ASC_TIME = new RegExp(`^${ddd} ${mmm} ( [1-9]|\\\\d\\\\d) ${time} ${year}$`);\nconst months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nexport const _parseEpochTimestamp = (value) => {\n    if (value == null) {\n        return void 0;\n    }\n    let num = NaN;\n    if (typeof value === \"number\") {\n        num = value;\n    }\n    else if (typeof value === \"string\") {\n        if (!/^-?\\d*\\.?\\d+$/.test(value)) {\n            throw new TypeError(`parseEpochTimestamp - numeric string invalid.`);\n        }\n        num = Number.parseFloat(value);\n    }\n    else if (typeof value === \"object\" && value.tag === 1) {\n        num = value.value;\n    }\n    if (isNaN(num) || Math.abs(num) === Infinity) {\n        throw new TypeError(\"Epoch timestamps must be valid finite numbers.\");\n    }\n    return new Date(Math.round(num * 1000));\n};\nexport const _parseRfc3339DateTimeWithOffset = (value) => {\n    if (value == null) {\n        return void 0;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC3339 timestamps must be strings\");\n    }\n    const matches = RFC3339_WITH_OFFSET.exec(value);\n    if (!matches) {\n        throw new TypeError(`Invalid RFC3339 timestamp format ${value}`);\n    }\n    const [, yearStr, monthStr, dayStr, hours, minutes, seconds, , ms, offsetStr] = matches;\n    range(monthStr, 1, 12);\n    range(dayStr, 1, 31);\n    range(hours, 0, 23);\n    range(minutes, 0, 59);\n    range(seconds, 0, 60);\n    const date = new Date(Date.UTC(Number(yearStr), Number(monthStr) - 1, Number(dayStr), Number(hours), Number(minutes), Number(seconds), Number(ms) ? Math.round(parseFloat(`0.${ms}`) * 1000) : 0));\n    date.setUTCFullYear(Number(yearStr));\n    if (offsetStr.toUpperCase() != \"Z\") {\n        const [, sign, offsetH, offsetM] = /([+-])(\\d\\d):(\\d\\d)/.exec(offsetStr) || [void 0, \"+\", 0, 0];\n        const scalar = sign === \"-\" ? 1 : -1;\n        date.setTime(date.getTime() + scalar * (Number(offsetH) * 60 * 60 * 1000 + Number(offsetM) * 60 * 1000));\n    }\n    return date;\n};\nexport const _parseRfc7231DateTime = (value) => {\n    if (value == null) {\n        return void 0;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC7231 timestamps must be strings.\");\n    }\n    let day;\n    let month;\n    let year;\n    let hour;\n    let minute;\n    let second;\n    let fraction;\n    let matches;\n    if ((matches = IMF_FIXDATE.exec(value))) {\n        [, day, month, year, hour, minute, second, fraction] = matches;\n    }\n    else if ((matches = RFC_850_DATE.exec(value))) {\n        [, day, month, year, hour, minute, second, fraction] = matches;\n        year = (Number(year) + 1900).toString();\n    }\n    else if ((matches = ASC_TIME.exec(value))) {\n        [, month, day, hour, minute, second, fraction, year] = matches;\n    }\n    if (year && second) {\n        const timestamp = Date.UTC(Number(year), months.indexOf(month), Number(day), Number(hour), Number(minute), Number(second), fraction ? Math.round(parseFloat(`0.${fraction}`) * 1000) : 0);\n        range(day, 1, 31);\n        range(hour, 0, 23);\n        range(minute, 0, 59);\n        range(second, 0, 60);\n        const date = new Date(timestamp);\n        date.setUTCFullYear(Number(year));\n        return date;\n    }\n    throw new TypeError(`Invalid RFC7231 date-time value ${value}.`);\n};\nfunction range(v, min, max) {\n    const _v = Number(v);\n    if (_v < min || _v > max) {\n        throw new Error(`Value ${_v} out of range [${min}, ${max}]`);\n    }\n}\n","export function splitEvery(value, delimiter, numDelimiters) {\n    if (numDelimiters <= 0 || !Number.isInteger(numDelimiters)) {\n        throw new Error(\"Invalid number of delimiters (\" + numDelimiters + \") for splitEvery.\");\n    }\n    const segments = value.split(delimiter);\n    if (numDelimiters === 1) {\n        return segments;\n    }\n    const compoundSegments = [];\n    let currentSegment = \"\";\n    for (let i = 0; i < segments.length; i++) {\n        if (currentSegment === \"\") {\n            currentSegment = segments[i];\n        }\n        else {\n            currentSegment += delimiter + segments[i];\n        }\n        if ((i + 1) % numDelimiters === 0) {\n            compoundSegments.push(currentSegment);\n            currentSegment = \"\";\n        }\n    }\n    if (currentSegment !== \"\") {\n        compoundSegments.push(currentSegment);\n    }\n    return compoundSegments;\n}\n","export const splitHeader = (value) => {\n    const z = value.length;\n    const values = [];\n    let withinQuotes = false;\n    let prevChar = undefined;\n    let anchor = 0;\n    for (let i = 0; i < z; ++i) {\n        const char = value[i];\n        switch (char) {\n            case `\"`:\n                if (prevChar !== \"\\\\\") {\n                    withinQuotes = !withinQuotes;\n                }\n                break;\n            case \",\":\n                if (!withinQuotes) {\n                    values.push(value.slice(anchor, i));\n                    anchor = i + 1;\n                }\n                break;\n            default:\n        }\n        prevChar = char;\n    }\n    values.push(value.slice(anchor));\n    return values.map((v) => {\n        v = v.trim();\n        const z = v.length;\n        if (z < 2) {\n            return v;\n        }\n        if (v[0] === `\"` && v[z - 1] === `\"`) {\n            v = v.slice(1, z - 1);\n        }\n        return v.replace(/\\\\\"/g, '\"');\n    });\n};\n","const format = /^-?\\d*(\\.\\d+)?$/;\nexport class NumericValue {\n    string;\n    type;\n    constructor(string, type) {\n        this.string = string;\n        this.type = type;\n        if (!format.test(string)) {\n            throw new Error(`@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point \".\", and an optional negation prefix \"-\".`);\n        }\n    }\n    toString() {\n        return this.string;\n    }\n    static [Symbol.hasInstance](object) {\n        if (!object || typeof object !== \"object\") {\n            return false;\n        }\n        const _nv = object;\n        return NumericValue.prototype.isPrototypeOf(object) || (_nv.type === \"bigDecimal\" && format.test(_nv.string));\n    }\n}\nexport function nv(input) {\n    return new NumericValue(String(input), \"bigDecimal\");\n}\n","export class SerdeContext {\n    serdeContext;\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n    }\n}\n","import { NormalizedSchema, translateTraits } from \"@smithy/core/schema\";\nimport { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { SerdeContext } from \"./SerdeContext\";\nexport class HttpProtocol extends SerdeContext {\n    options;\n    constructor(options) {\n        super();\n        this.options = options;\n    }\n    getRequestType() {\n        return HttpRequest;\n    }\n    getResponseType() {\n        return HttpResponse;\n    }\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n        this.serializer.setSerdeContext(serdeContext);\n        this.deserializer.setSerdeContext(serdeContext);\n        if (this.getPayloadCodec()) {\n            this.getPayloadCodec().setSerdeContext(serdeContext);\n        }\n    }\n    updateServiceEndpoint(request, endpoint) {\n        if (\"url\" in endpoint) {\n            request.protocol = endpoint.url.protocol;\n            request.hostname = endpoint.url.hostname;\n            request.port = endpoint.url.port ? Number(endpoint.url.port) : undefined;\n            request.path = endpoint.url.pathname;\n            request.fragment = endpoint.url.hash || void 0;\n            request.username = endpoint.url.username || void 0;\n            request.password = endpoint.url.password || void 0;\n            if (!request.query) {\n                request.query = {};\n            }\n            for (const [k, v] of endpoint.url.searchParams.entries()) {\n                request.query[k] = v;\n            }\n            return request;\n        }\n        else {\n            request.protocol = endpoint.protocol;\n            request.hostname = endpoint.hostname;\n            request.port = endpoint.port ? Number(endpoint.port) : undefined;\n            request.path = endpoint.path;\n            request.query = {\n                ...endpoint.query,\n            };\n            return request;\n        }\n    }\n    setHostPrefix(request, operationSchema, input) {\n        if (this.serdeContext?.disableHostPrefix) {\n            return;\n        }\n        const inputNs = NormalizedSchema.of(operationSchema.input);\n        const opTraits = translateTraits(operationSchema.traits ?? {});\n        if (opTraits.endpoint) {\n            let hostPrefix = opTraits.endpoint?.[0];\n            if (typeof hostPrefix === \"string\") {\n                const hostLabelInputs = [...inputNs.structIterator()].filter(([, member]) => member.getMergedTraits().hostLabel);\n                for (const [name] of hostLabelInputs) {\n                    const replacement = input[name];\n                    if (typeof replacement !== \"string\") {\n                        throw new Error(`@smithy/core/schema - ${name} in input must be a string as hostLabel.`);\n                    }\n                    hostPrefix = hostPrefix.replace(`{${name}}`, replacement);\n                }\n                request.hostname = hostPrefix + request.hostname;\n            }\n        }\n    }\n    deserializeMetadata(output) {\n        return {\n            httpStatusCode: output.statusCode,\n            requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n            extendedRequestId: output.headers[\"x-amz-id-2\"],\n            cfId: output.headers[\"x-amz-cf-id\"],\n        };\n    }\n    async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {\n        const eventStreamSerde = await this.loadEventStreamCapability();\n        return eventStreamSerde.serializeEventStream({\n            eventStream,\n            requestSchema,\n            initialRequest,\n        });\n    }\n    async deserializeEventStream({ response, responseSchema, initialResponseContainer, }) {\n        const eventStreamSerde = await this.loadEventStreamCapability();\n        return eventStreamSerde.deserializeEventStream({\n            response,\n            responseSchema,\n            initialResponseContainer,\n        });\n    }\n    async loadEventStreamCapability() {\n        const { EventStreamSerde } = await import(\"@smithy/core/event-streams\");\n        return new EventStreamSerde({\n            marshaller: this.getEventStreamMarshaller(),\n            serializer: this.serializer,\n            deserializer: this.deserializer,\n            serdeContext: this.serdeContext,\n            defaultContentType: this.getDefaultContentType(),\n        });\n    }\n    getDefaultContentType() {\n        throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`);\n    }\n    async deserializeHttpMessage(schema, context, response, arg4, arg5) {\n        void schema;\n        void context;\n        void response;\n        void arg4;\n        void arg5;\n        return [];\n    }\n    getEventStreamMarshaller() {\n        const context = this.serdeContext;\n        if (!context.eventStreamMarshaller) {\n            throw new Error(\"@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.\");\n        }\n        return context.eventStreamMarshaller;\n    }\n}\n","import { NormalizedSchema, translateTraits } from \"@smithy/core/schema\";\nimport { splitEvery, splitHeader } from \"@smithy/core/serde\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { sdkStreamMixin } from \"@smithy/util-stream\";\nimport { collectBody } from \"./collect-stream-body\";\nimport { extendedEncodeURIComponent } from \"./extended-encode-uri-component\";\nimport { HttpProtocol } from \"./HttpProtocol\";\nexport class HttpBindingProtocol extends HttpProtocol {\n    async serializeRequest(operationSchema, _input, context) {\n        const input = {\n            ...(_input ?? {}),\n        };\n        const serializer = this.serializer;\n        const query = {};\n        const headers = {};\n        const endpoint = await context.endpoint();\n        const ns = NormalizedSchema.of(operationSchema?.input);\n        const schema = ns.getSchema();\n        let hasNonHttpBindingMember = false;\n        let payload;\n        const request = new HttpRequest({\n            protocol: \"\",\n            hostname: \"\",\n            port: undefined,\n            path: \"\",\n            fragment: undefined,\n            query: query,\n            headers: headers,\n            body: undefined,\n        });\n        if (endpoint) {\n            this.updateServiceEndpoint(request, endpoint);\n            this.setHostPrefix(request, operationSchema, input);\n            const opTraits = translateTraits(operationSchema.traits);\n            if (opTraits.http) {\n                request.method = opTraits.http[0];\n                const [path, search] = opTraits.http[1].split(\"?\");\n                if (request.path == \"/\") {\n                    request.path = path;\n                }\n                else {\n                    request.path += path;\n                }\n                const traitSearchParams = new URLSearchParams(search ?? \"\");\n                Object.assign(query, Object.fromEntries(traitSearchParams));\n            }\n        }\n        for (const [memberName, memberNs] of ns.structIterator()) {\n            const memberTraits = memberNs.getMergedTraits() ?? {};\n            const inputMemberValue = input[memberName];\n            if (inputMemberValue == null && !memberNs.isIdempotencyToken()) {\n                if (memberTraits.httpLabel) {\n                    if (request.path.includes(`{${memberName}+}`) || request.path.includes(`{${memberName}}`)) {\n                        throw new Error(`No value provided for input HTTP label: ${memberName}.`);\n                    }\n                }\n                continue;\n            }\n            if (memberTraits.httpPayload) {\n                const isStreaming = memberNs.isStreaming();\n                if (isStreaming) {\n                    const isEventStream = memberNs.isStructSchema();\n                    if (isEventStream) {\n                        if (input[memberName]) {\n                            payload = await this.serializeEventStream({\n                                eventStream: input[memberName],\n                                requestSchema: ns,\n                            });\n                        }\n                    }\n                    else {\n                        payload = inputMemberValue;\n                    }\n                }\n                else {\n                    serializer.write(memberNs, inputMemberValue);\n                    payload = serializer.flush();\n                }\n                delete input[memberName];\n            }\n            else if (memberTraits.httpLabel) {\n                serializer.write(memberNs, inputMemberValue);\n                const replacement = serializer.flush();\n                if (request.path.includes(`{${memberName}+}`)) {\n                    request.path = request.path.replace(`{${memberName}+}`, replacement.split(\"/\").map(extendedEncodeURIComponent).join(\"/\"));\n                }\n                else if (request.path.includes(`{${memberName}}`)) {\n                    request.path = request.path.replace(`{${memberName}}`, extendedEncodeURIComponent(replacement));\n                }\n                delete input[memberName];\n            }\n            else if (memberTraits.httpHeader) {\n                serializer.write(memberNs, inputMemberValue);\n                headers[memberTraits.httpHeader.toLowerCase()] = String(serializer.flush());\n                delete input[memberName];\n            }\n            else if (typeof memberTraits.httpPrefixHeaders === \"string\") {\n                for (const [key, val] of Object.entries(inputMemberValue)) {\n                    const amalgam = memberTraits.httpPrefixHeaders + key;\n                    serializer.write([memberNs.getValueSchema(), { httpHeader: amalgam }], val);\n                    headers[amalgam.toLowerCase()] = serializer.flush();\n                }\n                delete input[memberName];\n            }\n            else if (memberTraits.httpQuery || memberTraits.httpQueryParams) {\n                this.serializeQuery(memberNs, inputMemberValue, query);\n                delete input[memberName];\n            }\n            else {\n                hasNonHttpBindingMember = true;\n            }\n        }\n        if (hasNonHttpBindingMember && input) {\n            serializer.write(schema, input);\n            payload = serializer.flush();\n        }\n        request.headers = headers;\n        request.query = query;\n        request.body = payload;\n        return request;\n    }\n    serializeQuery(ns, data, query) {\n        const serializer = this.serializer;\n        const traits = ns.getMergedTraits();\n        if (traits.httpQueryParams) {\n            for (const [key, val] of Object.entries(data)) {\n                if (!(key in query)) {\n                    const valueSchema = ns.getValueSchema();\n                    Object.assign(valueSchema.getMergedTraits(), {\n                        ...traits,\n                        httpQuery: key,\n                        httpQueryParams: undefined,\n                    });\n                    this.serializeQuery(valueSchema, val, query);\n                }\n            }\n            return;\n        }\n        if (ns.isListSchema()) {\n            const sparse = !!ns.getMergedTraits().sparse;\n            const buffer = [];\n            for (const item of data) {\n                serializer.write([ns.getValueSchema(), traits], item);\n                const serializable = serializer.flush();\n                if (sparse || serializable !== undefined) {\n                    buffer.push(serializable);\n                }\n            }\n            query[traits.httpQuery] = buffer;\n        }\n        else {\n            serializer.write([ns, traits], data);\n            query[traits.httpQuery] = serializer.flush();\n        }\n    }\n    async deserializeResponse(operationSchema, context, response) {\n        const deserializer = this.deserializer;\n        const ns = NormalizedSchema.of(operationSchema.output);\n        const dataObject = {};\n        if (response.statusCode >= 300) {\n            const bytes = await collectBody(response.body, context);\n            if (bytes.byteLength > 0) {\n                Object.assign(dataObject, await deserializer.read(15, bytes));\n            }\n            await this.handleError(operationSchema, context, response, dataObject, this.deserializeMetadata(response));\n            throw new Error(\"@smithy/core/protocols - HTTP Protocol error handler failed to throw.\");\n        }\n        for (const header in response.headers) {\n            const value = response.headers[header];\n            delete response.headers[header];\n            response.headers[header.toLowerCase()] = value;\n        }\n        const nonHttpBindingMembers = await this.deserializeHttpMessage(ns, context, response, dataObject);\n        if (nonHttpBindingMembers.length) {\n            const bytes = await collectBody(response.body, context);\n            if (bytes.byteLength > 0) {\n                const dataFromBody = await deserializer.read(ns, bytes);\n                for (const member of nonHttpBindingMembers) {\n                    dataObject[member] = dataFromBody[member];\n                }\n            }\n        }\n        else if (nonHttpBindingMembers.discardResponseBody) {\n            await collectBody(response.body, context);\n        }\n        dataObject.$metadata = this.deserializeMetadata(response);\n        return dataObject;\n    }\n    async deserializeHttpMessage(schema, context, response, arg4, arg5) {\n        let dataObject;\n        if (arg4 instanceof Set) {\n            dataObject = arg5;\n        }\n        else {\n            dataObject = arg4;\n        }\n        let discardResponseBody = true;\n        const deserializer = this.deserializer;\n        const ns = NormalizedSchema.of(schema);\n        const nonHttpBindingMembers = [];\n        for (const [memberName, memberSchema] of ns.structIterator()) {\n            const memberTraits = memberSchema.getMemberTraits();\n            if (memberTraits.httpPayload) {\n                discardResponseBody = false;\n                const isStreaming = memberSchema.isStreaming();\n                if (isStreaming) {\n                    const isEventStream = memberSchema.isStructSchema();\n                    if (isEventStream) {\n                        dataObject[memberName] = await this.deserializeEventStream({\n                            response,\n                            responseSchema: ns,\n                        });\n                    }\n                    else {\n                        dataObject[memberName] = sdkStreamMixin(response.body);\n                    }\n                }\n                else if (response.body) {\n                    const bytes = await collectBody(response.body, context);\n                    if (bytes.byteLength > 0) {\n                        dataObject[memberName] = await deserializer.read(memberSchema, bytes);\n                    }\n                }\n            }\n            else if (memberTraits.httpHeader) {\n                const key = String(memberTraits.httpHeader).toLowerCase();\n                const value = response.headers[key];\n                if (null != value) {\n                    if (memberSchema.isListSchema()) {\n                        const headerListValueSchema = memberSchema.getValueSchema();\n                        headerListValueSchema.getMergedTraits().httpHeader = key;\n                        let sections;\n                        if (headerListValueSchema.isTimestampSchema() &&\n                            headerListValueSchema.getSchema() === 4) {\n                            sections = splitEvery(value, \",\", 2);\n                        }\n                        else {\n                            sections = splitHeader(value);\n                        }\n                        const list = [];\n                        for (const section of sections) {\n                            list.push(await deserializer.read(headerListValueSchema, section.trim()));\n                        }\n                        dataObject[memberName] = list;\n                    }\n                    else {\n                        dataObject[memberName] = await deserializer.read(memberSchema, value);\n                    }\n                }\n            }\n            else if (memberTraits.httpPrefixHeaders !== undefined) {\n                dataObject[memberName] = {};\n                for (const [header, value] of Object.entries(response.headers)) {\n                    if (header.startsWith(memberTraits.httpPrefixHeaders)) {\n                        const valueSchema = memberSchema.getValueSchema();\n                        valueSchema.getMergedTraits().httpHeader = header;\n                        dataObject[memberName][header.slice(memberTraits.httpPrefixHeaders.length)] = await deserializer.read(valueSchema, value);\n                    }\n                }\n            }\n            else if (memberTraits.httpResponseCode) {\n                dataObject[memberName] = response.statusCode;\n            }\n            else {\n                nonHttpBindingMembers.push(memberName);\n            }\n        }\n        nonHttpBindingMembers.discardResponseBody = discardResponseBody;\n        return nonHttpBindingMembers;\n    }\n}\n","export function determineTimestampFormat(ns, settings) {\n    if (settings.timestampFormat.useTrait) {\n        if (ns.isTimestampSchema() &&\n            (ns.getSchema() === 5 ||\n                ns.getSchema() === 6 ||\n                ns.getSchema() === 7)) {\n            return ns.getSchema();\n        }\n    }\n    const { httpLabel, httpPrefixHeaders, httpHeader, httpQuery } = ns.getMergedTraits();\n    const bindingFormat = settings.httpBindings\n        ? typeof httpPrefixHeaders === \"string\" || Boolean(httpHeader)\n            ? 6\n            : Boolean(httpQuery) || Boolean(httpLabel)\n                ? 5\n                : undefined\n        : undefined;\n    return bindingFormat ?? settings.timestampFormat.default;\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nimport { _parseEpochTimestamp, _parseRfc3339DateTimeWithOffset, _parseRfc7231DateTime, LazyJsonString, NumericValue, splitHeader, } from \"@smithy/core/serde\";\nimport { fromBase64 } from \"@smithy/util-base64\";\nimport { toUtf8 } from \"@smithy/util-utf8\";\nimport { SerdeContext } from \"../SerdeContext\";\nimport { determineTimestampFormat } from \"./determineTimestampFormat\";\nexport class FromStringShapeDeserializer extends SerdeContext {\n    settings;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    read(_schema, data) {\n        const ns = NormalizedSchema.of(_schema);\n        if (ns.isListSchema()) {\n            return splitHeader(data).map((item) => this.read(ns.getValueSchema(), item));\n        }\n        if (ns.isBlobSchema()) {\n            return (this.serdeContext?.base64Decoder ?? fromBase64)(data);\n        }\n        if (ns.isTimestampSchema()) {\n            const format = determineTimestampFormat(ns, this.settings);\n            switch (format) {\n                case 5:\n                    return _parseRfc3339DateTimeWithOffset(data);\n                case 6:\n                    return _parseRfc7231DateTime(data);\n                case 7:\n                    return _parseEpochTimestamp(data);\n                default:\n                    console.warn(\"Missing timestamp format, parsing value with Date constructor:\", data);\n                    return new Date(data);\n            }\n        }\n        if (ns.isStringSchema()) {\n            const mediaType = ns.getMergedTraits().mediaType;\n            let intermediateValue = data;\n            if (mediaType) {\n                if (ns.getMergedTraits().httpHeader) {\n                    intermediateValue = this.base64ToUtf8(intermediateValue);\n                }\n                const isJson = mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n                if (isJson) {\n                    intermediateValue = LazyJsonString.from(intermediateValue);\n                }\n                return intermediateValue;\n            }\n        }\n        if (ns.isNumericSchema()) {\n            return Number(data);\n        }\n        if (ns.isBigIntegerSchema()) {\n            return BigInt(data);\n        }\n        if (ns.isBigDecimalSchema()) {\n            return new NumericValue(data, \"bigDecimal\");\n        }\n        if (ns.isBooleanSchema()) {\n            return String(data).toLowerCase() === \"true\";\n        }\n        return data;\n    }\n    base64ToUtf8(base64String) {\n        return (this.serdeContext?.utf8Encoder ?? toUtf8)((this.serdeContext?.base64Decoder ?? fromBase64)(base64String));\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { SerdeContext } from \"../SerdeContext\";\nimport { FromStringShapeDeserializer } from \"./FromStringShapeDeserializer\";\nexport class HttpInterceptingShapeDeserializer extends SerdeContext {\n    codecDeserializer;\n    stringDeserializer;\n    constructor(codecDeserializer, codecSettings) {\n        super();\n        this.codecDeserializer = codecDeserializer;\n        this.stringDeserializer = new FromStringShapeDeserializer(codecSettings);\n    }\n    setSerdeContext(serdeContext) {\n        this.stringDeserializer.setSerdeContext(serdeContext);\n        this.codecDeserializer.setSerdeContext(serdeContext);\n        this.serdeContext = serdeContext;\n    }\n    read(schema, data) {\n        const ns = NormalizedSchema.of(schema);\n        const traits = ns.getMergedTraits();\n        const toString = this.serdeContext?.utf8Encoder ?? toUtf8;\n        if (traits.httpHeader || traits.httpResponseCode) {\n            return this.stringDeserializer.read(ns, toString(data));\n        }\n        if (traits.httpPayload) {\n            if (ns.isBlobSchema()) {\n                const toBytes = this.serdeContext?.utf8Decoder ?? fromUtf8;\n                if (typeof data === \"string\") {\n                    return toBytes(data);\n                }\n                return data;\n            }\n            else if (ns.isStringSchema()) {\n                if (\"byteLength\" in data) {\n                    return toString(data);\n                }\n                return data;\n            }\n        }\n        return this.codecDeserializer.read(ns, data);\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nimport { dateToUtcString, generateIdempotencyToken, LazyJsonString, quoteHeader } from \"@smithy/core/serde\";\nimport { toBase64 } from \"@smithy/util-base64\";\nimport { SerdeContext } from \"../SerdeContext\";\nimport { determineTimestampFormat } from \"./determineTimestampFormat\";\nexport class ToStringShapeSerializer extends SerdeContext {\n    settings;\n    stringBuffer = \"\";\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    write(schema, value) {\n        const ns = NormalizedSchema.of(schema);\n        switch (typeof value) {\n            case \"object\":\n                if (value === null) {\n                    this.stringBuffer = \"null\";\n                    return;\n                }\n                if (ns.isTimestampSchema()) {\n                    if (!(value instanceof Date)) {\n                        throw new Error(`@smithy/core/protocols - received non-Date value ${value} when schema expected Date in ${ns.getName(true)}`);\n                    }\n                    const format = determineTimestampFormat(ns, this.settings);\n                    switch (format) {\n                        case 5:\n                            this.stringBuffer = value.toISOString().replace(\".000Z\", \"Z\");\n                            break;\n                        case 6:\n                            this.stringBuffer = dateToUtcString(value);\n                            break;\n                        case 7:\n                            this.stringBuffer = String(value.getTime() / 1000);\n                            break;\n                        default:\n                            console.warn(\"Missing timestamp format, using epoch seconds\", value);\n                            this.stringBuffer = String(value.getTime() / 1000);\n                    }\n                    return;\n                }\n                if (ns.isBlobSchema() && \"byteLength\" in value) {\n                    this.stringBuffer = (this.serdeContext?.base64Encoder ?? toBase64)(value);\n                    return;\n                }\n                if (ns.isListSchema() && Array.isArray(value)) {\n                    let buffer = \"\";\n                    for (const item of value) {\n                        this.write([ns.getValueSchema(), ns.getMergedTraits()], item);\n                        const headerItem = this.flush();\n                        const serialized = ns.getValueSchema().isTimestampSchema() ? headerItem : quoteHeader(headerItem);\n                        if (buffer !== \"\") {\n                            buffer += \", \";\n                        }\n                        buffer += serialized;\n                    }\n                    this.stringBuffer = buffer;\n                    return;\n                }\n                this.stringBuffer = JSON.stringify(value, null, 2);\n                break;\n            case \"string\":\n                const mediaType = ns.getMergedTraits().mediaType;\n                let intermediateValue = value;\n                if (mediaType) {\n                    const isJson = mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n                    if (isJson) {\n                        intermediateValue = LazyJsonString.from(intermediateValue);\n                    }\n                    if (ns.getMergedTraits().httpHeader) {\n                        this.stringBuffer = (this.serdeContext?.base64Encoder ?? toBase64)(intermediateValue.toString());\n                        return;\n                    }\n                }\n                this.stringBuffer = value;\n                break;\n            default:\n                if (ns.isIdempotencyToken()) {\n                    this.stringBuffer = generateIdempotencyToken();\n                }\n                else {\n                    this.stringBuffer = String(value);\n                }\n        }\n    }\n    flush() {\n        const buffer = this.stringBuffer;\n        this.stringBuffer = \"\";\n        return buffer;\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nimport { ToStringShapeSerializer } from \"./ToStringShapeSerializer\";\nexport class HttpInterceptingShapeSerializer {\n    codecSerializer;\n    stringSerializer;\n    buffer;\n    constructor(codecSerializer, codecSettings, stringSerializer = new ToStringShapeSerializer(codecSettings)) {\n        this.codecSerializer = codecSerializer;\n        this.stringSerializer = stringSerializer;\n    }\n    setSerdeContext(serdeContext) {\n        this.codecSerializer.setSerdeContext(serdeContext);\n        this.stringSerializer.setSerdeContext(serdeContext);\n    }\n    write(schema, value) {\n        const ns = NormalizedSchema.of(schema);\n        const traits = ns.getMergedTraits();\n        if (traits.httpHeader || traits.httpLabel || traits.httpQuery) {\n            this.stringSerializer.write(ns, value);\n            this.buffer = this.stringSerializer.flush();\n            return;\n        }\n        return this.codecSerializer.write(ns, value);\n    }\n    flush() {\n        if (this.buffer !== undefined) {\n            const buffer = this.buffer;\n            this.buffer = undefined;\n            return buffer;\n        }\n        return this.codecSerializer.flush();\n    }\n}\n","export function setFeature(context, feature, value) {\n    if (!context.__smithy_context) {\n        context.__smithy_context = {\n            features: {},\n        };\n    }\n    else if (!context.__smithy_context.features) {\n        context.__smithy_context.features = {};\n    }\n    context.__smithy_context.features[feature] = value;\n}\n","export class DefaultIdentityProviderConfig {\n    authSchemes = new Map();\n    constructor(config) {\n        for (const [key, value] of Object.entries(config)) {\n            if (value !== undefined) {\n                this.authSchemes.set(key, value);\n            }\n        }\n    }\n    getIdentityProvider(schemeId) {\n        return this.authSchemes.get(schemeId);\n    }\n}\n","export const createIsIdentityExpiredFunction = (expirationMs) => function isIdentityExpired(identity) {\n    return doesIdentityRequireRefresh(identity) && identity.expiration.getTime() - Date.now() < expirationMs;\n};\nexport const EXPIRATION_MS = 300_000;\nexport const isIdentityExpired = createIsIdentityExpiredFunction(EXPIRATION_MS);\nexport const doesIdentityRequireRefresh = (identity) => identity.expiration !== undefined;\nexport const memoizeIdentityProvider = (provider, isExpired, requiresRefresh) => {\n    if (provider === undefined) {\n        return undefined;\n    }\n    const normalizedProvider = typeof provider !== \"function\" ? async () => Promise.resolve(provider) : provider;\n    let resolved;\n    let pending;\n    let hasResult;\n    let isConstant = false;\n    const coalesceProvider = async (options) => {\n        if (!pending) {\n            pending = normalizedProvider(options);\n        }\n        try {\n            resolved = await pending;\n            hasResult = true;\n            isConstant = false;\n        }\n        finally {\n            pending = undefined;\n        }\n        return resolved;\n    };\n    if (isExpired === undefined) {\n        return async (options) => {\n            if (!hasResult || options?.forceRefresh) {\n                resolved = await coalesceProvider(options);\n            }\n            return resolved;\n        };\n    }\n    return async (options) => {\n        if (!hasResult || options?.forceRefresh) {\n            resolved = await coalesceProvider(options);\n        }\n        if (isConstant) {\n            return resolved;\n        }\n        if (!requiresRefresh(resolved)) {\n            isConstant = true;\n            return resolved;\n        }\n        if (isExpired(resolved)) {\n            await coalesceProvider(options);\n            return resolved;\n        }\n        return resolved;\n    };\n};\n","export const memoize = (provider, isExpired, requiresRefresh) => {\n    let resolved;\n    let pending;\n    let hasResult;\n    let isConstant = false;\n    const coalesceProvider = async () => {\n        if (!pending) {\n            pending = provider();\n        }\n        try {\n            resolved = await pending;\n            hasResult = true;\n            isConstant = false;\n        }\n        finally {\n            pending = undefined;\n        }\n        return resolved;\n    };\n    if (isExpired === undefined) {\n        return async (options) => {\n            if (!hasResult || options?.forceRefresh) {\n                resolved = await coalesceProvider();\n            }\n            return resolved;\n        };\n    }\n    return async (options) => {\n        if (!hasResult || options?.forceRefresh) {\n            resolved = await coalesceProvider();\n        }\n        if (isConstant) {\n            return resolved;\n        }\n        if (requiresRefresh && !requiresRefresh(resolved)) {\n            isConstant = true;\n            return resolved;\n        }\n        if (isExpired(resolved)) {\n            await coalesceProvider();\n            return resolved;\n        }\n        return resolved;\n    };\n};\n","import { normalizeProvider } from \"@smithy/core\";\nimport { ProviderError } from \"@smithy/property-provider\";\nexport const resolveAwsSdkSigV4AConfig = (config) => {\n    config.sigv4aSigningRegionSet = normalizeProvider(config.sigv4aSigningRegionSet);\n    return config;\n};\nexport const NODE_SIGV4A_CONFIG_OPTIONS = {\n    environmentVariableSelector(env) {\n        if (env.AWS_SIGV4A_SIGNING_REGION_SET) {\n            return env.AWS_SIGV4A_SIGNING_REGION_SET.split(\",\").map((_) => _.trim());\n        }\n        throw new ProviderError(\"AWS_SIGV4A_SIGNING_REGION_SET not set in env.\", {\n            tryNextLink: true,\n        });\n    },\n    configFileSelector(profile) {\n        if (profile.sigv4a_signing_region_set) {\n            return (profile.sigv4a_signing_region_set ?? \"\").split(\",\").map((_) => _.trim());\n        }\n        throw new ProviderError(\"sigv4a_signing_region_set not set in profile.\", {\n            tryNextLink: true,\n        });\n    },\n    default: undefined,\n};\n","export const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport const TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport const REGION_SET_PARAM = \"X-Amz-Region-Set\";\nexport const AUTH_HEADER = \"authorization\";\nexport const AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport const DATE_HEADER = \"date\";\nexport const GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport const SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport const SHA256_HEADER = \"x-amz-content-sha256\";\nexport const TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport const HOST_HEADER = \"host\";\nexport const ALWAYS_UNSIGNABLE_HEADERS = {\n    authorization: true,\n    \"cache-control\": true,\n    connection: true,\n    expect: true,\n    from: true,\n    \"keep-alive\": true,\n    \"max-forwards\": true,\n    pragma: true,\n    referer: true,\n    te: true,\n    trailer: true,\n    \"transfer-encoding\": true,\n    upgrade: true,\n    \"user-agent\": true,\n    \"x-amzn-trace-id\": true,\n};\nexport const PROXY_HEADER_PATTERN = /^proxy-/;\nexport const SEC_HEADER_PATTERN = /^sec-/;\nexport const UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport const ALGORITHM_IDENTIFIER_V4A = \"AWS4-ECDSA-P256-SHA256\";\nexport const EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const MAX_CACHE_SIZE = 50;\nexport const KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport const MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nconst signingKeyCache = {};\nconst cacheQueue = [];\nexport const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${KEY_TYPE_IDENTIFIER}`;\nexport const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {\n    const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);\n    const cacheKey = `${shortDate}:${region}:${service}:${toHex(credsHash)}:${credentials.sessionToken}`;\n    if (cacheKey in signingKeyCache) {\n        return signingKeyCache[cacheKey];\n    }\n    cacheQueue.push(cacheKey);\n    while (cacheQueue.length > MAX_CACHE_SIZE) {\n        delete signingKeyCache[cacheQueue.shift()];\n    }\n    let key = `AWS4${credentials.secretAccessKey}`;\n    for (const signable of [shortDate, region, service, KEY_TYPE_IDENTIFIER]) {\n        key = await hmac(sha256Constructor, key, signable);\n    }\n    return (signingKeyCache[cacheKey] = key);\n};\nexport const clearCredentialCache = () => {\n    cacheQueue.length = 0;\n    Object.keys(signingKeyCache).forEach((cacheKey) => {\n        delete signingKeyCache[cacheKey];\n    });\n};\nconst hmac = (ctor, secret, data) => {\n    const hash = new ctor(secret);\n    hash.update(toUint8Array(data));\n    return hash.digest();\n};\n","import { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\nexport const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {\n    const canonical = {};\n    for (const headerName of Object.keys(headers).sort()) {\n        if (headers[headerName] == undefined) {\n            continue;\n        }\n        const canonicalHeaderName = headerName.toLowerCase();\n        if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS ||\n            unsignableHeaders?.has(canonicalHeaderName) ||\n            PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n            SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n            if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n                continue;\n            }\n        }\n        canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n    }\n    return canonical;\n};\n","export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n    Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport const getPayloadHash = async ({ headers, body }, hashConstructor) => {\n    for (const headerName of Object.keys(headers)) {\n        if (headerName.toLowerCase() === SHA256_HEADER) {\n            return headers[headerName];\n        }\n    }\n    if (body == undefined) {\n        return \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n    }\n    else if (typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {\n        const hashCtor = new hashConstructor();\n        hashCtor.update(toUint8Array(body));\n        return toHex(await hashCtor.digest());\n    }\n    return UNSIGNED_PAYLOAD;\n};\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { fromUtf8 } from \"@smithy/util-utf8\";\nexport class HeaderFormatter {\n    format(headers) {\n        const chunks = [];\n        for (const headerName of Object.keys(headers)) {\n            const bytes = fromUtf8(headerName);\n            chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n        }\n        const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n        let position = 0;\n        for (const chunk of chunks) {\n            out.set(chunk, position);\n            position += chunk.byteLength;\n        }\n        return out;\n    }\n    formatHeaderValue(header) {\n        switch (header.type) {\n            case \"boolean\":\n                return Uint8Array.from([header.value ? 0 : 1]);\n            case \"byte\":\n                return Uint8Array.from([2, header.value]);\n            case \"short\":\n                const shortView = new DataView(new ArrayBuffer(3));\n                shortView.setUint8(0, 3);\n                shortView.setInt16(1, header.value, false);\n                return new Uint8Array(shortView.buffer);\n            case \"integer\":\n                const intView = new DataView(new ArrayBuffer(5));\n                intView.setUint8(0, 4);\n                intView.setInt32(1, header.value, false);\n                return new Uint8Array(intView.buffer);\n            case \"long\":\n                const longBytes = new Uint8Array(9);\n                longBytes[0] = 5;\n                longBytes.set(header.value.bytes, 1);\n                return longBytes;\n            case \"binary\":\n                const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n                binView.setUint8(0, 6);\n                binView.setUint16(1, header.value.byteLength, false);\n                const binBytes = new Uint8Array(binView.buffer);\n                binBytes.set(header.value, 3);\n                return binBytes;\n            case \"string\":\n                const utf8Bytes = fromUtf8(header.value);\n                const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n                strView.setUint8(0, 7);\n                strView.setUint16(1, utf8Bytes.byteLength, false);\n                const strBytes = new Uint8Array(strView.buffer);\n                strBytes.set(utf8Bytes, 3);\n                return strBytes;\n            case \"timestamp\":\n                const tsBytes = new Uint8Array(9);\n                tsBytes[0] = 8;\n                tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n                return tsBytes;\n            case \"uuid\":\n                if (!UUID_PATTERN.test(header.value)) {\n                    throw new Error(`Invalid UUID received: ${header.value}`);\n                }\n                const uuidBytes = new Uint8Array(17);\n                uuidBytes[0] = 9;\n                uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n                return uuidBytes;\n        }\n    }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\nexport class Int64 {\n    bytes;\n    constructor(bytes) {\n        this.bytes = bytes;\n        if (bytes.byteLength !== 8) {\n            throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n        }\n    }\n    static fromNumber(number) {\n        if (number > 9_223_372_036_854_775_807 || number < -9_223_372_036_854_775_808) {\n            throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n        }\n        const bytes = new Uint8Array(8);\n        for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n            bytes[i] = remaining;\n        }\n        if (number < 0) {\n            negate(bytes);\n        }\n        return new Int64(bytes);\n    }\n    valueOf() {\n        const bytes = this.bytes.slice(0);\n        const negative = bytes[0] & 0b10000000;\n        if (negative) {\n            negate(bytes);\n        }\n        return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n    }\n    toString() {\n        return String(this.valueOf());\n    }\n}\nfunction negate(bytes) {\n    for (let i = 0; i < 8; i++) {\n        bytes[i] ^= 0xff;\n    }\n    for (let i = 7; i > -1; i--) {\n        bytes[i]++;\n        if (bytes[i] !== 0)\n            break;\n    }\n}\n","export const hasHeader = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            return true;\n        }\n    }\n    return false;\n};\nexport const getHeaderValue = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            return headers[headerName];\n        }\n    }\n    return undefined;\n};\nexport const deleteHeader = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            delete headers[headerName];\n        }\n    }\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const moveHeadersToQuery = (request, options = {}) => {\n    const { headers, query = {} } = HttpRequest.clone(request);\n    for (const name of Object.keys(headers)) {\n        const lname = name.toLowerCase();\n        if ((lname.slice(0, 6) === \"x-amz-\" && !options.unhoistableHeaders?.has(lname)) ||\n            options.hoistableHeaders?.has(lname)) {\n            query[name] = headers[name];\n            delete headers[name];\n        }\n    }\n    return {\n        ...request,\n        headers,\n        query,\n    };\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { GENERATED_HEADERS } from \"./constants\";\nexport const prepareRequest = (request) => {\n    request = HttpRequest.clone(request);\n    for (const headerName of Object.keys(request.headers)) {\n        if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n            delete request.headers[headerName];\n        }\n    }\n    return request;\n};\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\nexport const getCanonicalQuery = ({ query = {} }) => {\n    const keys = [];\n    const serialized = {};\n    for (const key of Object.keys(query)) {\n        if (key.toLowerCase() === SIGNATURE_HEADER) {\n            continue;\n        }\n        const encodedKey = escapeUri(key);\n        keys.push(encodedKey);\n        const value = query[key];\n        if (typeof value === \"string\") {\n            serialized[encodedKey] = `${encodedKey}=${escapeUri(value)}`;\n        }\n        else if (Array.isArray(value)) {\n            serialized[encodedKey] = value\n                .slice(0)\n                .reduce((encoded, value) => encoded.concat([`${encodedKey}=${escapeUri(value)}`]), [])\n                .sort()\n                .join(\"&\");\n        }\n    }\n    return keys\n        .sort()\n        .map((key) => serialized[key])\n        .filter((serialized) => serialized)\n        .join(\"&\");\n};\n","export const iso8601 = (time) => toDate(time)\n    .toISOString()\n    .replace(/\\.\\d{3}Z$/, \"Z\");\nexport const toDate = (time) => {\n    if (typeof time === \"number\") {\n        return new Date(time * 1000);\n    }\n    if (typeof time === \"string\") {\n        if (Number(time)) {\n            return new Date(Number(time) * 1000);\n        }\n        return new Date(time);\n    }\n    return time;\n};\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nimport { escapeUri } from \"@smithy/util-uri-escape\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { iso8601 } from \"./utilDate\";\nexport class SignatureV4Base {\n    service;\n    regionProvider;\n    credentialProvider;\n    sha256;\n    uriEscapePath;\n    applyChecksum;\n    constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n        this.service = service;\n        this.sha256 = sha256;\n        this.uriEscapePath = uriEscapePath;\n        this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n        this.regionProvider = normalizeProvider(region);\n        this.credentialProvider = normalizeProvider(credentials);\n    }\n    createCanonicalRequest(request, canonicalHeaders, payloadHash) {\n        const sortedHeaders = Object.keys(canonicalHeaders).sort();\n        return `${request.method}\n${this.getCanonicalPath(request)}\n${getCanonicalQuery(request)}\n${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join(\"\\n\")}\n\n${sortedHeaders.join(\";\")}\n${payloadHash}`;\n    }\n    async createStringToSign(longDate, credentialScope, canonicalRequest, algorithmIdentifier) {\n        const hash = new this.sha256();\n        hash.update(toUint8Array(canonicalRequest));\n        const hashedRequest = await hash.digest();\n        return `${algorithmIdentifier}\n${longDate}\n${credentialScope}\n${toHex(hashedRequest)}`;\n    }\n    getCanonicalPath({ path }) {\n        if (this.uriEscapePath) {\n            const normalizedPathSegments = [];\n            for (const pathSegment of path.split(\"/\")) {\n                if (pathSegment?.length === 0)\n                    continue;\n                if (pathSegment === \".\")\n                    continue;\n                if (pathSegment === \"..\") {\n                    normalizedPathSegments.pop();\n                }\n                else {\n                    normalizedPathSegments.push(pathSegment);\n                }\n            }\n            const normalizedPath = `${path?.startsWith(\"/\") ? \"/\" : \"\"}${normalizedPathSegments.join(\"/\")}${normalizedPathSegments.length > 0 && path?.endsWith(\"/\") ? \"/\" : \"\"}`;\n            const doubleEncoded = escapeUri(normalizedPath);\n            return doubleEncoded.replace(/%2F/g, \"/\");\n        }\n        return path;\n    }\n    validateResolvedCredentials(credentials) {\n        if (typeof credentials !== \"object\" ||\n            typeof credentials.accessKeyId !== \"string\" ||\n            typeof credentials.secretAccessKey !== \"string\") {\n            throw new Error(\"Resolved credential object is not valid\");\n        }\n    }\n    formatDate(now) {\n        const longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n        return {\n            longDate,\n            shortDate: longDate.slice(0, 8),\n        };\n    }\n    getCanonicalHeaderList(headers) {\n        return Object.keys(headers).sort().join(\";\");\n    }\n}\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { HeaderFormatter } from \"./HeaderFormatter\";\nimport { hasHeader } from \"./headerUtil\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { SignatureV4Base } from \"./SignatureV4Base\";\nexport class SignatureV4 extends SignatureV4Base {\n    headerFormatter = new HeaderFormatter();\n    constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n        super({\n            applyChecksum,\n            credentials,\n            region,\n            service,\n            sha256,\n            uriEscapePath,\n        });\n    }\n    async presign(originalRequest, options = {}) {\n        const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, hoistableHeaders, signingRegion, signingService, } = options;\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const { longDate, shortDate } = this.formatDate(signingDate);\n        if (expiresIn > MAX_PRESIGNED_TTL) {\n            return Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\");\n        }\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        const request = moveHeadersToQuery(prepareRequest(originalRequest), { unhoistableHeaders, hoistableHeaders });\n        if (credentials.sessionToken) {\n            request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n        }\n        request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n        request.query[CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;\n        request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n        request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n        const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n        request.query[SIGNED_HEADERS_QUERY_PARAM] = this.getCanonicalHeaderList(canonicalHeaders);\n        request.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await getPayloadHash(originalRequest, this.sha256)));\n        return request;\n    }\n    async sign(toSign, options) {\n        if (typeof toSign === \"string\") {\n            return this.signString(toSign, options);\n        }\n        else if (toSign.headers && toSign.payload) {\n            return this.signEvent(toSign, options);\n        }\n        else if (toSign.message) {\n            return this.signMessage(toSign, options);\n        }\n        else {\n            return this.signRequest(toSign, options);\n        }\n    }\n    async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {\n        const region = signingRegion ?? (await this.regionProvider());\n        const { shortDate, longDate } = this.formatDate(signingDate);\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        const hashedPayload = await getPayloadHash({ headers: {}, body: payload }, this.sha256);\n        const hash = new this.sha256();\n        hash.update(headers);\n        const hashedHeaders = toHex(await hash.digest());\n        const stringToSign = [\n            EVENT_ALGORITHM_IDENTIFIER,\n            longDate,\n            scope,\n            priorSignature,\n            hashedHeaders,\n            hashedPayload,\n        ].join(\"\\n\");\n        return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });\n    }\n    async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {\n        const promise = this.signEvent({\n            headers: this.headerFormatter.format(signableMessage.message.headers),\n            payload: signableMessage.message.body,\n        }, {\n            signingDate,\n            signingRegion,\n            signingService,\n            priorSignature: signableMessage.priorSignature,\n        });\n        return promise.then((signature) => {\n            return { message: signableMessage.message, signature };\n        });\n    }\n    async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const { shortDate } = this.formatDate(signingDate);\n        const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));\n        hash.update(toUint8Array(stringToSign));\n        return toHex(await hash.digest());\n    }\n    async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const request = prepareRequest(requestToSign);\n        const { longDate, shortDate } = this.formatDate(signingDate);\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        request.headers[AMZ_DATE_HEADER] = longDate;\n        if (credentials.sessionToken) {\n            request.headers[TOKEN_HEADER] = credentials.sessionToken;\n        }\n        const payloadHash = await getPayloadHash(request, this.sha256);\n        if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n            request.headers[SHA256_HEADER] = payloadHash;\n        }\n        const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n        const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));\n        request.headers[AUTH_HEADER] =\n            `${ALGORITHM_IDENTIFIER} ` +\n                `Credential=${credentials.accessKeyId}/${scope}, ` +\n                `SignedHeaders=${this.getCanonicalHeaderList(canonicalHeaders)}, ` +\n                `Signature=${signature}`;\n        return request;\n    }\n    async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {\n        const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest, ALGORITHM_IDENTIFIER);\n        const hash = new this.sha256(await keyPromise);\n        hash.update(toUint8Array(stringToSign));\n        return toHex(await hash.digest());\n    }\n    getSigningKey(credentials, region, shortDate, service) {\n        return getSigningKey(this.sha256, credentials, shortDate, region, service || this.service);\n    }\n}\n","import { setCredentialFeature } from \"@aws-sdk/core/client\";\nimport { doesIdentityRequireRefresh, isIdentityExpired, memoizeIdentityProvider, normalizeProvider, } from \"@smithy/core\";\nimport { SignatureV4 } from \"@smithy/signature-v4\";\nexport const resolveAwsSdkSigV4Config = (config) => {\n    let inputCredentials = config.credentials;\n    let isUserSupplied = !!config.credentials;\n    let resolvedCredentials = undefined;\n    Object.defineProperty(config, \"credentials\", {\n        set(credentials) {\n            if (credentials && credentials !== inputCredentials && credentials !== resolvedCredentials) {\n                isUserSupplied = true;\n            }\n            inputCredentials = credentials;\n            const memoizedProvider = normalizeCredentialProvider(config, {\n                credentials: inputCredentials,\n                credentialDefaultProvider: config.credentialDefaultProvider,\n            });\n            const boundProvider = bindCallerConfig(config, memoizedProvider);\n            if (isUserSupplied && !boundProvider.attributed) {\n                const isCredentialObject = typeof inputCredentials === \"object\" && inputCredentials !== null;\n                resolvedCredentials = async (options) => {\n                    const creds = await boundProvider(options);\n                    const attributedCreds = creds;\n                    if (isCredentialObject && (!attributedCreds.$source || Object.keys(attributedCreds.$source).length === 0)) {\n                        return setCredentialFeature(attributedCreds, \"CREDENTIALS_CODE\", \"e\");\n                    }\n                    return attributedCreds;\n                };\n                resolvedCredentials.memoized = boundProvider.memoized;\n                resolvedCredentials.configBound = boundProvider.configBound;\n                resolvedCredentials.attributed = true;\n            }\n            else {\n                resolvedCredentials = boundProvider;\n            }\n        },\n        get() {\n            return resolvedCredentials;\n        },\n        enumerable: true,\n        configurable: true,\n    });\n    config.credentials = inputCredentials;\n    const { signingEscapePath = true, systemClockOffset = config.systemClockOffset || 0, sha256, } = config;\n    let signer;\n    if (config.signer) {\n        signer = normalizeProvider(config.signer);\n    }\n    else if (config.regionInfoProvider) {\n        signer = () => normalizeProvider(config.region)()\n            .then(async (region) => [\n            (await config.regionInfoProvider(region, {\n                useFipsEndpoint: await config.useFipsEndpoint(),\n                useDualstackEndpoint: await config.useDualstackEndpoint(),\n            })) || {},\n            region,\n        ])\n            .then(([regionInfo, region]) => {\n            const { signingRegion, signingService } = regionInfo;\n            config.signingRegion = config.signingRegion || signingRegion || region;\n            config.signingName = config.signingName || signingService || config.serviceId;\n            const params = {\n                ...config,\n                credentials: config.credentials,\n                region: config.signingRegion,\n                service: config.signingName,\n                sha256,\n                uriEscapePath: signingEscapePath,\n            };\n            const SignerCtor = config.signerConstructor || SignatureV4;\n            return new SignerCtor(params);\n        });\n    }\n    else {\n        signer = async (authScheme) => {\n            authScheme = Object.assign({}, {\n                name: \"sigv4\",\n                signingName: config.signingName || config.defaultSigningName,\n                signingRegion: await normalizeProvider(config.region)(),\n                properties: {},\n            }, authScheme);\n            const signingRegion = authScheme.signingRegion;\n            const signingService = authScheme.signingName;\n            config.signingRegion = config.signingRegion || signingRegion;\n            config.signingName = config.signingName || signingService || config.serviceId;\n            const params = {\n                ...config,\n                credentials: config.credentials,\n                region: config.signingRegion,\n                service: config.signingName,\n                sha256,\n                uriEscapePath: signingEscapePath,\n            };\n            const SignerCtor = config.signerConstructor || SignatureV4;\n            return new SignerCtor(params);\n        };\n    }\n    const resolvedConfig = Object.assign(config, {\n        systemClockOffset,\n        signingEscapePath,\n        signer,\n    });\n    return resolvedConfig;\n};\nexport const resolveAWSSDKSigV4Config = resolveAwsSdkSigV4Config;\nfunction normalizeCredentialProvider(config, { credentials, credentialDefaultProvider, }) {\n    let credentialsProvider;\n    if (credentials) {\n        if (!credentials?.memoized) {\n            credentialsProvider = memoizeIdentityProvider(credentials, isIdentityExpired, doesIdentityRequireRefresh);\n        }\n        else {\n            credentialsProvider = credentials;\n        }\n    }\n    else {\n        if (credentialDefaultProvider) {\n            credentialsProvider = normalizeProvider(credentialDefaultProvider(Object.assign({}, config, {\n                parentClientConfig: config,\n            })));\n        }\n        else {\n            credentialsProvider = async () => {\n                throw new Error(\"@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.\");\n            };\n        }\n    }\n    credentialsProvider.memoized = true;\n    return credentialsProvider;\n}\nfunction bindCallerConfig(config, credentialsProvider) {\n    if (credentialsProvider.configBound) {\n        return credentialsProvider;\n    }\n    const fn = async (options) => credentialsProvider({ ...options, callerClientConfig: config });\n    fn.memoized = credentialsProvider.memoized;\n    fn.configBound = true;\n    return fn;\n}\n","const TEXT_ENCODER = typeof TextEncoder == \"function\" ? new TextEncoder() : null;\nexport const calculateBodyLength = (body) => {\n    if (typeof body === \"string\") {\n        if (TEXT_ENCODER) {\n            return TEXT_ENCODER.encode(body).byteLength;\n        }\n        let len = body.length;\n        for (let i = len - 1; i >= 0; i--) {\n            const code = body.charCodeAt(i);\n            if (code > 0x7f && code <= 0x7ff)\n                len++;\n            else if (code > 0x7ff && code <= 0xffff)\n                len += 2;\n            if (code >= 0xdc00 && code <= 0xdfff)\n                i--;\n        }\n        return len;\n    }\n    else if (typeof body.byteLength === \"number\") {\n        return body.byteLength;\n    }\n    else if (typeof body.size === \"number\") {\n        return body.size;\n    }\n    throw new Error(`Body Length computation failed for ${body}`);\n};\n","const getAllAliases = (name, aliases) => {\n    const _aliases = [];\n    if (name) {\n        _aliases.push(name);\n    }\n    if (aliases) {\n        for (const alias of aliases) {\n            _aliases.push(alias);\n        }\n    }\n    return _aliases;\n};\nconst getMiddlewareNameWithAliases = (name, aliases) => {\n    return `${name || \"anonymous\"}${aliases && aliases.length > 0 ? ` (a.k.a. ${aliases.join(\",\")})` : \"\"}`;\n};\nexport const constructStack = () => {\n    let absoluteEntries = [];\n    let relativeEntries = [];\n    let identifyOnResolve = false;\n    const entriesNameSet = new Set();\n    const sort = (entries) => entries.sort((a, b) => stepWeights[b.step] - stepWeights[a.step] ||\n        priorityWeights[b.priority || \"normal\"] - priorityWeights[a.priority || \"normal\"]);\n    const removeByName = (toRemove) => {\n        let isRemoved = false;\n        const filterCb = (entry) => {\n            const aliases = getAllAliases(entry.name, entry.aliases);\n            if (aliases.includes(toRemove)) {\n                isRemoved = true;\n                for (const alias of aliases) {\n                    entriesNameSet.delete(alias);\n                }\n                return false;\n            }\n            return true;\n        };\n        absoluteEntries = absoluteEntries.filter(filterCb);\n        relativeEntries = relativeEntries.filter(filterCb);\n        return isRemoved;\n    };\n    const removeByReference = (toRemove) => {\n        let isRemoved = false;\n        const filterCb = (entry) => {\n            if (entry.middleware === toRemove) {\n                isRemoved = true;\n                for (const alias of getAllAliases(entry.name, entry.aliases)) {\n                    entriesNameSet.delete(alias);\n                }\n                return false;\n            }\n            return true;\n        };\n        absoluteEntries = absoluteEntries.filter(filterCb);\n        relativeEntries = relativeEntries.filter(filterCb);\n        return isRemoved;\n    };\n    const cloneTo = (toStack) => {\n        absoluteEntries.forEach((entry) => {\n            toStack.add(entry.middleware, { ...entry });\n        });\n        relativeEntries.forEach((entry) => {\n            toStack.addRelativeTo(entry.middleware, { ...entry });\n        });\n        toStack.identifyOnResolve?.(stack.identifyOnResolve());\n        return toStack;\n    };\n    const expandRelativeMiddlewareList = (from) => {\n        const expandedMiddlewareList = [];\n        from.before.forEach((entry) => {\n            if (entry.before.length === 0 && entry.after.length === 0) {\n                expandedMiddlewareList.push(entry);\n            }\n            else {\n                expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n            }\n        });\n        expandedMiddlewareList.push(from);\n        from.after.reverse().forEach((entry) => {\n            if (entry.before.length === 0 && entry.after.length === 0) {\n                expandedMiddlewareList.push(entry);\n            }\n            else {\n                expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n            }\n        });\n        return expandedMiddlewareList;\n    };\n    const getMiddlewareList = (debug = false) => {\n        const normalizedAbsoluteEntries = [];\n        const normalizedRelativeEntries = [];\n        const normalizedEntriesNameMap = {};\n        absoluteEntries.forEach((entry) => {\n            const normalizedEntry = {\n                ...entry,\n                before: [],\n                after: [],\n            };\n            for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n                normalizedEntriesNameMap[alias] = normalizedEntry;\n            }\n            normalizedAbsoluteEntries.push(normalizedEntry);\n        });\n        relativeEntries.forEach((entry) => {\n            const normalizedEntry = {\n                ...entry,\n                before: [],\n                after: [],\n            };\n            for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n                normalizedEntriesNameMap[alias] = normalizedEntry;\n            }\n            normalizedRelativeEntries.push(normalizedEntry);\n        });\n        normalizedRelativeEntries.forEach((entry) => {\n            if (entry.toMiddleware) {\n                const toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];\n                if (toMiddleware === undefined) {\n                    if (debug) {\n                        return;\n                    }\n                    throw new Error(`${entry.toMiddleware} is not found when adding ` +\n                        `${getMiddlewareNameWithAliases(entry.name, entry.aliases)} ` +\n                        `middleware ${entry.relation} ${entry.toMiddleware}`);\n                }\n                if (entry.relation === \"after\") {\n                    toMiddleware.after.push(entry);\n                }\n                if (entry.relation === \"before\") {\n                    toMiddleware.before.push(entry);\n                }\n            }\n        });\n        const mainChain = sort(normalizedAbsoluteEntries)\n            .map(expandRelativeMiddlewareList)\n            .reduce((wholeList, expandedMiddlewareList) => {\n            wholeList.push(...expandedMiddlewareList);\n            return wholeList;\n        }, []);\n        return mainChain;\n    };\n    const stack = {\n        add: (middleware, options = {}) => {\n            const { name, override, aliases: _aliases } = options;\n            const entry = {\n                step: \"initialize\",\n                priority: \"normal\",\n                middleware,\n                ...options,\n            };\n            const aliases = getAllAliases(name, _aliases);\n            if (aliases.length > 0) {\n                if (aliases.some((alias) => entriesNameSet.has(alias))) {\n                    if (!override)\n                        throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n                    for (const alias of aliases) {\n                        const toOverrideIndex = absoluteEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n                        if (toOverrideIndex === -1) {\n                            continue;\n                        }\n                        const toOverride = absoluteEntries[toOverrideIndex];\n                        if (toOverride.step !== entry.step || entry.priority !== toOverride.priority) {\n                            throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware with ` +\n                                `${toOverride.priority} priority in ${toOverride.step} step cannot ` +\n                                `be overridden by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware with ` +\n                                `${entry.priority} priority in ${entry.step} step.`);\n                        }\n                        absoluteEntries.splice(toOverrideIndex, 1);\n                    }\n                }\n                for (const alias of aliases) {\n                    entriesNameSet.add(alias);\n                }\n            }\n            absoluteEntries.push(entry);\n        },\n        addRelativeTo: (middleware, options) => {\n            const { name, override, aliases: _aliases } = options;\n            const entry = {\n                middleware,\n                ...options,\n            };\n            const aliases = getAllAliases(name, _aliases);\n            if (aliases.length > 0) {\n                if (aliases.some((alias) => entriesNameSet.has(alias))) {\n                    if (!override)\n                        throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n                    for (const alias of aliases) {\n                        const toOverrideIndex = relativeEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n                        if (toOverrideIndex === -1) {\n                            continue;\n                        }\n                        const toOverride = relativeEntries[toOverrideIndex];\n                        if (toOverride.toMiddleware !== entry.toMiddleware || toOverride.relation !== entry.relation) {\n                            throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware ` +\n                                `${toOverride.relation} \"${toOverride.toMiddleware}\" middleware cannot be overridden ` +\n                                `by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware ${entry.relation} ` +\n                                `\"${entry.toMiddleware}\" middleware.`);\n                        }\n                        relativeEntries.splice(toOverrideIndex, 1);\n                    }\n                }\n                for (const alias of aliases) {\n                    entriesNameSet.add(alias);\n                }\n            }\n            relativeEntries.push(entry);\n        },\n        clone: () => cloneTo(constructStack()),\n        use: (plugin) => {\n            plugin.applyToStack(stack);\n        },\n        remove: (toRemove) => {\n            if (typeof toRemove === \"string\")\n                return removeByName(toRemove);\n            else\n                return removeByReference(toRemove);\n        },\n        removeByTag: (toRemove) => {\n            let isRemoved = false;\n            const filterCb = (entry) => {\n                const { tags, name, aliases: _aliases } = entry;\n                if (tags && tags.includes(toRemove)) {\n                    const aliases = getAllAliases(name, _aliases);\n                    for (const alias of aliases) {\n                        entriesNameSet.delete(alias);\n                    }\n                    isRemoved = true;\n                    return false;\n                }\n                return true;\n            };\n            absoluteEntries = absoluteEntries.filter(filterCb);\n            relativeEntries = relativeEntries.filter(filterCb);\n            return isRemoved;\n        },\n        concat: (from) => {\n            const cloned = cloneTo(constructStack());\n            cloned.use(from);\n            cloned.identifyOnResolve(identifyOnResolve || cloned.identifyOnResolve() || (from.identifyOnResolve?.() ?? false));\n            return cloned;\n        },\n        applyToStack: cloneTo,\n        identify: () => {\n            return getMiddlewareList(true).map((mw) => {\n                const step = mw.step ??\n                    mw.relation +\n                        \" \" +\n                        mw.toMiddleware;\n                return getMiddlewareNameWithAliases(mw.name, mw.aliases) + \" - \" + step;\n            });\n        },\n        identifyOnResolve(toggle) {\n            if (typeof toggle === \"boolean\")\n                identifyOnResolve = toggle;\n            return identifyOnResolve;\n        },\n        resolve: (handler, context) => {\n            for (const middleware of getMiddlewareList()\n                .map((entry) => entry.middleware)\n                .reverse()) {\n                handler = middleware(handler, context);\n            }\n            if (identifyOnResolve) {\n                console.log(stack.identify());\n            }\n            return handler;\n        },\n    };\n    return stack;\n};\nconst stepWeights = {\n    initialize: 5,\n    serialize: 4,\n    build: 3,\n    finalizeRequest: 2,\n    deserialize: 1,\n};\nconst priorityWeights = {\n    high: 3,\n    normal: 2,\n    low: 1,\n};\n","import { constructStack } from \"@smithy/middleware-stack\";\nexport class Client {\n    config;\n    middlewareStack = constructStack();\n    initConfig;\n    handlers;\n    constructor(config) {\n        this.config = config;\n        const { protocol, protocolSettings } = config;\n        if (protocolSettings) {\n            if (typeof protocol === \"function\") {\n                config.protocol = new protocol(protocolSettings);\n            }\n        }\n    }\n    send(command, optionsOrCb, cb) {\n        const options = typeof optionsOrCb !== \"function\" ? optionsOrCb : undefined;\n        const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n        const useHandlerCache = options === undefined && this.config.cacheMiddleware === true;\n        let handler;\n        if (useHandlerCache) {\n            if (!this.handlers) {\n                this.handlers = new WeakMap();\n            }\n            const handlers = this.handlers;\n            if (handlers.has(command.constructor)) {\n                handler = handlers.get(command.constructor);\n            }\n            else {\n                handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n                handlers.set(command.constructor, handler);\n            }\n        }\n        else {\n            delete this.handlers;\n            handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n        }\n        if (callback) {\n            handler(command)\n                .then((result) => callback(null, result.output), (err) => callback(err))\n                .catch(() => { });\n        }\n        else {\n            return handler(command).then((result) => result.output);\n        }\n    }\n    destroy() {\n        this.config?.requestHandler?.destroy?.();\n        delete this.handlers;\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nconst SENSITIVE_STRING = \"***SensitiveInformation***\";\nexport function schemaLogFilter(schema, data) {\n    if (data == null) {\n        return data;\n    }\n    const ns = NormalizedSchema.of(schema);\n    if (ns.getMergedTraits().sensitive) {\n        return SENSITIVE_STRING;\n    }\n    if (ns.isListSchema()) {\n        const isSensitive = !!ns.getValueSchema().getMergedTraits().sensitive;\n        if (isSensitive) {\n            return SENSITIVE_STRING;\n        }\n    }\n    else if (ns.isMapSchema()) {\n        const isSensitive = !!ns.getKeySchema().getMergedTraits().sensitive || !!ns.getValueSchema().getMergedTraits().sensitive;\n        if (isSensitive) {\n            return SENSITIVE_STRING;\n        }\n    }\n    else if (ns.isStructSchema() && typeof data === \"object\") {\n        const object = data;\n        const newObject = {};\n        for (const [member, memberNs] of ns.structIterator()) {\n            if (object[member] != null) {\n                newObject[member] = schemaLogFilter(memberNs, object[member]);\n            }\n        }\n        return newObject;\n    }\n    return data;\n}\n","import { constructStack } from \"@smithy/middleware-stack\";\nimport { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nimport { schemaLogFilter } from \"./schemaLogFilter\";\nexport class Command {\n    middlewareStack = constructStack();\n    schema;\n    static classBuilder() {\n        return new ClassBuilder();\n    }\n    resolveMiddlewareWithContext(clientStack, configuration, options, { middlewareFn, clientName, commandName, inputFilterSensitiveLog, outputFilterSensitiveLog, smithyContext, additionalContext, CommandCtor, }) {\n        for (const mw of middlewareFn.bind(this)(CommandCtor, clientStack, configuration, options)) {\n            this.middlewareStack.use(mw);\n        }\n        const stack = clientStack.concat(this.middlewareStack);\n        const { logger } = configuration;\n        const handlerExecutionContext = {\n            logger,\n            clientName,\n            commandName,\n            inputFilterSensitiveLog,\n            outputFilterSensitiveLog,\n            [SMITHY_CONTEXT_KEY]: {\n                commandInstance: this,\n                ...smithyContext,\n            },\n            ...additionalContext,\n        };\n        const { requestHandler } = configuration;\n        return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);\n    }\n}\nclass ClassBuilder {\n    _init = () => { };\n    _ep = {};\n    _middlewareFn = () => [];\n    _commandName = \"\";\n    _clientName = \"\";\n    _additionalContext = {};\n    _smithyContext = {};\n    _inputFilterSensitiveLog = undefined;\n    _outputFilterSensitiveLog = undefined;\n    _serializer = null;\n    _deserializer = null;\n    _operationSchema;\n    init(cb) {\n        this._init = cb;\n    }\n    ep(endpointParameterInstructions) {\n        this._ep = endpointParameterInstructions;\n        return this;\n    }\n    m(middlewareSupplier) {\n        this._middlewareFn = middlewareSupplier;\n        return this;\n    }\n    s(service, operation, smithyContext = {}) {\n        this._smithyContext = {\n            service,\n            operation,\n            ...smithyContext,\n        };\n        return this;\n    }\n    c(additionalContext = {}) {\n        this._additionalContext = additionalContext;\n        return this;\n    }\n    n(clientName, commandName) {\n        this._clientName = clientName;\n        this._commandName = commandName;\n        return this;\n    }\n    f(inputFilter = (_) => _, outputFilter = (_) => _) {\n        this._inputFilterSensitiveLog = inputFilter;\n        this._outputFilterSensitiveLog = outputFilter;\n        return this;\n    }\n    ser(serializer) {\n        this._serializer = serializer;\n        return this;\n    }\n    de(deserializer) {\n        this._deserializer = deserializer;\n        return this;\n    }\n    sc(operation) {\n        this._operationSchema = operation;\n        this._smithyContext.operationSchema = operation;\n        return this;\n    }\n    build() {\n        const closure = this;\n        let CommandRef;\n        return (CommandRef = class extends Command {\n            input;\n            static getEndpointParameterInstructions() {\n                return closure._ep;\n            }\n            constructor(...[input]) {\n                super();\n                this.input = input ?? {};\n                closure._init(this);\n                this.schema = closure._operationSchema;\n            }\n            resolveMiddleware(stack, configuration, options) {\n                const op = closure._operationSchema;\n                const input = op?.[4] ?? op?.input;\n                const output = op?.[5] ?? op?.output;\n                return this.resolveMiddlewareWithContext(stack, configuration, options, {\n                    CommandCtor: CommandRef,\n                    middlewareFn: closure._middlewareFn,\n                    clientName: closure._clientName,\n                    commandName: closure._commandName,\n                    inputFilterSensitiveLog: closure._inputFilterSensitiveLog ?? (op ? schemaLogFilter.bind(null, input) : (_) => _),\n                    outputFilterSensitiveLog: closure._outputFilterSensitiveLog ?? (op ? schemaLogFilter.bind(null, output) : (_) => _),\n                    smithyContext: closure._smithyContext,\n                    additionalContext: closure._additionalContext,\n                });\n            }\n            serialize = closure._serializer;\n            deserialize = closure._deserializer;\n        });\n    }\n}\n","export class ServiceException extends Error {\n    $fault;\n    $response;\n    $retryable;\n    $metadata;\n    constructor(options) {\n        super(options.message);\n        Object.setPrototypeOf(this, Object.getPrototypeOf(this).constructor.prototype);\n        this.name = options.name;\n        this.$fault = options.$fault;\n        this.$metadata = options.$metadata;\n    }\n    static isInstance(value) {\n        if (!value)\n            return false;\n        const candidate = value;\n        return (ServiceException.prototype.isPrototypeOf(candidate) ||\n            (Boolean(candidate.$fault) &&\n                Boolean(candidate.$metadata) &&\n                (candidate.$fault === \"client\" || candidate.$fault === \"server\")));\n    }\n    static [Symbol.hasInstance](instance) {\n        if (!instance)\n            return false;\n        const candidate = instance;\n        if (this === ServiceException) {\n            return ServiceException.isInstance(instance);\n        }\n        if (ServiceException.isInstance(instance)) {\n            if (candidate.name && this.name) {\n                return this.prototype.isPrototypeOf(instance) || candidate.name === this.name;\n            }\n            return this.prototype.isPrototypeOf(instance);\n        }\n        return false;\n    }\n}\nexport const decorateServiceException = (exception, additions = {}) => {\n    Object.entries(additions)\n        .filter(([, v]) => v !== undefined)\n        .forEach(([k, v]) => {\n        if (exception[k] == undefined || exception[k] === \"\") {\n            exception[k] = v;\n        }\n    });\n    const message = exception.message || exception.Message || \"UnknownError\";\n    exception.message = message;\n    delete exception.Message;\n    return exception;\n};\n","export const loadConfigsForDefaultMode = (mode) => {\n    switch (mode) {\n        case \"standard\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 3100,\n            };\n        case \"in-region\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 1100,\n            };\n        case \"cross-region\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 3100,\n            };\n        case \"mobile\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 30000,\n            };\n        default:\n            return {};\n    }\n};\n","import { AlgorithmId } from \"@smithy/types\";\nexport { AlgorithmId };\nexport const getChecksumConfiguration = (runtimeConfig) => {\n    const checksumAlgorithms = [];\n    for (const id in AlgorithmId) {\n        const algorithmId = AlgorithmId[id];\n        if (runtimeConfig[algorithmId] === undefined) {\n            continue;\n        }\n        checksumAlgorithms.push({\n            algorithmId: () => algorithmId,\n            checksumConstructor: () => runtimeConfig[algorithmId],\n        });\n    }\n    return {\n        addChecksumAlgorithm(algo) {\n            checksumAlgorithms.push(algo);\n        },\n        checksumAlgorithms() {\n            return checksumAlgorithms;\n        },\n    };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n    const runtimeConfig = {};\n    clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n        runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n    });\n    return runtimeConfig;\n};\n","export const getRetryConfiguration = (runtimeConfig) => {\n    return {\n        setRetryStrategy(retryStrategy) {\n            runtimeConfig.retryStrategy = retryStrategy;\n        },\n        retryStrategy() {\n            return runtimeConfig.retryStrategy;\n        },\n    };\n};\nexport const resolveRetryRuntimeConfig = (retryStrategyConfiguration) => {\n    const runtimeConfig = {};\n    runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();\n    return runtimeConfig;\n};\n","import { getChecksumConfiguration, resolveChecksumRuntimeConfig } from \"./checksum\";\nimport { getRetryConfiguration, resolveRetryRuntimeConfig } from \"./retry\";\nexport const getDefaultExtensionConfiguration = (runtimeConfig) => {\n    return Object.assign(getChecksumConfiguration(runtimeConfig), getRetryConfiguration(runtimeConfig));\n};\nexport const getDefaultClientConfiguration = getDefaultExtensionConfiguration;\nexport const resolveDefaultRuntimeConfig = (config) => {\n    return Object.assign(resolveChecksumRuntimeConfig(config), resolveRetryRuntimeConfig(config));\n};\n","export const getValueFromTextNode = (obj) => {\n    const textNodeName = \"#text\";\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key) && obj[key][textNodeName] !== undefined) {\n            obj[key] = obj[key][textNodeName];\n        }\n        else if (typeof obj[key] === \"object\" && obj[key] !== null) {\n            obj[key] = getValueFromTextNode(obj[key]);\n        }\n    }\n    return obj;\n};\n","export class NoOpLogger {\n    trace() { }\n    debug() { }\n    info() { }\n    warn() { }\n    error() { }\n}\n","import { NormalizedSchema, TypeRegistry } from \"@smithy/core/schema\";\nimport { decorateServiceException } from \"@smithy/smithy-client\";\nexport class ProtocolLib {\n    queryCompat;\n    constructor(queryCompat = false) {\n        this.queryCompat = queryCompat;\n    }\n    resolveRestContentType(defaultContentType, inputSchema) {\n        const members = inputSchema.getMemberSchemas();\n        const httpPayloadMember = Object.values(members).find((m) => {\n            return !!m.getMergedTraits().httpPayload;\n        });\n        if (httpPayloadMember) {\n            const mediaType = httpPayloadMember.getMergedTraits().mediaType;\n            if (mediaType) {\n                return mediaType;\n            }\n            else if (httpPayloadMember.isStringSchema()) {\n                return \"text/plain\";\n            }\n            else if (httpPayloadMember.isBlobSchema()) {\n                return \"application/octet-stream\";\n            }\n            else {\n                return defaultContentType;\n            }\n        }\n        else if (!inputSchema.isUnitSchema()) {\n            const hasBody = Object.values(members).find((m) => {\n                const { httpQuery, httpQueryParams, httpHeader, httpLabel, httpPrefixHeaders } = m.getMergedTraits();\n                const noPrefixHeaders = httpPrefixHeaders === void 0;\n                return !httpQuery && !httpQueryParams && !httpHeader && !httpLabel && noPrefixHeaders;\n            });\n            if (hasBody) {\n                return defaultContentType;\n            }\n        }\n    }\n    async getErrorSchemaOrThrowBaseException(errorIdentifier, defaultNamespace, response, dataObject, metadata, getErrorSchema) {\n        let namespace = defaultNamespace;\n        let errorName = errorIdentifier;\n        if (errorIdentifier.includes(\"#\")) {\n            [namespace, errorName] = errorIdentifier.split(\"#\");\n        }\n        const errorMetadata = {\n            $metadata: metadata,\n            $fault: response.statusCode < 500 ? \"client\" : \"server\",\n        };\n        const registry = TypeRegistry.for(namespace);\n        try {\n            const errorSchema = getErrorSchema?.(registry, errorName) ?? registry.getSchema(errorIdentifier);\n            return { errorSchema, errorMetadata };\n        }\n        catch (e) {\n            dataObject.message = dataObject.message ?? dataObject.Message ?? \"UnknownError\";\n            const synthetic = TypeRegistry.for(\"smithy.ts.sdk.synthetic.\" + namespace);\n            const baseExceptionSchema = synthetic.getBaseException();\n            if (baseExceptionSchema) {\n                const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;\n                throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);\n            }\n            throw this.decorateServiceException(Object.assign(new Error(errorName), errorMetadata), dataObject);\n        }\n    }\n    decorateServiceException(exception, additions = {}) {\n        if (this.queryCompat) {\n            const msg = exception.Message ?? additions.Message;\n            const error = decorateServiceException(exception, additions);\n            if (msg) {\n                error.message = msg;\n            }\n            error.Error = {\n                ...error.Error,\n                Type: error.Error.Type,\n                Code: error.Error.Code,\n                Message: error.Error.message ?? error.Error.Message ?? msg,\n            };\n            const reqId = error.$metadata.requestId;\n            if (reqId) {\n                error.RequestId = reqId;\n            }\n            return error;\n        }\n        return decorateServiceException(exception, additions);\n    }\n    setQueryCompatError(output, response) {\n        const queryErrorHeader = response.headers?.[\"x-amzn-query-error\"];\n        if (output !== undefined && queryErrorHeader != null) {\n            const [Code, Type] = queryErrorHeader.split(\";\");\n            const entries = Object.entries(output);\n            const Error = {\n                Code,\n                Type,\n            };\n            Object.assign(output, Error);\n            for (const [k, v] of entries) {\n                Error[k === \"message\" ? \"Message\" : k] = v;\n            }\n            delete Error.__type;\n            output.Error = Error;\n        }\n    }\n    queryCompatOutput(queryCompatErrorData, errorData) {\n        if (queryCompatErrorData.Error) {\n            errorData.Error = queryCompatErrorData.Error;\n        }\n        if (queryCompatErrorData.Type) {\n            errorData.Type = queryCompatErrorData.Type;\n        }\n        if (queryCompatErrorData.Code) {\n            errorData.Code = queryCompatErrorData.Code;\n        }\n    }\n    findQueryCompatibleError(registry, errorName) {\n        try {\n            return registry.getSchema(errorName);\n        }\n        catch (e) {\n            return registry.find((schema) => NormalizedSchema.of(schema).getMergedTraits().awsQueryError?.[0] === errorName);\n        }\n    }\n}\n","export class SerdeContextConfig {\n    serdeContext;\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n    }\n}\n","export class UnionSerde {\n    from;\n    to;\n    keys;\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n        this.keys = new Set(Object.keys(this.from).filter((k) => k !== \"__type\"));\n    }\n    mark(key) {\n        this.keys.delete(key);\n    }\n    hasUnknown() {\n        return this.keys.size === 1 && Object.keys(this.to).length === 0;\n    }\n    writeUnknown() {\n        if (this.hasUnknown()) {\n            const k = this.keys.values().next().value;\n            const v = this.from[k];\n            this.to.$unknown = [k, v];\n        }\n    }\n}\n","export function escapeAttribute(value) {\n    return value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n","export function escapeElement(value) {\n    return value\n        .replace(/&/g, \"&amp;\")\n        .replace(/\"/g, \"&quot;\")\n        .replace(/'/g, \"&apos;\")\n        .replace(/</g, \"&lt;\")\n        .replace(/>/g, \"&gt;\")\n        .replace(/\\r/g, \"&#x0D;\")\n        .replace(/\\n/g, \"&#x0A;\")\n        .replace(/\\u0085/g, \"&#x85;\")\n        .replace(/\\u2028/, \"&#x2028;\");\n}\n","import { escapeElement } from \"./escape-element\";\nexport class XmlText {\n    value;\n    constructor(value) {\n        this.value = value;\n    }\n    toString() {\n        return escapeElement(\"\" + this.value);\n    }\n}\n","import { escapeAttribute } from \"./escape-attribute\";\nimport { XmlText } from \"./XmlText\";\nexport class XmlNode {\n    name;\n    children;\n    attributes = {};\n    static of(name, childText, withName) {\n        const node = new XmlNode(name);\n        if (childText !== undefined) {\n            node.addChildNode(new XmlText(childText));\n        }\n        if (withName !== undefined) {\n            node.withName(withName);\n        }\n        return node;\n    }\n    constructor(name, children = []) {\n        this.name = name;\n        this.children = children;\n    }\n    withName(name) {\n        this.name = name;\n        return this;\n    }\n    addAttribute(name, value) {\n        this.attributes[name] = value;\n        return this;\n    }\n    addChildNode(child) {\n        this.children.push(child);\n        return this;\n    }\n    removeAttribute(name) {\n        delete this.attributes[name];\n        return this;\n    }\n    n(name) {\n        this.name = name;\n        return this;\n    }\n    c(child) {\n        this.children.push(child);\n        return this;\n    }\n    a(name, value) {\n        if (value != null) {\n            this.attributes[name] = value;\n        }\n        return this;\n    }\n    cc(input, field, withName = field) {\n        if (input[field] != null) {\n            const node = XmlNode.of(field, input[field]).withName(withName);\n            this.c(node);\n        }\n    }\n    l(input, listName, memberName, valueProvider) {\n        if (input[listName] != null) {\n            const nodes = valueProvider();\n            nodes.map((node) => {\n                node.withName(memberName);\n                this.c(node);\n            });\n        }\n    }\n    lc(input, listName, memberName, valueProvider) {\n        if (input[listName] != null) {\n            const nodes = valueProvider();\n            const containerNode = new XmlNode(memberName);\n            nodes.map((node) => {\n                containerNode.c(node);\n            });\n            this.c(containerNode);\n        }\n    }\n    toString() {\n        const hasChildren = Boolean(this.children.length);\n        let xmlText = `<${this.name}`;\n        const attributes = this.attributes;\n        for (const attributeName of Object.keys(attributes)) {\n            const attribute = attributes[attributeName];\n            if (attribute != null) {\n                xmlText += ` ${attributeName}=\"${escapeAttribute(\"\" + attribute)}\"`;\n            }\n        }\n        return (xmlText += !hasChildren ? \"/>\" : `>${this.children.map((c) => c.toString()).join(\"\")}</${this.name}>`);\n    }\n}\n","let parser;\nexport function parseXML(xmlString) {\n    if (!parser) {\n        parser = new DOMParser();\n    }\n    const xmlDocument = parser.parseFromString(xmlString, \"application/xml\");\n    if (xmlDocument.getElementsByTagName(\"parsererror\").length > 0) {\n        throw new Error(\"DOMParser XML parsing error.\");\n    }\n    const xmlToObj = (node) => {\n        if (node.nodeType === Node.TEXT_NODE) {\n            if (node.textContent?.trim()) {\n                return node.textContent;\n            }\n        }\n        if (node.nodeType === Node.ELEMENT_NODE) {\n            const element = node;\n            if (element.attributes.length === 0 && element.childNodes.length === 0) {\n                return \"\";\n            }\n            const obj = {};\n            const attributes = Array.from(element.attributes);\n            for (const attr of attributes) {\n                obj[`${attr.name}`] = attr.value;\n            }\n            const childNodes = Array.from(element.childNodes);\n            for (const child of childNodes) {\n                const childResult = xmlToObj(child);\n                if (childResult != null) {\n                    const childName = child.nodeName;\n                    if (childNodes.length === 1 && attributes.length === 0 && childName === \"#text\") {\n                        return childResult;\n                    }\n                    if (obj[childName]) {\n                        if (Array.isArray(obj[childName])) {\n                            obj[childName].push(childResult);\n                        }\n                        else {\n                            obj[childName] = [obj[childName], childResult];\n                        }\n                    }\n                    else {\n                        obj[childName] = childResult;\n                    }\n                }\n                else if (childNodes.length === 1 && attributes.length === 0) {\n                    return element.textContent;\n                }\n            }\n            return obj;\n        }\n        return null;\n    };\n    return {\n        [xmlDocument.documentElement.nodeName]: xmlToObj(xmlDocument.documentElement),\n    };\n}\n","import { parseXML } from \"@aws-sdk/xml-builder\";\nimport { FromStringShapeDeserializer } from \"@smithy/core/protocols\";\nimport { NormalizedSchema } from \"@smithy/core/schema\";\nimport { getValueFromTextNode } from \"@smithy/smithy-client\";\nimport { toUtf8 } from \"@smithy/util-utf8\";\nimport { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nimport { UnionSerde } from \"../UnionSerde\";\nexport class XmlShapeDeserializer extends SerdeContextConfig {\n    settings;\n    stringDeserializer;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n        this.stringDeserializer = new FromStringShapeDeserializer(settings);\n    }\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n        this.stringDeserializer.setSerdeContext(serdeContext);\n    }\n    read(schema, bytes, key) {\n        const ns = NormalizedSchema.of(schema);\n        const memberSchemas = ns.getMemberSchemas();\n        const isEventPayload = ns.isStructSchema() &&\n            ns.isMemberSchema() &&\n            !!Object.values(memberSchemas).find((memberNs) => {\n                return !!memberNs.getMemberTraits().eventPayload;\n            });\n        if (isEventPayload) {\n            const output = {};\n            const memberName = Object.keys(memberSchemas)[0];\n            const eventMemberSchema = memberSchemas[memberName];\n            if (eventMemberSchema.isBlobSchema()) {\n                output[memberName] = bytes;\n            }\n            else {\n                output[memberName] = this.read(memberSchemas[memberName], bytes);\n            }\n            return output;\n        }\n        const xmlString = (this.serdeContext?.utf8Encoder ?? toUtf8)(bytes);\n        const parsedObject = this.parseXml(xmlString);\n        return this.readSchema(schema, key ? parsedObject[key] : parsedObject);\n    }\n    readSchema(_schema, value) {\n        const ns = NormalizedSchema.of(_schema);\n        if (ns.isUnitSchema()) {\n            return;\n        }\n        const traits = ns.getMergedTraits();\n        if (ns.isListSchema() && !Array.isArray(value)) {\n            return this.readSchema(ns, [value]);\n        }\n        if (value == null) {\n            return value;\n        }\n        if (typeof value === \"object\") {\n            const sparse = !!traits.sparse;\n            const flat = !!traits.xmlFlattened;\n            if (ns.isListSchema()) {\n                const listValue = ns.getValueSchema();\n                const buffer = [];\n                const sourceKey = listValue.getMergedTraits().xmlName ?? \"member\";\n                const source = flat ? value : (value[0] ?? value)[sourceKey];\n                const sourceArray = Array.isArray(source) ? source : [source];\n                for (const v of sourceArray) {\n                    if (v != null || sparse) {\n                        buffer.push(this.readSchema(listValue, v));\n                    }\n                }\n                return buffer;\n            }\n            const buffer = {};\n            if (ns.isMapSchema()) {\n                const keyNs = ns.getKeySchema();\n                const memberNs = ns.getValueSchema();\n                let entries;\n                if (flat) {\n                    entries = Array.isArray(value) ? value : [value];\n                }\n                else {\n                    entries = Array.isArray(value.entry) ? value.entry : [value.entry];\n                }\n                const keyProperty = keyNs.getMergedTraits().xmlName ?? \"key\";\n                const valueProperty = memberNs.getMergedTraits().xmlName ?? \"value\";\n                for (const entry of entries) {\n                    const key = entry[keyProperty];\n                    const value = entry[valueProperty];\n                    if (value != null || sparse) {\n                        buffer[key] = this.readSchema(memberNs, value);\n                    }\n                }\n                return buffer;\n            }\n            if (ns.isStructSchema()) {\n                const union = ns.isUnionSchema();\n                let unionSerde;\n                if (union) {\n                    unionSerde = new UnionSerde(value, buffer);\n                }\n                for (const [memberName, memberSchema] of ns.structIterator()) {\n                    const memberTraits = memberSchema.getMergedTraits();\n                    const xmlObjectKey = !memberTraits.httpPayload\n                        ? memberSchema.getMemberTraits().xmlName ?? memberName\n                        : memberTraits.xmlName ?? memberSchema.getName();\n                    if (union) {\n                        unionSerde.mark(xmlObjectKey);\n                    }\n                    if (value[xmlObjectKey] != null) {\n                        buffer[memberName] = this.readSchema(memberSchema, value[xmlObjectKey]);\n                    }\n                }\n                if (union) {\n                    unionSerde.writeUnknown();\n                }\n                return buffer;\n            }\n            if (ns.isDocumentSchema()) {\n                return value;\n            }\n            throw new Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${ns.getName(true)}`);\n        }\n        if (ns.isListSchema()) {\n            return [];\n        }\n        if (ns.isMapSchema() || ns.isStructSchema()) {\n            return {};\n        }\n        return this.stringDeserializer.read(ns, value);\n    }\n    parseXml(xml) {\n        if (xml.length) {\n            let parsedObj;\n            try {\n                parsedObj = parseXML(xml);\n            }\n            catch (e) {\n                if (e && typeof e === \"object\") {\n                    Object.defineProperty(e, \"$responseBodyText\", {\n                        value: xml,\n                    });\n                }\n                throw e;\n            }\n            const textNodeName = \"#text\";\n            const key = Object.keys(parsedObj)[0];\n            const parsedObjToReturn = parsedObj[key];\n            if (parsedObjToReturn[textNodeName]) {\n                parsedObjToReturn[key] = parsedObjToReturn[textNodeName];\n                delete parsedObjToReturn[textNodeName];\n            }\n            return getValueFromTextNode(parsedObjToReturn);\n        }\n        return {};\n    }\n}\n","import { parseXML } from \"@aws-sdk/xml-builder\";\nimport { getValueFromTextNode } from \"@smithy/smithy-client\";\nimport { collectBodyString } from \"../common\";\nexport const parseXmlBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {\n    if (encoded.length) {\n        let parsedObj;\n        try {\n            parsedObj = parseXML(encoded);\n        }\n        catch (e) {\n            if (e && typeof e === \"object\") {\n                Object.defineProperty(e, \"$responseBodyText\", {\n                    value: encoded,\n                });\n            }\n            throw e;\n        }\n        const textNodeName = \"#text\";\n        const key = Object.keys(parsedObj)[0];\n        const parsedObjToReturn = parsedObj[key];\n        if (parsedObjToReturn[textNodeName]) {\n            parsedObjToReturn[key] = parsedObjToReturn[textNodeName];\n            delete parsedObjToReturn[textNodeName];\n        }\n        return getValueFromTextNode(parsedObjToReturn);\n    }\n    return {};\n});\nexport const parseXmlErrorBody = async (errorBody, context) => {\n    const value = await parseXmlBody(errorBody, context);\n    if (value.Error) {\n        value.Error.message = value.Error.message ?? value.Error.Message;\n    }\n    return value;\n};\nexport const loadRestXmlErrorCode = (output, data) => {\n    if (data?.Error?.Code !== undefined) {\n        return data.Error.Code;\n    }\n    if (data?.Code !== undefined) {\n        return data.Code;\n    }\n    if (output.statusCode == 404) {\n        return \"NotFound\";\n    }\n};\n","import { XmlNode, XmlText } from \"@aws-sdk/xml-builder\";\nimport { determineTimestampFormat } from \"@smithy/core/protocols\";\nimport { NormalizedSchema } from \"@smithy/core/schema\";\nimport { generateIdempotencyToken, NumericValue } from \"@smithy/core/serde\";\nimport { dateToUtcString } from \"@smithy/smithy-client\";\nimport { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nexport class XmlShapeSerializer extends SerdeContextConfig {\n    settings;\n    stringBuffer;\n    byteBuffer;\n    buffer;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    write(schema, value) {\n        const ns = NormalizedSchema.of(schema);\n        if (ns.isStringSchema() && typeof value === \"string\") {\n            this.stringBuffer = value;\n        }\n        else if (ns.isBlobSchema()) {\n            this.byteBuffer =\n                \"byteLength\" in value\n                    ? value\n                    : (this.serdeContext?.base64Decoder ?? fromBase64)(value);\n        }\n        else {\n            this.buffer = this.writeStruct(ns, value, undefined);\n            const traits = ns.getMergedTraits();\n            if (traits.httpPayload && !traits.xmlName) {\n                this.buffer.withName(ns.getName());\n            }\n        }\n    }\n    flush() {\n        if (this.byteBuffer !== undefined) {\n            const bytes = this.byteBuffer;\n            delete this.byteBuffer;\n            return bytes;\n        }\n        if (this.stringBuffer !== undefined) {\n            const str = this.stringBuffer;\n            delete this.stringBuffer;\n            return str;\n        }\n        const buffer = this.buffer;\n        if (this.settings.xmlNamespace) {\n            if (!buffer?.attributes?.[\"xmlns\"]) {\n                buffer.addAttribute(\"xmlns\", this.settings.xmlNamespace);\n            }\n        }\n        delete this.buffer;\n        return buffer.toString();\n    }\n    writeStruct(ns, value, parentXmlns) {\n        const traits = ns.getMergedTraits();\n        const name = ns.isMemberSchema() && !traits.httpPayload\n            ? ns.getMemberTraits().xmlName ?? ns.getMemberName()\n            : traits.xmlName ?? ns.getName();\n        if (!name || !ns.isStructSchema()) {\n            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${ns.getName(true)}.`);\n        }\n        const structXmlNode = XmlNode.of(name);\n        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(ns, parentXmlns);\n        for (const [memberName, memberSchema] of ns.structIterator()) {\n            const val = value[memberName];\n            if (val != null || memberSchema.isIdempotencyToken()) {\n                if (memberSchema.getMergedTraits().xmlAttribute) {\n                    structXmlNode.addAttribute(memberSchema.getMergedTraits().xmlName ?? memberName, this.writeSimple(memberSchema, val));\n                    continue;\n                }\n                if (memberSchema.isListSchema()) {\n                    this.writeList(memberSchema, val, structXmlNode, xmlns);\n                }\n                else if (memberSchema.isMapSchema()) {\n                    this.writeMap(memberSchema, val, structXmlNode, xmlns);\n                }\n                else if (memberSchema.isStructSchema()) {\n                    structXmlNode.addChildNode(this.writeStruct(memberSchema, val, xmlns));\n                }\n                else {\n                    const memberNode = XmlNode.of(memberSchema.getMergedTraits().xmlName ?? memberSchema.getMemberName());\n                    this.writeSimpleInto(memberSchema, val, memberNode, xmlns);\n                    structXmlNode.addChildNode(memberNode);\n                }\n            }\n        }\n        const { $unknown } = value;\n        if ($unknown && ns.isUnionSchema() && Array.isArray($unknown) && Object.keys(value).length === 1) {\n            const [k, v] = $unknown;\n            const node = XmlNode.of(k);\n            if (typeof v !== \"string\") {\n                if (value instanceof XmlNode || value instanceof XmlText) {\n                    structXmlNode.addChildNode(value);\n                }\n                else {\n                    throw new Error(`@aws-sdk - $unknown union member in XML requires ` +\n                        `value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.`);\n                }\n            }\n            this.writeSimpleInto(0, v, node, xmlns);\n            structXmlNode.addChildNode(node);\n        }\n        if (xmlns) {\n            structXmlNode.addAttribute(xmlnsAttr, xmlns);\n        }\n        return structXmlNode;\n    }\n    writeList(listMember, array, container, parentXmlns) {\n        if (!listMember.isMemberSchema()) {\n            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${listMember.getName(true)}`);\n        }\n        const listTraits = listMember.getMergedTraits();\n        const listValueSchema = listMember.getValueSchema();\n        const listValueTraits = listValueSchema.getMergedTraits();\n        const sparse = !!listValueTraits.sparse;\n        const flat = !!listTraits.xmlFlattened;\n        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(listMember, parentXmlns);\n        const writeItem = (container, value) => {\n            if (listValueSchema.isListSchema()) {\n                this.writeList(listValueSchema, Array.isArray(value) ? value : [value], container, xmlns);\n            }\n            else if (listValueSchema.isMapSchema()) {\n                this.writeMap(listValueSchema, value, container, xmlns);\n            }\n            else if (listValueSchema.isStructSchema()) {\n                const struct = this.writeStruct(listValueSchema, value, xmlns);\n                container.addChildNode(struct.withName(flat ? listTraits.xmlName ?? listMember.getMemberName() : listValueTraits.xmlName ?? \"member\"));\n            }\n            else {\n                const listItemNode = XmlNode.of(flat ? listTraits.xmlName ?? listMember.getMemberName() : listValueTraits.xmlName ?? \"member\");\n                this.writeSimpleInto(listValueSchema, value, listItemNode, xmlns);\n                container.addChildNode(listItemNode);\n            }\n        };\n        if (flat) {\n            for (const value of array) {\n                if (sparse || value != null) {\n                    writeItem(container, value);\n                }\n            }\n        }\n        else {\n            const listNode = XmlNode.of(listTraits.xmlName ?? listMember.getMemberName());\n            if (xmlns) {\n                listNode.addAttribute(xmlnsAttr, xmlns);\n            }\n            for (const value of array) {\n                if (sparse || value != null) {\n                    writeItem(listNode, value);\n                }\n            }\n            container.addChildNode(listNode);\n        }\n    }\n    writeMap(mapMember, map, container, parentXmlns, containerIsMap = false) {\n        if (!mapMember.isMemberSchema()) {\n            throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${mapMember.getName(true)}`);\n        }\n        const mapTraits = mapMember.getMergedTraits();\n        const mapKeySchema = mapMember.getKeySchema();\n        const mapKeyTraits = mapKeySchema.getMergedTraits();\n        const keyTag = mapKeyTraits.xmlName ?? \"key\";\n        const mapValueSchema = mapMember.getValueSchema();\n        const mapValueTraits = mapValueSchema.getMergedTraits();\n        const valueTag = mapValueTraits.xmlName ?? \"value\";\n        const sparse = !!mapValueTraits.sparse;\n        const flat = !!mapTraits.xmlFlattened;\n        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(mapMember, parentXmlns);\n        const addKeyValue = (entry, key, val) => {\n            const keyNode = XmlNode.of(keyTag, key);\n            const [keyXmlnsAttr, keyXmlns] = this.getXmlnsAttribute(mapKeySchema, xmlns);\n            if (keyXmlns) {\n                keyNode.addAttribute(keyXmlnsAttr, keyXmlns);\n            }\n            entry.addChildNode(keyNode);\n            let valueNode = XmlNode.of(valueTag);\n            if (mapValueSchema.isListSchema()) {\n                this.writeList(mapValueSchema, val, valueNode, xmlns);\n            }\n            else if (mapValueSchema.isMapSchema()) {\n                this.writeMap(mapValueSchema, val, valueNode, xmlns, true);\n            }\n            else if (mapValueSchema.isStructSchema()) {\n                valueNode = this.writeStruct(mapValueSchema, val, xmlns);\n            }\n            else {\n                this.writeSimpleInto(mapValueSchema, val, valueNode, xmlns);\n            }\n            entry.addChildNode(valueNode);\n        };\n        if (flat) {\n            for (const [key, val] of Object.entries(map)) {\n                if (sparse || val != null) {\n                    const entry = XmlNode.of(mapTraits.xmlName ?? mapMember.getMemberName());\n                    addKeyValue(entry, key, val);\n                    container.addChildNode(entry);\n                }\n            }\n        }\n        else {\n            let mapNode;\n            if (!containerIsMap) {\n                mapNode = XmlNode.of(mapTraits.xmlName ?? mapMember.getMemberName());\n                if (xmlns) {\n                    mapNode.addAttribute(xmlnsAttr, xmlns);\n                }\n                container.addChildNode(mapNode);\n            }\n            for (const [key, val] of Object.entries(map)) {\n                if (sparse || val != null) {\n                    const entry = XmlNode.of(\"entry\");\n                    addKeyValue(entry, key, val);\n                    (containerIsMap ? container : mapNode).addChildNode(entry);\n                }\n            }\n        }\n    }\n    writeSimple(_schema, value) {\n        if (null === value) {\n            throw new Error(\"@aws-sdk/core/protocols - (XML serializer) cannot write null value.\");\n        }\n        const ns = NormalizedSchema.of(_schema);\n        let nodeContents = null;\n        if (value && typeof value === \"object\") {\n            if (ns.isBlobSchema()) {\n                nodeContents = (this.serdeContext?.base64Encoder ?? toBase64)(value);\n            }\n            else if (ns.isTimestampSchema() && value instanceof Date) {\n                const format = determineTimestampFormat(ns, this.settings);\n                switch (format) {\n                    case 5:\n                        nodeContents = value.toISOString().replace(\".000Z\", \"Z\");\n                        break;\n                    case 6:\n                        nodeContents = dateToUtcString(value);\n                        break;\n                    case 7:\n                        nodeContents = String(value.getTime() / 1000);\n                        break;\n                    default:\n                        console.warn(\"Missing timestamp format, using http date\", value);\n                        nodeContents = dateToUtcString(value);\n                        break;\n                }\n            }\n            else if (ns.isBigDecimalSchema() && value) {\n                if (value instanceof NumericValue) {\n                    return value.string;\n                }\n                return String(value);\n            }\n            else if (ns.isMapSchema() || ns.isListSchema()) {\n                throw new Error(\"@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead.\");\n            }\n            else {\n                throw new Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${ns.getName(true)}`);\n            }\n        }\n        if (ns.isBooleanSchema() || ns.isNumericSchema() || ns.isBigIntegerSchema() || ns.isBigDecimalSchema()) {\n            nodeContents = String(value);\n        }\n        if (ns.isStringSchema()) {\n            if (value === undefined && ns.isIdempotencyToken()) {\n                nodeContents = generateIdempotencyToken();\n            }\n            else {\n                nodeContents = String(value);\n            }\n        }\n        if (nodeContents === null) {\n            throw new Error(`Unhandled schema-value pair ${ns.getName(true)}=${value}`);\n        }\n        return nodeContents;\n    }\n    writeSimpleInto(_schema, value, into, parentXmlns) {\n        const nodeContents = this.writeSimple(_schema, value);\n        const ns = NormalizedSchema.of(_schema);\n        const content = new XmlText(nodeContents);\n        const [xmlnsAttr, xmlns] = this.getXmlnsAttribute(ns, parentXmlns);\n        if (xmlns) {\n            into.addAttribute(xmlnsAttr, xmlns);\n        }\n        into.addChildNode(content);\n    }\n    getXmlnsAttribute(ns, parentXmlns) {\n        const traits = ns.getMergedTraits();\n        const [prefix, xmlns] = traits.xmlNamespace ?? [];\n        if (xmlns && xmlns !== parentXmlns) {\n            return [prefix ? `xmlns:${prefix}` : \"xmlns\", xmlns];\n        }\n        return [void 0, void 0];\n    }\n}\n","import { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nimport { XmlShapeDeserializer } from \"./XmlShapeDeserializer\";\nimport { XmlShapeSerializer } from \"./XmlShapeSerializer\";\nexport class XmlCodec extends SerdeContextConfig {\n    settings;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    createSerializer() {\n        const serializer = new XmlShapeSerializer(this.settings);\n        serializer.setSerdeContext(this.serdeContext);\n        return serializer;\n    }\n    createDeserializer() {\n        const deserializer = new XmlShapeDeserializer(this.settings);\n        deserializer.setSerdeContext(this.serdeContext);\n        return deserializer;\n    }\n}\n","import { HttpBindingProtocol, HttpInterceptingShapeDeserializer, HttpInterceptingShapeSerializer, } from \"@smithy/core/protocols\";\nimport { NormalizedSchema, TypeRegistry } from \"@smithy/core/schema\";\nimport { ProtocolLib } from \"../ProtocolLib\";\nimport { loadRestXmlErrorCode } from \"./parseXmlBody\";\nimport { XmlCodec } from \"./XmlCodec\";\nexport class AwsRestXmlProtocol extends HttpBindingProtocol {\n    codec;\n    serializer;\n    deserializer;\n    mixin = new ProtocolLib();\n    constructor(options) {\n        super(options);\n        const settings = {\n            timestampFormat: {\n                useTrait: true,\n                default: 5,\n            },\n            httpBindings: true,\n            xmlNamespace: options.xmlNamespace,\n            serviceNamespace: options.defaultNamespace,\n        };\n        this.codec = new XmlCodec(settings);\n        this.serializer = new HttpInterceptingShapeSerializer(this.codec.createSerializer(), settings);\n        this.deserializer = new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(), settings);\n    }\n    getPayloadCodec() {\n        return this.codec;\n    }\n    getShapeId() {\n        return \"aws.protocols#restXml\";\n    }\n    async serializeRequest(operationSchema, input, context) {\n        const request = await super.serializeRequest(operationSchema, input, context);\n        const inputSchema = NormalizedSchema.of(operationSchema.input);\n        if (!request.headers[\"content-type\"]) {\n            const contentType = this.mixin.resolveRestContentType(this.getDefaultContentType(), inputSchema);\n            if (contentType) {\n                request.headers[\"content-type\"] = contentType;\n            }\n        }\n        if (typeof request.body === \"string\" &&\n            request.headers[\"content-type\"] === this.getDefaultContentType() &&\n            !request.body.startsWith(\"<?xml \") &&\n            !this.hasUnstructuredPayloadBinding(inputSchema)) {\n            request.body = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' + request.body;\n        }\n        return request;\n    }\n    async deserializeResponse(operationSchema, context, response) {\n        return super.deserializeResponse(operationSchema, context, response);\n    }\n    async handleError(operationSchema, context, response, dataObject, metadata) {\n        const errorIdentifier = loadRestXmlErrorCode(response, dataObject) ?? \"Unknown\";\n        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata);\n        const ns = NormalizedSchema.of(errorSchema);\n        const message = dataObject.Error?.message ?? dataObject.Error?.Message ?? dataObject.message ?? dataObject.Message ?? \"Unknown\";\n        const ErrorCtor = TypeRegistry.for(errorSchema[1]).getErrorCtor(errorSchema) ?? Error;\n        const exception = new ErrorCtor(message);\n        await this.deserializeHttpMessage(errorSchema, context, response, dataObject);\n        const output = {};\n        for (const [name, member] of ns.structIterator()) {\n            const target = member.getMergedTraits().xmlName ?? name;\n            const value = dataObject.Error?.[target] ?? dataObject[target];\n            output[name] = this.codec.createDeserializer().readSchema(member, value);\n        }\n        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {\n            $fault: ns.getMergedTraits().error,\n            message,\n        }, output), dataObject);\n    }\n    getDefaultContentType() {\n        return \"application/xml\";\n    }\n    hasUnstructuredPayloadBinding(ns) {\n        for (const [, member] of ns.structIterator()) {\n            if (member.getMergedTraits().httpPayload) {\n                return !(member.isStructSchema() || member.isMapSchema() || member.isListSchema());\n            }\n        }\n        return false;\n    }\n}\n","import { ChecksumAlgorithm } from \"./constants\";\nexport const CLIENT_SUPPORTED_ALGORITHMS = [\n    ChecksumAlgorithm.CRC32,\n    ChecksumAlgorithm.CRC32C,\n    ChecksumAlgorithm.CRC64NVME,\n    ChecksumAlgorithm.SHA1,\n    ChecksumAlgorithm.SHA256,\n];\nexport const PRIORITY_ORDER_ALGORITHMS = [\n    ChecksumAlgorithm.SHA256,\n    ChecksumAlgorithm.SHA1,\n    ChecksumAlgorithm.CRC32,\n    ChecksumAlgorithm.CRC32C,\n    ChecksumAlgorithm.CRC64NVME,\n];\n","import { DEFAULT_CHECKSUM_ALGORITHM, RequestChecksumCalculation } from \"./constants\";\nimport { CLIENT_SUPPORTED_ALGORITHMS } from \"./types\";\nexport const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, requestAlgorithmMember, requestChecksumCalculation }) => {\n    if (!requestAlgorithmMember) {\n        return requestChecksumCalculation === RequestChecksumCalculation.WHEN_SUPPORTED || requestChecksumRequired\n            ? DEFAULT_CHECKSUM_ALGORITHM\n            : undefined;\n    }\n    if (!input[requestAlgorithmMember]) {\n        return undefined;\n    }\n    const checksumAlgorithm = input[requestAlgorithmMember];\n    if (!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {\n        throw new Error(`The checksum algorithm \"${checksumAlgorithm}\" is not supported by the client.` +\n            ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`);\n    }\n    return checksumAlgorithm;\n};\n","import { ChecksumAlgorithm } from \"./constants\";\nexport const getChecksumLocationName = (algorithm) => algorithm === ChecksumAlgorithm.MD5 ? \"content-md5\" : `x-amz-checksum-${algorithm.toLowerCase()}`;\n","export const hasHeader = (header, headers) => {\n    const soughtHeader = header.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            return true;\n        }\n    }\n    return false;\n};\n","export const hasHeaderWithPrefix = (headerPrefix, headers) => {\n    const soughtHeaderPrefix = headerPrefix.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (headerName.toLowerCase().startsWith(soughtHeaderPrefix)) {\n            return true;\n        }\n    }\n    return false;\n};\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nexport const isStreaming = (body) => body !== undefined && typeof body !== \"string\" && !ArrayBuffer.isView(body) && !isArrayBuffer(body);\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","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { fromUtf8 as fromUtf8Browser } from \"@smithy/util-utf8\";\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n    ? function (input) { return Buffer.from(input, \"utf8\"); }\n    : fromUtf8Browser;\nexport function convertToBuffer(data) {\n    // Already a Uint8, do nothing\n    if (data instanceof Uint8Array)\n        return data;\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=convertToBuffer.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport function isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\n//# sourceMappingURL=isEmptyData.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport function numToUint8(num) {\n    return new Uint8Array([\n        (num & 0xff000000) >> 24,\n        (num & 0x00ff0000) >> 16,\n        (num & 0x0000ff00) >> 8,\n        num & 0x000000ff,\n    ]);\n}\n//# sourceMappingURL=numToUint8.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// IE 11 does not support Array.from, so we do it manually\nexport function uint32ArrayFrom(a_lookUpTable) {\n    if (!Uint32Array.from) {\n        var return_array = new Uint32Array(a_lookUpTable.length);\n        var a_index = 0;\n        while (a_index < a_lookUpTable.length) {\n            return_array[a_index] = a_lookUpTable[a_index];\n            a_index += 1;\n        }\n        return return_array;\n    }\n    return Uint32Array.from(a_lookUpTable);\n}\n//# sourceMappingURL=uint32ArrayFrom.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { __awaiter, __generator } from \"tslib\";\nimport { convertToBuffer, isEmptyData, numToUint8 } from \"@aws-crypto/util\";\nimport { Crc32c } from \"./index\";\nvar AwsCrc32c = /** @class */ (function () {\n    function AwsCrc32c() {\n        this.crc32c = new Crc32c();\n    }\n    AwsCrc32c.prototype.update = function (toHash) {\n        if (isEmptyData(toHash))\n            return;\n        this.crc32c.update(convertToBuffer(toHash));\n    };\n    AwsCrc32c.prototype.digest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, numToUint8(this.crc32c.digest())];\n            });\n        });\n    };\n    AwsCrc32c.prototype.reset = function () {\n        this.crc32c = new Crc32c();\n    };\n    return AwsCrc32c;\n}());\nexport { AwsCrc32c };\n//# sourceMappingURL=aws_crc32c.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { __values } from \"tslib\";\nimport { uint32ArrayFrom } from \"@aws-crypto/util\";\nexport function crc32c(data) {\n    return new Crc32c().update(data).digest();\n}\nvar Crc32c = /** @class */ (function () {\n    function Crc32c() {\n        this.checksum = 0xffffffff;\n    }\n    Crc32c.prototype.update = function (data) {\n        var e_1, _a;\n        try {\n            for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n                var byte = data_1_1.value;\n                this.checksum =\n                    (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return this;\n    };\n    Crc32c.prototype.digest = function () {\n        return (this.checksum ^ 0xffffffff) >>> 0;\n    };\n    return Crc32c;\n}());\nexport { Crc32c };\n// prettier-ignore\nvar a_lookupTable = [\n    0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,\n    0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,\n    0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,\n    0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,\n    0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,\n    0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,\n    0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,\n    0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,\n    0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,\n    0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,\n    0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,\n    0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,\n    0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,\n    0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,\n    0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,\n    0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,\n    0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,\n    0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,\n    0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,\n    0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,\n    0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,\n    0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,\n    0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,\n    0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,\n    0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,\n    0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,\n    0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,\n    0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,\n    0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,\n    0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,\n    0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,\n    0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351,\n];\nvar lookupTable = uint32ArrayFrom(a_lookupTable);\nexport { AwsCrc32c } from \"./aws_crc32c\";\n//# sourceMappingURL=index.js.map","const generateCRC64NVMETable = () => {\n    const sliceLength = 8;\n    const tables = new Array(sliceLength);\n    for (let slice = 0; slice < sliceLength; slice++) {\n        const table = new Array(512);\n        for (let i = 0; i < 256; i++) {\n            let crc = BigInt(i);\n            for (let j = 0; j < 8 * (slice + 1); j++) {\n                if (crc & 1n) {\n                    crc = (crc >> 1n) ^ 0x9a6c9329ac4bc9b5n;\n                }\n                else {\n                    crc = crc >> 1n;\n                }\n            }\n            table[i * 2] = Number((crc >> 32n) & 0xffffffffn);\n            table[i * 2 + 1] = Number(crc & 0xffffffffn);\n        }\n        tables[slice] = new Uint32Array(table);\n    }\n    return tables;\n};\nlet CRC64_NVME_REVERSED_TABLE;\nlet t0, t1, t2, t3;\nlet t4, t5, t6, t7;\nconst ensureTablesInitialized = () => {\n    if (!CRC64_NVME_REVERSED_TABLE) {\n        CRC64_NVME_REVERSED_TABLE = generateCRC64NVMETable();\n        [t0, t1, t2, t3, t4, t5, t6, t7] = CRC64_NVME_REVERSED_TABLE;\n    }\n};\nexport class Crc64Nvme {\n    c1 = 0;\n    c2 = 0;\n    constructor() {\n        ensureTablesInitialized();\n        this.reset();\n    }\n    update(data) {\n        const len = data.length;\n        let i = 0;\n        let crc1 = this.c1;\n        let crc2 = this.c2;\n        while (i + 8 <= len) {\n            const idx0 = ((crc2 ^ data[i++]) & 255) << 1;\n            const idx1 = (((crc2 >>> 8) ^ data[i++]) & 255) << 1;\n            const idx2 = (((crc2 >>> 16) ^ data[i++]) & 255) << 1;\n            const idx3 = (((crc2 >>> 24) ^ data[i++]) & 255) << 1;\n            const idx4 = ((crc1 ^ data[i++]) & 255) << 1;\n            const idx5 = (((crc1 >>> 8) ^ data[i++]) & 255) << 1;\n            const idx6 = (((crc1 >>> 16) ^ data[i++]) & 255) << 1;\n            const idx7 = (((crc1 >>> 24) ^ data[i++]) & 255) << 1;\n            crc1 = t7[idx0] ^ t6[idx1] ^ t5[idx2] ^ t4[idx3] ^ t3[idx4] ^ t2[idx5] ^ t1[idx6] ^ t0[idx7];\n            crc2 =\n                t7[idx0 + 1] ^\n                    t6[idx1 + 1] ^\n                    t5[idx2 + 1] ^\n                    t4[idx3 + 1] ^\n                    t3[idx4 + 1] ^\n                    t2[idx5 + 1] ^\n                    t1[idx6 + 1] ^\n                    t0[idx7 + 1];\n        }\n        while (i < len) {\n            const idx = ((crc2 ^ data[i]) & 255) << 1;\n            crc2 = ((crc2 >>> 8) | ((crc1 & 255) << 24)) >>> 0;\n            crc1 = (crc1 >>> 8) ^ t0[idx];\n            crc2 ^= t0[idx + 1];\n            i++;\n        }\n        this.c1 = crc1;\n        this.c2 = crc2;\n    }\n    async digest() {\n        const c1 = this.c1 ^ 4294967295;\n        const c2 = this.c2 ^ 4294967295;\n        return new Uint8Array([\n            c1 >>> 24,\n            (c1 >>> 16) & 255,\n            (c1 >>> 8) & 255,\n            c1 & 255,\n            c2 >>> 24,\n            (c2 >>> 16) & 255,\n            (c2 >>> 8) & 255,\n            c2 & 255,\n        ]);\n    }\n    reset() {\n        this.c1 = 4294967295;\n        this.c2 = 4294967295;\n    }\n}\n","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { __awaiter, __generator } from \"tslib\";\nimport { convertToBuffer, isEmptyData, numToUint8 } from \"@aws-crypto/util\";\nimport { Crc32 } from \"./index\";\nvar AwsCrc32 = /** @class */ (function () {\n    function AwsCrc32() {\n        this.crc32 = new Crc32();\n    }\n    AwsCrc32.prototype.update = function (toHash) {\n        if (isEmptyData(toHash))\n            return;\n        this.crc32.update(convertToBuffer(toHash));\n    };\n    AwsCrc32.prototype.digest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, numToUint8(this.crc32.digest())];\n            });\n        });\n    };\n    AwsCrc32.prototype.reset = function () {\n        this.crc32 = new Crc32();\n    };\n    return AwsCrc32;\n}());\nexport { AwsCrc32 };\n//# sourceMappingURL=aws_crc32.js.map","import { __values } from \"tslib\";\nimport { uint32ArrayFrom } from \"@aws-crypto/util\";\nexport function crc32(data) {\n    return new Crc32().update(data).digest();\n}\nvar Crc32 = /** @class */ (function () {\n    function Crc32() {\n        this.checksum = 0xffffffff;\n    }\n    Crc32.prototype.update = function (data) {\n        var e_1, _a;\n        try {\n            for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n                var byte = data_1_1.value;\n                this.checksum =\n                    (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return this;\n    };\n    Crc32.prototype.digest = function () {\n        return (this.checksum ^ 0xffffffff) >>> 0;\n    };\n    return Crc32;\n}());\nexport { Crc32 };\n// prettier-ignore\nvar a_lookUpTable = [\n    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,\n];\nvar lookupTable = uint32ArrayFrom(a_lookUpTable);\nexport { AwsCrc32 } from \"./aws_crc32\";\n//# sourceMappingURL=index.js.map","import { AwsCrc32 } from \"@aws-crypto/crc32\";\nexport const getCrc32ChecksumAlgorithmFunction = () => AwsCrc32;\n","import { AwsCrc32c } from \"@aws-crypto/crc32c\";\nimport { Crc64Nvme, crc64NvmeCrtContainer } from \"@aws-sdk/crc64-nvme\";\nimport { ChecksumAlgorithm } from \"./constants\";\nimport { getCrc32ChecksumAlgorithmFunction } from \"./getCrc32ChecksumAlgorithmFunction\";\nexport const selectChecksumAlgorithmFunction = (checksumAlgorithm, config) => {\n    switch (checksumAlgorithm) {\n        case ChecksumAlgorithm.MD5:\n            return config.md5;\n        case ChecksumAlgorithm.CRC32:\n            return getCrc32ChecksumAlgorithmFunction();\n        case ChecksumAlgorithm.CRC32C:\n            return AwsCrc32c;\n        case ChecksumAlgorithm.CRC64NVME:\n            if (typeof crc64NvmeCrtContainer.CrtCrc64Nvme !== \"function\") {\n                return Crc64Nvme;\n            }\n            return crc64NvmeCrtContainer.CrtCrc64Nvme;\n        case ChecksumAlgorithm.SHA1:\n            return config.sha1;\n        case ChecksumAlgorithm.SHA256:\n            return config.sha256;\n        default:\n            throw new Error(`Unsupported checksum algorithm: ${checksumAlgorithm}`);\n    }\n};\n","import { toUint8Array } from \"@smithy/util-utf8\";\nexport const stringHasher = (checksumAlgorithmFn, body) => {\n    const hash = new checksumAlgorithmFn();\n    hash.update(toUint8Array(body || \"\"));\n    return hash.digest();\n};\n","import { setFeature } from \"@aws-sdk/core\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { createBufferedReadable } from \"@smithy/util-stream\";\nimport { ChecksumAlgorithm, DEFAULT_CHECKSUM_ALGORITHM, RequestChecksumCalculation } from \"./constants\";\nimport { getChecksumAlgorithmForRequest } from \"./getChecksumAlgorithmForRequest\";\nimport { getChecksumLocationName } from \"./getChecksumLocationName\";\nimport { hasHeader } from \"./hasHeader\";\nimport { hasHeaderWithPrefix } from \"./hasHeaderWithPrefix\";\nimport { isStreaming } from \"./isStreaming\";\nimport { selectChecksumAlgorithmFunction } from \"./selectChecksumAlgorithmFunction\";\nimport { stringHasher } from \"./stringHasher\";\nexport const flexibleChecksumsMiddlewareOptions = {\n    name: \"flexibleChecksumsMiddleware\",\n    step: \"build\",\n    tags: [\"BODY_CHECKSUM\"],\n    override: true,\n};\nexport const flexibleChecksumsMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {\n    if (!HttpRequest.isInstance(args.request)) {\n        return next(args);\n    }\n    if (hasHeaderWithPrefix(\"x-amz-checksum-\", args.request.headers)) {\n        return next(args);\n    }\n    const { request, input } = args;\n    const { body: requestBody, headers } = request;\n    const { base64Encoder, streamHasher } = config;\n    const { requestChecksumRequired, requestAlgorithmMember } = middlewareConfig;\n    const requestChecksumCalculation = await config.requestChecksumCalculation();\n    const requestAlgorithmMemberName = requestAlgorithmMember?.name;\n    const requestAlgorithmMemberHttpHeader = requestAlgorithmMember?.httpHeader;\n    if (requestAlgorithmMemberName && !input[requestAlgorithmMemberName]) {\n        if (requestChecksumCalculation === RequestChecksumCalculation.WHEN_SUPPORTED || requestChecksumRequired) {\n            input[requestAlgorithmMemberName] = DEFAULT_CHECKSUM_ALGORITHM;\n            if (requestAlgorithmMemberHttpHeader) {\n                headers[requestAlgorithmMemberHttpHeader] = DEFAULT_CHECKSUM_ALGORITHM;\n            }\n        }\n    }\n    const checksumAlgorithm = getChecksumAlgorithmForRequest(input, {\n        requestChecksumRequired,\n        requestAlgorithmMember: requestAlgorithmMember?.name,\n        requestChecksumCalculation,\n    });\n    let updatedBody = requestBody;\n    let updatedHeaders = headers;\n    if (checksumAlgorithm) {\n        switch (checksumAlgorithm) {\n            case ChecksumAlgorithm.CRC32:\n                setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_CRC32\", \"U\");\n                break;\n            case ChecksumAlgorithm.CRC32C:\n                setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_CRC32C\", \"V\");\n                break;\n            case ChecksumAlgorithm.CRC64NVME:\n                setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_CRC64\", \"W\");\n                break;\n            case ChecksumAlgorithm.SHA1:\n                setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_SHA1\", \"X\");\n                break;\n            case ChecksumAlgorithm.SHA256:\n                setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_SHA256\", \"Y\");\n                break;\n        }\n        const checksumLocationName = getChecksumLocationName(checksumAlgorithm);\n        const checksumAlgorithmFn = selectChecksumAlgorithmFunction(checksumAlgorithm, config);\n        if (isStreaming(requestBody)) {\n            const { getAwsChunkedEncodingStream, bodyLengthChecker } = config;\n            updatedBody = getAwsChunkedEncodingStream(typeof config.requestStreamBufferSize === \"number\" && config.requestStreamBufferSize >= 8 * 1024\n                ? createBufferedReadable(requestBody, config.requestStreamBufferSize, context.logger)\n                : requestBody, {\n                base64Encoder,\n                bodyLengthChecker,\n                checksumLocationName,\n                checksumAlgorithmFn,\n                streamHasher,\n            });\n            updatedHeaders = {\n                ...headers,\n                \"content-encoding\": headers[\"content-encoding\"]\n                    ? `${headers[\"content-encoding\"]},aws-chunked`\n                    : \"aws-chunked\",\n                \"transfer-encoding\": \"chunked\",\n                \"x-amz-decoded-content-length\": headers[\"content-length\"],\n                \"x-amz-content-sha256\": \"STREAMING-UNSIGNED-PAYLOAD-TRAILER\",\n                \"x-amz-trailer\": checksumLocationName,\n            };\n            delete updatedHeaders[\"content-length\"];\n        }\n        else if (!hasHeader(checksumLocationName, headers)) {\n            const rawChecksum = await stringHasher(checksumAlgorithmFn, requestBody);\n            updatedHeaders = {\n                ...headers,\n                [checksumLocationName]: base64Encoder(rawChecksum),\n            };\n        }\n    }\n    try {\n        const result = await next({\n            ...args,\n            request: {\n                ...request,\n                headers: updatedHeaders,\n                body: updatedBody,\n            },\n        });\n        return result;\n    }\n    catch (e) {\n        if (e instanceof Error && e.name === \"InvalidChunkSizeError\") {\n            try {\n                if (!e.message.endsWith(\".\")) {\n                    e.message += \".\";\n                }\n                e.message +=\n                    \" Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream.\";\n            }\n            catch (ignored) {\n            }\n        }\n        throw e;\n    }\n};\n","import { setFeature } from \"@aws-sdk/core\";\nimport { RequestChecksumCalculation, ResponseChecksumValidation } from \"./constants\";\nexport const flexibleChecksumsInputMiddlewareOptions = {\n    name: \"flexibleChecksumsInputMiddleware\",\n    toMiddleware: \"serializerMiddleware\",\n    relation: \"before\",\n    tags: [\"BODY_CHECKSUM\"],\n    override: true,\n};\nexport const flexibleChecksumsInputMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {\n    const input = args.input;\n    const { requestValidationModeMember } = middlewareConfig;\n    const requestChecksumCalculation = await config.requestChecksumCalculation();\n    const responseChecksumValidation = await config.responseChecksumValidation();\n    switch (requestChecksumCalculation) {\n        case RequestChecksumCalculation.WHEN_REQUIRED:\n            setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED\", \"a\");\n            break;\n        case RequestChecksumCalculation.WHEN_SUPPORTED:\n            setFeature(context, \"FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED\", \"Z\");\n            break;\n    }\n    switch (responseChecksumValidation) {\n        case ResponseChecksumValidation.WHEN_REQUIRED:\n            setFeature(context, \"FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED\", \"c\");\n            break;\n        case ResponseChecksumValidation.WHEN_SUPPORTED:\n            setFeature(context, \"FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED\", \"b\");\n            break;\n    }\n    if (requestValidationModeMember && !input[requestValidationModeMember]) {\n        if (responseChecksumValidation === ResponseChecksumValidation.WHEN_SUPPORTED) {\n            input[requestValidationModeMember] = \"ENABLED\";\n        }\n    }\n    return next(args);\n};\n","import { CLIENT_SUPPORTED_ALGORITHMS, PRIORITY_ORDER_ALGORITHMS } from \"./types\";\nexport const getChecksumAlgorithmListForResponse = (responseAlgorithms = []) => {\n    const validChecksumAlgorithms = [];\n    for (const algorithm of PRIORITY_ORDER_ALGORITHMS) {\n        if (!responseAlgorithms.includes(algorithm) || !CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)) {\n            continue;\n        }\n        validChecksumAlgorithms.push(algorithm);\n    }\n    return validChecksumAlgorithms;\n};\n","export const isChecksumWithPartNumber = (checksum) => {\n    const lastHyphenIndex = checksum.lastIndexOf(\"-\");\n    if (lastHyphenIndex !== -1) {\n        const numberPart = checksum.slice(lastHyphenIndex + 1);\n        if (!numberPart.startsWith(\"0\")) {\n            const number = parseInt(numberPart, 10);\n            if (!isNaN(number) && number >= 1 && number <= 10000) {\n                return true;\n            }\n        }\n    }\n    return false;\n};\n","import { stringHasher } from \"./stringHasher\";\nexport const getChecksum = async (body, { checksumAlgorithmFn, base64Encoder }) => base64Encoder(await stringHasher(checksumAlgorithmFn, body));\n","import { createChecksumStream } from \"@smithy/util-stream\";\nimport { ChecksumAlgorithm } from \"./constants\";\nimport { getChecksum } from \"./getChecksum\";\nimport { getChecksumAlgorithmListForResponse } from \"./getChecksumAlgorithmListForResponse\";\nimport { getChecksumLocationName } from \"./getChecksumLocationName\";\nimport { isStreaming } from \"./isStreaming\";\nimport { selectChecksumAlgorithmFunction } from \"./selectChecksumAlgorithmFunction\";\nexport const validateChecksumFromResponse = async (response, { config, responseAlgorithms, logger }) => {\n    const checksumAlgorithms = getChecksumAlgorithmListForResponse(responseAlgorithms);\n    const { body: responseBody, headers: responseHeaders } = response;\n    for (const algorithm of checksumAlgorithms) {\n        const responseHeader = getChecksumLocationName(algorithm);\n        const checksumFromResponse = responseHeaders[responseHeader];\n        if (checksumFromResponse) {\n            let checksumAlgorithmFn;\n            try {\n                checksumAlgorithmFn = selectChecksumAlgorithmFunction(algorithm, config);\n            }\n            catch (error) {\n                if (algorithm === ChecksumAlgorithm.CRC64NVME) {\n                    logger?.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${error.message}`);\n                    continue;\n                }\n                throw error;\n            }\n            const { base64Encoder } = config;\n            if (isStreaming(responseBody)) {\n                response.body = createChecksumStream({\n                    expectedChecksum: checksumFromResponse,\n                    checksumSourceLocation: responseHeader,\n                    checksum: new checksumAlgorithmFn(),\n                    source: responseBody,\n                    base64Encoder,\n                });\n                return;\n            }\n            const checksum = await getChecksum(responseBody, { checksumAlgorithmFn, base64Encoder });\n            if (checksum === checksumFromResponse) {\n                break;\n            }\n            throw new Error(`Checksum mismatch: expected \"${checksum}\" but received \"${checksumFromResponse}\"` +\n                ` in response header \"${responseHeader}\".`);\n        }\n    }\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getChecksumAlgorithmListForResponse } from \"./getChecksumAlgorithmListForResponse\";\nimport { getChecksumLocationName } from \"./getChecksumLocationName\";\nimport { isChecksumWithPartNumber } from \"./isChecksumWithPartNumber\";\nimport { validateChecksumFromResponse } from \"./validateChecksumFromResponse\";\nexport const flexibleChecksumsResponseMiddlewareOptions = {\n    name: \"flexibleChecksumsResponseMiddleware\",\n    toMiddleware: \"deserializerMiddleware\",\n    relation: \"after\",\n    tags: [\"BODY_CHECKSUM\"],\n    override: true,\n};\nexport const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {\n    if (!HttpRequest.isInstance(args.request)) {\n        return next(args);\n    }\n    const input = args.input;\n    const result = await next(args);\n    const response = result.response;\n    const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;\n    if (requestValidationModeMember && input[requestValidationModeMember] === \"ENABLED\") {\n        const { clientName, commandName } = context;\n        const isS3WholeObjectMultipartGetResponseChecksum = clientName === \"S3Client\" &&\n            commandName === \"GetObjectCommand\" &&\n            getChecksumAlgorithmListForResponse(responseAlgorithms).every((algorithm) => {\n                const responseHeader = getChecksumLocationName(algorithm);\n                const checksumFromResponse = response.headers[responseHeader];\n                return !checksumFromResponse || isChecksumWithPartNumber(checksumFromResponse);\n            });\n        if (isS3WholeObjectMultipartGetResponseChecksum) {\n            return result;\n        }\n        await validateChecksumFromResponse(response, {\n            config,\n            responseAlgorithms,\n            logger: context.logger,\n        });\n    }\n    return result;\n};\n","import { flexibleChecksumsInputMiddleware, flexibleChecksumsInputMiddlewareOptions, } from \"./flexibleChecksumsInputMiddleware\";\nimport { flexibleChecksumsMiddleware, flexibleChecksumsMiddlewareOptions, } from \"./flexibleChecksumsMiddleware\";\nimport { flexibleChecksumsResponseMiddleware, flexibleChecksumsResponseMiddlewareOptions, } from \"./flexibleChecksumsResponseMiddleware\";\nexport const getFlexibleChecksumsPlugin = (config, middlewareConfig) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(flexibleChecksumsMiddleware(config, middlewareConfig), flexibleChecksumsMiddlewareOptions);\n        clientStack.addRelativeTo(flexibleChecksumsInputMiddleware(config, middlewareConfig), flexibleChecksumsInputMiddlewareOptions);\n        clientStack.addRelativeTo(flexibleChecksumsResponseMiddleware(config, middlewareConfig), flexibleChecksumsResponseMiddlewareOptions);\n    },\n});\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION, } from \"./constants\";\nexport const resolveFlexibleChecksumsConfig = (input) => {\n    const { requestChecksumCalculation, responseChecksumValidation, requestStreamBufferSize } = input;\n    return Object.assign(input, {\n        requestChecksumCalculation: normalizeProvider(requestChecksumCalculation ?? DEFAULT_REQUEST_CHECKSUM_CALCULATION),\n        responseChecksumValidation: normalizeProvider(responseChecksumValidation ?? DEFAULT_RESPONSE_CHECKSUM_VALIDATION),\n        requestStreamBufferSize: Number(requestStreamBufferSize ?? 0),\n    });\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport function resolveHostHeaderConfig(input) {\n    return input;\n}\nexport const hostHeaderMiddleware = (options) => (next) => async (args) => {\n    if (!HttpRequest.isInstance(args.request))\n        return next(args);\n    const { request } = args;\n    const { handlerProtocol = \"\" } = options.requestHandler.metadata || {};\n    if (handlerProtocol.indexOf(\"h2\") >= 0 && !request.headers[\":authority\"]) {\n        delete request.headers[\"host\"];\n        request.headers[\":authority\"] = request.hostname + (request.port ? \":\" + request.port : \"\");\n    }\n    else if (!request.headers[\"host\"]) {\n        let host = request.hostname;\n        if (request.port != null)\n            host += `:${request.port}`;\n        request.headers[\"host\"] = host;\n    }\n    return next(args);\n};\nexport const hostHeaderMiddlewareOptions = {\n    name: \"hostHeaderMiddleware\",\n    step: \"build\",\n    priority: \"low\",\n    tags: [\"HOST\"],\n    override: true,\n};\nexport const getHostHeaderPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(hostHeaderMiddleware(options), hostHeaderMiddlewareOptions);\n    },\n});\n","export const loggerMiddleware = () => (next, context) => async (args) => {\n    try {\n        const response = await next(args);\n        const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n        const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n        const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n        const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog ?? context.outputFilterSensitiveLog;\n        const { $metadata, ...outputWithoutMetadata } = response.output;\n        logger?.info?.({\n            clientName,\n            commandName,\n            input: inputFilterSensitiveLog(args.input),\n            output: outputFilterSensitiveLog(outputWithoutMetadata),\n            metadata: $metadata,\n        });\n        return response;\n    }\n    catch (error) {\n        const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n        const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n        const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n        logger?.error?.({\n            clientName,\n            commandName,\n            input: inputFilterSensitiveLog(args.input),\n            error,\n            metadata: error.$metadata,\n        });\n        throw error;\n    }\n};\nexport const loggerMiddlewareOptions = {\n    name: \"loggerMiddleware\",\n    tags: [\"LOGGER\"],\n    step: \"initialize\",\n    override: true,\n};\nexport const getLoggerPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(loggerMiddleware(), loggerMiddlewareOptions);\n    },\n});\n","export const recursionDetectionMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"RECURSION_DETECTION\"],\n    name: \"recursionDetectionMiddleware\",\n    override: true,\n    priority: \"low\",\n};\n","export const recursionDetectionMiddleware = () => (next) => async (args) => next(args);\n","import { recursionDetectionMiddlewareOptions } from \"./configuration\";\nimport { recursionDetectionMiddleware } from \"./recursionDetectionMiddleware\";\nexport const getRecursionDetectionPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(recursionDetectionMiddleware(), recursionDetectionMiddlewareOptions);\n    },\n});\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nconst CONTENT_LENGTH_HEADER = \"content-length\";\nconst DECODED_CONTENT_LENGTH_HEADER = \"x-amz-decoded-content-length\";\nexport function checkContentLengthHeader() {\n    return (next, context) => async (args) => {\n        const { request } = args;\n        if (HttpRequest.isInstance(request)) {\n            if (!(CONTENT_LENGTH_HEADER in request.headers) && !(DECODED_CONTENT_LENGTH_HEADER in request.headers)) {\n                const message = `Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage.`;\n                if (typeof context?.logger?.warn === \"function\" && !(context.logger instanceof NoOpLogger)) {\n                    context.logger.warn(message);\n                }\n                else {\n                    console.warn(message);\n                }\n            }\n        }\n        return next({ ...args });\n    };\n}\nexport const checkContentLengthHeaderMiddlewareOptions = {\n    step: \"finalizeRequest\",\n    tags: [\"CHECK_CONTENT_LENGTH_HEADER\"],\n    name: \"getCheckContentLengthHeaderPlugin\",\n    override: true,\n};\nexport const getCheckContentLengthHeaderPlugin = (unused) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(checkContentLengthHeader(), checkContentLengthHeaderMiddlewareOptions);\n    },\n});\n","export const regionRedirectEndpointMiddleware = (config) => {\n    return (next, context) => async (args) => {\n        const originalRegion = await config.region();\n        const regionProviderRef = config.region;\n        let unlock = () => { };\n        if (context.__s3RegionRedirect) {\n            Object.defineProperty(config, \"region\", {\n                writable: false,\n                value: async () => {\n                    return context.__s3RegionRedirect;\n                },\n            });\n            unlock = () => Object.defineProperty(config, \"region\", {\n                writable: true,\n                value: regionProviderRef,\n            });\n        }\n        try {\n            const result = await next(args);\n            if (context.__s3RegionRedirect) {\n                unlock();\n                const region = await config.region();\n                if (originalRegion !== region) {\n                    throw new Error(\"Region was not restored following S3 region redirect.\");\n                }\n            }\n            return result;\n        }\n        catch (e) {\n            unlock();\n            throw e;\n        }\n    };\n};\nexport const regionRedirectEndpointMiddlewareOptions = {\n    tags: [\"REGION_REDIRECT\", \"S3\"],\n    name: \"regionRedirectEndpointMiddleware\",\n    override: true,\n    relation: \"before\",\n    toMiddleware: \"endpointV2Middleware\",\n};\n","import { regionRedirectEndpointMiddleware, regionRedirectEndpointMiddlewareOptions, } from \"./region-redirect-endpoint-middleware\";\nexport function regionRedirectMiddleware(clientConfig) {\n    return (next, context) => async (args) => {\n        try {\n            return await next(args);\n        }\n        catch (err) {\n            if (clientConfig.followRegionRedirects) {\n                const statusCode = err?.$metadata?.httpStatusCode;\n                const isHeadBucket = context.commandName === \"HeadBucketCommand\";\n                const bucketRegionHeader = err?.$response?.headers?.[\"x-amz-bucket-region\"];\n                if (bucketRegionHeader) {\n                    if (statusCode === 301 ||\n                        (statusCode === 400 && (err?.name === \"IllegalLocationConstraintException\" || isHeadBucket))) {\n                        try {\n                            const actualRegion = bucketRegionHeader;\n                            context.logger?.debug(`Redirecting from ${await clientConfig.region()} to ${actualRegion}`);\n                            context.__s3RegionRedirect = actualRegion;\n                        }\n                        catch (e) {\n                            throw new Error(\"Region redirect failed: \" + e);\n                        }\n                        return next(args);\n                    }\n                }\n            }\n            throw err;\n        }\n    };\n}\nexport const regionRedirectMiddlewareOptions = {\n    step: \"initialize\",\n    tags: [\"REGION_REDIRECT\", \"S3\"],\n    name: \"regionRedirectMiddleware\",\n    override: true,\n};\nexport const getRegionRedirectMiddlewarePlugin = (clientConfig) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(regionRedirectMiddleware(clientConfig), regionRedirectMiddlewareOptions);\n        clientStack.addRelativeTo(regionRedirectEndpointMiddleware(clientConfig), regionRedirectEndpointMiddlewareOptions);\n    },\n});\n","export class S3ExpressIdentityCache {\n    data;\n    lastPurgeTime = Date.now();\n    static EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS = 30_000;\n    constructor(data = {}) {\n        this.data = data;\n    }\n    get(key) {\n        const entry = this.data[key];\n        if (!entry) {\n            return;\n        }\n        return entry;\n    }\n    set(key, entry) {\n        this.data[key] = entry;\n        return entry;\n    }\n    delete(key) {\n        delete this.data[key];\n    }\n    async purgeExpired() {\n        const now = Date.now();\n        if (this.lastPurgeTime + S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS > now) {\n            return;\n        }\n        for (const key in this.data) {\n            const entry = this.data[key];\n            if (!entry.isRefreshing) {\n                const credential = await entry.identity;\n                if (credential.expiration) {\n                    if (credential.expiration.getTime() < now) {\n                        delete this.data[key];\n                    }\n                }\n            }\n        }\n    }\n}\n","export class S3ExpressIdentityCacheEntry {\n    _identity;\n    isRefreshing;\n    accessed;\n    constructor(_identity, isRefreshing = false, accessed = Date.now()) {\n        this._identity = _identity;\n        this.isRefreshing = isRefreshing;\n        this.accessed = accessed;\n    }\n    get identity() {\n        this.accessed = Date.now();\n        return this._identity;\n    }\n}\n","import { S3ExpressIdentityCache } from \"./S3ExpressIdentityCache\";\nimport { S3ExpressIdentityCacheEntry } from \"./S3ExpressIdentityCacheEntry\";\nexport class S3ExpressIdentityProviderImpl {\n    createSessionFn;\n    cache;\n    static REFRESH_WINDOW_MS = 60_000;\n    constructor(createSessionFn, cache = new S3ExpressIdentityCache()) {\n        this.createSessionFn = createSessionFn;\n        this.cache = cache;\n    }\n    async getS3ExpressIdentity(awsIdentity, identityProperties) {\n        const key = identityProperties.Bucket;\n        const { cache } = this;\n        const entry = cache.get(key);\n        if (entry) {\n            return entry.identity.then((identity) => {\n                const isExpired = (identity.expiration?.getTime() ?? 0) < Date.now();\n                if (isExpired) {\n                    return cache.set(key, new S3ExpressIdentityCacheEntry(this.getIdentity(key))).identity;\n                }\n                const isExpiringSoon = (identity.expiration?.getTime() ?? 0) < Date.now() + S3ExpressIdentityProviderImpl.REFRESH_WINDOW_MS;\n                if (isExpiringSoon && !entry.isRefreshing) {\n                    entry.isRefreshing = true;\n                    this.getIdentity(key).then((id) => {\n                        cache.set(key, new S3ExpressIdentityCacheEntry(Promise.resolve(id)));\n                    });\n                }\n                return identity;\n            });\n        }\n        return cache.set(key, new S3ExpressIdentityCacheEntry(this.getIdentity(key))).identity;\n    }\n    async getIdentity(key) {\n        await this.cache.purgeExpired().catch((error) => {\n            console.warn(\"Error while clearing expired entries in S3ExpressIdentityCache: \\n\" + error);\n        });\n        const session = await this.createSessionFn(key);\n        if (!session.Credentials?.AccessKeyId || !session.Credentials?.SecretAccessKey) {\n            throw new Error(\"s3#createSession response credential missing AccessKeyId or SecretAccessKey.\");\n        }\n        const identity = {\n            accessKeyId: session.Credentials.AccessKeyId,\n            secretAccessKey: session.Credentials.SecretAccessKey,\n            sessionToken: session.Credentials.SessionToken,\n            expiration: session.Credentials.Expiration ? new Date(session.Credentials.Expiration) : undefined,\n        };\n        return identity;\n    }\n}\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const S3_EXPRESS_BUCKET_TYPE = \"Directory\";\nexport const S3_EXPRESS_BACKEND = \"S3Express\";\nexport const S3_EXPRESS_AUTH_SCHEME = \"sigv4-s3express\";\nexport const SESSION_TOKEN_QUERY_PARAM = \"X-Amz-S3session-Token\";\nexport const SESSION_TOKEN_HEADER = SESSION_TOKEN_QUERY_PARAM.toLowerCase();\nexport const NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_ENV_NAME = \"AWS_S3_DISABLE_EXPRESS_SESSION_AUTH\";\nexport const NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_INI_NAME = \"s3_disable_express_session_auth\";\nexport const NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_OPTIONS = {\n    environmentVariableSelector: (env) => booleanSelector(env, NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_ENV_NAME, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_INI_NAME, SelectorType.CONFIG),\n    default: false,\n};\n","import { SignatureV4 } from \"@smithy/signature-v4\";\nimport { SESSION_TOKEN_HEADER, SESSION_TOKEN_QUERY_PARAM } from \"../constants\";\nexport class SignatureV4S3Express extends SignatureV4 {\n    async signWithCredentials(requestToSign, credentials, options) {\n        const credentialsWithoutSessionToken = getCredentialsWithoutSessionToken(credentials);\n        requestToSign.headers[SESSION_TOKEN_HEADER] = credentials.sessionToken;\n        const privateAccess = this;\n        setSingleOverride(privateAccess, credentialsWithoutSessionToken);\n        return privateAccess.signRequest(requestToSign, options ?? {});\n    }\n    async presignWithCredentials(requestToSign, credentials, options) {\n        const credentialsWithoutSessionToken = getCredentialsWithoutSessionToken(credentials);\n        delete requestToSign.headers[SESSION_TOKEN_HEADER];\n        requestToSign.headers[SESSION_TOKEN_QUERY_PARAM] = credentials.sessionToken;\n        requestToSign.query = requestToSign.query ?? {};\n        requestToSign.query[SESSION_TOKEN_QUERY_PARAM] = credentials.sessionToken;\n        const privateAccess = this;\n        setSingleOverride(privateAccess, credentialsWithoutSessionToken);\n        return this.presign(requestToSign, options);\n    }\n}\nfunction getCredentialsWithoutSessionToken(credentials) {\n    const credentialsWithoutSessionToken = {\n        accessKeyId: credentials.accessKeyId,\n        secretAccessKey: credentials.secretAccessKey,\n        expiration: credentials.expiration,\n    };\n    return credentialsWithoutSessionToken;\n}\nfunction setSingleOverride(privateAccess, credentialsWithoutSessionToken) {\n    const id = setTimeout(() => {\n        throw new Error(\"SignatureV4S3Express credential override was created but not called.\");\n    }, 10);\n    const currentCredentialProvider = privateAccess.credentialProvider;\n    const overrideCredentialsProviderOnce = () => {\n        clearTimeout(id);\n        privateAccess.credentialProvider = currentCredentialProvider;\n        return Promise.resolve(credentialsWithoutSessionToken);\n    };\n    privateAccess.credentialProvider = overrideCredentialsProviderOnce;\n}\n","import { setFeature } from \"@aws-sdk/core\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { S3_EXPRESS_AUTH_SCHEME, S3_EXPRESS_BACKEND, S3_EXPRESS_BUCKET_TYPE, SESSION_TOKEN_HEADER } from \"../constants\";\nexport const s3ExpressMiddleware = (options) => {\n    return (next, context) => async (args) => {\n        if (context.endpointV2) {\n            const endpoint = context.endpointV2;\n            const isS3ExpressAuth = endpoint.properties?.authSchemes?.[0]?.name === S3_EXPRESS_AUTH_SCHEME;\n            const isS3ExpressBucket = endpoint.properties?.backend === S3_EXPRESS_BACKEND ||\n                endpoint.properties?.bucketType === S3_EXPRESS_BUCKET_TYPE;\n            if (isS3ExpressBucket) {\n                setFeature(context, \"S3_EXPRESS_BUCKET\", \"J\");\n                context.isS3ExpressBucket = true;\n            }\n            if (isS3ExpressAuth) {\n                const requestBucket = args.input.Bucket;\n                if (requestBucket) {\n                    const s3ExpressIdentity = await options.s3ExpressIdentityProvider.getS3ExpressIdentity(await options.credentials(), {\n                        Bucket: requestBucket,\n                    });\n                    context.s3ExpressIdentity = s3ExpressIdentity;\n                    if (HttpRequest.isInstance(args.request) && s3ExpressIdentity.sessionToken) {\n                        args.request.headers[SESSION_TOKEN_HEADER] = s3ExpressIdentity.sessionToken;\n                    }\n                }\n            }\n        }\n        return next(args);\n    };\n};\nexport const s3ExpressMiddlewareOptions = {\n    name: \"s3ExpressMiddleware\",\n    step: \"build\",\n    tags: [\"S3\", \"S3_EXPRESS\"],\n    override: true,\n};\nexport const getS3ExpressPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(s3ExpressMiddleware(options), s3ExpressMiddlewareOptions);\n    },\n});\n","export const signS3Express = async (s3ExpressIdentity, signingOptions, request, sigV4MultiRegionSigner) => {\n    const signedRequest = await sigV4MultiRegionSigner.signWithCredentials(request, s3ExpressIdentity, {});\n    if (signedRequest.headers[\"X-Amz-Security-Token\"] || signedRequest.headers[\"x-amz-security-token\"]) {\n        throw new Error(\"X-Amz-Security-Token must not be set for s3-express requests.\");\n    }\n    return signedRequest;\n};\n","import { httpSigningMiddlewareOptions } from \"@smithy/core\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { SMITHY_CONTEXT_KEY, } from \"@smithy/types\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { signS3Express } from \"./signS3Express\";\nconst defaultErrorHandler = (signingProperties) => (error) => {\n    throw error;\n};\nconst defaultSuccessHandler = (httpResponse, signingProperties) => { };\nexport const s3ExpressHttpSigningMiddlewareOptions = httpSigningMiddlewareOptions;\nexport const s3ExpressHttpSigningMiddleware = (config) => (next, context) => async (args) => {\n    if (!HttpRequest.isInstance(args.request)) {\n        return next(args);\n    }\n    const smithyContext = getSmithyContext(context);\n    const scheme = smithyContext.selectedHttpAuthScheme;\n    if (!scheme) {\n        throw new Error(`No HttpAuthScheme was selected: unable to sign request`);\n    }\n    const { httpAuthOption: { signingProperties = {} }, identity, signer, } = scheme;\n    let request;\n    if (context.s3ExpressIdentity) {\n        request = await signS3Express(context.s3ExpressIdentity, signingProperties, args.request, await config.signer());\n    }\n    else {\n        request = await signer.sign(args.request, identity, signingProperties);\n    }\n    const output = await next({\n        ...args,\n        request,\n    }).catch((signer.errorHandler || defaultErrorHandler)(signingProperties));\n    (signer.successHandler || defaultSuccessHandler)(output.response, signingProperties);\n    return output;\n};\nexport const getS3ExpressHttpSigningPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(s3ExpressHttpSigningMiddleware(config), httpSigningMiddlewareOptions);\n    },\n});\n","import { S3ExpressIdentityProviderImpl } from \"./s3-express\";\nexport const resolveS3Config = (input, { session, }) => {\n    const [s3ClientProvider, CreateSessionCommandCtor] = session;\n    const { forcePathStyle, useAccelerateEndpoint, disableMultiregionAccessPoints, followRegionRedirects, s3ExpressIdentityProvider, bucketEndpoint, expectContinueHeader, } = input;\n    return Object.assign(input, {\n        forcePathStyle: forcePathStyle ?? false,\n        useAccelerateEndpoint: useAccelerateEndpoint ?? false,\n        disableMultiregionAccessPoints: disableMultiregionAccessPoints ?? false,\n        followRegionRedirects: followRegionRedirects ?? false,\n        s3ExpressIdentityProvider: s3ExpressIdentityProvider ??\n            new S3ExpressIdentityProviderImpl(async (key) => s3ClientProvider().send(new CreateSessionCommandCtor({\n                Bucket: key,\n            }))),\n        bucketEndpoint: bucketEndpoint ?? false,\n        expectContinueHeader: expectContinueHeader ?? 2_097_152,\n    });\n};\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { headStream, splitStream } from \"@smithy/util-stream\";\nconst THROW_IF_EMPTY_BODY = {\n    CopyObjectCommand: true,\n    UploadPartCopyCommand: true,\n    CompleteMultipartUploadCommand: true,\n};\nconst MAX_BYTES_TO_INSPECT = 3000;\nexport const throw200ExceptionsMiddleware = (config) => (next, context) => async (args) => {\n    const result = await next(args);\n    const { response } = result;\n    if (!HttpResponse.isInstance(response)) {\n        return result;\n    }\n    const { statusCode, body: sourceBody } = response;\n    if (statusCode < 200 || statusCode >= 300) {\n        return result;\n    }\n    const isSplittableStream = typeof sourceBody?.stream === \"function\" ||\n        typeof sourceBody?.pipe === \"function\" ||\n        typeof sourceBody?.tee === \"function\";\n    if (!isSplittableStream) {\n        return result;\n    }\n    let bodyCopy = sourceBody;\n    let body = sourceBody;\n    if (sourceBody && typeof sourceBody === \"object\" && !(sourceBody instanceof Uint8Array)) {\n        [bodyCopy, body] = await splitStream(sourceBody);\n    }\n    response.body = body;\n    const bodyBytes = await collectBody(bodyCopy, {\n        streamCollector: async (stream) => {\n            return headStream(stream, MAX_BYTES_TO_INSPECT);\n        },\n    });\n    if (typeof bodyCopy?.destroy === \"function\") {\n        bodyCopy.destroy();\n    }\n    const bodyStringTail = config.utf8Encoder(bodyBytes.subarray(bodyBytes.length - 16));\n    if (bodyBytes.length === 0 && THROW_IF_EMPTY_BODY[context.commandName]) {\n        const err = new Error(\"S3 aborted request\");\n        err.name = \"InternalError\";\n        throw err;\n    }\n    if (bodyStringTail && bodyStringTail.endsWith(\"</Error>\")) {\n        response.statusCode = 400;\n    }\n    return result;\n};\nconst collectBody = (streamBody = new Uint8Array(), context) => {\n    if (streamBody instanceof Uint8Array) {\n        return Promise.resolve(streamBody);\n    }\n    return context.streamCollector(streamBody) || Promise.resolve(new Uint8Array());\n};\nexport const throw200ExceptionsMiddlewareOptions = {\n    relation: \"after\",\n    toMiddleware: \"deserializerMiddleware\",\n    tags: [\"THROW_200_EXCEPTIONS\", \"S3\"],\n    name: \"throw200ExceptionsMiddleware\",\n    override: true,\n};\nexport const getThrow200ExceptionsPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(throw200ExceptionsMiddleware(config), throw200ExceptionsMiddlewareOptions);\n    },\n});\n","export const validate = (str) => typeof str === \"string\" && str.indexOf(\"arn:\") === 0 && str.split(\":\").length >= 6;\nexport const parse = (arn) => {\n    const segments = arn.split(\":\");\n    if (segments.length < 6 || segments[0] !== \"arn\")\n        throw new Error(\"Malformed ARN\");\n    const [, partition, service, region, accountId, ...resource] = segments;\n    return {\n        partition,\n        service,\n        region,\n        accountId,\n        resource: resource.join(\":\"),\n    };\n};\nexport const build = (arnObject) => {\n    const { partition = \"aws\", service, region, accountId, resource } = arnObject;\n    if ([service, region, accountId, resource].some((segment) => typeof segment !== \"string\")) {\n        throw new Error(\"Input ARN object is invalid\");\n    }\n    return `arn:${partition}:${service}:${region}:${accountId}:${resource}`;\n};\n","export function bucketEndpointMiddleware(options) {\n    return (next, context) => async (args) => {\n        if (options.bucketEndpoint) {\n            const endpoint = context.endpointV2;\n            if (endpoint) {\n                const bucket = args.input.Bucket;\n                if (typeof bucket === \"string\") {\n                    try {\n                        const bucketEndpointUrl = new URL(bucket);\n                        context.endpointV2 = {\n                            ...endpoint,\n                            url: bucketEndpointUrl,\n                        };\n                    }\n                    catch (e) {\n                        const warning = `@aws-sdk/middleware-sdk-s3: bucketEndpoint=true was set but Bucket=${bucket} could not be parsed as URL.`;\n                        if (context.logger?.constructor?.name === \"NoOpLogger\") {\n                            console.warn(warning);\n                        }\n                        else {\n                            context.logger?.warn?.(warning);\n                        }\n                        throw e;\n                    }\n                }\n            }\n        }\n        return next(args);\n    };\n}\nexport const bucketEndpointMiddlewareOptions = {\n    name: \"bucketEndpointMiddleware\",\n    override: true,\n    relation: \"after\",\n    toMiddleware: \"endpointV2Middleware\",\n};\n","import { validate as validateArn } from \"@aws-sdk/util-arn-parser\";\nimport { bucketEndpointMiddleware, bucketEndpointMiddlewareOptions } from \"./bucket-endpoint-middleware\";\nexport function validateBucketNameMiddleware({ bucketEndpoint }) {\n    return (next) => async (args) => {\n        const { input: { Bucket }, } = args;\n        if (!bucketEndpoint && typeof Bucket === \"string\" && !validateArn(Bucket) && Bucket.indexOf(\"/\") >= 0) {\n            const err = new Error(`Bucket name shouldn't contain '/', received '${Bucket}'`);\n            err.name = \"InvalidBucketName\";\n            throw err;\n        }\n        return next({ ...args });\n    };\n}\nexport const validateBucketNameMiddlewareOptions = {\n    step: \"initialize\",\n    tags: [\"VALIDATE_BUCKET_NAME\"],\n    name: \"validateBucketNameMiddleware\",\n    override: true,\n};\nexport const getValidateBucketNamePlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(validateBucketNameMiddleware(options), validateBucketNameMiddlewareOptions);\n        clientStack.addRelativeTo(bucketEndpointMiddleware(options), bucketEndpointMiddlewareOptions);\n    },\n});\n","import { normalizeProvider } from \"@smithy/core\";\nexport const DEFAULT_UA_APP_ID = undefined;\nfunction isValidUserAgentAppId(appId) {\n    if (appId === undefined) {\n        return true;\n    }\n    return typeof appId === \"string\" && appId.length <= 50;\n}\nexport function resolveUserAgentConfig(input) {\n    const normalizedAppIdProvider = normalizeProvider(input.userAgentAppId ?? DEFAULT_UA_APP_ID);\n    const { customUserAgent } = input;\n    return Object.assign(input, {\n        customUserAgent: typeof customUserAgent === \"string\" ? [[customUserAgent]] : customUserAgent,\n        userAgentAppId: async () => {\n            const appId = await normalizedAppIdProvider();\n            if (!isValidUserAgentAppId(appId)) {\n                const logger = input.logger?.constructor?.name === \"NoOpLogger\" || !input.logger ? console : input.logger;\n                if (typeof appId !== \"string\") {\n                    logger?.warn(\"userAgentAppId must be a string or undefined.\");\n                }\n                else if (appId.length > 50) {\n                    logger?.warn(\"The provided userAgentAppId exceeds the maximum length of 50 characters.\");\n                }\n            }\n            return appId;\n        },\n    });\n}\n","export class EndpointCache {\n    capacity;\n    data = new Map();\n    parameters = [];\n    constructor({ size, params }) {\n        this.capacity = size ?? 50;\n        if (params) {\n            this.parameters = params;\n        }\n    }\n    get(endpointParams, resolver) {\n        const key = this.hash(endpointParams);\n        if (key === false) {\n            return resolver();\n        }\n        if (!this.data.has(key)) {\n            if (this.data.size > this.capacity + 10) {\n                const keys = this.data.keys();\n                let i = 0;\n                while (true) {\n                    const { value, done } = keys.next();\n                    this.data.delete(value);\n                    if (done || ++i > 10) {\n                        break;\n                    }\n                }\n            }\n            this.data.set(key, resolver());\n        }\n        return this.data.get(key);\n    }\n    size() {\n        return this.data.size;\n    }\n    hash(endpointParams) {\n        let buffer = \"\";\n        const { parameters } = this;\n        if (parameters.length === 0) {\n            return false;\n        }\n        for (const param of parameters) {\n            const val = String(endpointParams[param] ?? \"\");\n            if (val.includes(\"|;\")) {\n                return false;\n            }\n            buffer += val + \"|;\";\n        }\n        return buffer;\n    }\n}\n","const IP_V4_REGEX = new RegExp(`^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$`);\nexport const isIpAddress = (value) => IP_V4_REGEX.test(value) || (value.startsWith(\"[\") && value.endsWith(\"]\"));\n","const VALID_HOST_LABEL_REGEX = new RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`);\nexport const isValidHostLabel = (value, allowSubDomains = false) => {\n    if (!allowSubDomains) {\n        return VALID_HOST_LABEL_REGEX.test(value);\n    }\n    const labels = value.split(\".\");\n    for (const label of labels) {\n        if (!isValidHostLabel(label)) {\n            return false;\n        }\n    }\n    return true;\n};\n","export const customEndpointFunctions = {};\n","export const debugId = \"endpoints\";\n","export function toDebugString(input) {\n    if (typeof input !== \"object\" || input == null) {\n        return input;\n    }\n    if (\"ref\" in input) {\n        return `$${toDebugString(input.ref)}`;\n    }\n    if (\"fn\" in input) {\n        return `${input.fn}(${(input.argv || []).map(toDebugString).join(\", \")})`;\n    }\n    return JSON.stringify(input, null, 2);\n}\n","export class EndpointError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"EndpointError\";\n    }\n}\n","export const booleanEquals = (value1, value2) => value1 === value2;\n","import { EndpointError } from \"../types\";\nexport const getAttrPathList = (path) => {\n    const parts = path.split(\".\");\n    const pathList = [];\n    for (const part of parts) {\n        const squareBracketIndex = part.indexOf(\"[\");\n        if (squareBracketIndex !== -1) {\n            if (part.indexOf(\"]\") !== part.length - 1) {\n                throw new EndpointError(`Path: '${path}' does not end with ']'`);\n            }\n            const arrayIndex = part.slice(squareBracketIndex + 1, -1);\n            if (Number.isNaN(parseInt(arrayIndex))) {\n                throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path}'`);\n            }\n            if (squareBracketIndex !== 0) {\n                pathList.push(part.slice(0, squareBracketIndex));\n            }\n            pathList.push(arrayIndex);\n        }\n        else {\n            pathList.push(part);\n        }\n    }\n    return pathList;\n};\n","import { EndpointError } from \"../types\";\nimport { getAttrPathList } from \"./getAttrPathList\";\nexport const getAttr = (value, path) => getAttrPathList(path).reduce((acc, index) => {\n    if (typeof acc !== \"object\") {\n        throw new EndpointError(`Index '${index}' in '${path}' not found in '${JSON.stringify(value)}'`);\n    }\n    else if (Array.isArray(acc)) {\n        return acc[parseInt(index)];\n    }\n    return acc[index];\n}, value);\n","export const isSet = (value) => value != null;\n","export const not = (value) => !value;\n","import { EndpointURLScheme } from \"@smithy/types\";\nimport { isIpAddress } from \"./isIpAddress\";\nconst DEFAULT_PORTS = {\n    [EndpointURLScheme.HTTP]: 80,\n    [EndpointURLScheme.HTTPS]: 443,\n};\nexport const parseURL = (value) => {\n    const whatwgURL = (() => {\n        try {\n            if (value instanceof URL) {\n                return value;\n            }\n            if (typeof value === \"object\" && \"hostname\" in value) {\n                const { hostname, port, protocol = \"\", path = \"\", query = {} } = value;\n                const url = new URL(`${protocol}//${hostname}${port ? `:${port}` : \"\"}${path}`);\n                url.search = Object.entries(query)\n                    .map(([k, v]) => `${k}=${v}`)\n                    .join(\"&\");\n                return url;\n            }\n            return new URL(value);\n        }\n        catch (error) {\n            return null;\n        }\n    })();\n    if (!whatwgURL) {\n        console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);\n        return null;\n    }\n    const urlString = whatwgURL.href;\n    const { host, hostname, pathname, protocol, search } = whatwgURL;\n    if (search) {\n        return null;\n    }\n    const scheme = protocol.slice(0, -1);\n    if (!Object.values(EndpointURLScheme).includes(scheme)) {\n        return null;\n    }\n    const isIp = isIpAddress(hostname);\n    const inputContainsDefaultPort = urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`) ||\n        (typeof value === \"string\" && value.includes(`${host}:${DEFAULT_PORTS[scheme]}`));\n    const authority = `${host}${inputContainsDefaultPort ? `:${DEFAULT_PORTS[scheme]}` : ``}`;\n    return {\n        scheme,\n        authority,\n        path: pathname,\n        normalizedPath: pathname.endsWith(\"/\") ? pathname : `${pathname}/`,\n        isIp,\n    };\n};\n","export const stringEquals = (value1, value2) => value1 === value2;\n","export const substring = (input, start, stop, reverse) => {\n    if (start >= stop || input.length < stop) {\n        return null;\n    }\n    if (!reverse) {\n        return input.substring(start, stop);\n    }\n    return input.substring(input.length - stop, input.length - start);\n};\n","export const uriEncode = (value) => encodeURIComponent(value).replace(/[!*'()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n","import { booleanEquals, getAttr, isSet, isValidHostLabel, not, parseURL, stringEquals, substring, uriEncode, } from \"../lib\";\nexport const endpointFunctions = {\n    booleanEquals,\n    getAttr,\n    isSet,\n    isValidHostLabel,\n    not,\n    parseURL,\n    stringEquals,\n    substring,\n    uriEncode,\n};\n","import { getAttr } from \"../lib\";\nexport const evaluateTemplate = (template, options) => {\n    const evaluatedTemplateArr = [];\n    const templateContext = {\n        ...options.endpointParams,\n        ...options.referenceRecord,\n    };\n    let currentIndex = 0;\n    while (currentIndex < template.length) {\n        const openingBraceIndex = template.indexOf(\"{\", currentIndex);\n        if (openingBraceIndex === -1) {\n            evaluatedTemplateArr.push(template.slice(currentIndex));\n            break;\n        }\n        evaluatedTemplateArr.push(template.slice(currentIndex, openingBraceIndex));\n        const closingBraceIndex = template.indexOf(\"}\", openingBraceIndex);\n        if (closingBraceIndex === -1) {\n            evaluatedTemplateArr.push(template.slice(openingBraceIndex));\n            break;\n        }\n        if (template[openingBraceIndex + 1] === \"{\" && template[closingBraceIndex + 1] === \"}\") {\n            evaluatedTemplateArr.push(template.slice(openingBraceIndex + 1, closingBraceIndex));\n            currentIndex = closingBraceIndex + 2;\n        }\n        const parameterName = template.substring(openingBraceIndex + 1, closingBraceIndex);\n        if (parameterName.includes(\"#\")) {\n            const [refName, attrName] = parameterName.split(\"#\");\n            evaluatedTemplateArr.push(getAttr(templateContext[refName], attrName));\n        }\n        else {\n            evaluatedTemplateArr.push(templateContext[parameterName]);\n        }\n        currentIndex = closingBraceIndex + 1;\n    }\n    return evaluatedTemplateArr.join(\"\");\n};\n","export const getReferenceValue = ({ ref }, options) => {\n    const referenceRecord = {\n        ...options.endpointParams,\n        ...options.referenceRecord,\n    };\n    return referenceRecord[ref];\n};\n","import { EndpointError } from \"../types\";\nimport { customEndpointFunctions } from \"./customEndpointFunctions\";\nimport { endpointFunctions } from \"./endpointFunctions\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getReferenceValue } from \"./getReferenceValue\";\nexport const evaluateExpression = (obj, keyName, options) => {\n    if (typeof obj === \"string\") {\n        return evaluateTemplate(obj, options);\n    }\n    else if (obj[\"fn\"]) {\n        return group.callFunction(obj, options);\n    }\n    else if (obj[\"ref\"]) {\n        return getReferenceValue(obj, options);\n    }\n    throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`);\n};\nexport const callFunction = ({ fn, argv }, options) => {\n    const evaluatedArgs = argv.map((arg) => [\"boolean\", \"number\"].includes(typeof arg) ? arg : group.evaluateExpression(arg, \"arg\", options));\n    const fnSegments = fn.split(\".\");\n    if (fnSegments[0] in customEndpointFunctions && fnSegments[1] != null) {\n        return customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs);\n    }\n    return endpointFunctions[fn](...evaluatedArgs);\n};\nexport const group = {\n    evaluateExpression,\n    callFunction,\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nexport const evaluateCondition = ({ assign, ...fnArgs }, options) => {\n    if (assign && assign in options.referenceRecord) {\n        throw new EndpointError(`'${assign}' is already defined in Reference Record.`);\n    }\n    const value = callFunction(fnArgs, options);\n    options.logger?.debug?.(`${debugId} evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);\n    return {\n        result: value === \"\" ? true : !!value,\n        ...(assign != null && { toAssign: { name: assign, value } }),\n    };\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateCondition } from \"./evaluateCondition\";\nexport const evaluateConditions = (conditions = [], options) => {\n    const conditionsReferenceRecord = {};\n    for (const condition of conditions) {\n        const { result, toAssign } = evaluateCondition(condition, {\n            ...options,\n            referenceRecord: {\n                ...options.referenceRecord,\n                ...conditionsReferenceRecord,\n            },\n        });\n        if (!result) {\n            return { result };\n        }\n        if (toAssign) {\n            conditionsReferenceRecord[toAssign.name] = toAssign.value;\n            options.logger?.debug?.(`${debugId} assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`);\n        }\n    }\n    return { result: true, referenceRecord: conditionsReferenceRecord };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointHeaders = (headers, options) => Object.entries(headers).reduce((acc, [headerKey, headerVal]) => ({\n    ...acc,\n    [headerKey]: headerVal.map((headerValEntry) => {\n        const processedExpr = evaluateExpression(headerValEntry, \"Header value entry\", options);\n        if (typeof processedExpr !== \"string\") {\n            throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);\n        }\n        return processedExpr;\n    }),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nexport const getEndpointProperties = (properties, options) => Object.entries(properties).reduce((acc, [propertyKey, propertyVal]) => ({\n    ...acc,\n    [propertyKey]: group.getEndpointProperty(propertyVal, options),\n}), {});\nexport const getEndpointProperty = (property, options) => {\n    if (Array.isArray(property)) {\n        return property.map((propertyEntry) => getEndpointProperty(propertyEntry, options));\n    }\n    switch (typeof property) {\n        case \"string\":\n            return evaluateTemplate(property, options);\n        case \"object\":\n            if (property === null) {\n                throw new EndpointError(`Unexpected endpoint property: ${property}`);\n            }\n            return group.getEndpointProperties(property, options);\n        case \"boolean\":\n            return property;\n        default:\n            throw new EndpointError(`Unexpected endpoint property type: ${typeof property}`);\n    }\n};\nexport const group = {\n    getEndpointProperty,\n    getEndpointProperties,\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointUrl = (endpointUrl, options) => {\n    const expression = evaluateExpression(endpointUrl, \"Endpoint URL\", options);\n    if (typeof expression === \"string\") {\n        try {\n            return new URL(expression);\n        }\n        catch (error) {\n            console.error(`Failed to construct URL with ${expression}`, error);\n            throw error;\n        }\n    }\n    throw new EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { getEndpointHeaders } from \"./getEndpointHeaders\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nimport { getEndpointUrl } from \"./getEndpointUrl\";\nexport const evaluateEndpointRule = (endpointRule, options) => {\n    const { conditions, endpoint } = endpointRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    const endpointRuleOptions = {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    };\n    const { url, properties, headers } = endpoint;\n    options.logger?.debug?.(`${debugId} Resolving endpoint from template: ${toDebugString(endpoint)}`);\n    return {\n        ...(headers != undefined && {\n            headers: getEndpointHeaders(headers, endpointRuleOptions),\n        }),\n        ...(properties != undefined && {\n            properties: getEndpointProperties(properties, endpointRuleOptions),\n        }),\n        url: getEndpointUrl(url, endpointRuleOptions),\n    };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const evaluateErrorRule = (errorRule, options) => {\n    const { conditions, error } = errorRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    throw new EndpointError(evaluateExpression(error, \"Error\", {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    }));\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateEndpointRule } from \"./evaluateEndpointRule\";\nimport { evaluateErrorRule } from \"./evaluateErrorRule\";\nexport const evaluateRules = (rules, options) => {\n    for (const rule of rules) {\n        if (rule.type === \"endpoint\") {\n            const endpointOrUndefined = evaluateEndpointRule(rule, options);\n            if (endpointOrUndefined) {\n                return endpointOrUndefined;\n            }\n        }\n        else if (rule.type === \"error\") {\n            evaluateErrorRule(rule, options);\n        }\n        else if (rule.type === \"tree\") {\n            const endpointOrUndefined = group.evaluateTreeRule(rule, options);\n            if (endpointOrUndefined) {\n                return endpointOrUndefined;\n            }\n        }\n        else {\n            throw new EndpointError(`Unknown endpoint rule: ${rule}`);\n        }\n    }\n    throw new EndpointError(`Rules evaluation failed`);\n};\nexport const evaluateTreeRule = (treeRule, options) => {\n    const { conditions, rules } = treeRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    return group.evaluateRules(rules, {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    });\n};\nexport const group = {\n    evaluateRules,\n    evaluateTreeRule,\n};\n","import { debugId, toDebugString } from \"./debug\";\nimport { EndpointError } from \"./types\";\nimport { evaluateRules } from \"./utils\";\nexport const resolveEndpoint = (ruleSetObject, options) => {\n    const { endpointParams, logger } = options;\n    const { parameters, rules } = ruleSetObject;\n    options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);\n    const paramsWithDefault = Object.entries(parameters)\n        .filter(([, v]) => v.default != null)\n        .map(([k, v]) => [k, v.default]);\n    if (paramsWithDefault.length > 0) {\n        for (const [paramKey, paramDefaultValue] of paramsWithDefault) {\n            endpointParams[paramKey] = endpointParams[paramKey] ?? paramDefaultValue;\n        }\n    }\n    const requiredParams = Object.entries(parameters)\n        .filter(([, v]) => v.required)\n        .map(([k]) => k);\n    for (const requiredParam of requiredParams) {\n        if (endpointParams[requiredParam] == null) {\n            throw new EndpointError(`Missing required parameter: '${requiredParam}'`);\n        }\n    }\n    const endpoint = evaluateRules(rules, { endpointParams, logger, referenceRecord: {} });\n    options.logger?.debug?.(`${debugId} Resolved endpoint: ${toDebugString(endpoint)}`);\n    return endpoint;\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n    if (allowSubDomains) {\n        for (const label of value.split(\".\")) {\n            if (!isVirtualHostableS3Bucket(label)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    if (!isValidHostLabel(value)) {\n        return false;\n    }\n    if (value.length < 3 || value.length > 63) {\n        return false;\n    }\n    if (value !== value.toLowerCase()) {\n        return false;\n    }\n    if (isIpAddress(value)) {\n        return false;\n    }\n    return true;\n};\n","const ARN_DELIMITER = \":\";\nconst RESOURCE_DELIMITER = \"/\";\nexport const parseArn = (value) => {\n    const segments = value.split(ARN_DELIMITER);\n    if (segments.length < 6)\n        return null;\n    const [arn, partition, service, region, accountId, ...resourcePath] = segments;\n    if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourcePath.join(ARN_DELIMITER) === \"\")\n        return null;\n    const resourceId = resourcePath.map((resource) => resource.split(RESOURCE_DELIMITER)).flat();\n    return {\n        partition,\n        service,\n        region,\n        accountId,\n        resourceId,\n    };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n    const { partitions } = selectedPartitionsInfo;\n    for (const partition of partitions) {\n        const { regions, outputs } = partition;\n        for (const [region, regionData] of Object.entries(regions)) {\n            if (region === value) {\n                return {\n                    ...outputs,\n                    ...regionData,\n                };\n            }\n        }\n    }\n    for (const partition of partitions) {\n        const { regionRegex, outputs } = partition;\n        if (new RegExp(regionRegex).test(value)) {\n            return {\n                ...outputs,\n            };\n        }\n    }\n    const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n    if (!DEFAULT_PARTITION) {\n        throw new Error(\"Provided region was not found in the partition array or regex,\" +\n            \" and default partition with id 'aws' doesn't exist.\");\n    }\n    return {\n        ...DEFAULT_PARTITION.outputs,\n    };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n    selectedPartitionsInfo = partitionsInfo;\n    selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n    setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nexport const awsEndpointFunctions = {\n    isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n    parseArn: parseArn,\n    partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","export function parseQueryString(querystring) {\n    const query = {};\n    querystring = querystring.replace(/^\\?/, \"\");\n    if (querystring) {\n        for (const pair of querystring.split(\"&\")) {\n            let [key, value = null] = pair.split(\"=\");\n            key = decodeURIComponent(key);\n            if (value) {\n                value = decodeURIComponent(value);\n            }\n            if (!(key in query)) {\n                query[key] = value;\n            }\n            else if (Array.isArray(query[key])) {\n                query[key].push(value);\n            }\n            else {\n                query[key] = [query[key], value];\n            }\n        }\n    }\n    return query;\n}\n","import { parseQueryString } from \"@smithy/querystring-parser\";\nexport const parseUrl = (url) => {\n    if (typeof url === \"string\") {\n        return parseUrl(new URL(url));\n    }\n    const { hostname, pathname, port, protocol, search } = url;\n    let query;\n    if (search) {\n        query = parseQueryString(search);\n    }\n    return {\n        hostname,\n        port: port ? parseInt(port) : undefined,\n        protocol,\n        path: pathname,\n        query,\n    };\n};\n","import { setFeature } from \"@aws-sdk/core\";\nconst ACCOUNT_ID_ENDPOINT_REGEX = /\\d{12}\\.ddb/;\nexport async function checkFeatures(context, config, args) {\n    const request = args.request;\n    if (request?.headers?.[\"smithy-protocol\"] === \"rpc-v2-cbor\") {\n        setFeature(context, \"PROTOCOL_RPC_V2_CBOR\", \"M\");\n    }\n    if (typeof config.retryStrategy === \"function\") {\n        const retryStrategy = await config.retryStrategy();\n        if (typeof retryStrategy.acquireInitialRetryToken === \"function\") {\n            if (retryStrategy.constructor?.name?.includes(\"Adaptive\")) {\n                setFeature(context, \"RETRY_MODE_ADAPTIVE\", \"F\");\n            }\n            else {\n                setFeature(context, \"RETRY_MODE_STANDARD\", \"E\");\n            }\n        }\n        else {\n            setFeature(context, \"RETRY_MODE_LEGACY\", \"D\");\n        }\n    }\n    if (typeof config.accountIdEndpointMode === \"function\") {\n        const endpointV2 = context.endpointV2;\n        if (String(endpointV2?.url?.hostname).match(ACCOUNT_ID_ENDPOINT_REGEX)) {\n            setFeature(context, \"ACCOUNT_ID_ENDPOINT\", \"O\");\n        }\n        switch (await config.accountIdEndpointMode?.()) {\n            case \"disabled\":\n                setFeature(context, \"ACCOUNT_ID_MODE_DISABLED\", \"Q\");\n                break;\n            case \"preferred\":\n                setFeature(context, \"ACCOUNT_ID_MODE_PREFERRED\", \"P\");\n                break;\n            case \"required\":\n                setFeature(context, \"ACCOUNT_ID_MODE_REQUIRED\", \"R\");\n                break;\n        }\n    }\n    const identity = context.__smithy_context?.selectedHttpAuthScheme?.identity;\n    if (identity?.$source) {\n        const credentials = identity;\n        if (credentials.accountId) {\n            setFeature(context, \"RESOLVED_ACCOUNT_ID\", \"T\");\n        }\n        for (const [key, value] of Object.entries(credentials.$source ?? {})) {\n            setFeature(context, key, value);\n        }\n    }\n}\n","export const USER_AGENT = \"user-agent\";\nexport const X_AMZ_USER_AGENT = \"x-amz-user-agent\";\nexport const SPACE = \" \";\nexport const UA_NAME_SEPARATOR = \"/\";\nexport const UA_NAME_ESCAPE_REGEX = /[^!$%&'*+\\-.^_`|~\\w]/g;\nexport const UA_VALUE_ESCAPE_REGEX = /[^!$%&'*+\\-.^_`|~\\w#]/g;\nexport const UA_ESCAPE_CHAR = \"-\";\n","const BYTE_LIMIT = 1024;\nexport function encodeFeatures(features) {\n    let buffer = \"\";\n    for (const key in features) {\n        const val = features[key];\n        if (buffer.length + val.length + 1 <= BYTE_LIMIT) {\n            if (buffer.length) {\n                buffer += \",\" + val;\n            }\n            else {\n                buffer += val;\n            }\n            continue;\n        }\n        break;\n    }\n    return buffer;\n}\n","import { getUserAgentPrefix } from \"@aws-sdk/util-endpoints\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { checkFeatures } from \"./check-features\";\nimport { SPACE, UA_ESCAPE_CHAR, UA_NAME_ESCAPE_REGEX, UA_NAME_SEPARATOR, UA_VALUE_ESCAPE_REGEX, USER_AGENT, X_AMZ_USER_AGENT, } from \"./constants\";\nimport { encodeFeatures } from \"./encode-features\";\nexport const userAgentMiddleware = (options) => (next, context) => async (args) => {\n    const { request } = args;\n    if (!HttpRequest.isInstance(request)) {\n        return next(args);\n    }\n    const { headers } = request;\n    const userAgent = context?.userAgent?.map(escapeUserAgent) || [];\n    const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);\n    await checkFeatures(context, options, args);\n    const awsContext = context;\n    defaultUserAgent.push(`m/${encodeFeatures(Object.assign({}, context.__smithy_context?.features, awsContext.__aws_sdk_context?.features))}`);\n    const customUserAgent = options?.customUserAgent?.map(escapeUserAgent) || [];\n    const appId = await options.userAgentAppId();\n    if (appId) {\n        defaultUserAgent.push(escapeUserAgent([`app`, `${appId}`]));\n    }\n    const prefix = getUserAgentPrefix();\n    const sdkUserAgentValue = (prefix ? [prefix] : [])\n        .concat([...defaultUserAgent, ...userAgent, ...customUserAgent])\n        .join(SPACE);\n    const normalUAValue = [\n        ...defaultUserAgent.filter((section) => section.startsWith(\"aws-sdk-\")),\n        ...customUserAgent,\n    ].join(SPACE);\n    if (options.runtime !== \"browser\") {\n        if (normalUAValue) {\n            headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT]\n                ? `${headers[USER_AGENT]} ${normalUAValue}`\n                : normalUAValue;\n        }\n        headers[USER_AGENT] = sdkUserAgentValue;\n    }\n    else {\n        headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;\n    }\n    return next({\n        ...args,\n        request,\n    });\n};\nconst escapeUserAgent = (userAgentPair) => {\n    const name = userAgentPair[0]\n        .split(UA_NAME_SEPARATOR)\n        .map((part) => part.replace(UA_NAME_ESCAPE_REGEX, UA_ESCAPE_CHAR))\n        .join(UA_NAME_SEPARATOR);\n    const version = userAgentPair[1]?.replace(UA_VALUE_ESCAPE_REGEX, UA_ESCAPE_CHAR);\n    const prefixSeparatorIndex = name.indexOf(UA_NAME_SEPARATOR);\n    const prefix = name.substring(0, prefixSeparatorIndex);\n    let uaName = name.substring(prefixSeparatorIndex + 1);\n    if (prefix === \"api\") {\n        uaName = uaName.toLowerCase();\n    }\n    return [prefix, uaName, version]\n        .filter((item) => item && item.length > 0)\n        .reduce((acc, item, index) => {\n        switch (index) {\n            case 0:\n                return item;\n            case 1:\n                return `${acc}/${item}`;\n            default:\n                return `${acc}#${item}`;\n        }\n    }, \"\");\n};\nexport const getUserAgentMiddlewareOptions = {\n    name: \"getUserAgentMiddleware\",\n    step: \"build\",\n    priority: \"low\",\n    tags: [\"SET_USER_AGENT\", \"USER_AGENT\"],\n    override: true,\n};\nexport const getUserAgentPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(userAgentMiddleware(config), getUserAgentMiddlewareOptions);\n    },\n});\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_DUALSTACK_ENDPOINT = \"AWS_USE_DUALSTACK_ENDPOINT\";\nexport const CONFIG_USE_DUALSTACK_ENDPOINT = \"use_dualstack_endpoint\";\nexport const DEFAULT_USE_DUALSTACK_ENDPOINT = false;\nexport const NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_DUALSTACK_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_DUALSTACK_ENDPOINT, SelectorType.CONFIG),\n    default: false,\n};\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_FIPS_ENDPOINT = \"AWS_USE_FIPS_ENDPOINT\";\nexport const CONFIG_USE_FIPS_ENDPOINT = \"use_fips_endpoint\";\nexport const DEFAULT_USE_FIPS_ENDPOINT = false;\nexport const NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_FIPS_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_FIPS_ENDPOINT, SelectorType.CONFIG),\n    default: false,\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nconst validRegions = new Set();\nexport const checkRegion = (region, check = isValidHostLabel) => {\n    if (!validRegions.has(region) && !check(region)) {\n        if (region === \"*\") {\n            console.warn(`@smithy/config-resolver WARN - Please use the caller region instead of \"*\". See \"sigv4a\" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.`);\n        }\n        else {\n            throw new Error(`Region not accepted: region=\"${region}\" is not a valid hostname component.`);\n        }\n    }\n    else {\n        validRegions.add(region);\n    }\n};\n","export const isFipsRegion = (region) => typeof region === \"string\" && (region.startsWith(\"fips-\") || region.endsWith(\"-fips\"));\n","import { isFipsRegion } from \"./isFipsRegion\";\nexport const getRealRegion = (region) => isFipsRegion(region)\n    ? [\"fips-aws-global\", \"aws-fips\"].includes(region)\n        ? \"us-east-1\"\n        : region.replace(/fips-(dkr-|prod-)?|-fips/, \"\")\n    : region;\n","import { checkRegion } from \"./checkRegion\";\nimport { getRealRegion } from \"./getRealRegion\";\nimport { isFipsRegion } from \"./isFipsRegion\";\nexport const resolveRegionConfig = (input) => {\n    const { region, useFipsEndpoint } = input;\n    if (!region) {\n        throw new Error(\"Region is missing\");\n    }\n    return Object.assign(input, {\n        region: async () => {\n            const providedRegion = typeof region === \"function\" ? await region() : region;\n            const realRegion = getRealRegion(providedRegion);\n            checkRegion(realRegion);\n            return realRegion;\n        },\n        useFipsEndpoint: async () => {\n            const providedRegion = typeof region === \"string\" ? region : await region();\n            if (isFipsRegion(providedRegion)) {\n                return true;\n            }\n            return typeof useFipsEndpoint !== \"function\" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();\n        },\n    });\n};\n","export const resolveEventStreamSerdeConfig = (input) => Object.assign(input, {\n    eventStreamMarshaller: input.eventStreamSerdeProvider(input),\n});\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst CONTENT_LENGTH_HEADER = \"content-length\";\nexport function contentLengthMiddleware(bodyLengthChecker) {\n    return (next) => async (args) => {\n        const request = args.request;\n        if (HttpRequest.isInstance(request)) {\n            const { body, headers } = request;\n            if (body &&\n                Object.keys(headers)\n                    .map((str) => str.toLowerCase())\n                    .indexOf(CONTENT_LENGTH_HEADER) === -1) {\n                try {\n                    const length = bodyLengthChecker(body);\n                    request.headers = {\n                        ...request.headers,\n                        [CONTENT_LENGTH_HEADER]: String(length),\n                    };\n                }\n                catch (error) {\n                }\n            }\n        }\n        return next({\n            ...args,\n            request,\n        });\n    };\n}\nexport const contentLengthMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"SET_CONTENT_LENGTH\", \"CONTENT_LENGTH\"],\n    name: \"contentLengthMiddleware\",\n    override: true,\n};\nexport const getContentLengthPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), contentLengthMiddlewareOptions);\n    },\n});\n","export const resolveParamsForS3 = async (endpointParams) => {\n    const bucket = endpointParams?.Bucket || \"\";\n    if (typeof endpointParams.Bucket === \"string\") {\n        endpointParams.Bucket = bucket.replace(/#/g, encodeURIComponent(\"#\")).replace(/\\?/g, encodeURIComponent(\"?\"));\n    }\n    if (isArnBucketName(bucket)) {\n        if (endpointParams.ForcePathStyle === true) {\n            throw new Error(\"Path-style addressing cannot be used with ARN buckets\");\n        }\n    }\n    else if (!isDnsCompatibleBucketName(bucket) ||\n        (bucket.indexOf(\".\") !== -1 && !String(endpointParams.Endpoint).startsWith(\"http:\")) ||\n        bucket.toLowerCase() !== bucket ||\n        bucket.length < 3) {\n        endpointParams.ForcePathStyle = true;\n    }\n    if (endpointParams.DisableMultiRegionAccessPoints) {\n        endpointParams.disableMultiRegionAccessPoints = true;\n        endpointParams.DisableMRAP = true;\n    }\n    return endpointParams;\n};\nconst DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/;\nconst IP_ADDRESS_PATTERN = /(\\d+\\.){3}\\d+/;\nconst DOTS_PATTERN = /\\.\\./;\nexport const DOT_PATTERN = /\\./;\nexport const S3_HOSTNAME_PATTERN = /^(.+\\.)?s3(-fips)?(\\.dualstack)?[.-]([a-z0-9-]+)\\./;\nexport const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);\nexport const isArnBucketName = (bucketName) => {\n    const [arn, partition, service, , , bucket] = bucketName.split(\":\");\n    const isArn = arn === \"arn\" && bucketName.split(\":\").length >= 6;\n    const isValidArn = Boolean(isArn && partition && service && bucket);\n    if (isArn && !isValidArn) {\n        throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);\n    }\n    return isValidArn;\n};\n","export const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config, isClientContextParam = false) => {\n    const configProvider = async () => {\n        let configValue;\n        if (isClientContextParam) {\n            const clientContextParams = config.clientContextParams;\n            const nestedValue = clientContextParams?.[configKey];\n            configValue = nestedValue ?? config[configKey] ?? config[canonicalEndpointParamKey];\n        }\n        else {\n            configValue = config[configKey] ?? config[canonicalEndpointParamKey];\n        }\n        if (typeof configValue === \"function\") {\n            return configValue();\n        }\n        return configValue;\n    };\n    if (configKey === \"credentialScope\" || canonicalEndpointParamKey === \"CredentialScope\") {\n        return async () => {\n            const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n            const configValue = credentials?.credentialScope ?? credentials?.CredentialScope;\n            return configValue;\n        };\n    }\n    if (configKey === \"accountId\" || canonicalEndpointParamKey === \"AccountId\") {\n        return async () => {\n            const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n            const configValue = credentials?.accountId ?? credentials?.AccountId;\n            return configValue;\n        };\n    }\n    if (configKey === \"endpoint\" || canonicalEndpointParamKey === \"endpoint\") {\n        return async () => {\n            if (config.isCustomEndpoint === false) {\n                return undefined;\n            }\n            const endpoint = await configProvider();\n            if (endpoint && typeof endpoint === \"object\") {\n                if (\"url\" in endpoint) {\n                    return endpoint.url.href;\n                }\n                if (\"hostname\" in endpoint) {\n                    const { protocol, hostname, port, path } = endpoint;\n                    return `${protocol}//${hostname}${port ? \":\" + port : \"\"}${path}`;\n                }\n            }\n            return endpoint;\n        };\n    }\n    return configProvider;\n};\n","export const getEndpointFromConfig = async (serviceId) => undefined;\n","import { parseUrl } from \"@smithy/url-parser\";\nexport const toEndpointV1 = (endpoint) => {\n    if (typeof endpoint === \"object\") {\n        if (\"url\" in endpoint) {\n            return parseUrl(endpoint.url);\n        }\n        return endpoint;\n    }\n    return parseUrl(endpoint);\n};\n","import { resolveParamsForS3 } from \"../service-customizations\";\nimport { createConfigValueProvider } from \"./createConfigValueProvider\";\nimport { getEndpointFromConfig } from \"./getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./toEndpointV1\";\nexport const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {\n    if (!clientConfig.isCustomEndpoint) {\n        let endpointFromConfig;\n        if (clientConfig.serviceConfiguredEndpoint) {\n            endpointFromConfig = await clientConfig.serviceConfiguredEndpoint();\n        }\n        else {\n            endpointFromConfig = await getEndpointFromConfig(clientConfig.serviceId);\n        }\n        if (endpointFromConfig) {\n            clientConfig.endpoint = () => Promise.resolve(toEndpointV1(endpointFromConfig));\n            clientConfig.isCustomEndpoint = true;\n        }\n    }\n    const endpointParams = await resolveParams(commandInput, instructionsSupplier, clientConfig);\n    if (typeof clientConfig.endpointProvider !== \"function\") {\n        throw new Error(\"config.endpointProvider is not set.\");\n    }\n    const endpoint = clientConfig.endpointProvider(endpointParams, context);\n    return endpoint;\n};\nexport const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {\n    const endpointParams = {};\n    const instructions = instructionsSupplier?.getEndpointParameterInstructions?.() || {};\n    for (const [name, instruction] of Object.entries(instructions)) {\n        switch (instruction.type) {\n            case \"staticContextParams\":\n                endpointParams[name] = instruction.value;\n                break;\n            case \"contextParams\":\n                endpointParams[name] = commandInput[instruction.name];\n                break;\n            case \"clientContextParams\":\n            case \"builtInParams\":\n                endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig, instruction.type !== \"builtInParams\")();\n                break;\n            case \"operationContextParams\":\n                endpointParams[name] = instruction.get(commandInput);\n                break;\n            default:\n                throw new Error(\"Unrecognized endpoint parameter instruction: \" + JSON.stringify(instruction));\n        }\n    }\n    if (Object.keys(instructions).length === 0) {\n        Object.assign(endpointParams, clientConfig);\n    }\n    if (String(clientConfig.serviceId).toLowerCase() === \"s3\") {\n        await resolveParamsForS3(endpointParams);\n    }\n    return endpointParams;\n};\n","import { setFeature } from \"@smithy/core\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { getEndpointFromInstructions } from \"./adaptors/getEndpointFromInstructions\";\nexport const endpointMiddleware = ({ config, instructions, }) => {\n    return (next, context) => async (args) => {\n        if (config.isCustomEndpoint) {\n            setFeature(context, \"ENDPOINT_OVERRIDE\", \"N\");\n        }\n        const endpoint = await getEndpointFromInstructions(args.input, {\n            getEndpointParameterInstructions() {\n                return instructions;\n            },\n        }, { ...config }, context);\n        context.endpointV2 = endpoint;\n        context.authSchemes = endpoint.properties?.authSchemes;\n        const authScheme = context.authSchemes?.[0];\n        if (authScheme) {\n            context[\"signing_region\"] = authScheme.signingRegion;\n            context[\"signing_service\"] = authScheme.signingName;\n            const smithyContext = getSmithyContext(context);\n            const httpAuthOption = smithyContext?.selectedHttpAuthScheme?.httpAuthOption;\n            if (httpAuthOption) {\n                httpAuthOption.signingProperties = Object.assign(httpAuthOption.signingProperties || {}, {\n                    signing_region: authScheme.signingRegion,\n                    signingRegion: authScheme.signingRegion,\n                    signing_service: authScheme.signingName,\n                    signingName: authScheme.signingName,\n                    signingRegionSet: authScheme.signingRegionSet,\n                }, authScheme.properties);\n            }\n        }\n        return next({\n            ...args,\n        });\n    };\n};\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { endpointMiddleware } from \"./endpointMiddleware\";\nexport const endpointMiddlewareOptions = {\n    step: \"serialize\",\n    tags: [\"ENDPOINT_PARAMETERS\", \"ENDPOINT_V2\", \"ENDPOINT\"],\n    name: \"endpointV2Middleware\",\n    override: true,\n    relation: \"before\",\n    toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getEndpointPlugin = (config, instructions) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(endpointMiddleware({\n            config,\n            instructions,\n        }), endpointMiddlewareOptions);\n    },\n});\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { getEndpointFromConfig } from \"./adaptors/getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./adaptors/toEndpointV1\";\nexport const resolveEndpointConfig = (input) => {\n    const tls = input.tls ?? true;\n    const { endpoint, useDualstackEndpoint, useFipsEndpoint } = input;\n    const customEndpointProvider = endpoint != null ? async () => toEndpointV1(await normalizeProvider(endpoint)()) : undefined;\n    const isCustomEndpoint = !!endpoint;\n    const resolvedConfig = Object.assign(input, {\n        endpoint: customEndpointProvider,\n        tls,\n        isCustomEndpoint,\n        useDualstackEndpoint: normalizeProvider(useDualstackEndpoint ?? false),\n        useFipsEndpoint: normalizeProvider(useFipsEndpoint ?? false),\n    });\n    let configuredEndpointPromise = undefined;\n    resolvedConfig.serviceConfiguredEndpoint = async () => {\n        if (input.serviceId && !configuredEndpointPromise) {\n            configuredEndpointPromise = getEndpointFromConfig(input.serviceId);\n        }\n        return configuredEndpointPromise;\n    };\n    return resolvedConfig;\n};\n","export var RETRY_MODES;\n(function (RETRY_MODES) {\n    RETRY_MODES[\"STANDARD\"] = \"standard\";\n    RETRY_MODES[\"ADAPTIVE\"] = \"adaptive\";\n})(RETRY_MODES || (RETRY_MODES = {}));\nexport const DEFAULT_MAX_ATTEMPTS = 3;\nexport const DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;\n","export const CLOCK_SKEW_ERROR_CODES = [\n    \"AuthFailure\",\n    \"InvalidSignatureException\",\n    \"RequestExpired\",\n    \"RequestInTheFuture\",\n    \"RequestTimeTooSkewed\",\n    \"SignatureDoesNotMatch\",\n];\nexport const THROTTLING_ERROR_CODES = [\n    \"BandwidthLimitExceeded\",\n    \"EC2ThrottledException\",\n    \"LimitExceededException\",\n    \"PriorRequestNotComplete\",\n    \"ProvisionedThroughputExceededException\",\n    \"RequestLimitExceeded\",\n    \"RequestThrottled\",\n    \"RequestThrottledException\",\n    \"SlowDown\",\n    \"ThrottledException\",\n    \"Throttling\",\n    \"ThrottlingException\",\n    \"TooManyRequestsException\",\n    \"TransactionInProgressException\",\n];\nexport const TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexport const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexport const NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\nexport const NODEJS_NETWORK_ERROR_CODES = [\"EHOSTUNREACH\", \"ENETUNREACH\", \"ENOTFOUND\"];\n","import { CLOCK_SKEW_ERROR_CODES, NODEJS_NETWORK_ERROR_CODES, NODEJS_TIMEOUT_ERROR_CODES, THROTTLING_ERROR_CODES, TRANSIENT_ERROR_CODES, TRANSIENT_ERROR_STATUS_CODES, } from \"./constants\";\nexport const isRetryableByTrait = (error) => error?.$retryable !== undefined;\nexport const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexport const isClockSkewCorrectedError = (error) => error.$metadata?.clockSkewCorrected;\nexport const isBrowserNetworkError = (error) => {\n    const errorMessages = new Set([\n        \"Failed to fetch\",\n        \"NetworkError when attempting to fetch resource\",\n        \"The Internet connection appears to be offline\",\n        \"Load failed\",\n        \"Network request failed\",\n    ]);\n    const isValid = error && error instanceof TypeError;\n    if (!isValid) {\n        return false;\n    }\n    return errorMessages.has(error.message);\n};\nexport const isThrottlingError = (error) => error.$metadata?.httpStatusCode === 429 ||\n    THROTTLING_ERROR_CODES.includes(error.name) ||\n    error.$retryable?.throttling == true;\nexport const isTransientError = (error, depth = 0) => isRetryableByTrait(error) ||\n    isClockSkewCorrectedError(error) ||\n    TRANSIENT_ERROR_CODES.includes(error.name) ||\n    NODEJS_TIMEOUT_ERROR_CODES.includes(error?.code || \"\") ||\n    NODEJS_NETWORK_ERROR_CODES.includes(error?.code || \"\") ||\n    TRANSIENT_ERROR_STATUS_CODES.includes(error.$metadata?.httpStatusCode || 0) ||\n    isBrowserNetworkError(error) ||\n    (error.cause !== undefined && depth <= 10 && isTransientError(error.cause, depth + 1));\nexport const isServerError = (error) => {\n    if (error.$metadata?.httpStatusCode !== undefined) {\n        const statusCode = error.$metadata.httpStatusCode;\n        if (500 <= statusCode && statusCode <= 599 && !isTransientError(error)) {\n            return true;\n        }\n        return false;\n    }\n    return false;\n};\n","import { isThrottlingError } from \"@smithy/service-error-classification\";\nexport class DefaultRateLimiter {\n    static setTimeoutFn = setTimeout;\n    beta;\n    minCapacity;\n    minFillRate;\n    scaleConstant;\n    smooth;\n    currentCapacity = 0;\n    enabled = false;\n    lastMaxRate = 0;\n    measuredTxRate = 0;\n    requestCount = 0;\n    fillRate;\n    lastThrottleTime;\n    lastTimestamp = 0;\n    lastTxRateBucket;\n    maxCapacity;\n    timeWindow = 0;\n    constructor(options) {\n        this.beta = options?.beta ?? 0.7;\n        this.minCapacity = options?.minCapacity ?? 1;\n        this.minFillRate = options?.minFillRate ?? 0.5;\n        this.scaleConstant = options?.scaleConstant ?? 0.4;\n        this.smooth = options?.smooth ?? 0.8;\n        const currentTimeInSeconds = this.getCurrentTimeInSeconds();\n        this.lastThrottleTime = currentTimeInSeconds;\n        this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds());\n        this.fillRate = this.minFillRate;\n        this.maxCapacity = this.minCapacity;\n    }\n    getCurrentTimeInSeconds() {\n        return Date.now() / 1000;\n    }\n    async getSendToken() {\n        return this.acquireTokenBucket(1);\n    }\n    async acquireTokenBucket(amount) {\n        if (!this.enabled) {\n            return;\n        }\n        this.refillTokenBucket();\n        if (amount > this.currentCapacity) {\n            const delay = ((amount - this.currentCapacity) / this.fillRate) * 1000;\n            await new Promise((resolve) => DefaultRateLimiter.setTimeoutFn(resolve, delay));\n        }\n        this.currentCapacity = this.currentCapacity - amount;\n    }\n    refillTokenBucket() {\n        const timestamp = this.getCurrentTimeInSeconds();\n        if (!this.lastTimestamp) {\n            this.lastTimestamp = timestamp;\n            return;\n        }\n        const fillAmount = (timestamp - this.lastTimestamp) * this.fillRate;\n        this.currentCapacity = Math.min(this.maxCapacity, this.currentCapacity + fillAmount);\n        this.lastTimestamp = timestamp;\n    }\n    updateClientSendingRate(response) {\n        let calculatedRate;\n        this.updateMeasuredRate();\n        if (isThrottlingError(response)) {\n            const rateToUse = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate);\n            this.lastMaxRate = rateToUse;\n            this.calculateTimeWindow();\n            this.lastThrottleTime = this.getCurrentTimeInSeconds();\n            calculatedRate = this.cubicThrottle(rateToUse);\n            this.enableTokenBucket();\n        }\n        else {\n            this.calculateTimeWindow();\n            calculatedRate = this.cubicSuccess(this.getCurrentTimeInSeconds());\n        }\n        const newRate = Math.min(calculatedRate, 2 * this.measuredTxRate);\n        this.updateTokenBucketRate(newRate);\n    }\n    calculateTimeWindow() {\n        this.timeWindow = this.getPrecise(Math.pow((this.lastMaxRate * (1 - this.beta)) / this.scaleConstant, 1 / 3));\n    }\n    cubicThrottle(rateToUse) {\n        return this.getPrecise(rateToUse * this.beta);\n    }\n    cubicSuccess(timestamp) {\n        return this.getPrecise(this.scaleConstant * Math.pow(timestamp - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate);\n    }\n    enableTokenBucket() {\n        this.enabled = true;\n    }\n    updateTokenBucketRate(newRate) {\n        this.refillTokenBucket();\n        this.fillRate = Math.max(newRate, this.minFillRate);\n        this.maxCapacity = Math.max(newRate, this.minCapacity);\n        this.currentCapacity = Math.min(this.currentCapacity, this.maxCapacity);\n    }\n    updateMeasuredRate() {\n        const t = this.getCurrentTimeInSeconds();\n        const timeBucket = Math.floor(t * 2) / 2;\n        this.requestCount++;\n        if (timeBucket > this.lastTxRateBucket) {\n            const currentRate = this.requestCount / (timeBucket - this.lastTxRateBucket);\n            this.measuredTxRate = this.getPrecise(currentRate * this.smooth + this.measuredTxRate * (1 - this.smooth));\n            this.requestCount = 0;\n            this.lastTxRateBucket = timeBucket;\n        }\n    }\n    getPrecise(num) {\n        return parseFloat(num.toFixed(8));\n    }\n}\n","export const DEFAULT_RETRY_DELAY_BASE = 100;\nexport const MAXIMUM_RETRY_DELAY = 20 * 1000;\nexport const THROTTLING_RETRY_DELAY_BASE = 500;\nexport const INITIAL_RETRY_TOKENS = 500;\nexport const RETRY_COST = 5;\nexport const TIMEOUT_RETRY_COST = 10;\nexport const NO_RETRY_INCREMENT = 1;\nexport const INVOCATION_ID_HEADER = \"amz-sdk-invocation-id\";\nexport const REQUEST_HEADER = \"amz-sdk-request\";\n","import { DEFAULT_RETRY_DELAY_BASE, MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const getDefaultRetryBackoffStrategy = () => {\n    let delayBase = DEFAULT_RETRY_DELAY_BASE;\n    const computeNextBackoffDelay = (attempts) => {\n        return Math.floor(Math.min(MAXIMUM_RETRY_DELAY, Math.random() * 2 ** attempts * delayBase));\n    };\n    const setDelayBase = (delay) => {\n        delayBase = delay;\n    };\n    return {\n        computeNextBackoffDelay,\n        setDelayBase,\n    };\n};\n","import { MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const createDefaultRetryToken = ({ retryDelay, retryCount, retryCost, }) => {\n    const getRetryCount = () => retryCount;\n    const getRetryDelay = () => Math.min(MAXIMUM_RETRY_DELAY, retryDelay);\n    const getRetryCost = () => retryCost;\n    return {\n        getRetryCount,\n        getRetryDelay,\n        getRetryCost,\n    };\n};\n","import { DEFAULT_MAX_ATTEMPTS, RETRY_MODES } from \"./config\";\nimport { DEFAULT_RETRY_DELAY_BASE, INITIAL_RETRY_TOKENS, NO_RETRY_INCREMENT, RETRY_COST, THROTTLING_RETRY_DELAY_BASE, TIMEOUT_RETRY_COST, } from \"./constants\";\nimport { getDefaultRetryBackoffStrategy } from \"./defaultRetryBackoffStrategy\";\nimport { createDefaultRetryToken } from \"./defaultRetryToken\";\nexport class StandardRetryStrategy {\n    maxAttempts;\n    mode = RETRY_MODES.STANDARD;\n    capacity = INITIAL_RETRY_TOKENS;\n    retryBackoffStrategy = getDefaultRetryBackoffStrategy();\n    maxAttemptsProvider;\n    constructor(maxAttempts) {\n        this.maxAttempts = maxAttempts;\n        this.maxAttemptsProvider = typeof maxAttempts === \"function\" ? maxAttempts : async () => maxAttempts;\n    }\n    async acquireInitialRetryToken(retryTokenScope) {\n        return createDefaultRetryToken({\n            retryDelay: DEFAULT_RETRY_DELAY_BASE,\n            retryCount: 0,\n        });\n    }\n    async refreshRetryTokenForRetry(token, errorInfo) {\n        const maxAttempts = await this.getMaxAttempts();\n        if (this.shouldRetry(token, errorInfo, maxAttempts)) {\n            const errorType = errorInfo.errorType;\n            this.retryBackoffStrategy.setDelayBase(errorType === \"THROTTLING\" ? THROTTLING_RETRY_DELAY_BASE : DEFAULT_RETRY_DELAY_BASE);\n            const delayFromErrorType = this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount());\n            const retryDelay = errorInfo.retryAfterHint\n                ? Math.max(errorInfo.retryAfterHint.getTime() - Date.now() || 0, delayFromErrorType)\n                : delayFromErrorType;\n            const capacityCost = this.getCapacityCost(errorType);\n            this.capacity -= capacityCost;\n            return createDefaultRetryToken({\n                retryDelay,\n                retryCount: token.getRetryCount() + 1,\n                retryCost: capacityCost,\n            });\n        }\n        throw new Error(\"No retry token available\");\n    }\n    recordSuccess(token) {\n        this.capacity = Math.max(INITIAL_RETRY_TOKENS, this.capacity + (token.getRetryCost() ?? NO_RETRY_INCREMENT));\n    }\n    getCapacity() {\n        return this.capacity;\n    }\n    async getMaxAttempts() {\n        try {\n            return await this.maxAttemptsProvider();\n        }\n        catch (error) {\n            console.warn(`Max attempts provider could not resolve. Using default of ${DEFAULT_MAX_ATTEMPTS}`);\n            return DEFAULT_MAX_ATTEMPTS;\n        }\n    }\n    shouldRetry(tokenToRenew, errorInfo, maxAttempts) {\n        const attempts = tokenToRenew.getRetryCount() + 1;\n        return (attempts < maxAttempts &&\n            this.capacity >= this.getCapacityCost(errorInfo.errorType) &&\n            this.isRetryableError(errorInfo.errorType));\n    }\n    getCapacityCost(errorType) {\n        return errorType === \"TRANSIENT\" ? TIMEOUT_RETRY_COST : RETRY_COST;\n    }\n    isRetryableError(errorType) {\n        return errorType === \"THROTTLING\" || errorType === \"TRANSIENT\";\n    }\n}\n","import { RETRY_MODES } from \"./config\";\nimport { DefaultRateLimiter } from \"./DefaultRateLimiter\";\nimport { StandardRetryStrategy } from \"./StandardRetryStrategy\";\nexport class AdaptiveRetryStrategy {\n    maxAttemptsProvider;\n    rateLimiter;\n    standardRetryStrategy;\n    mode = RETRY_MODES.ADAPTIVE;\n    constructor(maxAttemptsProvider, options) {\n        this.maxAttemptsProvider = maxAttemptsProvider;\n        const { rateLimiter } = options ?? {};\n        this.rateLimiter = rateLimiter ?? new DefaultRateLimiter();\n        this.standardRetryStrategy = new StandardRetryStrategy(maxAttemptsProvider);\n    }\n    async acquireInitialRetryToken(retryTokenScope) {\n        await this.rateLimiter.getSendToken();\n        return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope);\n    }\n    async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {\n        this.rateLimiter.updateClientSendingRate(errorInfo);\n        return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew, errorInfo);\n    }\n    recordSuccess(token) {\n        this.rateLimiter.updateClientSendingRate({});\n        this.standardRetryStrategy.recordSuccess(token);\n    }\n}\n","export const asSdkError = (error) => {\n    if (error instanceof Error)\n        return error;\n    if (error instanceof Object)\n        return Object.assign(new Error(), error);\n    if (typeof error === \"string\")\n        return new Error(error);\n    return new Error(`AWS SDK error wrapper for ${error}`);\n};\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { AdaptiveRetryStrategy, DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE, RETRY_MODES, StandardRetryStrategy, } from \"@smithy/util-retry\";\nexport const ENV_MAX_ATTEMPTS = \"AWS_MAX_ATTEMPTS\";\nexport const CONFIG_MAX_ATTEMPTS = \"max_attempts\";\nexport const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => {\n        const value = env[ENV_MAX_ATTEMPTS];\n        if (!value)\n            return undefined;\n        const maxAttempt = parseInt(value);\n        if (Number.isNaN(maxAttempt)) {\n            throw new Error(`Environment variable ${ENV_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n        }\n        return maxAttempt;\n    },\n    configFileSelector: (profile) => {\n        const value = profile[CONFIG_MAX_ATTEMPTS];\n        if (!value)\n            return undefined;\n        const maxAttempt = parseInt(value);\n        if (Number.isNaN(maxAttempt)) {\n            throw new Error(`Shared config file entry ${CONFIG_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n        }\n        return maxAttempt;\n    },\n    default: DEFAULT_MAX_ATTEMPTS,\n};\nexport const resolveRetryConfig = (input) => {\n    const { retryStrategy, retryMode: _retryMode, maxAttempts: _maxAttempts } = input;\n    const maxAttempts = normalizeProvider(_maxAttempts ?? DEFAULT_MAX_ATTEMPTS);\n    return Object.assign(input, {\n        maxAttempts,\n        retryStrategy: async () => {\n            if (retryStrategy) {\n                return retryStrategy;\n            }\n            const retryMode = await normalizeProvider(_retryMode)();\n            if (retryMode === RETRY_MODES.ADAPTIVE) {\n                return new AdaptiveRetryStrategy(maxAttempts);\n            }\n            return new StandardRetryStrategy(maxAttempts);\n        },\n    });\n};\nexport const ENV_RETRY_MODE = \"AWS_RETRY_MODE\";\nexport const CONFIG_RETRY_MODE = \"retry_mode\";\nexport const NODE_RETRY_MODE_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => env[ENV_RETRY_MODE],\n    configFileSelector: (profile) => profile[CONFIG_RETRY_MODE],\n    default: DEFAULT_RETRY_MODE,\n};\n","export const isStreamingPayload = (request) => request?.body instanceof ReadableStream;\n","import { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { isServerError, isThrottlingError, isTransientError } from \"@smithy/service-error-classification\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { INVOCATION_ID_HEADER, REQUEST_HEADER } from \"@smithy/util-retry\";\nimport { v4 } from \"@smithy/uuid\";\nimport { isStreamingPayload } from \"./isStreamingPayload/isStreamingPayload\";\nimport { asSdkError } from \"./util\";\nexport const retryMiddleware = (options) => (next, context) => async (args) => {\n    let retryStrategy = await options.retryStrategy();\n    const maxAttempts = await options.maxAttempts();\n    if (isRetryStrategyV2(retryStrategy)) {\n        retryStrategy = retryStrategy;\n        let retryToken = await retryStrategy.acquireInitialRetryToken(context[\"partition_id\"]);\n        let lastError = new Error();\n        let attempts = 0;\n        let totalRetryDelay = 0;\n        const { request } = args;\n        const isRequest = HttpRequest.isInstance(request);\n        if (isRequest) {\n            request.headers[INVOCATION_ID_HEADER] = v4();\n        }\n        while (true) {\n            try {\n                if (isRequest) {\n                    request.headers[REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;\n                }\n                const { response, output } = await next(args);\n                retryStrategy.recordSuccess(retryToken);\n                output.$metadata.attempts = attempts + 1;\n                output.$metadata.totalRetryDelay = totalRetryDelay;\n                return { response, output };\n            }\n            catch (e) {\n                const retryErrorInfo = getRetryErrorInfo(e);\n                lastError = asSdkError(e);\n                if (isRequest && isStreamingPayload(request)) {\n                    (context.logger instanceof NoOpLogger ? console : context.logger)?.warn(\"An error was encountered in a non-retryable streaming request.\");\n                    throw lastError;\n                }\n                try {\n                    retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);\n                }\n                catch (refreshError) {\n                    if (!lastError.$metadata) {\n                        lastError.$metadata = {};\n                    }\n                    lastError.$metadata.attempts = attempts + 1;\n                    lastError.$metadata.totalRetryDelay = totalRetryDelay;\n                    throw lastError;\n                }\n                attempts = retryToken.getRetryCount();\n                const delay = retryToken.getRetryDelay();\n                totalRetryDelay += delay;\n                await new Promise((resolve) => setTimeout(resolve, delay));\n            }\n        }\n    }\n    else {\n        retryStrategy = retryStrategy;\n        if (retryStrategy?.mode)\n            context.userAgent = [...(context.userAgent || []), [\"cfg/retry-mode\", retryStrategy.mode]];\n        return retryStrategy.retry(next, args);\n    }\n};\nconst isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== \"undefined\" &&\n    typeof retryStrategy.refreshRetryTokenForRetry !== \"undefined\" &&\n    typeof retryStrategy.recordSuccess !== \"undefined\";\nconst getRetryErrorInfo = (error) => {\n    const errorInfo = {\n        error,\n        errorType: getRetryErrorType(error),\n    };\n    const retryAfterHint = getRetryAfterHint(error.$response);\n    if (retryAfterHint) {\n        errorInfo.retryAfterHint = retryAfterHint;\n    }\n    return errorInfo;\n};\nconst getRetryErrorType = (error) => {\n    if (isThrottlingError(error))\n        return \"THROTTLING\";\n    if (isTransientError(error))\n        return \"TRANSIENT\";\n    if (isServerError(error))\n        return \"SERVER_ERROR\";\n    return \"CLIENT_ERROR\";\n};\nexport const retryMiddlewareOptions = {\n    name: \"retryMiddleware\",\n    tags: [\"RETRY\"],\n    step: \"finalizeRequest\",\n    priority: \"high\",\n    override: true,\n};\nexport const getRetryPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(retryMiddleware(options), retryMiddlewareOptions);\n    },\n});\nexport const getRetryAfterHint = (response) => {\n    if (!HttpResponse.isInstance(response))\n        return;\n    const retryAfterHeaderName = Object.keys(response.headers).find((key) => key.toLowerCase() === \"retry-after\");\n    if (!retryAfterHeaderName)\n        return;\n    const retryAfter = response.headers[retryAfterHeaderName];\n    const retryAfterSeconds = Number(retryAfter);\n    if (!Number.isNaN(retryAfterSeconds))\n        return new Date(retryAfterSeconds * 1000);\n    const retryAfterDate = new Date(retryAfter);\n    return retryAfterDate;\n};\n","import { SignatureV4S3Express } from \"@aws-sdk/middleware-sdk-s3\";\nimport { signatureV4aContainer, } from \"@smithy/signature-v4\";\nimport { signatureV4CrtContainer } from \"./signature-v4-crt-container\";\nexport class SignatureV4MultiRegion {\n    sigv4aSigner;\n    sigv4Signer;\n    signerOptions;\n    static sigv4aDependency() {\n        if (typeof signatureV4CrtContainer.CrtSignerV4 === \"function\") {\n            return \"crt\";\n        }\n        else if (typeof signatureV4aContainer.SignatureV4a === \"function\") {\n            return \"js\";\n        }\n        return \"none\";\n    }\n    constructor(options) {\n        this.sigv4Signer = new SignatureV4S3Express(options);\n        this.signerOptions = options;\n    }\n    async sign(requestToSign, options = {}) {\n        if (options.signingRegion === \"*\") {\n            return this.getSigv4aSigner().sign(requestToSign, options);\n        }\n        return this.sigv4Signer.sign(requestToSign, options);\n    }\n    async signWithCredentials(requestToSign, credentials, options = {}) {\n        if (options.signingRegion === \"*\") {\n            const signer = this.getSigv4aSigner();\n            const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;\n            if (CrtSignerV4 && signer instanceof CrtSignerV4) {\n                return signer.signWithCredentials(requestToSign, credentials, options);\n            }\n            else {\n                throw new Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. ` +\n                    `Please check whether you have installed the \"@aws-sdk/signature-v4-crt\" package explicitly. ` +\n                    `You must also register the package by calling [require(\"@aws-sdk/signature-v4-crt\");] ` +\n                    `or an ESM equivalent such as [import \"@aws-sdk/signature-v4-crt\";]. ` +\n                    `For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);\n            }\n        }\n        return this.sigv4Signer.signWithCredentials(requestToSign, credentials, options);\n    }\n    async presign(originalRequest, options = {}) {\n        if (options.signingRegion === \"*\") {\n            const signer = this.getSigv4aSigner();\n            const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;\n            if (CrtSignerV4 && signer instanceof CrtSignerV4) {\n                return signer.presign(originalRequest, options);\n            }\n            else {\n                throw new Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. ` +\n                    `Please check whether you have installed the \"@aws-sdk/signature-v4-crt\" package explicitly. ` +\n                    `You must also register the package by calling [require(\"@aws-sdk/signature-v4-crt\");] ` +\n                    `or an ESM equivalent such as [import \"@aws-sdk/signature-v4-crt\";]. ` +\n                    `For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);\n            }\n        }\n        return this.sigv4Signer.presign(originalRequest, options);\n    }\n    async presignWithCredentials(originalRequest, credentials, options = {}) {\n        if (options.signingRegion === \"*\") {\n            throw new Error(\"Method presignWithCredentials is not supported for [signingRegion=*].\");\n        }\n        return this.sigv4Signer.presignWithCredentials(originalRequest, credentials, options);\n    }\n    getSigv4aSigner() {\n        if (!this.sigv4aSigner) {\n            const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;\n            const JsSigV4aSigner = signatureV4aContainer.SignatureV4a;\n            if (this.signerOptions.runtime === \"node\") {\n                if (!CrtSignerV4 && !JsSigV4aSigner) {\n                    throw new Error(\"Neither CRT nor JS SigV4a implementation is available. \" +\n                        \"Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. \" +\n                        \"For more information please go to \" +\n                        \"https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt\");\n                }\n                if (CrtSignerV4 && typeof CrtSignerV4 === \"function\") {\n                    this.sigv4aSigner = new CrtSignerV4({\n                        ...this.signerOptions,\n                        signingAlgorithm: 1,\n                    });\n                }\n                else if (JsSigV4aSigner && typeof JsSigV4aSigner === \"function\") {\n                    this.sigv4aSigner = new JsSigV4aSigner({\n                        ...this.signerOptions,\n                    });\n                }\n                else {\n                    throw new Error(\"Available SigV4a implementation is not a valid constructor. \" +\n                        \"Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.\" +\n                        \"For more information please go to \" +\n                        \"https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt\");\n                }\n            }\n            else {\n                if (!JsSigV4aSigner || typeof JsSigV4aSigner !== \"function\") {\n                    throw new Error(\"JS SigV4a implementation is not available or not a valid constructor. \" +\n                        \"Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. \" +\n                        \"You must also register the package by calling [require('@aws-sdk/signature-v4a');] \" +\n                        \"or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. \" +\n                        \"For more information please go to \" +\n                        \"https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a\");\n                }\n                this.sigv4aSigner = new JsSigV4aSigner({\n                    ...this.signerOptions,\n                });\n            }\n        }\n        return this.sigv4aSigner;\n    }\n}\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n    if (allowSubDomains) {\n        for (const label of value.split(\".\")) {\n            if (!isVirtualHostableS3Bucket(label)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    if (!isValidHostLabel(value)) {\n        return false;\n    }\n    if (value.length < 3 || value.length > 63) {\n        return false;\n    }\n    if (value !== value.toLowerCase()) {\n        return false;\n    }\n    if (isIpAddress(value)) {\n        return false;\n    }\n    return true;\n};\n","const ARN_DELIMITER = \":\";\nconst RESOURCE_DELIMITER = \"/\";\nexport const parseArn = (value) => {\n    const segments = value.split(ARN_DELIMITER);\n    if (segments.length < 6)\n        return null;\n    const [arn, partition, service, region, accountId, ...resourcePath] = segments;\n    if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourcePath.join(ARN_DELIMITER) === \"\")\n        return null;\n    const resourceId = resourcePath.map((resource) => resource.split(RESOURCE_DELIMITER)).flat();\n    return {\n        partition,\n        service,\n        region,\n        accountId,\n        resourceId,\n    };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n    const { partitions } = selectedPartitionsInfo;\n    for (const partition of partitions) {\n        const { regions, outputs } = partition;\n        for (const [region, regionData] of Object.entries(regions)) {\n            if (region === value) {\n                return {\n                    ...outputs,\n                    ...regionData,\n                };\n            }\n        }\n    }\n    for (const partition of partitions) {\n        const { regionRegex, outputs } = partition;\n        if (new RegExp(regionRegex).test(value)) {\n            return {\n                ...outputs,\n            };\n        }\n    }\n    const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n    if (!DEFAULT_PARTITION) {\n        throw new Error(\"Provided region was not found in the partition array or regex,\" +\n            \" and default partition with id 'aws' doesn't exist.\");\n    }\n    return {\n        ...DEFAULT_PARTITION.outputs,\n    };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n    selectedPartitionsInfo = partitionsInfo;\n    selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n    setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nexport const awsEndpointFunctions = {\n    isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n    parseArn: parseArn,\n    partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","const cs = \"required\", ct = \"type\", cu = \"rules\", cv = \"conditions\", cw = \"fn\", cx = \"argv\", cy = \"ref\", cz = \"assign\", cA = \"url\", cB = \"properties\", cC = \"backend\", cD = \"authSchemes\", cE = \"disableDoubleEncoding\", cF = \"signingName\", cG = \"signingRegion\", cH = \"headers\", cI = \"signingRegionSet\";\nconst a = 6, b = false, c = true, d = \"isSet\", e = \"booleanEquals\", f = \"error\", g = \"aws.partition\", h = \"stringEquals\", i = \"getAttr\", j = \"name\", k = \"substring\", l = \"bucketSuffix\", m = \"parseURL\", n = \"endpoint\", o = \"tree\", p = \"aws.isVirtualHostableS3Bucket\", q = \"{url#scheme}://{Bucket}.{url#authority}{url#path}\", r = \"not\", s = \"accessPointSuffix\", t = \"{url#scheme}://{url#authority}{url#path}\", u = \"hardwareType\", v = \"regionPrefix\", w = \"bucketAliasSuffix\", x = \"outpostId\", y = \"isValidHostLabel\", z = \"sigv4a\", A = \"s3-outposts\", B = \"s3\", C = \"{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}\", D = \"https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}\", E = \"https://{Bucket}.s3.{partitionResult#dnsSuffix}\", F = \"aws.parseArn\", G = \"bucketArn\", H = \"arnType\", I = \"\", J = \"s3-object-lambda\", K = \"accesspoint\", L = \"accessPointName\", M = \"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\", N = \"mrapPartition\", O = \"outpostType\", P = \"arnPrefix\", Q = \"{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}\", R = \"https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", S = \"https://s3.{partitionResult#dnsSuffix}\", T = { [cs]: false, [ct]: \"string\" }, U = { [cs]: true, \"default\": false, [ct]: \"boolean\" }, V = { [cs]: false, [ct]: \"boolean\" }, W = { [cw]: e, [cx]: [{ [cy]: \"Accelerate\" }, true] }, X = { [cw]: e, [cx]: [{ [cy]: \"UseFIPS\" }, true] }, Y = { [cw]: e, [cx]: [{ [cy]: \"UseDualStack\" }, true] }, Z = { [cw]: d, [cx]: [{ [cy]: \"Endpoint\" }] }, aa = { [cw]: g, [cx]: [{ [cy]: \"Region\" }], [cz]: \"partitionResult\" }, ab = { [cw]: h, [cx]: [{ [cw]: i, [cx]: [{ [cy]: \"partitionResult\" }, j] }, \"aws-cn\"] }, ac = { [cw]: d, [cx]: [{ [cy]: \"Bucket\" }] }, ad = { [cy]: \"Bucket\" }, ae = { [cv]: [W], [f]: \"S3Express does not support S3 Accelerate.\", [ct]: f }, af = { [cv]: [Z, { [cw]: m, [cx]: [{ [cy]: \"Endpoint\" }], [cz]: \"url\" }], [cu]: [{ [cv]: [{ [cw]: d, [cx]: [{ [cy]: \"DisableS3ExpressSessionAuth\" }] }, { [cw]: e, [cx]: [{ [cy]: \"DisableS3ExpressSessionAuth\" }, true] }], [cu]: [{ [cv]: [{ [cw]: e, [cx]: [{ [cw]: i, [cx]: [{ [cy]: \"url\" }, \"isIp\"] }, true] }], [cu]: [{ [cv]: [{ [cw]: \"uriEncode\", [cx]: [ad], [cz]: \"uri_encoded_bucket\" }], [cu]: [{ [n]: { [cA]: \"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }], [ct]: o }], [ct]: o }, { [cv]: [{ [cw]: p, [cx]: [ad, false] }], [cu]: [{ [n]: { [cA]: q, [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }], [ct]: o }, { [f]: \"S3Express bucket name is not a valid virtual hostable name.\", [ct]: f }], [ct]: o }, { [cv]: [{ [cw]: e, [cx]: [{ [cw]: i, [cx]: [{ [cy]: \"url\" }, \"isIp\"] }, true] }], [cu]: [{ [cv]: [{ [cw]: \"uriEncode\", [cx]: [ad], [cz]: \"uri_encoded_bucket\" }], [cu]: [{ [n]: { [cA]: \"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }], [ct]: o }], [ct]: o }, { [cv]: [{ [cw]: p, [cx]: [ad, false] }], [cu]: [{ [n]: { [cA]: q, [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }], [ct]: o }, { [f]: \"S3Express bucket name is not a valid virtual hostable name.\", [ct]: f }], [ct]: o }, ag = { [cw]: m, [cx]: [{ [cy]: \"Endpoint\" }], [cz]: \"url\" }, ah = { [cw]: e, [cx]: [{ [cw]: i, [cx]: [{ [cy]: \"url\" }, \"isIp\"] }, true] }, ai = { [cy]: \"url\" }, aj = { [cw]: \"uriEncode\", [cx]: [ad], [cz]: \"uri_encoded_bucket\" }, ak = { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, al = {}, am = { [cw]: p, [cx]: [ad, false] }, an = { [f]: \"S3Express bucket name is not a valid virtual hostable name.\", [ct]: f }, ao = { [cw]: d, [cx]: [{ [cy]: \"UseS3ExpressControlEndpoint\" }] }, ap = { [cw]: e, [cx]: [{ [cy]: \"UseS3ExpressControlEndpoint\" }, true] }, aq = { [cw]: r, [cx]: [Z] }, ar = { [cw]: e, [cx]: [{ [cy]: \"UseDualStack\" }, false] }, as = { [cw]: e, [cx]: [{ [cy]: \"UseFIPS\" }, false] }, at = { [f]: \"Unrecognized S3Express bucket name format.\", [ct]: f }, au = { [cw]: r, [cx]: [ac] }, av = { [cy]: u }, aw = { [cv]: [aq], [f]: \"Expected a endpoint to be specified but no endpoint was found\", [ct]: f }, ax = { [cD]: [{ [cE]: true, [j]: z, [cF]: A, [cI]: [\"*\"] }, { [cE]: true, [j]: \"sigv4\", [cF]: A, [cG]: \"{Region}\" }] }, ay = { [cw]: e, [cx]: [{ [cy]: \"ForcePathStyle\" }, false] }, az = { [cy]: \"ForcePathStyle\" }, aA = { [cw]: e, [cx]: [{ [cy]: \"Accelerate\" }, false] }, aB = { [cw]: h, [cx]: [{ [cy]: \"Region\" }, \"aws-global\"] }, aC = { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: B, [cG]: \"us-east-1\" }] }, aD = { [cw]: r, [cx]: [aB] }, aE = { [cw]: e, [cx]: [{ [cy]: \"UseGlobalEndpoint\" }, true] }, aF = { [cA]: \"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: B, [cG]: \"{Region}\" }] }, [cH]: {} }, aG = { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: B, [cG]: \"{Region}\" }] }, aH = { [cw]: e, [cx]: [{ [cy]: \"UseGlobalEndpoint\" }, false] }, aI = { [cA]: \"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, aJ = { [cA]: \"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, aK = { [cA]: \"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, aL = { [cw]: e, [cx]: [{ [cw]: i, [cx]: [ai, \"isIp\"] }, false] }, aM = { [cA]: C, [cB]: aG, [cH]: {} }, aN = { [cA]: q, [cB]: aG, [cH]: {} }, aO = { [n]: aN, [ct]: n }, aP = { [cA]: D, [cB]: aG, [cH]: {} }, aQ = { [cA]: \"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, aR = { [f]: \"Invalid region: region was not a valid DNS name.\", [ct]: f }, aS = { [cy]: G }, aT = { [cy]: H }, aU = { [cw]: i, [cx]: [aS, \"service\"] }, aV = { [cy]: L }, aW = { [cv]: [Y], [f]: \"S3 Object Lambda does not support Dual-stack\", [ct]: f }, aX = { [cv]: [W], [f]: \"S3 Object Lambda does not support S3 Accelerate\", [ct]: f }, aY = { [cv]: [{ [cw]: d, [cx]: [{ [cy]: \"DisableAccessPoints\" }] }, { [cw]: e, [cx]: [{ [cy]: \"DisableAccessPoints\" }, true] }], [f]: \"Access points are not supported for this operation\", [ct]: f }, aZ = { [cv]: [{ [cw]: d, [cx]: [{ [cy]: \"UseArnRegion\" }] }, { [cw]: e, [cx]: [{ [cy]: \"UseArnRegion\" }, false] }, { [cw]: r, [cx]: [{ [cw]: h, [cx]: [{ [cw]: i, [cx]: [aS, \"region\"] }, \"{Region}\"] }] }], [f]: \"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`\", [ct]: f }, ba = { [cw]: i, [cx]: [{ [cy]: \"bucketPartition\" }, j] }, bb = { [cw]: i, [cx]: [aS, \"accountId\"] }, bc = { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: J, [cG]: \"{bucketArn#region}\" }] }, bd = { [f]: \"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`\", [ct]: f }, be = { [f]: \"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`\", [ct]: f }, bf = { [f]: \"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)\", [ct]: f }, bg = { [f]: \"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`\", [ct]: f }, bh = { [f]: \"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\", [ct]: f }, bi = { [f]: \"Invalid ARN: Expected a resource of the format `accesspoint:<accesspoint name>` but no name was provided\", [ct]: f }, bj = { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: B, [cG]: \"{bucketArn#region}\" }] }, bk = { [cD]: [{ [cE]: true, [j]: z, [cF]: A, [cI]: [\"*\"] }, { [cE]: true, [j]: \"sigv4\", [cF]: A, [cG]: \"{bucketArn#region}\" }] }, bl = { [cw]: F, [cx]: [ad] }, bm = { [cA]: \"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aG, [cH]: {} }, bn = { [cA]: \"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aG, [cH]: {} }, bo = { [cA]: \"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aG, [cH]: {} }, bp = { [cA]: Q, [cB]: aG, [cH]: {} }, bq = { [cA]: \"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aG, [cH]: {} }, br = { [cy]: \"UseObjectLambdaEndpoint\" }, bs = { [cD]: [{ [cE]: true, [j]: \"sigv4\", [cF]: J, [cG]: \"{Region}\" }] }, bt = { [cA]: \"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, bu = { [cA]: \"https://s3-fips.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, bv = { [cA]: \"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, bw = { [cA]: t, [cB]: aG, [cH]: {} }, bx = { [cA]: \"https://s3.{Region}.{partitionResult#dnsSuffix}\", [cB]: aG, [cH]: {} }, by = [{ [cy]: \"Region\" }], bz = [{ [cy]: \"Endpoint\" }], bA = [ad], bB = [W], bC = [Z, ag], bD = [{ [cw]: d, [cx]: [{ [cy]: \"DisableS3ExpressSessionAuth\" }] }, { [cw]: e, [cx]: [{ [cy]: \"DisableS3ExpressSessionAuth\" }, true] }], bE = [aj], bF = [am], bG = [aa], bH = [X, Y], bI = [X, ar], bJ = [as, Y], bK = [as, ar], bL = [{ [cw]: k, [cx]: [ad, 6, 14, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 14, 16, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bM = [{ [cv]: [X, Y], [n]: { [cA]: \"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: {} }, [ct]: n }, { [cv]: bI, [n]: { [cA]: \"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: {} }, [ct]: n }, { [cv]: bJ, [n]: { [cA]: \"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: {} }, [ct]: n }, { [cv]: bK, [n]: { [cA]: \"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: {} }, [ct]: n }], bN = [{ [cw]: k, [cx]: [ad, 6, 15, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 15, 17, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bO = [{ [cw]: k, [cx]: [ad, 6, 19, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 19, 21, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bP = [{ [cw]: k, [cx]: [ad, 6, 20, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 20, 22, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bQ = [{ [cw]: k, [cx]: [ad, 6, 26, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 26, 28, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bR = [{ [cv]: [X, Y], [n]: { [cA]: \"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }, { [cv]: bI, [n]: { [cA]: \"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }, { [cv]: bJ, [n]: { [cA]: \"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }, { [cv]: bK, [n]: { [cA]: \"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}\", [cB]: { [cC]: \"S3Express\", [cD]: [{ [cE]: true, [j]: \"sigv4-s3express\", [cF]: \"s3express\", [cG]: \"{Region}\" }] }, [cH]: {} }, [ct]: n }], bS = [ad, 0, 7, true], bT = [{ [cw]: k, [cx]: [ad, 7, 15, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 15, 17, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bU = [{ [cw]: k, [cx]: [ad, 7, 16, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 16, 18, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bV = [{ [cw]: k, [cx]: [ad, 7, 20, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 20, 22, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bW = [{ [cw]: k, [cx]: [ad, 7, 21, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 21, 23, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bX = [{ [cw]: k, [cx]: [ad, 7, 27, true], [cz]: \"s3expressAvailabilityZoneId\" }, { [cw]: k, [cx]: [ad, 27, 29, true], [cz]: \"s3expressAvailabilityZoneDelim\" }, { [cw]: h, [cx]: [{ [cy]: \"s3expressAvailabilityZoneDelim\" }, \"--\"] }], bY = [ac], bZ = [{ [cw]: y, [cx]: [{ [cy]: x }, false] }], ca = [{ [cw]: h, [cx]: [{ [cy]: v }, \"beta\"] }], cb = [\"*\"], cc = [{ [cw]: y, [cx]: [{ [cy]: \"Region\" }, false] }], cd = [{ [cw]: h, [cx]: [{ [cy]: \"Region\" }, \"us-east-1\"] }], ce = [{ [cw]: h, [cx]: [aT, K] }], cf = [{ [cw]: i, [cx]: [aS, \"resourceId[1]\"], [cz]: L }, { [cw]: r, [cx]: [{ [cw]: h, [cx]: [aV, I] }] }], cg = [aS, \"resourceId[1]\"], ch = [Y], ci = [{ [cw]: r, [cx]: [{ [cw]: h, [cx]: [{ [cw]: i, [cx]: [aS, \"region\"] }, I] }] }], cj = [{ [cw]: r, [cx]: [{ [cw]: d, [cx]: [{ [cw]: i, [cx]: [aS, \"resourceId[2]\"] }] }] }], ck = [aS, \"resourceId[2]\"], cl = [{ [cw]: g, [cx]: [{ [cw]: i, [cx]: [aS, \"region\"] }], [cz]: \"bucketPartition\" }], cm = [{ [cw]: h, [cx]: [ba, { [cw]: i, [cx]: [{ [cy]: \"partitionResult\" }, j] }] }], cn = [{ [cw]: y, [cx]: [{ [cw]: i, [cx]: [aS, \"region\"] }, true] }], co = [{ [cw]: y, [cx]: [bb, false] }], cp = [{ [cw]: y, [cx]: [aV, false] }], cq = [X], cr = [{ [cw]: y, [cx]: [{ [cy]: \"Region\" }, true] }];\nconst _data = { version: \"1.0\", parameters: { Bucket: T, Region: T, UseFIPS: U, UseDualStack: U, Endpoint: T, ForcePathStyle: U, Accelerate: U, UseGlobalEndpoint: U, UseObjectLambdaEndpoint: V, Key: T, Prefix: T, CopySource: T, DisableAccessPoints: V, DisableMultiRegionAccessPoints: U, UseArnRegion: V, UseS3ExpressControlEndpoint: V, DisableS3ExpressSessionAuth: V }, [cu]: [{ [cv]: [{ [cw]: d, [cx]: by }], [cu]: [{ [cv]: [W, X], error: \"Accelerate cannot be used with FIPS\", [ct]: f }, { [cv]: [Y, Z], error: \"Cannot set dual-stack in combination with a custom endpoint.\", [ct]: f }, { [cv]: [Z, X], error: \"A custom endpoint cannot be combined with FIPS\", [ct]: f }, { [cv]: [Z, W], error: \"A custom endpoint cannot be combined with S3 Accelerate\", [ct]: f }, { [cv]: [X, aa, ab], error: \"Partition does not support FIPS\", [ct]: f }, { [cv]: [ac, { [cw]: k, [cx]: [ad, 0, a, c], [cz]: l }, { [cw]: h, [cx]: [{ [cy]: l }, \"--x-s3\"] }], [cu]: [ae, af, { [cv]: [ao, ap], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: [aj, aq], [cu]: [{ [cv]: bH, endpoint: { [cA]: \"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bI, endpoint: { [cA]: \"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bJ, endpoint: { [cA]: \"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bK, endpoint: { [cA]: \"https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: ak, [cH]: al }, [ct]: n }], [ct]: o }], [ct]: o }], [ct]: o }, { [cv]: bF, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: bD, [cu]: [{ [cv]: bL, [cu]: bM, [ct]: o }, { [cv]: bN, [cu]: bM, [ct]: o }, { [cv]: bO, [cu]: bM, [ct]: o }, { [cv]: bP, [cu]: bM, [ct]: o }, { [cv]: bQ, [cu]: bM, [ct]: o }, at], [ct]: o }, { [cv]: bL, [cu]: bR, [ct]: o }, { [cv]: bN, [cu]: bR, [ct]: o }, { [cv]: bO, [cu]: bR, [ct]: o }, { [cv]: bP, [cu]: bR, [ct]: o }, { [cv]: bQ, [cu]: bR, [ct]: o }, at], [ct]: o }], [ct]: o }, an], [ct]: o }, { [cv]: [ac, { [cw]: k, [cx]: bS, [cz]: s }, { [cw]: h, [cx]: [{ [cy]: s }, \"--xa-s3\"] }], [cu]: [ae, af, { [cv]: bF, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: bD, [cu]: [{ [cv]: bT, [cu]: bM, [ct]: o }, { [cv]: bU, [cu]: bM, [ct]: o }, { [cv]: bV, [cu]: bM, [ct]: o }, { [cv]: bW, [cu]: bM, [ct]: o }, { [cv]: bX, [cu]: bM, [ct]: o }, at], [ct]: o }, { [cv]: bT, [cu]: bR, [ct]: o }, { [cv]: bU, [cu]: bR, [ct]: o }, { [cv]: bV, [cu]: bR, [ct]: o }, { [cv]: bW, [cu]: bR, [ct]: o }, { [cv]: bX, [cu]: bR, [ct]: o }, at], [ct]: o }], [ct]: o }, an], [ct]: o }, { [cv]: [au, ao, ap], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: bC, endpoint: { [cA]: t, [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bH, endpoint: { [cA]: \"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bI, endpoint: { [cA]: \"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bJ, endpoint: { [cA]: \"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: al }, [ct]: n }, { [cv]: bK, endpoint: { [cA]: \"https://s3express-control.{Region}.{partitionResult#dnsSuffix}\", [cB]: ak, [cH]: al }, [ct]: n }], [ct]: o }], [ct]: o }, { [cv]: [ac, { [cw]: k, [cx]: [ad, 49, 50, c], [cz]: u }, { [cw]: k, [cx]: [ad, 8, 12, c], [cz]: v }, { [cw]: k, [cx]: bS, [cz]: w }, { [cw]: k, [cx]: [ad, 32, 49, c], [cz]: x }, { [cw]: g, [cx]: by, [cz]: \"regionPartition\" }, { [cw]: h, [cx]: [{ [cy]: w }, \"--op-s3\"] }], [cu]: [{ [cv]: bZ, [cu]: [{ [cv]: bF, [cu]: [{ [cv]: [{ [cw]: h, [cx]: [av, \"e\"] }], [cu]: [{ [cv]: ca, [cu]: [aw, { [cv]: bC, endpoint: { [cA]: \"https://{Bucket}.ec2.{url#authority}\", [cB]: ax, [cH]: al }, [ct]: n }], [ct]: o }, { endpoint: { [cA]: \"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}\", [cB]: ax, [cH]: al }, [ct]: n }], [ct]: o }, { [cv]: [{ [cw]: h, [cx]: [av, \"o\"] }], [cu]: [{ [cv]: ca, [cu]: [aw, { [cv]: bC, endpoint: { [cA]: \"https://{Bucket}.op-{outpostId}.{url#authority}\", [cB]: ax, [cH]: al }, [ct]: n }], [ct]: o }, { endpoint: { [cA]: \"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}\", [cB]: ax, [cH]: al }, [ct]: n }], [ct]: o }, { error: \"Unrecognized hardware type: \\\"Expected hardware type o or e but got {hardwareType}\\\"\", [ct]: f }], [ct]: o }, { error: \"Invalid Outposts Bucket alias - it must be a valid bucket name.\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.\", [ct]: f }], [ct]: o }, { [cv]: bY, [cu]: [{ [cv]: [Z, { [cw]: r, [cx]: [{ [cw]: d, [cx]: [{ [cw]: m, [cx]: bz }] }] }], error: \"Custom endpoint `{Endpoint}` was not a valid URI\", [ct]: f }, { [cv]: [ay, am], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cc, [cu]: [{ [cv]: [W, ab], error: \"S3 Accelerate cannot be used in this region\", [ct]: f }, { [cv]: [Y, X, aA, aq, aB], endpoint: { [cA]: \"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [Y, X, aA, aq, aD, aE], [cu]: [{ endpoint: aF, [ct]: n }], [ct]: o }, { [cv]: [Y, X, aA, aq, aD, aH], endpoint: aF, [ct]: n }, { [cv]: [ar, X, aA, aq, aB], endpoint: { [cA]: \"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, X, aA, aq, aD, aE], [cu]: [{ endpoint: aI, [ct]: n }], [ct]: o }, { [cv]: [ar, X, aA, aq, aD, aH], endpoint: aI, [ct]: n }, { [cv]: [Y, as, W, aq, aB], endpoint: { [cA]: \"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [Y, as, W, aq, aD, aE], [cu]: [{ endpoint: aJ, [ct]: n }], [ct]: o }, { [cv]: [Y, as, W, aq, aD, aH], endpoint: aJ, [ct]: n }, { [cv]: [Y, as, aA, aq, aB], endpoint: { [cA]: \"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [Y, as, aA, aq, aD, aE], [cu]: [{ endpoint: aK, [ct]: n }], [ct]: o }, { [cv]: [Y, as, aA, aq, aD, aH], endpoint: aK, [ct]: n }, { [cv]: [ar, as, aA, Z, ag, ah, aB], endpoint: { [cA]: C, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, as, aA, Z, ag, aL, aB], endpoint: { [cA]: q, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, as, aA, Z, ag, ah, aD, aE], [cu]: [{ [cv]: cd, endpoint: aM, [ct]: n }, { endpoint: aM, [ct]: n }], [ct]: o }, { [cv]: [ar, as, aA, Z, ag, aL, aD, aE], [cu]: [{ [cv]: cd, endpoint: aN, [ct]: n }, aO], [ct]: o }, { [cv]: [ar, as, aA, Z, ag, ah, aD, aH], endpoint: aM, [ct]: n }, { [cv]: [ar, as, aA, Z, ag, aL, aD, aH], endpoint: aN, [ct]: n }, { [cv]: [ar, as, W, aq, aB], endpoint: { [cA]: D, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, as, W, aq, aD, aE], [cu]: [{ [cv]: cd, endpoint: aP, [ct]: n }, { endpoint: aP, [ct]: n }], [ct]: o }, { [cv]: [ar, as, W, aq, aD, aH], endpoint: aP, [ct]: n }, { [cv]: [ar, as, aA, aq, aB], endpoint: { [cA]: E, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, as, aA, aq, aD, aE], [cu]: [{ [cv]: cd, endpoint: { [cA]: E, [cB]: aG, [cH]: al }, [ct]: n }, { endpoint: aQ, [ct]: n }], [ct]: o }, { [cv]: [ar, as, aA, aq, aD, aH], endpoint: aQ, [ct]: n }], [ct]: o }, aR], [ct]: o }], [ct]: o }, { [cv]: [Z, ag, { [cw]: h, [cx]: [{ [cw]: i, [cx]: [ai, \"scheme\"] }, \"http\"] }, { [cw]: p, [cx]: [ad, c] }, ay, as, ar, aA], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cc, [cu]: [aO], [ct]: o }, aR], [ct]: o }], [ct]: o }, { [cv]: [ay, { [cw]: F, [cx]: bA, [cz]: G }], [cu]: [{ [cv]: [{ [cw]: i, [cx]: [aS, \"resourceId[0]\"], [cz]: H }, { [cw]: r, [cx]: [{ [cw]: h, [cx]: [aT, I] }] }], [cu]: [{ [cv]: [{ [cw]: h, [cx]: [aU, J] }], [cu]: [{ [cv]: ce, [cu]: [{ [cv]: cf, [cu]: [aW, aX, { [cv]: ci, [cu]: [aY, { [cv]: cj, [cu]: [aZ, { [cv]: cl, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cm, [cu]: [{ [cv]: cn, [cu]: [{ [cv]: [{ [cw]: h, [cx]: [bb, I] }], error: \"Invalid ARN: Missing account id\", [ct]: f }, { [cv]: co, [cu]: [{ [cv]: cp, [cu]: [{ [cv]: bC, endpoint: { [cA]: M, [cB]: bc, [cH]: al }, [ct]: n }, { [cv]: cq, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bc, [cH]: al }, [ct]: n }, { endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bc, [cH]: al }, [ct]: n }], [ct]: o }, bd], [ct]: o }, be], [ct]: o }, bf], [ct]: o }, bg], [ct]: o }], [ct]: o }], [ct]: o }, bh], [ct]: o }, { error: \"Invalid ARN: bucket ARN is missing a region\", [ct]: f }], [ct]: o }, bi], [ct]: o }, { error: \"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`\", [ct]: f }], [ct]: o }, { [cv]: ce, [cu]: [{ [cv]: cf, [cu]: [{ [cv]: ci, [cu]: [{ [cv]: ce, [cu]: [{ [cv]: ci, [cu]: [aY, { [cv]: cj, [cu]: [aZ, { [cv]: cl, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: [{ [cw]: h, [cx]: [ba, \"{partitionResult#name}\"] }], [cu]: [{ [cv]: cn, [cu]: [{ [cv]: [{ [cw]: h, [cx]: [aU, B] }], [cu]: [{ [cv]: co, [cu]: [{ [cv]: cp, [cu]: [{ [cv]: bB, error: \"Access Points do not support S3 Accelerate\", [ct]: f }, { [cv]: bH, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bj, [cH]: al }, [ct]: n }, { [cv]: bI, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bj, [cH]: al }, [ct]: n }, { [cv]: bJ, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bj, [cH]: al }, [ct]: n }, { [cv]: [as, ar, Z, ag], endpoint: { [cA]: M, [cB]: bj, [cH]: al }, [ct]: n }, { [cv]: bK, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bj, [cH]: al }, [ct]: n }], [ct]: o }, bd], [ct]: o }, be], [ct]: o }, { error: \"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}\", [ct]: f }], [ct]: o }, bf], [ct]: o }, bg], [ct]: o }], [ct]: o }], [ct]: o }, bh], [ct]: o }], [ct]: o }], [ct]: o }, { [cv]: [{ [cw]: y, [cx]: [aV, c] }], [cu]: [{ [cv]: ch, error: \"S3 MRAP does not support dual-stack\", [ct]: f }, { [cv]: cq, error: \"S3 MRAP does not support FIPS\", [ct]: f }, { [cv]: bB, error: \"S3 MRAP does not support S3 Accelerate\", [ct]: f }, { [cv]: [{ [cw]: e, [cx]: [{ [cy]: \"DisableMultiRegionAccessPoints\" }, c] }], error: \"Invalid configuration: Multi-Region Access Point ARNs are disabled.\", [ct]: f }, { [cv]: [{ [cw]: g, [cx]: by, [cz]: N }], [cu]: [{ [cv]: [{ [cw]: h, [cx]: [{ [cw]: i, [cx]: [{ [cy]: N }, j] }, { [cw]: i, [cx]: [aS, \"partition\"] }] }], [cu]: [{ endpoint: { [cA]: \"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}\", [cB]: { [cD]: [{ [cE]: c, name: z, [cF]: B, [cI]: cb }] }, [cH]: al }, [ct]: n }], [ct]: o }, { error: \"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`\", [ct]: f }], [ct]: o }], [ct]: o }, { error: \"Invalid Access Point Name\", [ct]: f }], [ct]: o }, bi], [ct]: o }, { [cv]: [{ [cw]: h, [cx]: [aU, A] }], [cu]: [{ [cv]: ch, error: \"S3 Outposts does not support Dual-stack\", [ct]: f }, { [cv]: cq, error: \"S3 Outposts does not support FIPS\", [ct]: f }, { [cv]: bB, error: \"S3 Outposts does not support S3 Accelerate\", [ct]: f }, { [cv]: [{ [cw]: d, [cx]: [{ [cw]: i, [cx]: [aS, \"resourceId[4]\"] }] }], error: \"Invalid Arn: Outpost Access Point ARN contains sub resources\", [ct]: f }, { [cv]: [{ [cw]: i, [cx]: cg, [cz]: x }], [cu]: [{ [cv]: bZ, [cu]: [aZ, { [cv]: cl, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cm, [cu]: [{ [cv]: cn, [cu]: [{ [cv]: co, [cu]: [{ [cv]: [{ [cw]: i, [cx]: ck, [cz]: O }], [cu]: [{ [cv]: [{ [cw]: i, [cx]: [aS, \"resourceId[3]\"], [cz]: L }], [cu]: [{ [cv]: [{ [cw]: h, [cx]: [{ [cy]: O }, K] }], [cu]: [{ [cv]: bC, endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}\", [cB]: bk, [cH]: al }, [ct]: n }, { endpoint: { [cA]: \"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}\", [cB]: bk, [cH]: al }, [ct]: n }], [ct]: o }, { error: \"Expected an outpost type `accesspoint`, found {outpostType}\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: expected an access point name\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: Expected a 4-component resource\", [ct]: f }], [ct]: o }, be], [ct]: o }, bf], [ct]: o }, bg], [ct]: o }], [ct]: o }], [ct]: o }, { error: \"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: The Outpost Id was not set\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})\", [ct]: f }], [ct]: o }, { error: \"Invalid ARN: No ARN type specified\", [ct]: f }], [ct]: o }, { [cv]: [{ [cw]: k, [cx]: [ad, 0, 4, b], [cz]: P }, { [cw]: h, [cx]: [{ [cy]: P }, \"arn:\"] }, { [cw]: r, [cx]: [{ [cw]: d, [cx]: [bl] }] }], error: \"Invalid ARN: `{Bucket}` was not a valid ARN\", [ct]: f }, { [cv]: [{ [cw]: e, [cx]: [az, c] }, bl], error: \"Path-style addressing cannot be used with ARN buckets\", [ct]: f }, { [cv]: bE, [cu]: [{ [cv]: bG, [cu]: [{ [cv]: [aA], [cu]: [{ [cv]: [Y, aq, X, aB], endpoint: { [cA]: \"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [Y, aq, X, aD, aE], [cu]: [{ endpoint: bm, [ct]: n }], [ct]: o }, { [cv]: [Y, aq, X, aD, aH], endpoint: bm, [ct]: n }, { [cv]: [ar, aq, X, aB], endpoint: { [cA]: \"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, aq, X, aD, aE], [cu]: [{ endpoint: bn, [ct]: n }], [ct]: o }, { [cv]: [ar, aq, X, aD, aH], endpoint: bn, [ct]: n }, { [cv]: [Y, aq, as, aB], endpoint: { [cA]: \"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [Y, aq, as, aD, aE], [cu]: [{ endpoint: bo, [ct]: n }], [ct]: o }, { [cv]: [Y, aq, as, aD, aH], endpoint: bo, [ct]: n }, { [cv]: [ar, Z, ag, as, aB], endpoint: { [cA]: Q, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, Z, ag, as, aD, aE], [cu]: [{ [cv]: cd, endpoint: bp, [ct]: n }, { endpoint: bp, [ct]: n }], [ct]: o }, { [cv]: [ar, Z, ag, as, aD, aH], endpoint: bp, [ct]: n }, { [cv]: [ar, aq, as, aB], endpoint: { [cA]: R, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [ar, aq, as, aD, aE], [cu]: [{ [cv]: cd, endpoint: { [cA]: R, [cB]: aG, [cH]: al }, [ct]: n }, { endpoint: bq, [ct]: n }], [ct]: o }, { [cv]: [ar, aq, as, aD, aH], endpoint: bq, [ct]: n }], [ct]: o }, { error: \"Path-style addressing cannot be used with S3 Accelerate\", [ct]: f }], [ct]: o }], [ct]: o }], [ct]: o }, { [cv]: [{ [cw]: d, [cx]: [br] }, { [cw]: e, [cx]: [br, c] }], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cr, [cu]: [aW, aX, { [cv]: bC, endpoint: { [cA]: t, [cB]: bs, [cH]: al }, [ct]: n }, { [cv]: cq, endpoint: { [cA]: \"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}\", [cB]: bs, [cH]: al }, [ct]: n }, { endpoint: { [cA]: \"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}\", [cB]: bs, [cH]: al }, [ct]: n }], [ct]: o }, aR], [ct]: o }], [ct]: o }, { [cv]: [au], [cu]: [{ [cv]: bG, [cu]: [{ [cv]: cr, [cu]: [{ [cv]: [X, Y, aq, aB], endpoint: { [cA]: \"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [X, Y, aq, aD, aE], [cu]: [{ endpoint: bt, [ct]: n }], [ct]: o }, { [cv]: [X, Y, aq, aD, aH], endpoint: bt, [ct]: n }, { [cv]: [X, ar, aq, aB], endpoint: { [cA]: \"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [X, ar, aq, aD, aE], [cu]: [{ endpoint: bu, [ct]: n }], [ct]: o }, { [cv]: [X, ar, aq, aD, aH], endpoint: bu, [ct]: n }, { [cv]: [as, Y, aq, aB], endpoint: { [cA]: \"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}\", [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [as, Y, aq, aD, aE], [cu]: [{ endpoint: bv, [ct]: n }], [ct]: o }, { [cv]: [as, Y, aq, aD, aH], endpoint: bv, [ct]: n }, { [cv]: [as, ar, Z, ag, aB], endpoint: { [cA]: t, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [as, ar, Z, ag, aD, aE], [cu]: [{ [cv]: cd, endpoint: bw, [ct]: n }, { endpoint: bw, [ct]: n }], [ct]: o }, { [cv]: [as, ar, Z, ag, aD, aH], endpoint: bw, [ct]: n }, { [cv]: [as, ar, aq, aB], endpoint: { [cA]: S, [cB]: aC, [cH]: al }, [ct]: n }, { [cv]: [as, ar, aq, aD, aE], [cu]: [{ [cv]: cd, endpoint: { [cA]: S, [cB]: aG, [cH]: al }, [ct]: n }, { endpoint: bx, [ct]: n }], [ct]: o }, { [cv]: [as, ar, aq, aD, aH], endpoint: bx, [ct]: n }], [ct]: o }, aR], [ct]: o }], [ct]: o }], [ct]: o }, { error: \"A region must be set when sending requests to S3.\", [ct]: f }] };\nexport const ruleSet = _data;\n","import { awsEndpointFunctions } from \"@aws-sdk/util-endpoints\";\nimport { customEndpointFunctions, EndpointCache, resolveEndpoint } from \"@smithy/util-endpoints\";\nimport { ruleSet } from \"./ruleset\";\nconst cache = new EndpointCache({\n    size: 50,\n    params: [\n        \"Accelerate\",\n        \"Bucket\",\n        \"DisableAccessPoints\",\n        \"DisableMultiRegionAccessPoints\",\n        \"DisableS3ExpressSessionAuth\",\n        \"Endpoint\",\n        \"ForcePathStyle\",\n        \"Region\",\n        \"UseArnRegion\",\n        \"UseDualStack\",\n        \"UseFIPS\",\n        \"UseGlobalEndpoint\",\n        \"UseObjectLambdaEndpoint\",\n        \"UseS3ExpressControlEndpoint\",\n    ],\n});\nexport const defaultEndpointResolver = (endpointParams, context = {}) => {\n    return cache.get(endpointParams, () => resolveEndpoint(ruleSet, {\n        endpointParams: endpointParams,\n        logger: context.logger,\n    }));\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","import { resolveAwsSdkSigV4AConfig, resolveAwsSdkSigV4Config, } from \"@aws-sdk/core\";\nimport { SignatureV4MultiRegion } from \"@aws-sdk/signature-v4-multi-region\";\nimport { resolveParams } from \"@smithy/middleware-endpoint\";\nimport { getSmithyContext, normalizeProvider } from \"@smithy/util-middleware\";\nimport { defaultEndpointResolver } from \"../endpoint/endpointResolver\";\nconst createEndpointRuleSetHttpAuthSchemeParametersProvider = (defaultHttpAuthSchemeParametersProvider) => async (config, context, input) => {\n    if (!input) {\n        throw new Error(\"Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`\");\n    }\n    const defaultParameters = await defaultHttpAuthSchemeParametersProvider(config, context, input);\n    const instructionsFn = getSmithyContext(context)?.commandInstance?.constructor\n        ?.getEndpointParameterInstructions;\n    if (!instructionsFn) {\n        throw new Error(`getEndpointParameterInstructions() is not defined on '${context.commandName}'`);\n    }\n    const endpointParameters = await resolveParams(input, { getEndpointParameterInstructions: instructionsFn }, config);\n    return Object.assign(defaultParameters, endpointParameters);\n};\nconst _defaultS3HttpAuthSchemeParametersProvider = async (config, context, input) => {\n    return {\n        operation: getSmithyContext(context).operation,\n        region: await normalizeProvider(config.region)() || (() => {\n            throw new Error(\"expected `region` to be configured for `aws.auth#sigv4`\");\n        })(),\n    };\n};\nexport const defaultS3HttpAuthSchemeParametersProvider = createEndpointRuleSetHttpAuthSchemeParametersProvider(_defaultS3HttpAuthSchemeParametersProvider);\nfunction createAwsAuthSigv4HttpAuthOption(authParameters) {\n    return {\n        schemeId: \"aws.auth#sigv4\",\n        signingProperties: {\n            name: \"s3\",\n            region: authParameters.region,\n        },\n        propertiesExtractor: (config, context) => ({\n            signingProperties: {\n                config,\n                context,\n            },\n        }),\n    };\n}\nfunction createAwsAuthSigv4aHttpAuthOption(authParameters) {\n    return {\n        schemeId: \"aws.auth#sigv4a\",\n        signingProperties: {\n            name: \"s3\",\n            region: authParameters.region,\n        },\n        propertiesExtractor: (config, context) => ({\n            signingProperties: {\n                config,\n                context,\n            },\n        }),\n    };\n}\nconst createEndpointRuleSetHttpAuthSchemeProvider = (defaultEndpointResolver, defaultHttpAuthSchemeResolver, createHttpAuthOptionFunctions) => {\n    const endpointRuleSetHttpAuthSchemeProvider = (authParameters) => {\n        const endpoint = defaultEndpointResolver(authParameters);\n        const authSchemes = endpoint.properties?.authSchemes;\n        if (!authSchemes) {\n            return defaultHttpAuthSchemeResolver(authParameters);\n        }\n        const options = [];\n        for (const scheme of authSchemes) {\n            const { name: resolvedName, properties = {}, ...rest } = scheme;\n            const name = resolvedName.toLowerCase();\n            if (resolvedName !== name) {\n                console.warn(`HttpAuthScheme has been normalized with lowercasing: '${resolvedName}' to '${name}'`);\n            }\n            let schemeId;\n            if (name === \"sigv4a\") {\n                schemeId = \"aws.auth#sigv4a\";\n                const sigv4Present = authSchemes.find((s) => {\n                    const name = s.name.toLowerCase();\n                    return name !== \"sigv4a\" && name.startsWith(\"sigv4\");\n                });\n                if (SignatureV4MultiRegion.sigv4aDependency() === \"none\" && sigv4Present) {\n                    continue;\n                }\n            }\n            else if (name.startsWith(\"sigv4\")) {\n                schemeId = \"aws.auth#sigv4\";\n            }\n            else {\n                throw new Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${name}'`);\n            }\n            const createOption = createHttpAuthOptionFunctions[schemeId];\n            if (!createOption) {\n                throw new Error(`Could not find HttpAuthOption create function for '${schemeId}'`);\n            }\n            const option = createOption(authParameters);\n            option.schemeId = schemeId;\n            option.signingProperties = { ...(option.signingProperties || {}), ...rest, ...properties };\n            options.push(option);\n        }\n        return options;\n    };\n    return endpointRuleSetHttpAuthSchemeProvider;\n};\nconst _defaultS3HttpAuthSchemeProvider = (authParameters) => {\n    const options = [];\n    switch (authParameters.operation) {\n        default: {\n            options.push(createAwsAuthSigv4HttpAuthOption(authParameters));\n            options.push(createAwsAuthSigv4aHttpAuthOption(authParameters));\n        }\n    }\n    return options;\n};\nexport const defaultS3HttpAuthSchemeProvider = createEndpointRuleSetHttpAuthSchemeProvider(defaultEndpointResolver, _defaultS3HttpAuthSchemeProvider, {\n    \"aws.auth#sigv4\": createAwsAuthSigv4HttpAuthOption,\n    \"aws.auth#sigv4a\": createAwsAuthSigv4aHttpAuthOption,\n});\nexport const resolveHttpAuthSchemeConfig = (config) => {\n    const config_0 = resolveAwsSdkSigV4Config(config);\n    const config_1 = resolveAwsSdkSigV4AConfig(config_0);\n    return Object.assign(config_1, {\n        authSchemePreference: normalizeProvider(config.authSchemePreference ?? []),\n    });\n};\n","const clientContextParamDefaults = {};\nexport const resolveClientEndpointParameters = (options) => {\n    return Object.assign(options, {\n        useFipsEndpoint: options.useFipsEndpoint ?? false,\n        useDualstackEndpoint: options.useDualstackEndpoint ?? false,\n        forcePathStyle: options.forcePathStyle ?? false,\n        useAccelerateEndpoint: options.useAccelerateEndpoint ?? false,\n        useGlobalEndpoint: options.useGlobalEndpoint ?? false,\n        disableMultiregionAccessPoints: options.disableMultiregionAccessPoints ?? false,\n        defaultSigningName: \"s3\",\n        clientContextParams: options.clientContextParams ?? {},\n    });\n};\nexport const commonParams = {\n    ForcePathStyle: { type: \"clientContextParams\", name: \"forcePathStyle\" },\n    UseArnRegion: { type: \"clientContextParams\", name: \"useArnRegion\" },\n    DisableMultiRegionAccessPoints: { type: \"clientContextParams\", name: \"disableMultiregionAccessPoints\" },\n    Accelerate: { type: \"clientContextParams\", name: \"useAccelerateEndpoint\" },\n    DisableS3ExpressSessionAuth: { type: \"clientContextParams\", name: \"disableS3ExpressSessionAuth\" },\n    UseGlobalEndpoint: { type: \"builtInParams\", name: \"useGlobalEndpoint\" },\n    UseFIPS: { type: \"builtInParams\", name: \"useFipsEndpoint\" },\n    Endpoint: { type: \"builtInParams\", name: \"endpoint\" },\n    Region: { type: \"builtInParams\", name: \"region\" },\n    UseDualStack: { type: \"builtInParams\", name: \"useDualstackEndpoint\" },\n};\n","import { ServiceException as __ServiceException, } from \"@smithy/smithy-client\";\nexport { __ServiceException };\nexport class S3ServiceException extends __ServiceException {\n    constructor(options) {\n        super(options);\n        Object.setPrototypeOf(this, S3ServiceException.prototype);\n    }\n}\n","import { S3ServiceException as __BaseException } from \"./S3ServiceException\";\nexport class NoSuchUpload extends __BaseException {\n    name = \"NoSuchUpload\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"NoSuchUpload\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, NoSuchUpload.prototype);\n    }\n}\nexport class AccessDenied extends __BaseException {\n    name = \"AccessDenied\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"AccessDenied\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, AccessDenied.prototype);\n    }\n}\nexport class ObjectNotInActiveTierError extends __BaseException {\n    name = \"ObjectNotInActiveTierError\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ObjectNotInActiveTierError\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ObjectNotInActiveTierError.prototype);\n    }\n}\nexport class BucketAlreadyExists extends __BaseException {\n    name = \"BucketAlreadyExists\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"BucketAlreadyExists\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, BucketAlreadyExists.prototype);\n    }\n}\nexport class BucketAlreadyOwnedByYou extends __BaseException {\n    name = \"BucketAlreadyOwnedByYou\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"BucketAlreadyOwnedByYou\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, BucketAlreadyOwnedByYou.prototype);\n    }\n}\nexport class NoSuchBucket extends __BaseException {\n    name = \"NoSuchBucket\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"NoSuchBucket\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, NoSuchBucket.prototype);\n    }\n}\nexport class InvalidObjectState extends __BaseException {\n    name = \"InvalidObjectState\";\n    $fault = \"client\";\n    StorageClass;\n    AccessTier;\n    constructor(opts) {\n        super({\n            name: \"InvalidObjectState\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidObjectState.prototype);\n        this.StorageClass = opts.StorageClass;\n        this.AccessTier = opts.AccessTier;\n    }\n}\nexport class NoSuchKey extends __BaseException {\n    name = \"NoSuchKey\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"NoSuchKey\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, NoSuchKey.prototype);\n    }\n}\nexport class NotFound extends __BaseException {\n    name = \"NotFound\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"NotFound\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, NotFound.prototype);\n    }\n}\nexport class EncryptionTypeMismatch extends __BaseException {\n    name = \"EncryptionTypeMismatch\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"EncryptionTypeMismatch\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, EncryptionTypeMismatch.prototype);\n    }\n}\nexport class InvalidRequest extends __BaseException {\n    name = \"InvalidRequest\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidRequest\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidRequest.prototype);\n    }\n}\nexport class InvalidWriteOffset extends __BaseException {\n    name = \"InvalidWriteOffset\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidWriteOffset\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidWriteOffset.prototype);\n    }\n}\nexport class TooManyParts extends __BaseException {\n    name = \"TooManyParts\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"TooManyParts\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, TooManyParts.prototype);\n    }\n}\nexport class IdempotencyParameterMismatch extends __BaseException {\n    name = \"IdempotencyParameterMismatch\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"IdempotencyParameterMismatch\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, IdempotencyParameterMismatch.prototype);\n    }\n}\nexport class ObjectAlreadyInActiveTierError extends __BaseException {\n    name = \"ObjectAlreadyInActiveTierError\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ObjectAlreadyInActiveTierError\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ObjectAlreadyInActiveTierError.prototype);\n    }\n}\n","const _A = \"Account\";\nconst _AAO = \"AnalyticsAndOperator\";\nconst _AC = \"AccelerateConfiguration\";\nconst _ACL = \"AccessControlList\";\nconst _ACL_ = \"ACL\";\nconst _ACLn = \"AnalyticsConfigurationList\";\nconst _ACP = \"AccessControlPolicy\";\nconst _ACT = \"AccessControlTranslation\";\nconst _ACn = \"AnalyticsConfiguration\";\nconst _AD = \"AccessDenied\";\nconst _ADb = \"AbortDate\";\nconst _AED = \"AnalyticsExportDestination\";\nconst _AF = \"AnalyticsFilter\";\nconst _AH = \"AllowedHeaders\";\nconst _AHl = \"AllowedHeader\";\nconst _AI = \"AccountId\";\nconst _AIMU = \"AbortIncompleteMultipartUpload\";\nconst _AKI = \"AccessKeyId\";\nconst _AM = \"AllowedMethods\";\nconst _AMU = \"AbortMultipartUpload\";\nconst _AMUO = \"AbortMultipartUploadOutput\";\nconst _AMUR = \"AbortMultipartUploadRequest\";\nconst _AMl = \"AllowedMethod\";\nconst _AO = \"AllowedOrigins\";\nconst _AOl = \"AllowedOrigin\";\nconst _APA = \"AccessPointAlias\";\nconst _APAc = \"AccessPointArn\";\nconst _AQRD = \"AllowQuotedRecordDelimiter\";\nconst _AR = \"AcceptRanges\";\nconst _ARI = \"AbortRuleId\";\nconst _AS = \"AbacStatus\";\nconst _ASBD = \"AnalyticsS3BucketDestination\";\nconst _ASSEBD = \"ApplyServerSideEncryptionByDefault\";\nconst _ASr = \"ArchiveStatus\";\nconst _AT = \"AccessTier\";\nconst _An = \"And\";\nconst _B = \"Bucket\";\nconst _BA = \"BucketArn\";\nconst _BAE = \"BucketAlreadyExists\";\nconst _BAI = \"BucketAccountId\";\nconst _BAOBY = \"BucketAlreadyOwnedByYou\";\nconst _BET = \"BlockedEncryptionTypes\";\nconst _BGR = \"BypassGovernanceRetention\";\nconst _BI = \"BucketInfo\";\nconst _BKE = \"BucketKeyEnabled\";\nconst _BLC = \"BucketLifecycleConfiguration\";\nconst _BLN = \"BucketLocationName\";\nconst _BLS = \"BucketLoggingStatus\";\nconst _BLT = \"BucketLocationType\";\nconst _BN = \"BucketName\";\nconst _BP = \"BytesProcessed\";\nconst _BPA = \"BlockPublicAcls\";\nconst _BPP = \"BlockPublicPolicy\";\nconst _BR = \"BucketRegion\";\nconst _BRy = \"BytesReturned\";\nconst _BS = \"BytesScanned\";\nconst _Bo = \"Body\";\nconst _Bu = \"Buckets\";\nconst _C = \"Checksum\";\nconst _CA = \"ChecksumAlgorithm\";\nconst _CACL = \"CannedACL\";\nconst _CB = \"CreateBucket\";\nconst _CBC = \"CreateBucketConfiguration\";\nconst _CBMC = \"CreateBucketMetadataConfiguration\";\nconst _CBMCR = \"CreateBucketMetadataConfigurationRequest\";\nconst _CBMTC = \"CreateBucketMetadataTableConfiguration\";\nconst _CBMTCR = \"CreateBucketMetadataTableConfigurationRequest\";\nconst _CBO = \"CreateBucketOutput\";\nconst _CBR = \"CreateBucketRequest\";\nconst _CC = \"CacheControl\";\nconst _CCRC = \"ChecksumCRC32\";\nconst _CCRCC = \"ChecksumCRC32C\";\nconst _CCRCNVME = \"ChecksumCRC64NVME\";\nconst _CC_ = \"Cache-Control\";\nconst _CD = \"CreationDate\";\nconst _CD_ = \"Content-Disposition\";\nconst _CDo = \"ContentDisposition\";\nconst _CE = \"ContinuationEvent\";\nconst _CE_ = \"Content-Encoding\";\nconst _CEo = \"ContentEncoding\";\nconst _CF = \"CloudFunction\";\nconst _CFC = \"CloudFunctionConfiguration\";\nconst _CL = \"ContentLanguage\";\nconst _CL_ = \"Content-Language\";\nconst _CL__ = \"Content-Length\";\nconst _CLo = \"ContentLength\";\nconst _CM = \"Content-MD5\";\nconst _CMD = \"ContentMD5\";\nconst _CMU = \"CompletedMultipartUpload\";\nconst _CMUO = \"CompleteMultipartUploadOutput\";\nconst _CMUOr = \"CreateMultipartUploadOutput\";\nconst _CMUR = \"CompleteMultipartUploadResult\";\nconst _CMURo = \"CompleteMultipartUploadRequest\";\nconst _CMURr = \"CreateMultipartUploadRequest\";\nconst _CMUo = \"CompleteMultipartUpload\";\nconst _CMUr = \"CreateMultipartUpload\";\nconst _CMh = \"ChecksumMode\";\nconst _CO = \"CopyObject\";\nconst _COO = \"CopyObjectOutput\";\nconst _COR = \"CopyObjectResult\";\nconst _CORSC = \"CORSConfiguration\";\nconst _CORSR = \"CORSRules\";\nconst _CORSRu = \"CORSRule\";\nconst _CORo = \"CopyObjectRequest\";\nconst _CP = \"CommonPrefix\";\nconst _CPL = \"CommonPrefixList\";\nconst _CPLo = \"CompletedPartList\";\nconst _CPR = \"CopyPartResult\";\nconst _CPo = \"CompletedPart\";\nconst _CPom = \"CommonPrefixes\";\nconst _CR = \"ContentRange\";\nconst _CRSBA = \"ConfirmRemoveSelfBucketAccess\";\nconst _CR_ = \"Content-Range\";\nconst _CS = \"CopySource\";\nconst _CSHA = \"ChecksumSHA1\";\nconst _CSHAh = \"ChecksumSHA256\";\nconst _CSIM = \"CopySourceIfMatch\";\nconst _CSIMS = \"CopySourceIfModifiedSince\";\nconst _CSINM = \"CopySourceIfNoneMatch\";\nconst _CSIUS = \"CopySourceIfUnmodifiedSince\";\nconst _CSO = \"CreateSessionOutput\";\nconst _CSR = \"CreateSessionResult\";\nconst _CSRo = \"CopySourceRange\";\nconst _CSRr = \"CreateSessionRequest\";\nconst _CSSSECA = \"CopySourceSSECustomerAlgorithm\";\nconst _CSSSECK = \"CopySourceSSECustomerKey\";\nconst _CSSSECKMD = \"CopySourceSSECustomerKeyMD5\";\nconst _CSV = \"CSV\";\nconst _CSVI = \"CopySourceVersionId\";\nconst _CSVIn = \"CSVInput\";\nconst _CSVO = \"CSVOutput\";\nconst _CSo = \"ConfigurationState\";\nconst _CSr = \"CreateSession\";\nconst _CT = \"ChecksumType\";\nconst _CT_ = \"Content-Type\";\nconst _CTl = \"ClientToken\";\nconst _CTo = \"ContentType\";\nconst _CTom = \"CompressionType\";\nconst _CTon = \"ContinuationToken\";\nconst _Co = \"Condition\";\nconst _Cod = \"Code\";\nconst _Com = \"Comments\";\nconst _Con = \"Contents\";\nconst _Cont = \"Cont\";\nconst _Cr = \"Credentials\";\nconst _D = \"Days\";\nconst _DAI = \"DaysAfterInitiation\";\nconst _DB = \"DeleteBucket\";\nconst _DBAC = \"DeleteBucketAnalyticsConfiguration\";\nconst _DBACR = \"DeleteBucketAnalyticsConfigurationRequest\";\nconst _DBC = \"DeleteBucketCors\";\nconst _DBCR = \"DeleteBucketCorsRequest\";\nconst _DBE = \"DeleteBucketEncryption\";\nconst _DBER = \"DeleteBucketEncryptionRequest\";\nconst _DBIC = \"DeleteBucketInventoryConfiguration\";\nconst _DBICR = \"DeleteBucketInventoryConfigurationRequest\";\nconst _DBITC = \"DeleteBucketIntelligentTieringConfiguration\";\nconst _DBITCR = \"DeleteBucketIntelligentTieringConfigurationRequest\";\nconst _DBL = \"DeleteBucketLifecycle\";\nconst _DBLR = \"DeleteBucketLifecycleRequest\";\nconst _DBMC = \"DeleteBucketMetadataConfiguration\";\nconst _DBMCR = \"DeleteBucketMetadataConfigurationRequest\";\nconst _DBMCRe = \"DeleteBucketMetricsConfigurationRequest\";\nconst _DBMCe = \"DeleteBucketMetricsConfiguration\";\nconst _DBMTC = \"DeleteBucketMetadataTableConfiguration\";\nconst _DBMTCR = \"DeleteBucketMetadataTableConfigurationRequest\";\nconst _DBOC = \"DeleteBucketOwnershipControls\";\nconst _DBOCR = \"DeleteBucketOwnershipControlsRequest\";\nconst _DBP = \"DeleteBucketPolicy\";\nconst _DBPR = \"DeleteBucketPolicyRequest\";\nconst _DBR = \"DeleteBucketRequest\";\nconst _DBRR = \"DeleteBucketReplicationRequest\";\nconst _DBRe = \"DeleteBucketReplication\";\nconst _DBT = \"DeleteBucketTagging\";\nconst _DBTR = \"DeleteBucketTaggingRequest\";\nconst _DBW = \"DeleteBucketWebsite\";\nconst _DBWR = \"DeleteBucketWebsiteRequest\";\nconst _DE = \"DataExport\";\nconst _DIM = \"DestinationIfMatch\";\nconst _DIMS = \"DestinationIfModifiedSince\";\nconst _DINM = \"DestinationIfNoneMatch\";\nconst _DIUS = \"DestinationIfUnmodifiedSince\";\nconst _DM = \"DeleteMarker\";\nconst _DME = \"DeleteMarkerEntry\";\nconst _DMR = \"DeleteMarkerReplication\";\nconst _DMVI = \"DeleteMarkerVersionId\";\nconst _DMe = \"DeleteMarkers\";\nconst _DN = \"DisplayName\";\nconst _DO = \"DeletedObject\";\nconst _DOO = \"DeleteObjectOutput\";\nconst _DOOe = \"DeleteObjectsOutput\";\nconst _DOR = \"DeleteObjectRequest\";\nconst _DORe = \"DeleteObjectsRequest\";\nconst _DOT = \"DeleteObjectTagging\";\nconst _DOTO = \"DeleteObjectTaggingOutput\";\nconst _DOTR = \"DeleteObjectTaggingRequest\";\nconst _DOe = \"DeletedObjects\";\nconst _DOel = \"DeleteObject\";\nconst _DOele = \"DeleteObjects\";\nconst _DPAB = \"DeletePublicAccessBlock\";\nconst _DPABR = \"DeletePublicAccessBlockRequest\";\nconst _DR = \"DataRedundancy\";\nconst _DRe = \"DefaultRetention\";\nconst _DRel = \"DeleteResult\";\nconst _DRes = \"DestinationResult\";\nconst _Da = \"Date\";\nconst _De = \"Delete\";\nconst _Del = \"Deleted\";\nconst _Deli = \"Delimiter\";\nconst _Des = \"Destination\";\nconst _Desc = \"Description\";\nconst _Det = \"Details\";\nconst _E = \"Expiration\";\nconst _EA = \"EmailAddress\";\nconst _EBC = \"EventBridgeConfiguration\";\nconst _EBO = \"ExpectedBucketOwner\";\nconst _EC = \"EncryptionConfiguration\";\nconst _ECr = \"ErrorCode\";\nconst _ED = \"ErrorDetails\";\nconst _EDr = \"ErrorDocument\";\nconst _EE = \"EndEvent\";\nconst _EH = \"ExposeHeaders\";\nconst _EHx = \"ExposeHeader\";\nconst _EM = \"ErrorMessage\";\nconst _EODM = \"ExpiredObjectDeleteMarker\";\nconst _EOR = \"ExistingObjectReplication\";\nconst _ES = \"ExpiresString\";\nconst _ESBO = \"ExpectedSourceBucketOwner\";\nconst _ET = \"EncryptionType\";\nconst _ETL = \"EncryptionTypeList\";\nconst _ETM = \"EncryptionTypeMismatch\";\nconst _ETa = \"ETag\";\nconst _ETn = \"EncodingType\";\nconst _ETv = \"EventThreshold\";\nconst _ETx = \"ExpressionType\";\nconst _En = \"Encryption\";\nconst _Ena = \"Enabled\";\nconst _End = \"End\";\nconst _Er = \"Errors\";\nconst _Err = \"Error\";\nconst _Ev = \"Events\";\nconst _Eve = \"Event\";\nconst _Ex = \"Expires\";\nconst _Exp = \"Expression\";\nconst _F = \"Filter\";\nconst _FD = \"FieldDelimiter\";\nconst _FHI = \"FileHeaderInfo\";\nconst _FO = \"FetchOwner\";\nconst _FR = \"FilterRule\";\nconst _FRL = \"FilterRuleList\";\nconst _FRi = \"FilterRules\";\nconst _Fi = \"Field\";\nconst _Fo = \"Format\";\nconst _Fr = \"Frequency\";\nconst _G = \"Grants\";\nconst _GBA = \"GetBucketAbac\";\nconst _GBAC = \"GetBucketAccelerateConfiguration\";\nconst _GBACO = \"GetBucketAccelerateConfigurationOutput\";\nconst _GBACOe = \"GetBucketAnalyticsConfigurationOutput\";\nconst _GBACR = \"GetBucketAccelerateConfigurationRequest\";\nconst _GBACRe = \"GetBucketAnalyticsConfigurationRequest\";\nconst _GBACe = \"GetBucketAnalyticsConfiguration\";\nconst _GBAO = \"GetBucketAbacOutput\";\nconst _GBAOe = \"GetBucketAclOutput\";\nconst _GBAR = \"GetBucketAbacRequest\";\nconst _GBARe = \"GetBucketAclRequest\";\nconst _GBAe = \"GetBucketAcl\";\nconst _GBC = \"GetBucketCors\";\nconst _GBCO = \"GetBucketCorsOutput\";\nconst _GBCR = \"GetBucketCorsRequest\";\nconst _GBE = \"GetBucketEncryption\";\nconst _GBEO = \"GetBucketEncryptionOutput\";\nconst _GBER = \"GetBucketEncryptionRequest\";\nconst _GBIC = \"GetBucketInventoryConfiguration\";\nconst _GBICO = \"GetBucketInventoryConfigurationOutput\";\nconst _GBICR = \"GetBucketInventoryConfigurationRequest\";\nconst _GBITC = \"GetBucketIntelligentTieringConfiguration\";\nconst _GBITCO = \"GetBucketIntelligentTieringConfigurationOutput\";\nconst _GBITCR = \"GetBucketIntelligentTieringConfigurationRequest\";\nconst _GBL = \"GetBucketLocation\";\nconst _GBLC = \"GetBucketLifecycleConfiguration\";\nconst _GBLCO = \"GetBucketLifecycleConfigurationOutput\";\nconst _GBLCR = \"GetBucketLifecycleConfigurationRequest\";\nconst _GBLO = \"GetBucketLocationOutput\";\nconst _GBLOe = \"GetBucketLoggingOutput\";\nconst _GBLR = \"GetBucketLocationRequest\";\nconst _GBLRe = \"GetBucketLoggingRequest\";\nconst _GBLe = \"GetBucketLogging\";\nconst _GBMC = \"GetBucketMetadataConfiguration\";\nconst _GBMCO = \"GetBucketMetadataConfigurationOutput\";\nconst _GBMCOe = \"GetBucketMetricsConfigurationOutput\";\nconst _GBMCR = \"GetBucketMetadataConfigurationResult\";\nconst _GBMCRe = \"GetBucketMetadataConfigurationRequest\";\nconst _GBMCRet = \"GetBucketMetricsConfigurationRequest\";\nconst _GBMCe = \"GetBucketMetricsConfiguration\";\nconst _GBMTC = \"GetBucketMetadataTableConfiguration\";\nconst _GBMTCO = \"GetBucketMetadataTableConfigurationOutput\";\nconst _GBMTCR = \"GetBucketMetadataTableConfigurationResult\";\nconst _GBMTCRe = \"GetBucketMetadataTableConfigurationRequest\";\nconst _GBNC = \"GetBucketNotificationConfiguration\";\nconst _GBNCR = \"GetBucketNotificationConfigurationRequest\";\nconst _GBOC = \"GetBucketOwnershipControls\";\nconst _GBOCO = \"GetBucketOwnershipControlsOutput\";\nconst _GBOCR = \"GetBucketOwnershipControlsRequest\";\nconst _GBP = \"GetBucketPolicy\";\nconst _GBPO = \"GetBucketPolicyOutput\";\nconst _GBPR = \"GetBucketPolicyRequest\";\nconst _GBPS = \"GetBucketPolicyStatus\";\nconst _GBPSO = \"GetBucketPolicyStatusOutput\";\nconst _GBPSR = \"GetBucketPolicyStatusRequest\";\nconst _GBR = \"GetBucketReplication\";\nconst _GBRO = \"GetBucketReplicationOutput\";\nconst _GBRP = \"GetBucketRequestPayment\";\nconst _GBRPO = \"GetBucketRequestPaymentOutput\";\nconst _GBRPR = \"GetBucketRequestPaymentRequest\";\nconst _GBRR = \"GetBucketReplicationRequest\";\nconst _GBT = \"GetBucketTagging\";\nconst _GBTO = \"GetBucketTaggingOutput\";\nconst _GBTR = \"GetBucketTaggingRequest\";\nconst _GBV = \"GetBucketVersioning\";\nconst _GBVO = \"GetBucketVersioningOutput\";\nconst _GBVR = \"GetBucketVersioningRequest\";\nconst _GBW = \"GetBucketWebsite\";\nconst _GBWO = \"GetBucketWebsiteOutput\";\nconst _GBWR = \"GetBucketWebsiteRequest\";\nconst _GFC = \"GrantFullControl\";\nconst _GJP = \"GlacierJobParameters\";\nconst _GO = \"GetObject\";\nconst _GOA = \"GetObjectAcl\";\nconst _GOAO = \"GetObjectAclOutput\";\nconst _GOAOe = \"GetObjectAttributesOutput\";\nconst _GOAP = \"GetObjectAttributesParts\";\nconst _GOAR = \"GetObjectAclRequest\";\nconst _GOARe = \"GetObjectAttributesResponse\";\nconst _GOARet = \"GetObjectAttributesRequest\";\nconst _GOAe = \"GetObjectAttributes\";\nconst _GOLC = \"GetObjectLockConfiguration\";\nconst _GOLCO = \"GetObjectLockConfigurationOutput\";\nconst _GOLCR = \"GetObjectLockConfigurationRequest\";\nconst _GOLH = \"GetObjectLegalHold\";\nconst _GOLHO = \"GetObjectLegalHoldOutput\";\nconst _GOLHR = \"GetObjectLegalHoldRequest\";\nconst _GOO = \"GetObjectOutput\";\nconst _GOR = \"GetObjectRequest\";\nconst _GORO = \"GetObjectRetentionOutput\";\nconst _GORR = \"GetObjectRetentionRequest\";\nconst _GORe = \"GetObjectRetention\";\nconst _GOT = \"GetObjectTagging\";\nconst _GOTO = \"GetObjectTaggingOutput\";\nconst _GOTOe = \"GetObjectTorrentOutput\";\nconst _GOTR = \"GetObjectTaggingRequest\";\nconst _GOTRe = \"GetObjectTorrentRequest\";\nconst _GOTe = \"GetObjectTorrent\";\nconst _GPAB = \"GetPublicAccessBlock\";\nconst _GPABO = \"GetPublicAccessBlockOutput\";\nconst _GPABR = \"GetPublicAccessBlockRequest\";\nconst _GR = \"GrantRead\";\nconst _GRACP = \"GrantReadACP\";\nconst _GW = \"GrantWrite\";\nconst _GWACP = \"GrantWriteACP\";\nconst _Gr = \"Grant\";\nconst _Gra = \"Grantee\";\nconst _HB = \"HeadBucket\";\nconst _HBO = \"HeadBucketOutput\";\nconst _HBR = \"HeadBucketRequest\";\nconst _HECRE = \"HttpErrorCodeReturnedEquals\";\nconst _HN = \"HostName\";\nconst _HO = \"HeadObject\";\nconst _HOO = \"HeadObjectOutput\";\nconst _HOR = \"HeadObjectRequest\";\nconst _HRC = \"HttpRedirectCode\";\nconst _I = \"Id\";\nconst _IC = \"InventoryConfiguration\";\nconst _ICL = \"InventoryConfigurationList\";\nconst _ID = \"ID\";\nconst _IDn = \"IndexDocument\";\nconst _IDnv = \"InventoryDestination\";\nconst _IE = \"IsEnabled\";\nconst _IEn = \"InventoryEncryption\";\nconst _IF = \"InventoryFilter\";\nconst _IL = \"IsLatest\";\nconst _IM = \"IfMatch\";\nconst _IMIT = \"IfMatchInitiatedTime\";\nconst _IMLMT = \"IfMatchLastModifiedTime\";\nconst _IMS = \"IfMatchSize\";\nconst _IMS_ = \"If-Modified-Since\";\nconst _IMSf = \"IfModifiedSince\";\nconst _IMUR = \"InitiateMultipartUploadResult\";\nconst _IM_ = \"If-Match\";\nconst _INM = \"IfNoneMatch\";\nconst _INM_ = \"If-None-Match\";\nconst _IOF = \"InventoryOptionalFields\";\nconst _IOS = \"InvalidObjectState\";\nconst _IOV = \"IncludedObjectVersions\";\nconst _IP = \"IsPublic\";\nconst _IPA = \"IgnorePublicAcls\";\nconst _IPM = \"IdempotencyParameterMismatch\";\nconst _IR = \"InvalidRequest\";\nconst _IRIP = \"IsRestoreInProgress\";\nconst _IS = \"InputSerialization\";\nconst _ISBD = \"InventoryS3BucketDestination\";\nconst _ISn = \"InventorySchedule\";\nconst _IT = \"IsTruncated\";\nconst _ITAO = \"IntelligentTieringAndOperator\";\nconst _ITC = \"IntelligentTieringConfiguration\";\nconst _ITCL = \"IntelligentTieringConfigurationList\";\nconst _ITCR = \"InventoryTableConfigurationResult\";\nconst _ITCU = \"InventoryTableConfigurationUpdates\";\nconst _ITCn = \"InventoryTableConfiguration\";\nconst _ITF = \"IntelligentTieringFilter\";\nconst _IUS = \"IfUnmodifiedSince\";\nconst _IUS_ = \"If-Unmodified-Since\";\nconst _IWO = \"InvalidWriteOffset\";\nconst _In = \"Initiator\";\nconst _Ini = \"Initiated\";\nconst _JSON = \"JSON\";\nconst _JSONI = \"JSONInput\";\nconst _JSONO = \"JSONOutput\";\nconst _JTC = \"JournalTableConfiguration\";\nconst _JTCR = \"JournalTableConfigurationResult\";\nconst _JTCU = \"JournalTableConfigurationUpdates\";\nconst _K = \"Key\";\nconst _KC = \"KeyCount\";\nconst _KI = \"KeyId\";\nconst _KKA = \"KmsKeyArn\";\nconst _KM = \"KeyMarker\";\nconst _KMSC = \"KMSContext\";\nconst _KMSKA = \"KMSKeyArn\";\nconst _KMSKI = \"KMSKeyId\";\nconst _KMSMKID = \"KMSMasterKeyID\";\nconst _KPE = \"KeyPrefixEquals\";\nconst _L = \"Location\";\nconst _LAMBR = \"ListAllMyBucketsResult\";\nconst _LAMDBR = \"ListAllMyDirectoryBucketsResult\";\nconst _LB = \"ListBuckets\";\nconst _LBAC = \"ListBucketAnalyticsConfigurations\";\nconst _LBACO = \"ListBucketAnalyticsConfigurationsOutput\";\nconst _LBACR = \"ListBucketAnalyticsConfigurationResult\";\nconst _LBACRi = \"ListBucketAnalyticsConfigurationsRequest\";\nconst _LBIC = \"ListBucketInventoryConfigurations\";\nconst _LBICO = \"ListBucketInventoryConfigurationsOutput\";\nconst _LBICR = \"ListBucketInventoryConfigurationsRequest\";\nconst _LBITC = \"ListBucketIntelligentTieringConfigurations\";\nconst _LBITCO = \"ListBucketIntelligentTieringConfigurationsOutput\";\nconst _LBITCR = \"ListBucketIntelligentTieringConfigurationsRequest\";\nconst _LBMC = \"ListBucketMetricsConfigurations\";\nconst _LBMCO = \"ListBucketMetricsConfigurationsOutput\";\nconst _LBMCR = \"ListBucketMetricsConfigurationsRequest\";\nconst _LBO = \"ListBucketsOutput\";\nconst _LBR = \"ListBucketsRequest\";\nconst _LBRi = \"ListBucketResult\";\nconst _LC = \"LocationConstraint\";\nconst _LCi = \"LifecycleConfiguration\";\nconst _LDB = \"ListDirectoryBuckets\";\nconst _LDBO = \"ListDirectoryBucketsOutput\";\nconst _LDBR = \"ListDirectoryBucketsRequest\";\nconst _LE = \"LoggingEnabled\";\nconst _LEi = \"LifecycleExpiration\";\nconst _LFA = \"LambdaFunctionArn\";\nconst _LFC = \"LambdaFunctionConfiguration\";\nconst _LFCL = \"LambdaFunctionConfigurationList\";\nconst _LFCa = \"LambdaFunctionConfigurations\";\nconst _LH = \"LegalHold\";\nconst _LI = \"LocationInfo\";\nconst _LICR = \"ListInventoryConfigurationsResult\";\nconst _LM = \"LastModified\";\nconst _LMCR = \"ListMetricsConfigurationsResult\";\nconst _LMT = \"LastModifiedTime\";\nconst _LMU = \"ListMultipartUploads\";\nconst _LMUO = \"ListMultipartUploadsOutput\";\nconst _LMUR = \"ListMultipartUploadsResult\";\nconst _LMURi = \"ListMultipartUploadsRequest\";\nconst _LM_ = \"Last-Modified\";\nconst _LO = \"ListObjects\";\nconst _LOO = \"ListObjectsOutput\";\nconst _LOR = \"ListObjectsRequest\";\nconst _LOV = \"ListObjectsV2\";\nconst _LOVO = \"ListObjectsV2Output\";\nconst _LOVOi = \"ListObjectVersionsOutput\";\nconst _LOVR = \"ListObjectsV2Request\";\nconst _LOVRi = \"ListObjectVersionsRequest\";\nconst _LOVi = \"ListObjectVersions\";\nconst _LP = \"ListParts\";\nconst _LPO = \"ListPartsOutput\";\nconst _LPR = \"ListPartsResult\";\nconst _LPRi = \"ListPartsRequest\";\nconst _LR = \"LifecycleRule\";\nconst _LRAO = \"LifecycleRuleAndOperator\";\nconst _LRF = \"LifecycleRuleFilter\";\nconst _LRi = \"LifecycleRules\";\nconst _LVR = \"ListVersionsResult\";\nconst _M = \"Metadata\";\nconst _MAO = \"MetricsAndOperator\";\nconst _MAS = \"MaxAgeSeconds\";\nconst _MB = \"MaxBuckets\";\nconst _MC = \"MetadataConfiguration\";\nconst _MCL = \"MetricsConfigurationList\";\nconst _MCR = \"MetadataConfigurationResult\";\nconst _MCe = \"MetricsConfiguration\";\nconst _MD = \"MetadataDirective\";\nconst _MDB = \"MaxDirectoryBuckets\";\nconst _MDf = \"MfaDelete\";\nconst _ME = \"MetadataEntry\";\nconst _MF = \"MetricsFilter\";\nconst _MFA = \"MFA\";\nconst _MFAD = \"MFADelete\";\nconst _MK = \"MaxKeys\";\nconst _MM = \"MissingMeta\";\nconst _MOS = \"MpuObjectSize\";\nconst _MP = \"MaxParts\";\nconst _MTC = \"MetadataTableConfiguration\";\nconst _MTCR = \"MetadataTableConfigurationResult\";\nconst _MTEC = \"MetadataTableEncryptionConfiguration\";\nconst _MU = \"MultipartUpload\";\nconst _MUL = \"MultipartUploadList\";\nconst _MUa = \"MaxUploads\";\nconst _Ma = \"Marker\";\nconst _Me = \"Metrics\";\nconst _Mes = \"Message\";\nconst _Mi = \"Minutes\";\nconst _Mo = \"Mode\";\nconst _N = \"Name\";\nconst _NC = \"NotificationConfiguration\";\nconst _NCF = \"NotificationConfigurationFilter\";\nconst _NCT = \"NextContinuationToken\";\nconst _ND = \"NoncurrentDays\";\nconst _NEKKAS = \"NonEmptyKmsKeyArnString\";\nconst _NF = \"NotFound\";\nconst _NKM = \"NextKeyMarker\";\nconst _NM = \"NextMarker\";\nconst _NNV = \"NewerNoncurrentVersions\";\nconst _NPNM = \"NextPartNumberMarker\";\nconst _NSB = \"NoSuchBucket\";\nconst _NSK = \"NoSuchKey\";\nconst _NSU = \"NoSuchUpload\";\nconst _NUIM = \"NextUploadIdMarker\";\nconst _NVE = \"NoncurrentVersionExpiration\";\nconst _NVIM = \"NextVersionIdMarker\";\nconst _NVT = \"NoncurrentVersionTransitions\";\nconst _NVTL = \"NoncurrentVersionTransitionList\";\nconst _NVTo = \"NoncurrentVersionTransition\";\nconst _O = \"Owner\";\nconst _OA = \"ObjectAttributes\";\nconst _OAIATE = \"ObjectAlreadyInActiveTierError\";\nconst _OC = \"OwnershipControls\";\nconst _OCR = \"OwnershipControlsRule\";\nconst _OCRw = \"OwnershipControlsRules\";\nconst _OE = \"ObjectEncryption\";\nconst _OF = \"OptionalFields\";\nconst _OI = \"ObjectIdentifier\";\nconst _OIL = \"ObjectIdentifierList\";\nconst _OL = \"OutputLocation\";\nconst _OLC = \"ObjectLockConfiguration\";\nconst _OLE = \"ObjectLockEnabled\";\nconst _OLEFB = \"ObjectLockEnabledForBucket\";\nconst _OLLH = \"ObjectLockLegalHold\";\nconst _OLLHS = \"ObjectLockLegalHoldStatus\";\nconst _OLM = \"ObjectLockMode\";\nconst _OLR = \"ObjectLockRetention\";\nconst _OLRUD = \"ObjectLockRetainUntilDate\";\nconst _OLRb = \"ObjectLockRule\";\nconst _OLb = \"ObjectList\";\nconst _ONIATE = \"ObjectNotInActiveTierError\";\nconst _OO = \"ObjectOwnership\";\nconst _OOA = \"OptionalObjectAttributes\";\nconst _OP = \"ObjectParts\";\nconst _OPb = \"ObjectPart\";\nconst _OS = \"ObjectSize\";\nconst _OSGT = \"ObjectSizeGreaterThan\";\nconst _OSLT = \"ObjectSizeLessThan\";\nconst _OSV = \"OutputSchemaVersion\";\nconst _OSu = \"OutputSerialization\";\nconst _OV = \"ObjectVersion\";\nconst _OVL = \"ObjectVersionList\";\nconst _Ob = \"Objects\";\nconst _Obj = \"Object\";\nconst _P = \"Prefix\";\nconst _PABC = \"PublicAccessBlockConfiguration\";\nconst _PBA = \"PutBucketAbac\";\nconst _PBAC = \"PutBucketAccelerateConfiguration\";\nconst _PBACR = \"PutBucketAccelerateConfigurationRequest\";\nconst _PBACRu = \"PutBucketAnalyticsConfigurationRequest\";\nconst _PBACu = \"PutBucketAnalyticsConfiguration\";\nconst _PBAR = \"PutBucketAbacRequest\";\nconst _PBARu = \"PutBucketAclRequest\";\nconst _PBAu = \"PutBucketAcl\";\nconst _PBC = \"PutBucketCors\";\nconst _PBCR = \"PutBucketCorsRequest\";\nconst _PBE = \"PutBucketEncryption\";\nconst _PBER = \"PutBucketEncryptionRequest\";\nconst _PBIC = \"PutBucketInventoryConfiguration\";\nconst _PBICR = \"PutBucketInventoryConfigurationRequest\";\nconst _PBITC = \"PutBucketIntelligentTieringConfiguration\";\nconst _PBITCR = \"PutBucketIntelligentTieringConfigurationRequest\";\nconst _PBL = \"PutBucketLogging\";\nconst _PBLC = \"PutBucketLifecycleConfiguration\";\nconst _PBLCO = \"PutBucketLifecycleConfigurationOutput\";\nconst _PBLCR = \"PutBucketLifecycleConfigurationRequest\";\nconst _PBLR = \"PutBucketLoggingRequest\";\nconst _PBMC = \"PutBucketMetricsConfiguration\";\nconst _PBMCR = \"PutBucketMetricsConfigurationRequest\";\nconst _PBNC = \"PutBucketNotificationConfiguration\";\nconst _PBNCR = \"PutBucketNotificationConfigurationRequest\";\nconst _PBOC = \"PutBucketOwnershipControls\";\nconst _PBOCR = \"PutBucketOwnershipControlsRequest\";\nconst _PBP = \"PutBucketPolicy\";\nconst _PBPR = \"PutBucketPolicyRequest\";\nconst _PBR = \"PutBucketReplication\";\nconst _PBRP = \"PutBucketRequestPayment\";\nconst _PBRPR = \"PutBucketRequestPaymentRequest\";\nconst _PBRR = \"PutBucketReplicationRequest\";\nconst _PBT = \"PutBucketTagging\";\nconst _PBTR = \"PutBucketTaggingRequest\";\nconst _PBV = \"PutBucketVersioning\";\nconst _PBVR = \"PutBucketVersioningRequest\";\nconst _PBW = \"PutBucketWebsite\";\nconst _PBWR = \"PutBucketWebsiteRequest\";\nconst _PC = \"PartsCount\";\nconst _PDS = \"PartitionDateSource\";\nconst _PE = \"ProgressEvent\";\nconst _PI = \"ParquetInput\";\nconst _PL = \"PartsList\";\nconst _PN = \"PartNumber\";\nconst _PNM = \"PartNumberMarker\";\nconst _PO = \"PutObject\";\nconst _POA = \"PutObjectAcl\";\nconst _POAO = \"PutObjectAclOutput\";\nconst _POAR = \"PutObjectAclRequest\";\nconst _POLC = \"PutObjectLockConfiguration\";\nconst _POLCO = \"PutObjectLockConfigurationOutput\";\nconst _POLCR = \"PutObjectLockConfigurationRequest\";\nconst _POLH = \"PutObjectLegalHold\";\nconst _POLHO = \"PutObjectLegalHoldOutput\";\nconst _POLHR = \"PutObjectLegalHoldRequest\";\nconst _POO = \"PutObjectOutput\";\nconst _POR = \"PutObjectRequest\";\nconst _PORO = \"PutObjectRetentionOutput\";\nconst _PORR = \"PutObjectRetentionRequest\";\nconst _PORu = \"PutObjectRetention\";\nconst _POT = \"PutObjectTagging\";\nconst _POTO = \"PutObjectTaggingOutput\";\nconst _POTR = \"PutObjectTaggingRequest\";\nconst _PP = \"PartitionedPrefix\";\nconst _PPAB = \"PutPublicAccessBlock\";\nconst _PPABR = \"PutPublicAccessBlockRequest\";\nconst _PS = \"PolicyStatus\";\nconst _Pa = \"Parts\";\nconst _Par = \"Part\";\nconst _Parq = \"Parquet\";\nconst _Pay = \"Payer\";\nconst _Payl = \"Payload\";\nconst _Pe = \"Permission\";\nconst _Po = \"Policy\";\nconst _Pr = \"Progress\";\nconst _Pri = \"Priority\";\nconst _Pro = \"Protocol\";\nconst _Q = \"Quiet\";\nconst _QA = \"QueueArn\";\nconst _QC = \"QuoteCharacter\";\nconst _QCL = \"QueueConfigurationList\";\nconst _QCu = \"QueueConfigurations\";\nconst _QCue = \"QueueConfiguration\";\nconst _QEC = \"QuoteEscapeCharacter\";\nconst _QF = \"QuoteFields\";\nconst _Qu = \"Queue\";\nconst _R = \"Rules\";\nconst _RART = \"RedirectAllRequestsTo\";\nconst _RC = \"RequestCharged\";\nconst _RCC = \"ResponseCacheControl\";\nconst _RCD = \"ResponseContentDisposition\";\nconst _RCE = \"ResponseContentEncoding\";\nconst _RCL = \"ResponseContentLanguage\";\nconst _RCT = \"ResponseContentType\";\nconst _RCe = \"ReplicationConfiguration\";\nconst _RD = \"RecordDelimiter\";\nconst _RE = \"ResponseExpires\";\nconst _RED = \"RestoreExpiryDate\";\nconst _REe = \"RecordExpiration\";\nconst _REec = \"RecordsEvent\";\nconst _RKKID = \"ReplicaKmsKeyID\";\nconst _RKPW = \"ReplaceKeyPrefixWith\";\nconst _RKW = \"ReplaceKeyWith\";\nconst _RM = \"ReplicaModifications\";\nconst _RO = \"RenameObject\";\nconst _ROO = \"RenameObjectOutput\";\nconst _ROOe = \"RestoreObjectOutput\";\nconst _ROP = \"RestoreOutputPath\";\nconst _ROR = \"RenameObjectRequest\";\nconst _RORe = \"RestoreObjectRequest\";\nconst _ROe = \"RestoreObject\";\nconst _RP = \"RequestPayer\";\nconst _RPB = \"RestrictPublicBuckets\";\nconst _RPC = \"RequestPaymentConfiguration\";\nconst _RPe = \"RequestProgress\";\nconst _RR = \"RoutingRules\";\nconst _RRAO = \"ReplicationRuleAndOperator\";\nconst _RRF = \"ReplicationRuleFilter\";\nconst _RRe = \"ReplicationRule\";\nconst _RRep = \"ReplicationRules\";\nconst _RReq = \"RequestRoute\";\nconst _RRes = \"RestoreRequest\";\nconst _RRo = \"RoutingRule\";\nconst _RS = \"ReplicationStatus\";\nconst _RSe = \"RestoreStatus\";\nconst _RSen = \"RenameSource\";\nconst _RT = \"ReplicationTime\";\nconst _RTV = \"ReplicationTimeValue\";\nconst _RTe = \"RequestToken\";\nconst _RUD = \"RetainUntilDate\";\nconst _Ra = \"Range\";\nconst _Re = \"Restore\";\nconst _Rec = \"Records\";\nconst _Red = \"Redirect\";\nconst _Ret = \"Retention\";\nconst _Ro = \"Role\";\nconst _Ru = \"Rule\";\nconst _S = \"Status\";\nconst _SA = \"StartAfter\";\nconst _SAK = \"SecretAccessKey\";\nconst _SAs = \"SseAlgorithm\";\nconst _SB = \"StreamingBlob\";\nconst _SBD = \"S3BucketDestination\";\nconst _SC = \"StorageClass\";\nconst _SCA = \"StorageClassAnalysis\";\nconst _SCADE = \"StorageClassAnalysisDataExport\";\nconst _SCV = \"SessionCredentialValue\";\nconst _SCe = \"SessionCredentials\";\nconst _SCt = \"StatusCode\";\nconst _SDV = \"SkipDestinationValidation\";\nconst _SE = \"StatsEvent\";\nconst _SIM = \"SourceIfMatch\";\nconst _SIMS = \"SourceIfModifiedSince\";\nconst _SINM = \"SourceIfNoneMatch\";\nconst _SIUS = \"SourceIfUnmodifiedSince\";\nconst _SK = \"SSE-KMS\";\nconst _SKEO = \"SseKmsEncryptedObjects\";\nconst _SKF = \"S3KeyFilter\";\nconst _SKe = \"S3Key\";\nconst _SL = \"S3Location\";\nconst _SM = \"SessionMode\";\nconst _SOC = \"SelectObjectContent\";\nconst _SOCES = \"SelectObjectContentEventStream\";\nconst _SOCO = \"SelectObjectContentOutput\";\nconst _SOCR = \"SelectObjectContentRequest\";\nconst _SP = \"SelectParameters\";\nconst _SPi = \"SimplePrefix\";\nconst _SR = \"ScanRange\";\nconst _SS = \"SSE-S3\";\nconst _SSC = \"SourceSelectionCriteria\";\nconst _SSE = \"ServerSideEncryption\";\nconst _SSEA = \"SSEAlgorithm\";\nconst _SSEBD = \"ServerSideEncryptionByDefault\";\nconst _SSEC = \"ServerSideEncryptionConfiguration\";\nconst _SSECA = \"SSECustomerAlgorithm\";\nconst _SSECK = \"SSECustomerKey\";\nconst _SSECKMD = \"SSECustomerKeyMD5\";\nconst _SSEKMS = \"SSEKMS\";\nconst _SSEKMSE = \"SSEKMSEncryption\";\nconst _SSEKMSEC = \"SSEKMSEncryptionContext\";\nconst _SSEKMSKI = \"SSEKMSKeyId\";\nconst _SSER = \"ServerSideEncryptionRule\";\nconst _SSERe = \"ServerSideEncryptionRules\";\nconst _SSES = \"SSES3\";\nconst _ST = \"SessionToken\";\nconst _STD = \"S3TablesDestination\";\nconst _STDR = \"S3TablesDestinationResult\";\nconst _S_ = \"S3\";\nconst _Sc = \"Schedule\";\nconst _Si = \"Size\";\nconst _St = \"Start\";\nconst _Sta = \"Stats\";\nconst _Su = \"Suffix\";\nconst _T = \"Tags\";\nconst _TA = \"TableArn\";\nconst _TAo = \"TopicArn\";\nconst _TB = \"TargetBucket\";\nconst _TBA = \"TableBucketArn\";\nconst _TBT = \"TableBucketType\";\nconst _TC = \"TagCount\";\nconst _TCL = \"TopicConfigurationList\";\nconst _TCo = \"TopicConfigurations\";\nconst _TCop = \"TopicConfiguration\";\nconst _TD = \"TaggingDirective\";\nconst _TDMOS = \"TransitionDefaultMinimumObjectSize\";\nconst _TG = \"TargetGrants\";\nconst _TGa = \"TargetGrant\";\nconst _TL = \"TieringList\";\nconst _TLr = \"TransitionList\";\nconst _TMP = \"TooManyParts\";\nconst _TN = \"TableNamespace\";\nconst _TNa = \"TableName\";\nconst _TOKF = \"TargetObjectKeyFormat\";\nconst _TP = \"TargetPrefix\";\nconst _TPC = \"TotalPartsCount\";\nconst _TS = \"TagSet\";\nconst _TSa = \"TableStatus\";\nconst _Ta = \"Tag\";\nconst _Tag = \"Tagging\";\nconst _Ti = \"Tier\";\nconst _Tie = \"Tierings\";\nconst _Tier = \"Tiering\";\nconst _Tim = \"Time\";\nconst _To = \"Token\";\nconst _Top = \"Topic\";\nconst _Tr = \"Transitions\";\nconst _Tra = \"Transition\";\nconst _Ty = \"Type\";\nconst _U = \"Uploads\";\nconst _UBMITC = \"UpdateBucketMetadataInventoryTableConfiguration\";\nconst _UBMITCR = \"UpdateBucketMetadataInventoryTableConfigurationRequest\";\nconst _UBMJTC = \"UpdateBucketMetadataJournalTableConfiguration\";\nconst _UBMJTCR = \"UpdateBucketMetadataJournalTableConfigurationRequest\";\nconst _UI = \"UploadId\";\nconst _UIM = \"UploadIdMarker\";\nconst _UM = \"UserMetadata\";\nconst _UOE = \"UpdateObjectEncryption\";\nconst _UOER = \"UpdateObjectEncryptionRequest\";\nconst _UOERp = \"UpdateObjectEncryptionResponse\";\nconst _UP = \"UploadPart\";\nconst _UPC = \"UploadPartCopy\";\nconst _UPCO = \"UploadPartCopyOutput\";\nconst _UPCR = \"UploadPartCopyRequest\";\nconst _UPO = \"UploadPartOutput\";\nconst _UPR = \"UploadPartRequest\";\nconst _URI = \"URI\";\nconst _Up = \"Upload\";\nconst _V = \"Value\";\nconst _VC = \"VersioningConfiguration\";\nconst _VI = \"VersionId\";\nconst _VIM = \"VersionIdMarker\";\nconst _Ve = \"Versions\";\nconst _Ver = \"Version\";\nconst _WC = \"WebsiteConfiguration\";\nconst _WGOR = \"WriteGetObjectResponse\";\nconst _WGORR = \"WriteGetObjectResponseRequest\";\nconst _WOB = \"WriteOffsetBytes\";\nconst _WRL = \"WebsiteRedirectLocation\";\nconst _Y = \"Years\";\nconst _ar = \"accept-ranges\";\nconst _br = \"bucket-region\";\nconst _c = \"client\";\nconst _ct = \"continuation-token\";\nconst _d = \"delimiter\";\nconst _e = \"error\";\nconst _eP = \"eventPayload\";\nconst _en = \"endpoint\";\nconst _et = \"encoding-type\";\nconst _fo = \"fetch-owner\";\nconst _h = \"http\";\nconst _hC = \"httpChecksum\";\nconst _hE = \"httpError\";\nconst _hH = \"httpHeader\";\nconst _hL = \"hostLabel\";\nconst _hP = \"httpPayload\";\nconst _hPH = \"httpPrefixHeaders\";\nconst _hQ = \"httpQuery\";\nconst _hi = \"http://www.w3.org/2001/XMLSchema-instance\";\nconst _i = \"id\";\nconst _iT = \"idempotencyToken\";\nconst _km = \"key-marker\";\nconst _m = \"marker\";\nconst _mb = \"max-buckets\";\nconst _mdb = \"max-directory-buckets\";\nconst _mk = \"max-keys\";\nconst _mp = \"max-parts\";\nconst _mu = \"max-uploads\";\nconst _p = \"prefix\";\nconst _pN = \"partNumber\";\nconst _pnm = \"part-number-marker\";\nconst _rcc = \"response-cache-control\";\nconst _rcd = \"response-content-disposition\";\nconst _rce = \"response-content-encoding\";\nconst _rcl = \"response-content-language\";\nconst _rct = \"response-content-type\";\nconst _re = \"response-expires\";\nconst _s = \"streaming\";\nconst _sa = \"start-after\";\nconst _sm = \"smithy.ts.sdk.synthetic.com.amazonaws.s3\";\nconst _uI = \"uploadId\";\nconst _uim = \"upload-id-marker\";\nconst _vI = \"versionId\";\nconst _vim = \"version-id-marker\";\nconst _x = \"xsi\";\nconst _xA = \"xmlAttribute\";\nconst _xF = \"xmlFlattened\";\nconst _xN = \"xmlName\";\nconst _xNm = \"xmlNamespace\";\nconst _xaa = \"x-amz-acl\";\nconst _xaad = \"x-amz-abort-date\";\nconst _xaapa = \"x-amz-access-point-alias\";\nconst _xaari = \"x-amz-abort-rule-id\";\nconst _xaas = \"x-amz-archive-status\";\nconst _xaba = \"x-amz-bucket-arn\";\nconst _xabgr = \"x-amz-bypass-governance-retention\";\nconst _xabln = \"x-amz-bucket-location-name\";\nconst _xablt = \"x-amz-bucket-location-type\";\nconst _xabole = \"x-amz-bucket-object-lock-enabled\";\nconst _xabolt = \"x-amz-bucket-object-lock-token\";\nconst _xabr = \"x-amz-bucket-region\";\nconst _xaca = \"x-amz-checksum-algorithm\";\nconst _xacc = \"x-amz-checksum-crc32\";\nconst _xacc_ = \"x-amz-checksum-crc32c\";\nconst _xacc__ = \"x-amz-checksum-crc64nvme\";\nconst _xacm = \"x-amz-checksum-mode\";\nconst _xacrsba = \"x-amz-confirm-remove-self-bucket-access\";\nconst _xacs = \"x-amz-checksum-sha1\";\nconst _xacs_ = \"x-amz-checksum-sha256\";\nconst _xacs__ = \"x-amz-copy-source\";\nconst _xacsim = \"x-amz-copy-source-if-match\";\nconst _xacsims = \"x-amz-copy-source-if-modified-since\";\nconst _xacsinm = \"x-amz-copy-source-if-none-match\";\nconst _xacsius = \"x-amz-copy-source-if-unmodified-since\";\nconst _xacsm = \"x-amz-create-session-mode\";\nconst _xacsr = \"x-amz-copy-source-range\";\nconst _xacssseca = \"x-amz-copy-source-server-side-encryption-customer-algorithm\";\nconst _xacssseck = \"x-amz-copy-source-server-side-encryption-customer-key\";\nconst _xacssseckM = \"x-amz-copy-source-server-side-encryption-customer-key-MD5\";\nconst _xacsvi = \"x-amz-copy-source-version-id\";\nconst _xact = \"x-amz-checksum-type\";\nconst _xact_ = \"x-amz-client-token\";\nconst _xadm = \"x-amz-delete-marker\";\nconst _xae = \"x-amz-expiration\";\nconst _xaebo = \"x-amz-expected-bucket-owner\";\nconst _xafec = \"x-amz-fwd-error-code\";\nconst _xafem = \"x-amz-fwd-error-message\";\nconst _xafhCC = \"x-amz-fwd-header-Cache-Control\";\nconst _xafhCD = \"x-amz-fwd-header-Content-Disposition\";\nconst _xafhCE = \"x-amz-fwd-header-Content-Encoding\";\nconst _xafhCL = \"x-amz-fwd-header-Content-Language\";\nconst _xafhCR = \"x-amz-fwd-header-Content-Range\";\nconst _xafhCT = \"x-amz-fwd-header-Content-Type\";\nconst _xafhE = \"x-amz-fwd-header-ETag\";\nconst _xafhE_ = \"x-amz-fwd-header-Expires\";\nconst _xafhLM = \"x-amz-fwd-header-Last-Modified\";\nconst _xafhar = \"x-amz-fwd-header-accept-ranges\";\nconst _xafhxacc = \"x-amz-fwd-header-x-amz-checksum-crc32\";\nconst _xafhxacc_ = \"x-amz-fwd-header-x-amz-checksum-crc32c\";\nconst _xafhxacc__ = \"x-amz-fwd-header-x-amz-checksum-crc64nvme\";\nconst _xafhxacs = \"x-amz-fwd-header-x-amz-checksum-sha1\";\nconst _xafhxacs_ = \"x-amz-fwd-header-x-amz-checksum-sha256\";\nconst _xafhxadm = \"x-amz-fwd-header-x-amz-delete-marker\";\nconst _xafhxae = \"x-amz-fwd-header-x-amz-expiration\";\nconst _xafhxamm = \"x-amz-fwd-header-x-amz-missing-meta\";\nconst _xafhxampc = \"x-amz-fwd-header-x-amz-mp-parts-count\";\nconst _xafhxaollh = \"x-amz-fwd-header-x-amz-object-lock-legal-hold\";\nconst _xafhxaolm = \"x-amz-fwd-header-x-amz-object-lock-mode\";\nconst _xafhxaolrud = \"x-amz-fwd-header-x-amz-object-lock-retain-until-date\";\nconst _xafhxar = \"x-amz-fwd-header-x-amz-restore\";\nconst _xafhxarc = \"x-amz-fwd-header-x-amz-request-charged\";\nconst _xafhxars = \"x-amz-fwd-header-x-amz-replication-status\";\nconst _xafhxasc = \"x-amz-fwd-header-x-amz-storage-class\";\nconst _xafhxasse = \"x-amz-fwd-header-x-amz-server-side-encryption\";\nconst _xafhxasseakki = \"x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id\";\nconst _xafhxassebke = \"x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled\";\nconst _xafhxasseca = \"x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm\";\nconst _xafhxasseckM = \"x-amz-fwd-header-x-amz-server-side-encryption-customer-key-MD5\";\nconst _xafhxatc = \"x-amz-fwd-header-x-amz-tagging-count\";\nconst _xafhxavi = \"x-amz-fwd-header-x-amz-version-id\";\nconst _xafs = \"x-amz-fwd-status\";\nconst _xagfc = \"x-amz-grant-full-control\";\nconst _xagr = \"x-amz-grant-read\";\nconst _xagra = \"x-amz-grant-read-acp\";\nconst _xagw = \"x-amz-grant-write\";\nconst _xagwa = \"x-amz-grant-write-acp\";\nconst _xaimit = \"x-amz-if-match-initiated-time\";\nconst _xaimlmt = \"x-amz-if-match-last-modified-time\";\nconst _xaims = \"x-amz-if-match-size\";\nconst _xam = \"x-amz-meta-\";\nconst _xam_ = \"x-amz-mfa\";\nconst _xamd = \"x-amz-metadata-directive\";\nconst _xamm = \"x-amz-missing-meta\";\nconst _xamos = \"x-amz-mp-object-size\";\nconst _xamp = \"x-amz-max-parts\";\nconst _xampc = \"x-amz-mp-parts-count\";\nconst _xaoa = \"x-amz-object-attributes\";\nconst _xaollh = \"x-amz-object-lock-legal-hold\";\nconst _xaolm = \"x-amz-object-lock-mode\";\nconst _xaolrud = \"x-amz-object-lock-retain-until-date\";\nconst _xaoo = \"x-amz-object-ownership\";\nconst _xaooa = \"x-amz-optional-object-attributes\";\nconst _xaos = \"x-amz-object-size\";\nconst _xapnm = \"x-amz-part-number-marker\";\nconst _xar = \"x-amz-restore\";\nconst _xarc = \"x-amz-request-charged\";\nconst _xarop = \"x-amz-restore-output-path\";\nconst _xarp = \"x-amz-request-payer\";\nconst _xarr = \"x-amz-request-route\";\nconst _xars = \"x-amz-replication-status\";\nconst _xars_ = \"x-amz-rename-source\";\nconst _xarsim = \"x-amz-rename-source-if-match\";\nconst _xarsims = \"x-amz-rename-source-if-modified-since\";\nconst _xarsinm = \"x-amz-rename-source-if-none-match\";\nconst _xarsius = \"x-amz-rename-source-if-unmodified-since\";\nconst _xart = \"x-amz-request-token\";\nconst _xasc = \"x-amz-storage-class\";\nconst _xasca = \"x-amz-sdk-checksum-algorithm\";\nconst _xasdv = \"x-amz-skip-destination-validation\";\nconst _xasebo = \"x-amz-source-expected-bucket-owner\";\nconst _xasse = \"x-amz-server-side-encryption\";\nconst _xasseakki = \"x-amz-server-side-encryption-aws-kms-key-id\";\nconst _xassebke = \"x-amz-server-side-encryption-bucket-key-enabled\";\nconst _xassec = \"x-amz-server-side-encryption-context\";\nconst _xasseca = \"x-amz-server-side-encryption-customer-algorithm\";\nconst _xasseck = \"x-amz-server-side-encryption-customer-key\";\nconst _xasseckM = \"x-amz-server-side-encryption-customer-key-MD5\";\nconst _xat = \"x-amz-tagging\";\nconst _xatc = \"x-amz-tagging-count\";\nconst _xatd = \"x-amz-tagging-directive\";\nconst _xatdmos = \"x-amz-transition-default-minimum-object-size\";\nconst _xavi = \"x-amz-version-id\";\nconst _xawob = \"x-amz-write-offset-bytes\";\nconst _xawrl = \"x-amz-website-redirect-location\";\nconst _xs = \"xsi:type\";\nconst n0 = \"com.amazonaws.s3\";\nimport { TypeRegistry } from \"@smithy/core/schema\";\nimport { AccessDenied, BucketAlreadyExists, BucketAlreadyOwnedByYou, EncryptionTypeMismatch, IdempotencyParameterMismatch, InvalidObjectState, InvalidRequest, InvalidWriteOffset, NoSuchBucket, NoSuchKey, NoSuchUpload, NotFound, ObjectAlreadyInActiveTierError, ObjectNotInActiveTierError, TooManyParts, } from \"../models/errors\";\nimport { S3ServiceException } from \"../models/S3ServiceException\";\nvar CopySourceSSECustomerKey = [0, n0, _CSSSECK, 8, 0];\nvar NonEmptyKmsKeyArnString = [0, n0, _NEKKAS, 8, 0];\nvar SessionCredentialValue = [0, n0, _SCV, 8, 0];\nvar SSECustomerKey = [0, n0, _SSECK, 8, 0];\nvar SSEKMSEncryptionContext = [0, n0, _SSEKMSEC, 8, 0];\nvar SSEKMSKeyId = [0, n0, _SSEKMSKI, 8, 0];\nvar StreamingBlob = [0, n0, _SB, { [_s]: 1 }, 42];\nexport var AbacStatus$ = [3, n0, _AS,\n    0,\n    [_S],\n    [0]\n];\nexport var AbortIncompleteMultipartUpload$ = [3, n0, _AIMU,\n    0,\n    [_DAI],\n    [1]\n];\nexport var AbortMultipartUploadOutput$ = [3, n0, _AMUO,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var AbortMultipartUploadRequest$ = [3, n0, _AMUR,\n    0,\n    [_B, _K, _UI, _RP, _EBO, _IMIT],\n    [[0, 1], [0, 1], [0, { [_hQ]: _uI }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [6, { [_hH]: _xaimit }]], 3\n];\nexport var AccelerateConfiguration$ = [3, n0, _AC,\n    0,\n    [_S],\n    [0]\n];\nexport var AccessControlPolicy$ = [3, n0, _ACP,\n    0,\n    [_G, _O],\n    [[() => Grants, { [_xN]: _ACL }], () => Owner$]\n];\nexport var AccessControlTranslation$ = [3, n0, _ACT,\n    0,\n    [_O],\n    [0], 1\n];\nexport var AccessDenied$ = [-3, n0, _AD,\n    { [_e]: _c, [_hE]: 403 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(AccessDenied$, AccessDenied);\nexport var AnalyticsAndOperator$ = [3, n0, _AAO,\n    0,\n    [_P, _T],\n    [0, [() => TagSet, { [_xF]: 1, [_xN]: _Ta }]]\n];\nexport var AnalyticsConfiguration$ = [3, n0, _ACn,\n    0,\n    [_I, _SCA, _F],\n    [0, () => StorageClassAnalysis$, [() => AnalyticsFilter$, 0]], 2\n];\nexport var AnalyticsExportDestination$ = [3, n0, _AED,\n    0,\n    [_SBD],\n    [() => AnalyticsS3BucketDestination$], 1\n];\nexport var AnalyticsS3BucketDestination$ = [3, n0, _ASBD,\n    0,\n    [_Fo, _B, _BAI, _P],\n    [0, 0, 0, 0], 2\n];\nexport var BlockedEncryptionTypes$ = [3, n0, _BET,\n    0,\n    [_ET],\n    [[() => EncryptionTypeList, { [_xF]: 1 }]]\n];\nexport var Bucket$ = [3, n0, _B,\n    0,\n    [_N, _CD, _BR, _BA],\n    [0, 4, 0, 0]\n];\nexport var BucketAlreadyExists$ = [-3, n0, _BAE,\n    { [_e]: _c, [_hE]: 409 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(BucketAlreadyExists$, BucketAlreadyExists);\nexport var BucketAlreadyOwnedByYou$ = [-3, n0, _BAOBY,\n    { [_e]: _c, [_hE]: 409 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(BucketAlreadyOwnedByYou$, BucketAlreadyOwnedByYou);\nexport var BucketInfo$ = [3, n0, _BI,\n    0,\n    [_DR, _Ty],\n    [0, 0]\n];\nexport var BucketLifecycleConfiguration$ = [3, n0, _BLC,\n    0,\n    [_R],\n    [[() => LifecycleRules, { [_xF]: 1, [_xN]: _Ru }]], 1\n];\nexport var BucketLoggingStatus$ = [3, n0, _BLS,\n    0,\n    [_LE],\n    [[() => LoggingEnabled$, 0]]\n];\nexport var Checksum$ = [3, n0, _C,\n    0,\n    [_CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT],\n    [0, 0, 0, 0, 0, 0]\n];\nexport var CommonPrefix$ = [3, n0, _CP,\n    0,\n    [_P],\n    [0]\n];\nexport var CompletedMultipartUpload$ = [3, n0, _CMU,\n    0,\n    [_Pa],\n    [[() => CompletedPartList, { [_xF]: 1, [_xN]: _Par }]]\n];\nexport var CompletedPart$ = [3, n0, _CPo,\n    0,\n    [_ETa, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _PN],\n    [0, 0, 0, 0, 0, 0, 1]\n];\nexport var CompleteMultipartUploadOutput$ = [3, n0, _CMUO,\n    { [_xN]: _CMUR },\n    [_L, _B, _K, _E, _ETa, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT, _SSE, _VI, _SSEKMSKI, _BKE, _RC],\n    [0, 0, 0, [0, { [_hH]: _xae }], 0, 0, 0, 0, 0, 0, 0, [0, { [_hH]: _xasse }], [0, { [_hH]: _xavi }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarc }]]\n];\nexport var CompleteMultipartUploadRequest$ = [3, n0, _CMURo,\n    0,\n    [_B, _K, _UI, _MU, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT, _MOS, _RP, _EBO, _IM, _INM, _SSECA, _SSECK, _SSECKMD],\n    [[0, 1], [0, 1], [0, { [_hQ]: _uI }], [() => CompletedMultipartUpload$, { [_hP]: 1, [_xN]: _CMUo }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xact }], [1, { [_hH]: _xamos }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _IM_ }], [0, { [_hH]: _INM_ }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }]], 3\n];\nexport var Condition$ = [3, n0, _Co,\n    0,\n    [_HECRE, _KPE],\n    [0, 0]\n];\nexport var ContinuationEvent$ = [3, n0, _CE,\n    0,\n    [],\n    []\n];\nexport var CopyObjectOutput$ = [3, n0, _COO,\n    0,\n    [_COR, _E, _CSVI, _VI, _SSE, _SSECA, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _RC],\n    [[() => CopyObjectResult$, 16], [0, { [_hH]: _xae }], [0, { [_hH]: _xacsvi }], [0, { [_hH]: _xavi }], [0, { [_hH]: _xasse }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarc }]]\n];\nexport var CopyObjectRequest$ = [3, n0, _CORo,\n    0,\n    [_B, _CS, _K, _ACL_, _CC, _CA, _CDo, _CEo, _CL, _CTo, _CSIM, _CSIMS, _CSINM, _CSIUS, _Ex, _GFC, _GR, _GRACP, _GWACP, _IM, _INM, _M, _MD, _TD, _SSE, _SC, _WRL, _SSECA, _SSECK, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _CSSSECA, _CSSSECK, _CSSSECKMD, _RP, _Tag, _OLM, _OLRUD, _OLLHS, _EBO, _ESBO],\n    [[0, 1], [0, { [_hH]: _xacs__ }], [0, 1], [0, { [_hH]: _xaa }], [0, { [_hH]: _CC_ }], [0, { [_hH]: _xaca }], [0, { [_hH]: _CD_ }], [0, { [_hH]: _CE_ }], [0, { [_hH]: _CL_ }], [0, { [_hH]: _CT_ }], [0, { [_hH]: _xacsim }], [4, { [_hH]: _xacsims }], [0, { [_hH]: _xacsinm }], [4, { [_hH]: _xacsius }], [4, { [_hH]: _Ex }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagwa }], [0, { [_hH]: _IM_ }], [0, { [_hH]: _INM_ }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xamd }], [0, { [_hH]: _xatd }], [0, { [_hH]: _xasse }], [0, { [_hH]: _xasc }], [0, { [_hH]: _xawrl }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xacssseca }], [() => CopySourceSSECustomerKey, { [_hH]: _xacssseck }], [0, { [_hH]: _xacssseckM }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xat }], [0, { [_hH]: _xaolm }], [5, { [_hH]: _xaolrud }], [0, { [_hH]: _xaollh }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasebo }]], 3\n];\nexport var CopyObjectResult$ = [3, n0, _COR,\n    0,\n    [_ETa, _LM, _CT, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh],\n    [0, 4, 0, 0, 0, 0, 0, 0]\n];\nexport var CopyPartResult$ = [3, n0, _CPR,\n    0,\n    [_ETa, _LM, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh],\n    [0, 4, 0, 0, 0, 0, 0]\n];\nexport var CORSConfiguration$ = [3, n0, _CORSC,\n    0,\n    [_CORSR],\n    [[() => CORSRules, { [_xF]: 1, [_xN]: _CORSRu }]], 1\n];\nexport var CORSRule$ = [3, n0, _CORSRu,\n    0,\n    [_AM, _AO, _ID, _AH, _EH, _MAS],\n    [[64 | 0, { [_xF]: 1, [_xN]: _AMl }], [64 | 0, { [_xF]: 1, [_xN]: _AOl }], 0, [64 | 0, { [_xF]: 1, [_xN]: _AHl }], [64 | 0, { [_xF]: 1, [_xN]: _EHx }], 1], 2\n];\nexport var CreateBucketConfiguration$ = [3, n0, _CBC,\n    0,\n    [_LC, _L, _B, _T],\n    [0, () => LocationInfo$, () => BucketInfo$, [() => TagSet, 0]]\n];\nexport var CreateBucketMetadataConfigurationRequest$ = [3, n0, _CBMCR,\n    0,\n    [_B, _MC, _CMD, _CA, _EBO],\n    [[0, 1], [() => MetadataConfiguration$, { [_hP]: 1, [_xN]: _MC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var CreateBucketMetadataTableConfigurationRequest$ = [3, n0, _CBMTCR,\n    0,\n    [_B, _MTC, _CMD, _CA, _EBO],\n    [[0, 1], [() => MetadataTableConfiguration$, { [_hP]: 1, [_xN]: _MTC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var CreateBucketOutput$ = [3, n0, _CBO,\n    0,\n    [_L, _BA],\n    [[0, { [_hH]: _L }], [0, { [_hH]: _xaba }]]\n];\nexport var CreateBucketRequest$ = [3, n0, _CBR,\n    0,\n    [_B, _ACL_, _CBC, _GFC, _GR, _GRACP, _GW, _GWACP, _OLEFB, _OO],\n    [[0, 1], [0, { [_hH]: _xaa }], [() => CreateBucketConfiguration$, { [_hP]: 1, [_xN]: _CBC }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagw }], [0, { [_hH]: _xagwa }], [2, { [_hH]: _xabole }], [0, { [_hH]: _xaoo }]], 1\n];\nexport var CreateMultipartUploadOutput$ = [3, n0, _CMUOr,\n    { [_xN]: _IMUR },\n    [_ADb, _ARI, _B, _K, _UI, _SSE, _SSECA, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _RC, _CA, _CT],\n    [[4, { [_hH]: _xaad }], [0, { [_hH]: _xaari }], [0, { [_xN]: _B }], 0, 0, [0, { [_hH]: _xasse }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarc }], [0, { [_hH]: _xaca }], [0, { [_hH]: _xact }]]\n];\nexport var CreateMultipartUploadRequest$ = [3, n0, _CMURr,\n    0,\n    [_B, _K, _ACL_, _CC, _CDo, _CEo, _CL, _CTo, _Ex, _GFC, _GR, _GRACP, _GWACP, _M, _SSE, _SC, _WRL, _SSECA, _SSECK, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _RP, _Tag, _OLM, _OLRUD, _OLLHS, _EBO, _CA, _CT],\n    [[0, 1], [0, 1], [0, { [_hH]: _xaa }], [0, { [_hH]: _CC_ }], [0, { [_hH]: _CD_ }], [0, { [_hH]: _CE_ }], [0, { [_hH]: _CL_ }], [0, { [_hH]: _CT_ }], [4, { [_hH]: _Ex }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagwa }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xasse }], [0, { [_hH]: _xasc }], [0, { [_hH]: _xawrl }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xat }], [0, { [_hH]: _xaolm }], [5, { [_hH]: _xaolrud }], [0, { [_hH]: _xaollh }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xaca }], [0, { [_hH]: _xact }]], 2\n];\nexport var CreateSessionOutput$ = [3, n0, _CSO,\n    { [_xN]: _CSR },\n    [_Cr, _SSE, _SSEKMSKI, _SSEKMSEC, _BKE],\n    [[() => SessionCredentials$, { [_xN]: _Cr }], [0, { [_hH]: _xasse }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }]], 1\n];\nexport var CreateSessionRequest$ = [3, n0, _CSRr,\n    0,\n    [_B, _SM, _SSE, _SSEKMSKI, _SSEKMSEC, _BKE],\n    [[0, 1], [0, { [_hH]: _xacsm }], [0, { [_hH]: _xasse }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }]], 1\n];\nexport var CSVInput$ = [3, n0, _CSVIn,\n    0,\n    [_FHI, _Com, _QEC, _RD, _FD, _QC, _AQRD],\n    [0, 0, 0, 0, 0, 0, 2]\n];\nexport var CSVOutput$ = [3, n0, _CSVO,\n    0,\n    [_QF, _QEC, _RD, _FD, _QC],\n    [0, 0, 0, 0, 0]\n];\nexport var DefaultRetention$ = [3, n0, _DRe,\n    0,\n    [_Mo, _D, _Y],\n    [0, 1, 1]\n];\nexport var Delete$ = [3, n0, _De,\n    0,\n    [_Ob, _Q],\n    [[() => ObjectIdentifierList, { [_xF]: 1, [_xN]: _Obj }], 2], 1\n];\nexport var DeleteBucketAnalyticsConfigurationRequest$ = [3, n0, _DBACR,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var DeleteBucketCorsRequest$ = [3, n0, _DBCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketEncryptionRequest$ = [3, n0, _DBER,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketIntelligentTieringConfigurationRequest$ = [3, n0, _DBITCR,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var DeleteBucketInventoryConfigurationRequest$ = [3, n0, _DBICR,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var DeleteBucketLifecycleRequest$ = [3, n0, _DBLR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketMetadataConfigurationRequest$ = [3, n0, _DBMCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketMetadataTableConfigurationRequest$ = [3, n0, _DBMTCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketMetricsConfigurationRequest$ = [3, n0, _DBMCRe,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var DeleteBucketOwnershipControlsRequest$ = [3, n0, _DBOCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketPolicyRequest$ = [3, n0, _DBPR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketReplicationRequest$ = [3, n0, _DBRR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketRequest$ = [3, n0, _DBR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketTaggingRequest$ = [3, n0, _DBTR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeleteBucketWebsiteRequest$ = [3, n0, _DBWR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var DeletedObject$ = [3, n0, _DO,\n    0,\n    [_K, _VI, _DM, _DMVI],\n    [0, 0, 2, 0]\n];\nexport var DeleteMarkerEntry$ = [3, n0, _DME,\n    0,\n    [_O, _K, _VI, _IL, _LM],\n    [() => Owner$, 0, 0, 2, 4]\n];\nexport var DeleteMarkerReplication$ = [3, n0, _DMR,\n    0,\n    [_S],\n    [0]\n];\nexport var DeleteObjectOutput$ = [3, n0, _DOO,\n    0,\n    [_DM, _VI, _RC],\n    [[2, { [_hH]: _xadm }], [0, { [_hH]: _xavi }], [0, { [_hH]: _xarc }]]\n];\nexport var DeleteObjectRequest$ = [3, n0, _DOR,\n    0,\n    [_B, _K, _MFA, _VI, _RP, _BGR, _EBO, _IM, _IMLMT, _IMS],\n    [[0, 1], [0, 1], [0, { [_hH]: _xam_ }], [0, { [_hQ]: _vI }], [0, { [_hH]: _xarp }], [2, { [_hH]: _xabgr }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _IM_ }], [6, { [_hH]: _xaimlmt }], [1, { [_hH]: _xaims }]], 2\n];\nexport var DeleteObjectsOutput$ = [3, n0, _DOOe,\n    { [_xN]: _DRel },\n    [_Del, _RC, _Er],\n    [[() => DeletedObjects, { [_xF]: 1 }], [0, { [_hH]: _xarc }], [() => Errors, { [_xF]: 1, [_xN]: _Err }]]\n];\nexport var DeleteObjectsRequest$ = [3, n0, _DORe,\n    0,\n    [_B, _De, _MFA, _RP, _BGR, _EBO, _CA],\n    [[0, 1], [() => Delete$, { [_hP]: 1, [_xN]: _De }], [0, { [_hH]: _xam_ }], [0, { [_hH]: _xarp }], [2, { [_hH]: _xabgr }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasca }]], 2\n];\nexport var DeleteObjectTaggingOutput$ = [3, n0, _DOTO,\n    0,\n    [_VI],\n    [[0, { [_hH]: _xavi }]]\n];\nexport var DeleteObjectTaggingRequest$ = [3, n0, _DOTR,\n    0,\n    [_B, _K, _VI, _EBO],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var DeletePublicAccessBlockRequest$ = [3, n0, _DPABR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var Destination$ = [3, n0, _Des,\n    0,\n    [_B, _A, _SC, _ACT, _EC, _RT, _Me],\n    [0, 0, 0, () => AccessControlTranslation$, () => EncryptionConfiguration$, () => ReplicationTime$, () => Metrics$], 1\n];\nexport var DestinationResult$ = [3, n0, _DRes,\n    0,\n    [_TBT, _TBA, _TN],\n    [0, 0, 0]\n];\nexport var Encryption$ = [3, n0, _En,\n    0,\n    [_ET, _KMSKI, _KMSC],\n    [0, [() => SSEKMSKeyId, 0], 0], 1\n];\nexport var EncryptionConfiguration$ = [3, n0, _EC,\n    0,\n    [_RKKID],\n    [0]\n];\nexport var EncryptionTypeMismatch$ = [-3, n0, _ETM,\n    { [_e]: _c, [_hE]: 400 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(EncryptionTypeMismatch$, EncryptionTypeMismatch);\nexport var EndEvent$ = [3, n0, _EE,\n    0,\n    [],\n    []\n];\nexport var _Error$ = [3, n0, _Err,\n    0,\n    [_K, _VI, _Cod, _Mes],\n    [0, 0, 0, 0]\n];\nexport var ErrorDetails$ = [3, n0, _ED,\n    0,\n    [_ECr, _EM],\n    [0, 0]\n];\nexport var ErrorDocument$ = [3, n0, _EDr,\n    0,\n    [_K],\n    [0], 1\n];\nexport var EventBridgeConfiguration$ = [3, n0, _EBC,\n    0,\n    [],\n    []\n];\nexport var ExistingObjectReplication$ = [3, n0, _EOR,\n    0,\n    [_S],\n    [0], 1\n];\nexport var FilterRule$ = [3, n0, _FR,\n    0,\n    [_N, _V],\n    [0, 0]\n];\nexport var GetBucketAbacOutput$ = [3, n0, _GBAO,\n    0,\n    [_AS],\n    [[() => AbacStatus$, 16]]\n];\nexport var GetBucketAbacRequest$ = [3, n0, _GBAR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketAccelerateConfigurationOutput$ = [3, n0, _GBACO,\n    { [_xN]: _AC },\n    [_S, _RC],\n    [0, [0, { [_hH]: _xarc }]]\n];\nexport var GetBucketAccelerateConfigurationRequest$ = [3, n0, _GBACR,\n    0,\n    [_B, _EBO, _RP],\n    [[0, 1], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xarp }]], 1\n];\nexport var GetBucketAclOutput$ = [3, n0, _GBAOe,\n    { [_xN]: _ACP },\n    [_O, _G],\n    [() => Owner$, [() => Grants, { [_xN]: _ACL }]]\n];\nexport var GetBucketAclRequest$ = [3, n0, _GBARe,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketAnalyticsConfigurationOutput$ = [3, n0, _GBACOe,\n    0,\n    [_ACn],\n    [[() => AnalyticsConfiguration$, 16]]\n];\nexport var GetBucketAnalyticsConfigurationRequest$ = [3, n0, _GBACRe,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetBucketCorsOutput$ = [3, n0, _GBCO,\n    { [_xN]: _CORSC },\n    [_CORSR],\n    [[() => CORSRules, { [_xF]: 1, [_xN]: _CORSRu }]]\n];\nexport var GetBucketCorsRequest$ = [3, n0, _GBCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketEncryptionOutput$ = [3, n0, _GBEO,\n    0,\n    [_SSEC],\n    [[() => ServerSideEncryptionConfiguration$, 16]]\n];\nexport var GetBucketEncryptionRequest$ = [3, n0, _GBER,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketIntelligentTieringConfigurationOutput$ = [3, n0, _GBITCO,\n    0,\n    [_ITC],\n    [[() => IntelligentTieringConfiguration$, 16]]\n];\nexport var GetBucketIntelligentTieringConfigurationRequest$ = [3, n0, _GBITCR,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetBucketInventoryConfigurationOutput$ = [3, n0, _GBICO,\n    0,\n    [_IC],\n    [[() => InventoryConfiguration$, 16]]\n];\nexport var GetBucketInventoryConfigurationRequest$ = [3, n0, _GBICR,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetBucketLifecycleConfigurationOutput$ = [3, n0, _GBLCO,\n    { [_xN]: _LCi },\n    [_R, _TDMOS],\n    [[() => LifecycleRules, { [_xF]: 1, [_xN]: _Ru }], [0, { [_hH]: _xatdmos }]]\n];\nexport var GetBucketLifecycleConfigurationRequest$ = [3, n0, _GBLCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketLocationOutput$ = [3, n0, _GBLO,\n    { [_xN]: _LC },\n    [_LC],\n    [0]\n];\nexport var GetBucketLocationRequest$ = [3, n0, _GBLR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketLoggingOutput$ = [3, n0, _GBLOe,\n    { [_xN]: _BLS },\n    [_LE],\n    [[() => LoggingEnabled$, 0]]\n];\nexport var GetBucketLoggingRequest$ = [3, n0, _GBLRe,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketMetadataConfigurationOutput$ = [3, n0, _GBMCO,\n    0,\n    [_GBMCR],\n    [[() => GetBucketMetadataConfigurationResult$, 16]]\n];\nexport var GetBucketMetadataConfigurationRequest$ = [3, n0, _GBMCRe,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketMetadataConfigurationResult$ = [3, n0, _GBMCR,\n    0,\n    [_MCR],\n    [() => MetadataConfigurationResult$], 1\n];\nexport var GetBucketMetadataTableConfigurationOutput$ = [3, n0, _GBMTCO,\n    0,\n    [_GBMTCR],\n    [[() => GetBucketMetadataTableConfigurationResult$, 16]]\n];\nexport var GetBucketMetadataTableConfigurationRequest$ = [3, n0, _GBMTCRe,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketMetadataTableConfigurationResult$ = [3, n0, _GBMTCR,\n    0,\n    [_MTCR, _S, _Err],\n    [() => MetadataTableConfigurationResult$, 0, () => ErrorDetails$], 2\n];\nexport var GetBucketMetricsConfigurationOutput$ = [3, n0, _GBMCOe,\n    0,\n    [_MCe],\n    [[() => MetricsConfiguration$, 16]]\n];\nexport var GetBucketMetricsConfigurationRequest$ = [3, n0, _GBMCRet,\n    0,\n    [_B, _I, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetBucketNotificationConfigurationRequest$ = [3, n0, _GBNCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketOwnershipControlsOutput$ = [3, n0, _GBOCO,\n    0,\n    [_OC],\n    [[() => OwnershipControls$, 16]]\n];\nexport var GetBucketOwnershipControlsRequest$ = [3, n0, _GBOCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketPolicyOutput$ = [3, n0, _GBPO,\n    0,\n    [_Po],\n    [[0, 16]]\n];\nexport var GetBucketPolicyRequest$ = [3, n0, _GBPR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketPolicyStatusOutput$ = [3, n0, _GBPSO,\n    0,\n    [_PS],\n    [[() => PolicyStatus$, 16]]\n];\nexport var GetBucketPolicyStatusRequest$ = [3, n0, _GBPSR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketReplicationOutput$ = [3, n0, _GBRO,\n    0,\n    [_RCe],\n    [[() => ReplicationConfiguration$, 16]]\n];\nexport var GetBucketReplicationRequest$ = [3, n0, _GBRR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketRequestPaymentOutput$ = [3, n0, _GBRPO,\n    { [_xN]: _RPC },\n    [_Pay],\n    [0]\n];\nexport var GetBucketRequestPaymentRequest$ = [3, n0, _GBRPR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketTaggingOutput$ = [3, n0, _GBTO,\n    { [_xN]: _Tag },\n    [_TS],\n    [[() => TagSet, 0]], 1\n];\nexport var GetBucketTaggingRequest$ = [3, n0, _GBTR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketVersioningOutput$ = [3, n0, _GBVO,\n    { [_xN]: _VC },\n    [_S, _MFAD],\n    [0, [0, { [_xN]: _MDf }]]\n];\nexport var GetBucketVersioningRequest$ = [3, n0, _GBVR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetBucketWebsiteOutput$ = [3, n0, _GBWO,\n    { [_xN]: _WC },\n    [_RART, _IDn, _EDr, _RR],\n    [() => RedirectAllRequestsTo$, () => IndexDocument$, () => ErrorDocument$, [() => RoutingRules, 0]]\n];\nexport var GetBucketWebsiteRequest$ = [3, n0, _GBWR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetObjectAclOutput$ = [3, n0, _GOAO,\n    { [_xN]: _ACP },\n    [_O, _G, _RC],\n    [() => Owner$, [() => Grants, { [_xN]: _ACL }], [0, { [_hH]: _xarc }]]\n];\nexport var GetObjectAclRequest$ = [3, n0, _GOAR,\n    0,\n    [_B, _K, _VI, _RP, _EBO],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetObjectAttributesOutput$ = [3, n0, _GOAOe,\n    { [_xN]: _GOARe },\n    [_DM, _LM, _VI, _RC, _ETa, _C, _OP, _SC, _OS],\n    [[2, { [_hH]: _xadm }], [4, { [_hH]: _LM_ }], [0, { [_hH]: _xavi }], [0, { [_hH]: _xarc }], 0, () => Checksum$, [() => GetObjectAttributesParts$, 0], 0, 1]\n];\nexport var GetObjectAttributesParts$ = [3, n0, _GOAP,\n    0,\n    [_TPC, _PNM, _NPNM, _MP, _IT, _Pa],\n    [[1, { [_xN]: _PC }], 0, 0, 1, 2, [() => PartsList, { [_xF]: 1, [_xN]: _Par }]]\n];\nexport var GetObjectAttributesRequest$ = [3, n0, _GOARet,\n    0,\n    [_B, _K, _OA, _VI, _MP, _PNM, _SSECA, _SSECK, _SSECKMD, _RP, _EBO],\n    [[0, 1], [0, 1], [64 | 0, { [_hH]: _xaoa }], [0, { [_hQ]: _vI }], [1, { [_hH]: _xamp }], [0, { [_hH]: _xapnm }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 3\n];\nexport var GetObjectLegalHoldOutput$ = [3, n0, _GOLHO,\n    0,\n    [_LH],\n    [[() => ObjectLockLegalHold$, { [_hP]: 1, [_xN]: _LH }]]\n];\nexport var GetObjectLegalHoldRequest$ = [3, n0, _GOLHR,\n    0,\n    [_B, _K, _VI, _RP, _EBO],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetObjectLockConfigurationOutput$ = [3, n0, _GOLCO,\n    0,\n    [_OLC],\n    [[() => ObjectLockConfiguration$, 16]]\n];\nexport var GetObjectLockConfigurationRequest$ = [3, n0, _GOLCR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GetObjectOutput$ = [3, n0, _GOO,\n    0,\n    [_Bo, _DM, _AR, _E, _Re, _LM, _CLo, _ETa, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT, _MM, _VI, _CC, _CDo, _CEo, _CL, _CR, _CTo, _Ex, _ES, _WRL, _SSE, _M, _SSECA, _SSECKMD, _SSEKMSKI, _BKE, _SC, _RC, _RS, _PC, _TC, _OLM, _OLRUD, _OLLHS],\n    [[() => StreamingBlob, 16], [2, { [_hH]: _xadm }], [0, { [_hH]: _ar }], [0, { [_hH]: _xae }], [0, { [_hH]: _xar }], [4, { [_hH]: _LM_ }], [1, { [_hH]: _CL__ }], [0, { [_hH]: _ETa }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xact }], [1, { [_hH]: _xamm }], [0, { [_hH]: _xavi }], [0, { [_hH]: _CC_ }], [0, { [_hH]: _CD_ }], [0, { [_hH]: _CE_ }], [0, { [_hH]: _CL_ }], [0, { [_hH]: _CR_ }], [0, { [_hH]: _CT_ }], [4, { [_hH]: _Ex }], [0, { [_hH]: _ES }], [0, { [_hH]: _xawrl }], [0, { [_hH]: _xasse }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xasc }], [0, { [_hH]: _xarc }], [0, { [_hH]: _xars }], [1, { [_hH]: _xampc }], [1, { [_hH]: _xatc }], [0, { [_hH]: _xaolm }], [5, { [_hH]: _xaolrud }], [0, { [_hH]: _xaollh }]]\n];\nexport var GetObjectRequest$ = [3, n0, _GOR,\n    0,\n    [_B, _K, _IM, _IMSf, _INM, _IUS, _Ra, _RCC, _RCD, _RCE, _RCL, _RCT, _RE, _VI, _SSECA, _SSECK, _SSECKMD, _RP, _PN, _EBO, _CMh],\n    [[0, 1], [0, 1], [0, { [_hH]: _IM_ }], [4, { [_hH]: _IMS_ }], [0, { [_hH]: _INM_ }], [4, { [_hH]: _IUS_ }], [0, { [_hH]: _Ra }], [0, { [_hQ]: _rcc }], [0, { [_hQ]: _rcd }], [0, { [_hQ]: _rce }], [0, { [_hQ]: _rcl }], [0, { [_hQ]: _rct }], [6, { [_hQ]: _re }], [0, { [_hQ]: _vI }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [0, { [_hH]: _xarp }], [1, { [_hQ]: _pN }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xacm }]], 2\n];\nexport var GetObjectRetentionOutput$ = [3, n0, _GORO,\n    0,\n    [_Ret],\n    [[() => ObjectLockRetention$, { [_hP]: 1, [_xN]: _Ret }]]\n];\nexport var GetObjectRetentionRequest$ = [3, n0, _GORR,\n    0,\n    [_B, _K, _VI, _RP, _EBO],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetObjectTaggingOutput$ = [3, n0, _GOTO,\n    { [_xN]: _Tag },\n    [_TS, _VI],\n    [[() => TagSet, 0], [0, { [_hH]: _xavi }]], 1\n];\nexport var GetObjectTaggingRequest$ = [3, n0, _GOTR,\n    0,\n    [_B, _K, _VI, _EBO, _RP],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xarp }]], 2\n];\nexport var GetObjectTorrentOutput$ = [3, n0, _GOTOe,\n    0,\n    [_Bo, _RC],\n    [[() => StreamingBlob, 16], [0, { [_hH]: _xarc }]]\n];\nexport var GetObjectTorrentRequest$ = [3, n0, _GOTRe,\n    0,\n    [_B, _K, _RP, _EBO],\n    [[0, 1], [0, 1], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var GetPublicAccessBlockOutput$ = [3, n0, _GPABO,\n    0,\n    [_PABC],\n    [[() => PublicAccessBlockConfiguration$, 16]]\n];\nexport var GetPublicAccessBlockRequest$ = [3, n0, _GPABR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var GlacierJobParameters$ = [3, n0, _GJP,\n    0,\n    [_Ti],\n    [0], 1\n];\nexport var Grant$ = [3, n0, _Gr,\n    0,\n    [_Gra, _Pe],\n    [[() => Grantee$, { [_xNm]: [_x, _hi] }], 0]\n];\nexport var Grantee$ = [3, n0, _Gra,\n    0,\n    [_Ty, _DN, _EA, _ID, _URI],\n    [[0, { [_xA]: 1, [_xN]: _xs }], 0, 0, 0, 0], 1\n];\nexport var HeadBucketOutput$ = [3, n0, _HBO,\n    0,\n    [_BA, _BLT, _BLN, _BR, _APA],\n    [[0, { [_hH]: _xaba }], [0, { [_hH]: _xablt }], [0, { [_hH]: _xabln }], [0, { [_hH]: _xabr }], [2, { [_hH]: _xaapa }]]\n];\nexport var HeadBucketRequest$ = [3, n0, _HBR,\n    0,\n    [_B, _EBO],\n    [[0, 1], [0, { [_hH]: _xaebo }]], 1\n];\nexport var HeadObjectOutput$ = [3, n0, _HOO,\n    0,\n    [_DM, _AR, _E, _Re, _ASr, _LM, _CLo, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT, _ETa, _MM, _VI, _CC, _CDo, _CEo, _CL, _CTo, _CR, _Ex, _ES, _WRL, _SSE, _M, _SSECA, _SSECKMD, _SSEKMSKI, _BKE, _SC, _RC, _RS, _PC, _TC, _OLM, _OLRUD, _OLLHS],\n    [[2, { [_hH]: _xadm }], [0, { [_hH]: _ar }], [0, { [_hH]: _xae }], [0, { [_hH]: _xar }], [0, { [_hH]: _xaas }], [4, { [_hH]: _LM_ }], [1, { [_hH]: _CL__ }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xact }], [0, { [_hH]: _ETa }], [1, { [_hH]: _xamm }], [0, { [_hH]: _xavi }], [0, { [_hH]: _CC_ }], [0, { [_hH]: _CD_ }], [0, { [_hH]: _CE_ }], [0, { [_hH]: _CL_ }], [0, { [_hH]: _CT_ }], [0, { [_hH]: _CR_ }], [4, { [_hH]: _Ex }], [0, { [_hH]: _ES }], [0, { [_hH]: _xawrl }], [0, { [_hH]: _xasse }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xasc }], [0, { [_hH]: _xarc }], [0, { [_hH]: _xars }], [1, { [_hH]: _xampc }], [1, { [_hH]: _xatc }], [0, { [_hH]: _xaolm }], [5, { [_hH]: _xaolrud }], [0, { [_hH]: _xaollh }]]\n];\nexport var HeadObjectRequest$ = [3, n0, _HOR,\n    0,\n    [_B, _K, _IM, _IMSf, _INM, _IUS, _Ra, _RCC, _RCD, _RCE, _RCL, _RCT, _RE, _VI, _SSECA, _SSECK, _SSECKMD, _RP, _PN, _EBO, _CMh],\n    [[0, 1], [0, 1], [0, { [_hH]: _IM_ }], [4, { [_hH]: _IMS_ }], [0, { [_hH]: _INM_ }], [4, { [_hH]: _IUS_ }], [0, { [_hH]: _Ra }], [0, { [_hQ]: _rcc }], [0, { [_hQ]: _rcd }], [0, { [_hQ]: _rce }], [0, { [_hQ]: _rcl }], [0, { [_hQ]: _rct }], [6, { [_hQ]: _re }], [0, { [_hQ]: _vI }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [0, { [_hH]: _xarp }], [1, { [_hQ]: _pN }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xacm }]], 2\n];\nexport var IdempotencyParameterMismatch$ = [-3, n0, _IPM,\n    { [_e]: _c, [_hE]: 400 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(IdempotencyParameterMismatch$, IdempotencyParameterMismatch);\nexport var IndexDocument$ = [3, n0, _IDn,\n    0,\n    [_Su],\n    [0], 1\n];\nexport var Initiator$ = [3, n0, _In,\n    0,\n    [_ID, _DN],\n    [0, 0]\n];\nexport var InputSerialization$ = [3, n0, _IS,\n    0,\n    [_CSV, _CTom, _JSON, _Parq],\n    [() => CSVInput$, 0, () => JSONInput$, () => ParquetInput$]\n];\nexport var IntelligentTieringAndOperator$ = [3, n0, _ITAO,\n    0,\n    [_P, _T],\n    [0, [() => TagSet, { [_xF]: 1, [_xN]: _Ta }]]\n];\nexport var IntelligentTieringConfiguration$ = [3, n0, _ITC,\n    0,\n    [_I, _S, _Tie, _F],\n    [0, 0, [() => TieringList, { [_xF]: 1, [_xN]: _Tier }], [() => IntelligentTieringFilter$, 0]], 3\n];\nexport var IntelligentTieringFilter$ = [3, n0, _ITF,\n    0,\n    [_P, _Ta, _An],\n    [0, () => Tag$, [() => IntelligentTieringAndOperator$, 0]]\n];\nexport var InvalidObjectState$ = [-3, n0, _IOS,\n    { [_e]: _c, [_hE]: 403 },\n    [_SC, _AT],\n    [0, 0]\n];\nTypeRegistry.for(n0).registerError(InvalidObjectState$, InvalidObjectState);\nexport var InvalidRequest$ = [-3, n0, _IR,\n    { [_e]: _c, [_hE]: 400 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(InvalidRequest$, InvalidRequest);\nexport var InvalidWriteOffset$ = [-3, n0, _IWO,\n    { [_e]: _c, [_hE]: 400 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(InvalidWriteOffset$, InvalidWriteOffset);\nexport var InventoryConfiguration$ = [3, n0, _IC,\n    0,\n    [_Des, _IE, _I, _IOV, _Sc, _F, _OF],\n    [[() => InventoryDestination$, 0], 2, 0, 0, () => InventorySchedule$, () => InventoryFilter$, [() => InventoryOptionalFields, 0]], 5\n];\nexport var InventoryDestination$ = [3, n0, _IDnv,\n    0,\n    [_SBD],\n    [[() => InventoryS3BucketDestination$, 0]], 1\n];\nexport var InventoryEncryption$ = [3, n0, _IEn,\n    0,\n    [_SSES, _SSEKMS],\n    [[() => SSES3$, { [_xN]: _SS }], [() => SSEKMS$, { [_xN]: _SK }]]\n];\nexport var InventoryFilter$ = [3, n0, _IF,\n    0,\n    [_P],\n    [0], 1\n];\nexport var InventoryS3BucketDestination$ = [3, n0, _ISBD,\n    0,\n    [_B, _Fo, _AI, _P, _En],\n    [0, 0, 0, 0, [() => InventoryEncryption$, 0]], 2\n];\nexport var InventorySchedule$ = [3, n0, _ISn,\n    0,\n    [_Fr],\n    [0], 1\n];\nexport var InventoryTableConfiguration$ = [3, n0, _ITCn,\n    0,\n    [_CSo, _EC],\n    [0, () => MetadataTableEncryptionConfiguration$], 1\n];\nexport var InventoryTableConfigurationResult$ = [3, n0, _ITCR,\n    0,\n    [_CSo, _TSa, _Err, _TNa, _TA],\n    [0, 0, () => ErrorDetails$, 0, 0], 1\n];\nexport var InventoryTableConfigurationUpdates$ = [3, n0, _ITCU,\n    0,\n    [_CSo, _EC],\n    [0, () => MetadataTableEncryptionConfiguration$], 1\n];\nexport var JournalTableConfiguration$ = [3, n0, _JTC,\n    0,\n    [_REe, _EC],\n    [() => RecordExpiration$, () => MetadataTableEncryptionConfiguration$], 1\n];\nexport var JournalTableConfigurationResult$ = [3, n0, _JTCR,\n    0,\n    [_TSa, _TNa, _REe, _Err, _TA],\n    [0, 0, () => RecordExpiration$, () => ErrorDetails$, 0], 3\n];\nexport var JournalTableConfigurationUpdates$ = [3, n0, _JTCU,\n    0,\n    [_REe],\n    [() => RecordExpiration$], 1\n];\nexport var JSONInput$ = [3, n0, _JSONI,\n    0,\n    [_Ty],\n    [0]\n];\nexport var JSONOutput$ = [3, n0, _JSONO,\n    0,\n    [_RD],\n    [0]\n];\nexport var LambdaFunctionConfiguration$ = [3, n0, _LFC,\n    0,\n    [_LFA, _Ev, _I, _F],\n    [[0, { [_xN]: _CF }], [64 | 0, { [_xF]: 1, [_xN]: _Eve }], 0, [() => NotificationConfigurationFilter$, 0]], 2\n];\nexport var LifecycleExpiration$ = [3, n0, _LEi,\n    0,\n    [_Da, _D, _EODM],\n    [5, 1, 2]\n];\nexport var LifecycleRule$ = [3, n0, _LR,\n    0,\n    [_S, _E, _ID, _P, _F, _Tr, _NVT, _NVE, _AIMU],\n    [0, () => LifecycleExpiration$, 0, 0, [() => LifecycleRuleFilter$, 0], [() => TransitionList, { [_xF]: 1, [_xN]: _Tra }], [() => NoncurrentVersionTransitionList, { [_xF]: 1, [_xN]: _NVTo }], () => NoncurrentVersionExpiration$, () => AbortIncompleteMultipartUpload$], 1\n];\nexport var LifecycleRuleAndOperator$ = [3, n0, _LRAO,\n    0,\n    [_P, _T, _OSGT, _OSLT],\n    [0, [() => TagSet, { [_xF]: 1, [_xN]: _Ta }], 1, 1]\n];\nexport var LifecycleRuleFilter$ = [3, n0, _LRF,\n    0,\n    [_P, _Ta, _OSGT, _OSLT, _An],\n    [0, () => Tag$, 1, 1, [() => LifecycleRuleAndOperator$, 0]]\n];\nexport var ListBucketAnalyticsConfigurationsOutput$ = [3, n0, _LBACO,\n    { [_xN]: _LBACR },\n    [_IT, _CTon, _NCT, _ACLn],\n    [2, 0, 0, [() => AnalyticsConfigurationList, { [_xF]: 1, [_xN]: _ACn }]]\n];\nexport var ListBucketAnalyticsConfigurationsRequest$ = [3, n0, _LBACRi,\n    0,\n    [_B, _CTon, _EBO],\n    [[0, 1], [0, { [_hQ]: _ct }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var ListBucketIntelligentTieringConfigurationsOutput$ = [3, n0, _LBITCO,\n    0,\n    [_IT, _CTon, _NCT, _ITCL],\n    [2, 0, 0, [() => IntelligentTieringConfigurationList, { [_xF]: 1, [_xN]: _ITC }]]\n];\nexport var ListBucketIntelligentTieringConfigurationsRequest$ = [3, n0, _LBITCR,\n    0,\n    [_B, _CTon, _EBO],\n    [[0, 1], [0, { [_hQ]: _ct }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var ListBucketInventoryConfigurationsOutput$ = [3, n0, _LBICO,\n    { [_xN]: _LICR },\n    [_CTon, _ICL, _IT, _NCT],\n    [0, [() => InventoryConfigurationList, { [_xF]: 1, [_xN]: _IC }], 2, 0]\n];\nexport var ListBucketInventoryConfigurationsRequest$ = [3, n0, _LBICR,\n    0,\n    [_B, _CTon, _EBO],\n    [[0, 1], [0, { [_hQ]: _ct }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var ListBucketMetricsConfigurationsOutput$ = [3, n0, _LBMCO,\n    { [_xN]: _LMCR },\n    [_IT, _CTon, _NCT, _MCL],\n    [2, 0, 0, [() => MetricsConfigurationList, { [_xF]: 1, [_xN]: _MCe }]]\n];\nexport var ListBucketMetricsConfigurationsRequest$ = [3, n0, _LBMCR,\n    0,\n    [_B, _CTon, _EBO],\n    [[0, 1], [0, { [_hQ]: _ct }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var ListBucketsOutput$ = [3, n0, _LBO,\n    { [_xN]: _LAMBR },\n    [_Bu, _O, _CTon, _P],\n    [[() => Buckets, 0], () => Owner$, 0, 0]\n];\nexport var ListBucketsRequest$ = [3, n0, _LBR,\n    0,\n    [_MB, _CTon, _P, _BR],\n    [[1, { [_hQ]: _mb }], [0, { [_hQ]: _ct }], [0, { [_hQ]: _p }], [0, { [_hQ]: _br }]]\n];\nexport var ListDirectoryBucketsOutput$ = [3, n0, _LDBO,\n    { [_xN]: _LAMDBR },\n    [_Bu, _CTon],\n    [[() => Buckets, 0], 0]\n];\nexport var ListDirectoryBucketsRequest$ = [3, n0, _LDBR,\n    0,\n    [_CTon, _MDB],\n    [[0, { [_hQ]: _ct }], [1, { [_hQ]: _mdb }]]\n];\nexport var ListMultipartUploadsOutput$ = [3, n0, _LMUO,\n    { [_xN]: _LMUR },\n    [_B, _KM, _UIM, _NKM, _P, _Deli, _NUIM, _MUa, _IT, _U, _CPom, _ETn, _RC],\n    [0, 0, 0, 0, 0, 0, 0, 1, 2, [() => MultipartUploadList, { [_xF]: 1, [_xN]: _Up }], [() => CommonPrefixList, { [_xF]: 1 }], 0, [0, { [_hH]: _xarc }]]\n];\nexport var ListMultipartUploadsRequest$ = [3, n0, _LMURi,\n    0,\n    [_B, _Deli, _ETn, _KM, _MUa, _P, _UIM, _EBO, _RP],\n    [[0, 1], [0, { [_hQ]: _d }], [0, { [_hQ]: _et }], [0, { [_hQ]: _km }], [1, { [_hQ]: _mu }], [0, { [_hQ]: _p }], [0, { [_hQ]: _uim }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xarp }]], 1\n];\nexport var ListObjectsOutput$ = [3, n0, _LOO,\n    { [_xN]: _LBRi },\n    [_IT, _Ma, _NM, _Con, _N, _P, _Deli, _MK, _CPom, _ETn, _RC],\n    [2, 0, 0, [() => ObjectList, { [_xF]: 1 }], 0, 0, 0, 1, [() => CommonPrefixList, { [_xF]: 1 }], 0, [0, { [_hH]: _xarc }]]\n];\nexport var ListObjectsRequest$ = [3, n0, _LOR,\n    0,\n    [_B, _Deli, _ETn, _Ma, _MK, _P, _RP, _EBO, _OOA],\n    [[0, 1], [0, { [_hQ]: _d }], [0, { [_hQ]: _et }], [0, { [_hQ]: _m }], [1, { [_hQ]: _mk }], [0, { [_hQ]: _p }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [64 | 0, { [_hH]: _xaooa }]], 1\n];\nexport var ListObjectsV2Output$ = [3, n0, _LOVO,\n    { [_xN]: _LBRi },\n    [_IT, _Con, _N, _P, _Deli, _MK, _CPom, _ETn, _KC, _CTon, _NCT, _SA, _RC],\n    [2, [() => ObjectList, { [_xF]: 1 }], 0, 0, 0, 1, [() => CommonPrefixList, { [_xF]: 1 }], 0, 1, 0, 0, 0, [0, { [_hH]: _xarc }]]\n];\nexport var ListObjectsV2Request$ = [3, n0, _LOVR,\n    0,\n    [_B, _Deli, _ETn, _MK, _P, _CTon, _FO, _SA, _RP, _EBO, _OOA],\n    [[0, 1], [0, { [_hQ]: _d }], [0, { [_hQ]: _et }], [1, { [_hQ]: _mk }], [0, { [_hQ]: _p }], [0, { [_hQ]: _ct }], [2, { [_hQ]: _fo }], [0, { [_hQ]: _sa }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [64 | 0, { [_hH]: _xaooa }]], 1\n];\nexport var ListObjectVersionsOutput$ = [3, n0, _LOVOi,\n    { [_xN]: _LVR },\n    [_IT, _KM, _VIM, _NKM, _NVIM, _Ve, _DMe, _N, _P, _Deli, _MK, _CPom, _ETn, _RC],\n    [2, 0, 0, 0, 0, [() => ObjectVersionList, { [_xF]: 1, [_xN]: _Ver }], [() => DeleteMarkers, { [_xF]: 1, [_xN]: _DM }], 0, 0, 0, 1, [() => CommonPrefixList, { [_xF]: 1 }], 0, [0, { [_hH]: _xarc }]]\n];\nexport var ListObjectVersionsRequest$ = [3, n0, _LOVRi,\n    0,\n    [_B, _Deli, _ETn, _KM, _MK, _P, _VIM, _EBO, _RP, _OOA],\n    [[0, 1], [0, { [_hQ]: _d }], [0, { [_hQ]: _et }], [0, { [_hQ]: _km }], [1, { [_hQ]: _mk }], [0, { [_hQ]: _p }], [0, { [_hQ]: _vim }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xarp }], [64 | 0, { [_hH]: _xaooa }]], 1\n];\nexport var ListPartsOutput$ = [3, n0, _LPO,\n    { [_xN]: _LPR },\n    [_ADb, _ARI, _B, _K, _UI, _PNM, _NPNM, _MP, _IT, _Pa, _In, _O, _SC, _RC, _CA, _CT],\n    [[4, { [_hH]: _xaad }], [0, { [_hH]: _xaari }], 0, 0, 0, 0, 0, 1, 2, [() => Parts, { [_xF]: 1, [_xN]: _Par }], () => Initiator$, () => Owner$, 0, [0, { [_hH]: _xarc }], 0, 0]\n];\nexport var ListPartsRequest$ = [3, n0, _LPRi,\n    0,\n    [_B, _K, _UI, _MP, _PNM, _RP, _EBO, _SSECA, _SSECK, _SSECKMD],\n    [[0, 1], [0, 1], [0, { [_hQ]: _uI }], [1, { [_hQ]: _mp }], [0, { [_hQ]: _pnm }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }]], 3\n];\nexport var LocationInfo$ = [3, n0, _LI,\n    0,\n    [_Ty, _N],\n    [0, 0]\n];\nexport var LoggingEnabled$ = [3, n0, _LE,\n    0,\n    [_TB, _TP, _TG, _TOKF],\n    [0, 0, [() => TargetGrants, 0], [() => TargetObjectKeyFormat$, 0]], 2\n];\nexport var MetadataConfiguration$ = [3, n0, _MC,\n    0,\n    [_JTC, _ITCn],\n    [() => JournalTableConfiguration$, () => InventoryTableConfiguration$], 1\n];\nexport var MetadataConfigurationResult$ = [3, n0, _MCR,\n    0,\n    [_DRes, _JTCR, _ITCR],\n    [() => DestinationResult$, () => JournalTableConfigurationResult$, () => InventoryTableConfigurationResult$], 1\n];\nexport var MetadataEntry$ = [3, n0, _ME,\n    0,\n    [_N, _V],\n    [0, 0]\n];\nexport var MetadataTableConfiguration$ = [3, n0, _MTC,\n    0,\n    [_STD],\n    [() => S3TablesDestination$], 1\n];\nexport var MetadataTableConfigurationResult$ = [3, n0, _MTCR,\n    0,\n    [_STDR],\n    [() => S3TablesDestinationResult$], 1\n];\nexport var MetadataTableEncryptionConfiguration$ = [3, n0, _MTEC,\n    0,\n    [_SAs, _KKA],\n    [0, 0], 1\n];\nexport var Metrics$ = [3, n0, _Me,\n    0,\n    [_S, _ETv],\n    [0, () => ReplicationTimeValue$], 1\n];\nexport var MetricsAndOperator$ = [3, n0, _MAO,\n    0,\n    [_P, _T, _APAc],\n    [0, [() => TagSet, { [_xF]: 1, [_xN]: _Ta }], 0]\n];\nexport var MetricsConfiguration$ = [3, n0, _MCe,\n    0,\n    [_I, _F],\n    [0, [() => MetricsFilter$, 0]], 1\n];\nexport var MultipartUpload$ = [3, n0, _MU,\n    0,\n    [_UI, _K, _Ini, _SC, _O, _In, _CA, _CT],\n    [0, 0, 4, 0, () => Owner$, () => Initiator$, 0, 0]\n];\nexport var NoncurrentVersionExpiration$ = [3, n0, _NVE,\n    0,\n    [_ND, _NNV],\n    [1, 1]\n];\nexport var NoncurrentVersionTransition$ = [3, n0, _NVTo,\n    0,\n    [_ND, _SC, _NNV],\n    [1, 0, 1]\n];\nexport var NoSuchBucket$ = [-3, n0, _NSB,\n    { [_e]: _c, [_hE]: 404 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(NoSuchBucket$, NoSuchBucket);\nexport var NoSuchKey$ = [-3, n0, _NSK,\n    { [_e]: _c, [_hE]: 404 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(NoSuchKey$, NoSuchKey);\nexport var NoSuchUpload$ = [-3, n0, _NSU,\n    { [_e]: _c, [_hE]: 404 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(NoSuchUpload$, NoSuchUpload);\nexport var NotFound$ = [-3, n0, _NF,\n    { [_e]: _c },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(NotFound$, NotFound);\nexport var NotificationConfiguration$ = [3, n0, _NC,\n    0,\n    [_TCo, _QCu, _LFCa, _EBC],\n    [[() => TopicConfigurationList, { [_xF]: 1, [_xN]: _TCop }], [() => QueueConfigurationList, { [_xF]: 1, [_xN]: _QCue }], [() => LambdaFunctionConfigurationList, { [_xF]: 1, [_xN]: _CFC }], () => EventBridgeConfiguration$]\n];\nexport var NotificationConfigurationFilter$ = [3, n0, _NCF,\n    0,\n    [_K],\n    [[() => S3KeyFilter$, { [_xN]: _SKe }]]\n];\nexport var _Object$ = [3, n0, _Obj,\n    0,\n    [_K, _LM, _ETa, _CA, _CT, _Si, _SC, _O, _RSe],\n    [0, 4, 0, [64 | 0, { [_xF]: 1 }], 0, 1, 0, () => Owner$, () => RestoreStatus$]\n];\nexport var ObjectAlreadyInActiveTierError$ = [-3, n0, _OAIATE,\n    { [_e]: _c, [_hE]: 403 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(ObjectAlreadyInActiveTierError$, ObjectAlreadyInActiveTierError);\nexport var ObjectIdentifier$ = [3, n0, _OI,\n    0,\n    [_K, _VI, _ETa, _LMT, _Si],\n    [0, 0, 0, 6, 1], 1\n];\nexport var ObjectLockConfiguration$ = [3, n0, _OLC,\n    0,\n    [_OLE, _Ru],\n    [0, () => ObjectLockRule$]\n];\nexport var ObjectLockLegalHold$ = [3, n0, _OLLH,\n    0,\n    [_S],\n    [0]\n];\nexport var ObjectLockRetention$ = [3, n0, _OLR,\n    0,\n    [_Mo, _RUD],\n    [0, 5]\n];\nexport var ObjectLockRule$ = [3, n0, _OLRb,\n    0,\n    [_DRe],\n    [() => DefaultRetention$]\n];\nexport var ObjectNotInActiveTierError$ = [-3, n0, _ONIATE,\n    { [_e]: _c, [_hE]: 403 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(ObjectNotInActiveTierError$, ObjectNotInActiveTierError);\nexport var ObjectPart$ = [3, n0, _OPb,\n    0,\n    [_PN, _Si, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh],\n    [1, 1, 0, 0, 0, 0, 0]\n];\nexport var ObjectVersion$ = [3, n0, _OV,\n    0,\n    [_ETa, _CA, _CT, _Si, _SC, _K, _VI, _IL, _LM, _O, _RSe],\n    [0, [64 | 0, { [_xF]: 1 }], 0, 1, 0, 0, 0, 2, 4, () => Owner$, () => RestoreStatus$]\n];\nexport var OutputLocation$ = [3, n0, _OL,\n    0,\n    [_S_],\n    [[() => S3Location$, 0]]\n];\nexport var OutputSerialization$ = [3, n0, _OSu,\n    0,\n    [_CSV, _JSON],\n    [() => CSVOutput$, () => JSONOutput$]\n];\nexport var Owner$ = [3, n0, _O,\n    0,\n    [_DN, _ID],\n    [0, 0]\n];\nexport var OwnershipControls$ = [3, n0, _OC,\n    0,\n    [_R],\n    [[() => OwnershipControlsRules, { [_xF]: 1, [_xN]: _Ru }]], 1\n];\nexport var OwnershipControlsRule$ = [3, n0, _OCR,\n    0,\n    [_OO],\n    [0], 1\n];\nexport var ParquetInput$ = [3, n0, _PI,\n    0,\n    [],\n    []\n];\nexport var Part$ = [3, n0, _Par,\n    0,\n    [_PN, _LM, _ETa, _Si, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh],\n    [1, 4, 0, 1, 0, 0, 0, 0, 0]\n];\nexport var PartitionedPrefix$ = [3, n0, _PP,\n    { [_xN]: _PP },\n    [_PDS],\n    [0]\n];\nexport var PolicyStatus$ = [3, n0, _PS,\n    0,\n    [_IP],\n    [[2, { [_xN]: _IP }]]\n];\nexport var Progress$ = [3, n0, _Pr,\n    0,\n    [_BS, _BP, _BRy],\n    [1, 1, 1]\n];\nexport var ProgressEvent$ = [3, n0, _PE,\n    0,\n    [_Det],\n    [[() => Progress$, { [_eP]: 1 }]]\n];\nexport var PublicAccessBlockConfiguration$ = [3, n0, _PABC,\n    0,\n    [_BPA, _IPA, _BPP, _RPB],\n    [[2, { [_xN]: _BPA }], [2, { [_xN]: _IPA }], [2, { [_xN]: _BPP }], [2, { [_xN]: _RPB }]]\n];\nexport var PutBucketAbacRequest$ = [3, n0, _PBAR,\n    0,\n    [_B, _AS, _CMD, _CA, _EBO],\n    [[0, 1], [() => AbacStatus$, { [_hP]: 1, [_xN]: _AS }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketAccelerateConfigurationRequest$ = [3, n0, _PBACR,\n    0,\n    [_B, _AC, _EBO, _CA],\n    [[0, 1], [() => AccelerateConfiguration$, { [_hP]: 1, [_xN]: _AC }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasca }]], 2\n];\nexport var PutBucketAclRequest$ = [3, n0, _PBARu,\n    0,\n    [_B, _ACL_, _ACP, _CMD, _CA, _GFC, _GR, _GRACP, _GW, _GWACP, _EBO],\n    [[0, 1], [0, { [_hH]: _xaa }], [() => AccessControlPolicy$, { [_hP]: 1, [_xN]: _ACP }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagw }], [0, { [_hH]: _xagwa }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var PutBucketAnalyticsConfigurationRequest$ = [3, n0, _PBACRu,\n    0,\n    [_B, _I, _ACn, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [() => AnalyticsConfiguration$, { [_hP]: 1, [_xN]: _ACn }], [0, { [_hH]: _xaebo }]], 3\n];\nexport var PutBucketCorsRequest$ = [3, n0, _PBCR,\n    0,\n    [_B, _CORSC, _CMD, _CA, _EBO],\n    [[0, 1], [() => CORSConfiguration$, { [_hP]: 1, [_xN]: _CORSC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketEncryptionRequest$ = [3, n0, _PBER,\n    0,\n    [_B, _SSEC, _CMD, _CA, _EBO],\n    [[0, 1], [() => ServerSideEncryptionConfiguration$, { [_hP]: 1, [_xN]: _SSEC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketIntelligentTieringConfigurationRequest$ = [3, n0, _PBITCR,\n    0,\n    [_B, _I, _ITC, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [() => IntelligentTieringConfiguration$, { [_hP]: 1, [_xN]: _ITC }], [0, { [_hH]: _xaebo }]], 3\n];\nexport var PutBucketInventoryConfigurationRequest$ = [3, n0, _PBICR,\n    0,\n    [_B, _I, _IC, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [() => InventoryConfiguration$, { [_hP]: 1, [_xN]: _IC }], [0, { [_hH]: _xaebo }]], 3\n];\nexport var PutBucketLifecycleConfigurationOutput$ = [3, n0, _PBLCO,\n    0,\n    [_TDMOS],\n    [[0, { [_hH]: _xatdmos }]]\n];\nexport var PutBucketLifecycleConfigurationRequest$ = [3, n0, _PBLCR,\n    0,\n    [_B, _CA, _LCi, _EBO, _TDMOS],\n    [[0, 1], [0, { [_hH]: _xasca }], [() => BucketLifecycleConfiguration$, { [_hP]: 1, [_xN]: _LCi }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xatdmos }]], 1\n];\nexport var PutBucketLoggingRequest$ = [3, n0, _PBLR,\n    0,\n    [_B, _BLS, _CMD, _CA, _EBO],\n    [[0, 1], [() => BucketLoggingStatus$, { [_hP]: 1, [_xN]: _BLS }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketMetricsConfigurationRequest$ = [3, n0, _PBMCR,\n    0,\n    [_B, _I, _MCe, _EBO],\n    [[0, 1], [0, { [_hQ]: _i }], [() => MetricsConfiguration$, { [_hP]: 1, [_xN]: _MCe }], [0, { [_hH]: _xaebo }]], 3\n];\nexport var PutBucketNotificationConfigurationRequest$ = [3, n0, _PBNCR,\n    0,\n    [_B, _NC, _EBO, _SDV],\n    [[0, 1], [() => NotificationConfiguration$, { [_hP]: 1, [_xN]: _NC }], [0, { [_hH]: _xaebo }], [2, { [_hH]: _xasdv }]], 2\n];\nexport var PutBucketOwnershipControlsRequest$ = [3, n0, _PBOCR,\n    0,\n    [_B, _OC, _CMD, _EBO, _CA],\n    [[0, 1], [() => OwnershipControls$, { [_hP]: 1, [_xN]: _OC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasca }]], 2\n];\nexport var PutBucketPolicyRequest$ = [3, n0, _PBPR,\n    0,\n    [_B, _Po, _CMD, _CA, _CRSBA, _EBO],\n    [[0, 1], [0, 16], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [2, { [_hH]: _xacrsba }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketReplicationRequest$ = [3, n0, _PBRR,\n    0,\n    [_B, _RCe, _CMD, _CA, _To, _EBO],\n    [[0, 1], [() => ReplicationConfiguration$, { [_hP]: 1, [_xN]: _RCe }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xabolt }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketRequestPaymentRequest$ = [3, n0, _PBRPR,\n    0,\n    [_B, _RPC, _CMD, _CA, _EBO],\n    [[0, 1], [() => RequestPaymentConfiguration$, { [_hP]: 1, [_xN]: _RPC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketTaggingRequest$ = [3, n0, _PBTR,\n    0,\n    [_B, _Tag, _CMD, _CA, _EBO],\n    [[0, 1], [() => Tagging$, { [_hP]: 1, [_xN]: _Tag }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketVersioningRequest$ = [3, n0, _PBVR,\n    0,\n    [_B, _VC, _CMD, _CA, _MFA, _EBO],\n    [[0, 1], [() => VersioningConfiguration$, { [_hP]: 1, [_xN]: _VC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xam_ }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutBucketWebsiteRequest$ = [3, n0, _PBWR,\n    0,\n    [_B, _WC, _CMD, _CA, _EBO],\n    [[0, 1], [() => WebsiteConfiguration$, { [_hP]: 1, [_xN]: _WC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutObjectAclOutput$ = [3, n0, _POAO,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var PutObjectAclRequest$ = [3, n0, _POAR,\n    0,\n    [_B, _K, _ACL_, _ACP, _CMD, _CA, _GFC, _GR, _GRACP, _GW, _GWACP, _RP, _VI, _EBO],\n    [[0, 1], [0, 1], [0, { [_hH]: _xaa }], [() => AccessControlPolicy$, { [_hP]: 1, [_xN]: _ACP }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagw }], [0, { [_hH]: _xagwa }], [0, { [_hH]: _xarp }], [0, { [_hQ]: _vI }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutObjectLegalHoldOutput$ = [3, n0, _POLHO,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var PutObjectLegalHoldRequest$ = [3, n0, _POLHR,\n    0,\n    [_B, _K, _LH, _RP, _VI, _CMD, _CA, _EBO],\n    [[0, 1], [0, 1], [() => ObjectLockLegalHold$, { [_hP]: 1, [_xN]: _LH }], [0, { [_hH]: _xarp }], [0, { [_hQ]: _vI }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutObjectLockConfigurationOutput$ = [3, n0, _POLCO,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var PutObjectLockConfigurationRequest$ = [3, n0, _POLCR,\n    0,\n    [_B, _OLC, _RP, _To, _CMD, _CA, _EBO],\n    [[0, 1], [() => ObjectLockConfiguration$, { [_hP]: 1, [_xN]: _OLC }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xabolt }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 1\n];\nexport var PutObjectOutput$ = [3, n0, _POO,\n    0,\n    [_E, _ETa, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _CT, _SSE, _VI, _SSECA, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _Si, _RC],\n    [[0, { [_hH]: _xae }], [0, { [_hH]: _ETa }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xact }], [0, { [_hH]: _xasse }], [0, { [_hH]: _xavi }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [1, { [_hH]: _xaos }], [0, { [_hH]: _xarc }]]\n];\nexport var PutObjectRequest$ = [3, n0, _POR,\n    0,\n    [_B, _K, _ACL_, _Bo, _CC, _CDo, _CEo, _CL, _CLo, _CMD, _CTo, _CA, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _Ex, _IM, _INM, _GFC, _GR, _GRACP, _GWACP, _WOB, _M, _SSE, _SC, _WRL, _SSECA, _SSECK, _SSECKMD, _SSEKMSKI, _SSEKMSEC, _BKE, _RP, _Tag, _OLM, _OLRUD, _OLLHS, _EBO],\n    [[0, 1], [0, 1], [0, { [_hH]: _xaa }], [() => StreamingBlob, 16], [0, { [_hH]: _CC_ }], [0, { [_hH]: _CD_ }], [0, { [_hH]: _CE_ }], [0, { [_hH]: _CL_ }], [1, { [_hH]: _CL__ }], [0, { [_hH]: _CM }], [0, { [_hH]: _CT_ }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [4, { [_hH]: _Ex }], [0, { [_hH]: _IM_ }], [0, { [_hH]: _INM_ }], [0, { [_hH]: _xagfc }], [0, { [_hH]: _xagr }], [0, { [_hH]: _xagra }], [0, { [_hH]: _xagwa }], [1, { [_hH]: _xawob }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xasse }], [0, { [_hH]: _xasc }], [0, { [_hH]: _xawrl }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [() => SSEKMSEncryptionContext, { [_hH]: _xassec }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xat }], [0, { [_hH]: _xaolm }], [5, { [_hH]: _xaolrud }], [0, { [_hH]: _xaollh }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutObjectRetentionOutput$ = [3, n0, _PORO,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var PutObjectRetentionRequest$ = [3, n0, _PORR,\n    0,\n    [_B, _K, _Ret, _RP, _VI, _BGR, _CMD, _CA, _EBO],\n    [[0, 1], [0, 1], [() => ObjectLockRetention$, { [_hP]: 1, [_xN]: _Ret }], [0, { [_hH]: _xarp }], [0, { [_hQ]: _vI }], [2, { [_hH]: _xabgr }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var PutObjectTaggingOutput$ = [3, n0, _POTO,\n    0,\n    [_VI],\n    [[0, { [_hH]: _xavi }]]\n];\nexport var PutObjectTaggingRequest$ = [3, n0, _POTR,\n    0,\n    [_B, _K, _Tag, _VI, _CMD, _CA, _EBO, _RP],\n    [[0, 1], [0, 1], [() => Tagging$, { [_hP]: 1, [_xN]: _Tag }], [0, { [_hQ]: _vI }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xarp }]], 3\n];\nexport var PutPublicAccessBlockRequest$ = [3, n0, _PPABR,\n    0,\n    [_B, _PABC, _CMD, _CA, _EBO],\n    [[0, 1], [() => PublicAccessBlockConfiguration$, { [_hP]: 1, [_xN]: _PABC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var QueueConfiguration$ = [3, n0, _QCue,\n    0,\n    [_QA, _Ev, _I, _F],\n    [[0, { [_xN]: _Qu }], [64 | 0, { [_xF]: 1, [_xN]: _Eve }], 0, [() => NotificationConfigurationFilter$, 0]], 2\n];\nexport var RecordExpiration$ = [3, n0, _REe,\n    0,\n    [_E, _D],\n    [0, 1], 1\n];\nexport var RecordsEvent$ = [3, n0, _REec,\n    0,\n    [_Payl],\n    [[21, { [_eP]: 1 }]]\n];\nexport var Redirect$ = [3, n0, _Red,\n    0,\n    [_HN, _HRC, _Pro, _RKPW, _RKW],\n    [0, 0, 0, 0, 0]\n];\nexport var RedirectAllRequestsTo$ = [3, n0, _RART,\n    0,\n    [_HN, _Pro],\n    [0, 0], 1\n];\nexport var RenameObjectOutput$ = [3, n0, _ROO,\n    0,\n    [],\n    []\n];\nexport var RenameObjectRequest$ = [3, n0, _ROR,\n    0,\n    [_B, _K, _RSen, _DIM, _DINM, _DIMS, _DIUS, _SIM, _SINM, _SIMS, _SIUS, _CTl],\n    [[0, 1], [0, 1], [0, { [_hH]: _xars_ }], [0, { [_hH]: _IM_ }], [0, { [_hH]: _INM_ }], [4, { [_hH]: _IMS_ }], [4, { [_hH]: _IUS_ }], [0, { [_hH]: _xarsim }], [0, { [_hH]: _xarsinm }], [6, { [_hH]: _xarsims }], [6, { [_hH]: _xarsius }], [0, { [_hH]: _xact_, [_iT]: 1 }]], 3\n];\nexport var ReplicaModifications$ = [3, n0, _RM,\n    0,\n    [_S],\n    [0], 1\n];\nexport var ReplicationConfiguration$ = [3, n0, _RCe,\n    0,\n    [_Ro, _R],\n    [0, [() => ReplicationRules, { [_xF]: 1, [_xN]: _Ru }]], 2\n];\nexport var ReplicationRule$ = [3, n0, _RRe,\n    0,\n    [_S, _Des, _ID, _Pri, _P, _F, _SSC, _EOR, _DMR],\n    [0, () => Destination$, 0, 1, 0, [() => ReplicationRuleFilter$, 0], () => SourceSelectionCriteria$, () => ExistingObjectReplication$, () => DeleteMarkerReplication$], 2\n];\nexport var ReplicationRuleAndOperator$ = [3, n0, _RRAO,\n    0,\n    [_P, _T],\n    [0, [() => TagSet, { [_xF]: 1, [_xN]: _Ta }]]\n];\nexport var ReplicationRuleFilter$ = [3, n0, _RRF,\n    0,\n    [_P, _Ta, _An],\n    [0, () => Tag$, [() => ReplicationRuleAndOperator$, 0]]\n];\nexport var ReplicationTime$ = [3, n0, _RT,\n    0,\n    [_S, _Tim],\n    [0, () => ReplicationTimeValue$], 2\n];\nexport var ReplicationTimeValue$ = [3, n0, _RTV,\n    0,\n    [_Mi],\n    [1]\n];\nexport var RequestPaymentConfiguration$ = [3, n0, _RPC,\n    0,\n    [_Pay],\n    [0], 1\n];\nexport var RequestProgress$ = [3, n0, _RPe,\n    0,\n    [_Ena],\n    [2]\n];\nexport var RestoreObjectOutput$ = [3, n0, _ROOe,\n    0,\n    [_RC, _ROP],\n    [[0, { [_hH]: _xarc }], [0, { [_hH]: _xarop }]]\n];\nexport var RestoreObjectRequest$ = [3, n0, _RORe,\n    0,\n    [_B, _K, _VI, _RRes, _RP, _CA, _EBO],\n    [[0, 1], [0, 1], [0, { [_hQ]: _vI }], [() => RestoreRequest$, { [_hP]: 1, [_xN]: _RRes }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var RestoreRequest$ = [3, n0, _RRes,\n    0,\n    [_D, _GJP, _Ty, _Ti, _Desc, _SP, _OL],\n    [1, () => GlacierJobParameters$, 0, 0, 0, () => SelectParameters$, [() => OutputLocation$, 0]]\n];\nexport var RestoreStatus$ = [3, n0, _RSe,\n    0,\n    [_IRIP, _RED],\n    [2, 4]\n];\nexport var RoutingRule$ = [3, n0, _RRo,\n    0,\n    [_Red, _Co],\n    [() => Redirect$, () => Condition$], 1\n];\nexport var S3KeyFilter$ = [3, n0, _SKF,\n    0,\n    [_FRi],\n    [[() => FilterRuleList, { [_xF]: 1, [_xN]: _FR }]]\n];\nexport var S3Location$ = [3, n0, _SL,\n    0,\n    [_BN, _P, _En, _CACL, _ACL, _Tag, _UM, _SC],\n    [0, 0, [() => Encryption$, 0], 0, [() => Grants, 0], [() => Tagging$, 0], [() => UserMetadata, 0], 0], 2\n];\nexport var S3TablesDestination$ = [3, n0, _STD,\n    0,\n    [_TBA, _TNa],\n    [0, 0], 2\n];\nexport var S3TablesDestinationResult$ = [3, n0, _STDR,\n    0,\n    [_TBA, _TNa, _TA, _TN],\n    [0, 0, 0, 0], 4\n];\nexport var ScanRange$ = [3, n0, _SR,\n    0,\n    [_St, _End],\n    [1, 1]\n];\nexport var SelectObjectContentOutput$ = [3, n0, _SOCO,\n    0,\n    [_Payl],\n    [[() => SelectObjectContentEventStream$, 16]]\n];\nexport var SelectObjectContentRequest$ = [3, n0, _SOCR,\n    0,\n    [_B, _K, _Exp, _ETx, _IS, _OSu, _SSECA, _SSECK, _SSECKMD, _RPe, _SR, _EBO],\n    [[0, 1], [0, 1], 0, 0, () => InputSerialization$, () => OutputSerialization$, [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], () => RequestProgress$, () => ScanRange$, [0, { [_hH]: _xaebo }]], 6\n];\nexport var SelectParameters$ = [3, n0, _SP,\n    0,\n    [_IS, _ETx, _Exp, _OSu],\n    [() => InputSerialization$, 0, 0, () => OutputSerialization$], 4\n];\nexport var ServerSideEncryptionByDefault$ = [3, n0, _SSEBD,\n    0,\n    [_SSEA, _KMSMKID],\n    [0, [() => SSEKMSKeyId, 0]], 1\n];\nexport var ServerSideEncryptionConfiguration$ = [3, n0, _SSEC,\n    0,\n    [_R],\n    [[() => ServerSideEncryptionRules, { [_xF]: 1, [_xN]: _Ru }]], 1\n];\nexport var ServerSideEncryptionRule$ = [3, n0, _SSER,\n    0,\n    [_ASSEBD, _BKE, _BET],\n    [[() => ServerSideEncryptionByDefault$, 0], 2, [() => BlockedEncryptionTypes$, 0]]\n];\nexport var SessionCredentials$ = [3, n0, _SCe,\n    0,\n    [_AKI, _SAK, _ST, _E],\n    [[0, { [_xN]: _AKI }], [() => SessionCredentialValue, { [_xN]: _SAK }], [() => SessionCredentialValue, { [_xN]: _ST }], [4, { [_xN]: _E }]], 4\n];\nexport var SimplePrefix$ = [3, n0, _SPi,\n    { [_xN]: _SPi },\n    [],\n    []\n];\nexport var SourceSelectionCriteria$ = [3, n0, _SSC,\n    0,\n    [_SKEO, _RM],\n    [() => SseKmsEncryptedObjects$, () => ReplicaModifications$]\n];\nexport var SSEKMS$ = [3, n0, _SSEKMS,\n    { [_xN]: _SK },\n    [_KI],\n    [[() => SSEKMSKeyId, 0]], 1\n];\nexport var SseKmsEncryptedObjects$ = [3, n0, _SKEO,\n    0,\n    [_S],\n    [0], 1\n];\nexport var SSEKMSEncryption$ = [3, n0, _SSEKMSE,\n    { [_xN]: _SK },\n    [_KMSKA, _BKE],\n    [[() => NonEmptyKmsKeyArnString, 0], 2], 1\n];\nexport var SSES3$ = [3, n0, _SSES,\n    { [_xN]: _SS },\n    [],\n    []\n];\nexport var Stats$ = [3, n0, _Sta,\n    0,\n    [_BS, _BP, _BRy],\n    [1, 1, 1]\n];\nexport var StatsEvent$ = [3, n0, _SE,\n    0,\n    [_Det],\n    [[() => Stats$, { [_eP]: 1 }]]\n];\nexport var StorageClassAnalysis$ = [3, n0, _SCA,\n    0,\n    [_DE],\n    [() => StorageClassAnalysisDataExport$]\n];\nexport var StorageClassAnalysisDataExport$ = [3, n0, _SCADE,\n    0,\n    [_OSV, _Des],\n    [0, () => AnalyticsExportDestination$], 2\n];\nexport var Tag$ = [3, n0, _Ta,\n    0,\n    [_K, _V],\n    [0, 0], 2\n];\nexport var Tagging$ = [3, n0, _Tag,\n    0,\n    [_TS],\n    [[() => TagSet, 0]], 1\n];\nexport var TargetGrant$ = [3, n0, _TGa,\n    0,\n    [_Gra, _Pe],\n    [[() => Grantee$, { [_xNm]: [_x, _hi] }], 0]\n];\nexport var TargetObjectKeyFormat$ = [3, n0, _TOKF,\n    0,\n    [_SPi, _PP],\n    [[() => SimplePrefix$, { [_xN]: _SPi }], [() => PartitionedPrefix$, { [_xN]: _PP }]]\n];\nexport var Tiering$ = [3, n0, _Tier,\n    0,\n    [_D, _AT],\n    [1, 0], 2\n];\nexport var TooManyParts$ = [-3, n0, _TMP,\n    { [_e]: _c, [_hE]: 400 },\n    [],\n    []\n];\nTypeRegistry.for(n0).registerError(TooManyParts$, TooManyParts);\nexport var TopicConfiguration$ = [3, n0, _TCop,\n    0,\n    [_TAo, _Ev, _I, _F],\n    [[0, { [_xN]: _Top }], [64 | 0, { [_xF]: 1, [_xN]: _Eve }], 0, [() => NotificationConfigurationFilter$, 0]], 2\n];\nexport var Transition$ = [3, n0, _Tra,\n    0,\n    [_Da, _D, _SC],\n    [5, 1, 0]\n];\nexport var UpdateBucketMetadataInventoryTableConfigurationRequest$ = [3, n0, _UBMITCR,\n    0,\n    [_B, _ITCn, _CMD, _CA, _EBO],\n    [[0, 1], [() => InventoryTableConfigurationUpdates$, { [_hP]: 1, [_xN]: _ITCn }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var UpdateBucketMetadataJournalTableConfigurationRequest$ = [3, n0, _UBMJTCR,\n    0,\n    [_B, _JTC, _CMD, _CA, _EBO],\n    [[0, 1], [() => JournalTableConfigurationUpdates$, { [_hP]: 1, [_xN]: _JTC }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xaebo }]], 2\n];\nexport var UpdateObjectEncryptionRequest$ = [3, n0, _UOER,\n    0,\n    [_B, _K, _OE, _VI, _RP, _EBO, _CMD, _CA],\n    [[0, 1], [0, 1], [() => ObjectEncryption$, 16], [0, { [_hQ]: _vI }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }]], 3\n];\nexport var UpdateObjectEncryptionResponse$ = [3, n0, _UOERp,\n    0,\n    [_RC],\n    [[0, { [_hH]: _xarc }]]\n];\nexport var UploadPartCopyOutput$ = [3, n0, _UPCO,\n    0,\n    [_CSVI, _CPR, _SSE, _SSECA, _SSECKMD, _SSEKMSKI, _BKE, _RC],\n    [[0, { [_hH]: _xacsvi }], [() => CopyPartResult$, 16], [0, { [_hH]: _xasse }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarc }]]\n];\nexport var UploadPartCopyRequest$ = [3, n0, _UPCR,\n    0,\n    [_B, _CS, _K, _PN, _UI, _CSIM, _CSIMS, _CSINM, _CSIUS, _CSRo, _SSECA, _SSECK, _SSECKMD, _CSSSECA, _CSSSECK, _CSSSECKMD, _RP, _EBO, _ESBO],\n    [[0, 1], [0, { [_hH]: _xacs__ }], [0, 1], [1, { [_hQ]: _pN }], [0, { [_hQ]: _uI }], [0, { [_hH]: _xacsim }], [4, { [_hH]: _xacsims }], [0, { [_hH]: _xacsinm }], [4, { [_hH]: _xacsius }], [0, { [_hH]: _xacsr }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [0, { [_hH]: _xacssseca }], [() => CopySourceSSECustomerKey, { [_hH]: _xacssseck }], [0, { [_hH]: _xacssseckM }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }], [0, { [_hH]: _xasebo }]], 5\n];\nexport var UploadPartOutput$ = [3, n0, _UPO,\n    0,\n    [_SSE, _ETa, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _SSECA, _SSECKMD, _SSEKMSKI, _BKE, _RC],\n    [[0, { [_hH]: _xasse }], [0, { [_hH]: _ETa }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xasseca }], [0, { [_hH]: _xasseckM }], [() => SSEKMSKeyId, { [_hH]: _xasseakki }], [2, { [_hH]: _xassebke }], [0, { [_hH]: _xarc }]]\n];\nexport var UploadPartRequest$ = [3, n0, _UPR,\n    0,\n    [_B, _K, _PN, _UI, _Bo, _CLo, _CMD, _CA, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _SSECA, _SSECK, _SSECKMD, _RP, _EBO],\n    [[0, 1], [0, 1], [1, { [_hQ]: _pN }], [0, { [_hQ]: _uI }], [() => StreamingBlob, 16], [1, { [_hH]: _CL__ }], [0, { [_hH]: _CM }], [0, { [_hH]: _xasca }], [0, { [_hH]: _xacc }], [0, { [_hH]: _xacc_ }], [0, { [_hH]: _xacc__ }], [0, { [_hH]: _xacs }], [0, { [_hH]: _xacs_ }], [0, { [_hH]: _xasseca }], [() => SSECustomerKey, { [_hH]: _xasseck }], [0, { [_hH]: _xasseckM }], [0, { [_hH]: _xarp }], [0, { [_hH]: _xaebo }]], 4\n];\nexport var VersioningConfiguration$ = [3, n0, _VC,\n    0,\n    [_MFAD, _S],\n    [[0, { [_xN]: _MDf }], 0]\n];\nexport var WebsiteConfiguration$ = [3, n0, _WC,\n    0,\n    [_EDr, _IDn, _RART, _RR],\n    [() => ErrorDocument$, () => IndexDocument$, () => RedirectAllRequestsTo$, [() => RoutingRules, 0]]\n];\nexport var WriteGetObjectResponseRequest$ = [3, n0, _WGORR,\n    0,\n    [_RReq, _RTe, _Bo, _SCt, _ECr, _EM, _AR, _CC, _CDo, _CEo, _CL, _CLo, _CR, _CTo, _CCRC, _CCRCC, _CCRCNVME, _CSHA, _CSHAh, _DM, _ETa, _Ex, _E, _LM, _MM, _M, _OLM, _OLLHS, _OLRUD, _PC, _RS, _RC, _Re, _SSE, _SSECA, _SSEKMSKI, _SSECKMD, _SC, _TC, _VI, _BKE],\n    [[0, { [_hL]: 1, [_hH]: _xarr }], [0, { [_hH]: _xart }], [() => StreamingBlob, 16], [1, { [_hH]: _xafs }], [0, { [_hH]: _xafec }], [0, { [_hH]: _xafem }], [0, { [_hH]: _xafhar }], [0, { [_hH]: _xafhCC }], [0, { [_hH]: _xafhCD }], [0, { [_hH]: _xafhCE }], [0, { [_hH]: _xafhCL }], [1, { [_hH]: _CL__ }], [0, { [_hH]: _xafhCR }], [0, { [_hH]: _xafhCT }], [0, { [_hH]: _xafhxacc }], [0, { [_hH]: _xafhxacc_ }], [0, { [_hH]: _xafhxacc__ }], [0, { [_hH]: _xafhxacs }], [0, { [_hH]: _xafhxacs_ }], [2, { [_hH]: _xafhxadm }], [0, { [_hH]: _xafhE }], [4, { [_hH]: _xafhE_ }], [0, { [_hH]: _xafhxae }], [4, { [_hH]: _xafhLM }], [1, { [_hH]: _xafhxamm }], [128 | 0, { [_hPH]: _xam }], [0, { [_hH]: _xafhxaolm }], [0, { [_hH]: _xafhxaollh }], [5, { [_hH]: _xafhxaolrud }], [1, { [_hH]: _xafhxampc }], [0, { [_hH]: _xafhxars }], [0, { [_hH]: _xafhxarc }], [0, { [_hH]: _xafhxar }], [0, { [_hH]: _xafhxasse }], [0, { [_hH]: _xafhxasseca }], [() => SSEKMSKeyId, { [_hH]: _xafhxasseakki }], [0, { [_hH]: _xafhxasseckM }], [0, { [_hH]: _xafhxasc }], [1, { [_hH]: _xafhxatc }], [0, { [_hH]: _xafhxavi }], [2, { [_hH]: _xafhxassebke }]], 2\n];\nvar __Unit = \"unit\";\nexport var S3ServiceException$ = [-3, _sm, \"S3ServiceException\", 0, [], []];\nTypeRegistry.for(_sm).registerError(S3ServiceException$, S3ServiceException);\nvar AllowedHeaders = 64 | 0;\nvar AllowedMethods = 64 | 0;\nvar AllowedOrigins = 64 | 0;\nvar AnalyticsConfigurationList = [1, n0, _ACLn,\n    0, [() => AnalyticsConfiguration$,\n        0]\n];\nvar Buckets = [1, n0, _Bu,\n    0, [() => Bucket$,\n        { [_xN]: _B }]\n];\nvar ChecksumAlgorithmList = 64 | 0;\nvar CommonPrefixList = [1, n0, _CPL,\n    0, () => CommonPrefix$\n];\nvar CompletedPartList = [1, n0, _CPLo,\n    0, () => CompletedPart$\n];\nvar CORSRules = [1, n0, _CORSR,\n    0, [() => CORSRule$,\n        0]\n];\nvar DeletedObjects = [1, n0, _DOe,\n    0, () => DeletedObject$\n];\nvar DeleteMarkers = [1, n0, _DMe,\n    0, () => DeleteMarkerEntry$\n];\nvar EncryptionTypeList = [1, n0, _ETL,\n    0, [0,\n        { [_xN]: _ET }]\n];\nvar Errors = [1, n0, _Er,\n    0, () => _Error$\n];\nvar EventList = 64 | 0;\nvar ExposeHeaders = 64 | 0;\nvar FilterRuleList = [1, n0, _FRL,\n    0, () => FilterRule$\n];\nvar Grants = [1, n0, _G,\n    0, [() => Grant$,\n        { [_xN]: _Gr }]\n];\nvar IntelligentTieringConfigurationList = [1, n0, _ITCL,\n    0, [() => IntelligentTieringConfiguration$,\n        0]\n];\nvar InventoryConfigurationList = [1, n0, _ICL,\n    0, [() => InventoryConfiguration$,\n        0]\n];\nvar InventoryOptionalFields = [1, n0, _IOF,\n    0, [0,\n        { [_xN]: _Fi }]\n];\nvar LambdaFunctionConfigurationList = [1, n0, _LFCL,\n    0, [() => LambdaFunctionConfiguration$,\n        0]\n];\nvar LifecycleRules = [1, n0, _LRi,\n    0, [() => LifecycleRule$,\n        0]\n];\nvar MetricsConfigurationList = [1, n0, _MCL,\n    0, [() => MetricsConfiguration$,\n        0]\n];\nvar MultipartUploadList = [1, n0, _MUL,\n    0, () => MultipartUpload$\n];\nvar NoncurrentVersionTransitionList = [1, n0, _NVTL,\n    0, () => NoncurrentVersionTransition$\n];\nvar ObjectAttributesList = 64 | 0;\nvar ObjectIdentifierList = [1, n0, _OIL,\n    0, () => ObjectIdentifier$\n];\nvar ObjectList = [1, n0, _OLb,\n    0, [() => _Object$,\n        0]\n];\nvar ObjectVersionList = [1, n0, _OVL,\n    0, [() => ObjectVersion$,\n        0]\n];\nvar OptionalObjectAttributesList = 64 | 0;\nvar OwnershipControlsRules = [1, n0, _OCRw,\n    0, () => OwnershipControlsRule$\n];\nvar Parts = [1, n0, _Pa,\n    0, () => Part$\n];\nvar PartsList = [1, n0, _PL,\n    0, () => ObjectPart$\n];\nvar QueueConfigurationList = [1, n0, _QCL,\n    0, [() => QueueConfiguration$,\n        0]\n];\nvar ReplicationRules = [1, n0, _RRep,\n    0, [() => ReplicationRule$,\n        0]\n];\nvar RoutingRules = [1, n0, _RR,\n    0, [() => RoutingRule$,\n        { [_xN]: _RRo }]\n];\nvar ServerSideEncryptionRules = [1, n0, _SSERe,\n    0, [() => ServerSideEncryptionRule$,\n        0]\n];\nvar TagSet = [1, n0, _TS,\n    0, [() => Tag$,\n        { [_xN]: _Ta }]\n];\nvar TargetGrants = [1, n0, _TG,\n    0, [() => TargetGrant$,\n        { [_xN]: _Gr }]\n];\nvar TieringList = [1, n0, _TL,\n    0, () => Tiering$\n];\nvar TopicConfigurationList = [1, n0, _TCL,\n    0, [() => TopicConfiguration$,\n        0]\n];\nvar TransitionList = [1, n0, _TLr,\n    0, () => Transition$\n];\nvar UserMetadata = [1, n0, _UM,\n    0, [() => MetadataEntry$,\n        { [_xN]: _ME }]\n];\nvar Metadata = 128 | 0;\nexport var AnalyticsFilter$ = [4, n0, _AF,\n    0,\n    [_P, _Ta, _An],\n    [0, () => Tag$, [() => AnalyticsAndOperator$, 0]]\n];\nexport var MetricsFilter$ = [4, n0, _MF,\n    0,\n    [_P, _Ta, _APAc, _An],\n    [0, () => Tag$, 0, [() => MetricsAndOperator$, 0]]\n];\nexport var ObjectEncryption$ = [4, n0, _OE,\n    0,\n    [_SSEKMS],\n    [[() => SSEKMSEncryption$, { [_xN]: _SK }]]\n];\nexport var SelectObjectContentEventStream$ = [4, n0, _SOCES,\n    { [_s]: 1 },\n    [_Rec, _Sta, _Pr, _Cont, _End],\n    [[() => RecordsEvent$, 0], [() => StatsEvent$, 0], [() => ProgressEvent$, 0], () => ContinuationEvent$, () => EndEvent$]\n];\nexport var AbortMultipartUpload$ = [9, n0, _AMU,\n    { [_h]: [\"DELETE\", \"/{Key+}?x-id=AbortMultipartUpload\", 204] }, () => AbortMultipartUploadRequest$, () => AbortMultipartUploadOutput$\n];\nexport var CompleteMultipartUpload$ = [9, n0, _CMUo,\n    { [_h]: [\"POST\", \"/{Key+}\", 200] }, () => CompleteMultipartUploadRequest$, () => CompleteMultipartUploadOutput$\n];\nexport var CopyObject$ = [9, n0, _CO,\n    { [_h]: [\"PUT\", \"/{Key+}?x-id=CopyObject\", 200] }, () => CopyObjectRequest$, () => CopyObjectOutput$\n];\nexport var CreateBucket$ = [9, n0, _CB,\n    { [_h]: [\"PUT\", \"/\", 200] }, () => CreateBucketRequest$, () => CreateBucketOutput$\n];\nexport var CreateBucketMetadataConfiguration$ = [9, n0, _CBMC,\n    { [_hC]: \"-\", [_h]: [\"POST\", \"/?metadataConfiguration\", 200] }, () => CreateBucketMetadataConfigurationRequest$, () => __Unit\n];\nexport var CreateBucketMetadataTableConfiguration$ = [9, n0, _CBMTC,\n    { [_hC]: \"-\", [_h]: [\"POST\", \"/?metadataTable\", 200] }, () => CreateBucketMetadataTableConfigurationRequest$, () => __Unit\n];\nexport var CreateMultipartUpload$ = [9, n0, _CMUr,\n    { [_h]: [\"POST\", \"/{Key+}?uploads\", 200] }, () => CreateMultipartUploadRequest$, () => CreateMultipartUploadOutput$\n];\nexport var CreateSession$ = [9, n0, _CSr,\n    { [_h]: [\"GET\", \"/?session\", 200] }, () => CreateSessionRequest$, () => CreateSessionOutput$\n];\nexport var DeleteBucket$ = [9, n0, _DB,\n    { [_h]: [\"DELETE\", \"/\", 204] }, () => DeleteBucketRequest$, () => __Unit\n];\nexport var DeleteBucketAnalyticsConfiguration$ = [9, n0, _DBAC,\n    { [_h]: [\"DELETE\", \"/?analytics\", 204] }, () => DeleteBucketAnalyticsConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketCors$ = [9, n0, _DBC,\n    { [_h]: [\"DELETE\", \"/?cors\", 204] }, () => DeleteBucketCorsRequest$, () => __Unit\n];\nexport var DeleteBucketEncryption$ = [9, n0, _DBE,\n    { [_h]: [\"DELETE\", \"/?encryption\", 204] }, () => DeleteBucketEncryptionRequest$, () => __Unit\n];\nexport var DeleteBucketIntelligentTieringConfiguration$ = [9, n0, _DBITC,\n    { [_h]: [\"DELETE\", \"/?intelligent-tiering\", 204] }, () => DeleteBucketIntelligentTieringConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketInventoryConfiguration$ = [9, n0, _DBIC,\n    { [_h]: [\"DELETE\", \"/?inventory\", 204] }, () => DeleteBucketInventoryConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketLifecycle$ = [9, n0, _DBL,\n    { [_h]: [\"DELETE\", \"/?lifecycle\", 204] }, () => DeleteBucketLifecycleRequest$, () => __Unit\n];\nexport var DeleteBucketMetadataConfiguration$ = [9, n0, _DBMC,\n    { [_h]: [\"DELETE\", \"/?metadataConfiguration\", 204] }, () => DeleteBucketMetadataConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketMetadataTableConfiguration$ = [9, n0, _DBMTC,\n    { [_h]: [\"DELETE\", \"/?metadataTable\", 204] }, () => DeleteBucketMetadataTableConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketMetricsConfiguration$ = [9, n0, _DBMCe,\n    { [_h]: [\"DELETE\", \"/?metrics\", 204] }, () => DeleteBucketMetricsConfigurationRequest$, () => __Unit\n];\nexport var DeleteBucketOwnershipControls$ = [9, n0, _DBOC,\n    { [_h]: [\"DELETE\", \"/?ownershipControls\", 204] }, () => DeleteBucketOwnershipControlsRequest$, () => __Unit\n];\nexport var DeleteBucketPolicy$ = [9, n0, _DBP,\n    { [_h]: [\"DELETE\", \"/?policy\", 204] }, () => DeleteBucketPolicyRequest$, () => __Unit\n];\nexport var DeleteBucketReplication$ = [9, n0, _DBRe,\n    { [_h]: [\"DELETE\", \"/?replication\", 204] }, () => DeleteBucketReplicationRequest$, () => __Unit\n];\nexport var DeleteBucketTagging$ = [9, n0, _DBT,\n    { [_h]: [\"DELETE\", \"/?tagging\", 204] }, () => DeleteBucketTaggingRequest$, () => __Unit\n];\nexport var DeleteBucketWebsite$ = [9, n0, _DBW,\n    { [_h]: [\"DELETE\", \"/?website\", 204] }, () => DeleteBucketWebsiteRequest$, () => __Unit\n];\nexport var DeleteObject$ = [9, n0, _DOel,\n    { [_h]: [\"DELETE\", \"/{Key+}?x-id=DeleteObject\", 204] }, () => DeleteObjectRequest$, () => DeleteObjectOutput$\n];\nexport var DeleteObjects$ = [9, n0, _DOele,\n    { [_hC]: \"-\", [_h]: [\"POST\", \"/?delete\", 200] }, () => DeleteObjectsRequest$, () => DeleteObjectsOutput$\n];\nexport var DeleteObjectTagging$ = [9, n0, _DOT,\n    { [_h]: [\"DELETE\", \"/{Key+}?tagging\", 204] }, () => DeleteObjectTaggingRequest$, () => DeleteObjectTaggingOutput$\n];\nexport var DeletePublicAccessBlock$ = [9, n0, _DPAB,\n    { [_h]: [\"DELETE\", \"/?publicAccessBlock\", 204] }, () => DeletePublicAccessBlockRequest$, () => __Unit\n];\nexport var GetBucketAbac$ = [9, n0, _GBA,\n    { [_h]: [\"GET\", \"/?abac\", 200] }, () => GetBucketAbacRequest$, () => GetBucketAbacOutput$\n];\nexport var GetBucketAccelerateConfiguration$ = [9, n0, _GBAC,\n    { [_h]: [\"GET\", \"/?accelerate\", 200] }, () => GetBucketAccelerateConfigurationRequest$, () => GetBucketAccelerateConfigurationOutput$\n];\nexport var GetBucketAcl$ = [9, n0, _GBAe,\n    { [_h]: [\"GET\", \"/?acl\", 200] }, () => GetBucketAclRequest$, () => GetBucketAclOutput$\n];\nexport var GetBucketAnalyticsConfiguration$ = [9, n0, _GBACe,\n    { [_h]: [\"GET\", \"/?analytics&x-id=GetBucketAnalyticsConfiguration\", 200] }, () => GetBucketAnalyticsConfigurationRequest$, () => GetBucketAnalyticsConfigurationOutput$\n];\nexport var GetBucketCors$ = [9, n0, _GBC,\n    { [_h]: [\"GET\", \"/?cors\", 200] }, () => GetBucketCorsRequest$, () => GetBucketCorsOutput$\n];\nexport var GetBucketEncryption$ = [9, n0, _GBE,\n    { [_h]: [\"GET\", \"/?encryption\", 200] }, () => GetBucketEncryptionRequest$, () => GetBucketEncryptionOutput$\n];\nexport var GetBucketIntelligentTieringConfiguration$ = [9, n0, _GBITC,\n    { [_h]: [\"GET\", \"/?intelligent-tiering&x-id=GetBucketIntelligentTieringConfiguration\", 200] }, () => GetBucketIntelligentTieringConfigurationRequest$, () => GetBucketIntelligentTieringConfigurationOutput$\n];\nexport var GetBucketInventoryConfiguration$ = [9, n0, _GBIC,\n    { [_h]: [\"GET\", \"/?inventory&x-id=GetBucketInventoryConfiguration\", 200] }, () => GetBucketInventoryConfigurationRequest$, () => GetBucketInventoryConfigurationOutput$\n];\nexport var GetBucketLifecycleConfiguration$ = [9, n0, _GBLC,\n    { [_h]: [\"GET\", \"/?lifecycle\", 200] }, () => GetBucketLifecycleConfigurationRequest$, () => GetBucketLifecycleConfigurationOutput$\n];\nexport var GetBucketLocation$ = [9, n0, _GBL,\n    { [_h]: [\"GET\", \"/?location\", 200] }, () => GetBucketLocationRequest$, () => GetBucketLocationOutput$\n];\nexport var GetBucketLogging$ = [9, n0, _GBLe,\n    { [_h]: [\"GET\", \"/?logging\", 200] }, () => GetBucketLoggingRequest$, () => GetBucketLoggingOutput$\n];\nexport var GetBucketMetadataConfiguration$ = [9, n0, _GBMC,\n    { [_h]: [\"GET\", \"/?metadataConfiguration\", 200] }, () => GetBucketMetadataConfigurationRequest$, () => GetBucketMetadataConfigurationOutput$\n];\nexport var GetBucketMetadataTableConfiguration$ = [9, n0, _GBMTC,\n    { [_h]: [\"GET\", \"/?metadataTable\", 200] }, () => GetBucketMetadataTableConfigurationRequest$, () => GetBucketMetadataTableConfigurationOutput$\n];\nexport var GetBucketMetricsConfiguration$ = [9, n0, _GBMCe,\n    { [_h]: [\"GET\", \"/?metrics&x-id=GetBucketMetricsConfiguration\", 200] }, () => GetBucketMetricsConfigurationRequest$, () => GetBucketMetricsConfigurationOutput$\n];\nexport var GetBucketNotificationConfiguration$ = [9, n0, _GBNC,\n    { [_h]: [\"GET\", \"/?notification\", 200] }, () => GetBucketNotificationConfigurationRequest$, () => NotificationConfiguration$\n];\nexport var GetBucketOwnershipControls$ = [9, n0, _GBOC,\n    { [_h]: [\"GET\", \"/?ownershipControls\", 200] }, () => GetBucketOwnershipControlsRequest$, () => GetBucketOwnershipControlsOutput$\n];\nexport var GetBucketPolicy$ = [9, n0, _GBP,\n    { [_h]: [\"GET\", \"/?policy\", 200] }, () => GetBucketPolicyRequest$, () => GetBucketPolicyOutput$\n];\nexport var GetBucketPolicyStatus$ = [9, n0, _GBPS,\n    { [_h]: [\"GET\", \"/?policyStatus\", 200] }, () => GetBucketPolicyStatusRequest$, () => GetBucketPolicyStatusOutput$\n];\nexport var GetBucketReplication$ = [9, n0, _GBR,\n    { [_h]: [\"GET\", \"/?replication\", 200] }, () => GetBucketReplicationRequest$, () => GetBucketReplicationOutput$\n];\nexport var GetBucketRequestPayment$ = [9, n0, _GBRP,\n    { [_h]: [\"GET\", \"/?requestPayment\", 200] }, () => GetBucketRequestPaymentRequest$, () => GetBucketRequestPaymentOutput$\n];\nexport var GetBucketTagging$ = [9, n0, _GBT,\n    { [_h]: [\"GET\", \"/?tagging\", 200] }, () => GetBucketTaggingRequest$, () => GetBucketTaggingOutput$\n];\nexport var GetBucketVersioning$ = [9, n0, _GBV,\n    { [_h]: [\"GET\", \"/?versioning\", 200] }, () => GetBucketVersioningRequest$, () => GetBucketVersioningOutput$\n];\nexport var GetBucketWebsite$ = [9, n0, _GBW,\n    { [_h]: [\"GET\", \"/?website\", 200] }, () => GetBucketWebsiteRequest$, () => GetBucketWebsiteOutput$\n];\nexport var GetObject$ = [9, n0, _GO,\n    { [_hC]: \"-\", [_h]: [\"GET\", \"/{Key+}?x-id=GetObject\", 200] }, () => GetObjectRequest$, () => GetObjectOutput$\n];\nexport var GetObjectAcl$ = [9, n0, _GOA,\n    { [_h]: [\"GET\", \"/{Key+}?acl\", 200] }, () => GetObjectAclRequest$, () => GetObjectAclOutput$\n];\nexport var GetObjectAttributes$ = [9, n0, _GOAe,\n    { [_h]: [\"GET\", \"/{Key+}?attributes\", 200] }, () => GetObjectAttributesRequest$, () => GetObjectAttributesOutput$\n];\nexport var GetObjectLegalHold$ = [9, n0, _GOLH,\n    { [_h]: [\"GET\", \"/{Key+}?legal-hold\", 200] }, () => GetObjectLegalHoldRequest$, () => GetObjectLegalHoldOutput$\n];\nexport var GetObjectLockConfiguration$ = [9, n0, _GOLC,\n    { [_h]: [\"GET\", \"/?object-lock\", 200] }, () => GetObjectLockConfigurationRequest$, () => GetObjectLockConfigurationOutput$\n];\nexport var GetObjectRetention$ = [9, n0, _GORe,\n    { [_h]: [\"GET\", \"/{Key+}?retention\", 200] }, () => GetObjectRetentionRequest$, () => GetObjectRetentionOutput$\n];\nexport var GetObjectTagging$ = [9, n0, _GOT,\n    { [_h]: [\"GET\", \"/{Key+}?tagging\", 200] }, () => GetObjectTaggingRequest$, () => GetObjectTaggingOutput$\n];\nexport var GetObjectTorrent$ = [9, n0, _GOTe,\n    { [_h]: [\"GET\", \"/{Key+}?torrent\", 200] }, () => GetObjectTorrentRequest$, () => GetObjectTorrentOutput$\n];\nexport var GetPublicAccessBlock$ = [9, n0, _GPAB,\n    { [_h]: [\"GET\", \"/?publicAccessBlock\", 200] }, () => GetPublicAccessBlockRequest$, () => GetPublicAccessBlockOutput$\n];\nexport var HeadBucket$ = [9, n0, _HB,\n    { [_h]: [\"HEAD\", \"/\", 200] }, () => HeadBucketRequest$, () => HeadBucketOutput$\n];\nexport var HeadObject$ = [9, n0, _HO,\n    { [_h]: [\"HEAD\", \"/{Key+}\", 200] }, () => HeadObjectRequest$, () => HeadObjectOutput$\n];\nexport var ListBucketAnalyticsConfigurations$ = [9, n0, _LBAC,\n    { [_h]: [\"GET\", \"/?analytics&x-id=ListBucketAnalyticsConfigurations\", 200] }, () => ListBucketAnalyticsConfigurationsRequest$, () => ListBucketAnalyticsConfigurationsOutput$\n];\nexport var ListBucketIntelligentTieringConfigurations$ = [9, n0, _LBITC,\n    { [_h]: [\"GET\", \"/?intelligent-tiering&x-id=ListBucketIntelligentTieringConfigurations\", 200] }, () => ListBucketIntelligentTieringConfigurationsRequest$, () => ListBucketIntelligentTieringConfigurationsOutput$\n];\nexport var ListBucketInventoryConfigurations$ = [9, n0, _LBIC,\n    { [_h]: [\"GET\", \"/?inventory&x-id=ListBucketInventoryConfigurations\", 200] }, () => ListBucketInventoryConfigurationsRequest$, () => ListBucketInventoryConfigurationsOutput$\n];\nexport var ListBucketMetricsConfigurations$ = [9, n0, _LBMC,\n    { [_h]: [\"GET\", \"/?metrics&x-id=ListBucketMetricsConfigurations\", 200] }, () => ListBucketMetricsConfigurationsRequest$, () => ListBucketMetricsConfigurationsOutput$\n];\nexport var ListBuckets$ = [9, n0, _LB,\n    { [_h]: [\"GET\", \"/?x-id=ListBuckets\", 200] }, () => ListBucketsRequest$, () => ListBucketsOutput$\n];\nexport var ListDirectoryBuckets$ = [9, n0, _LDB,\n    { [_h]: [\"GET\", \"/?x-id=ListDirectoryBuckets\", 200] }, () => ListDirectoryBucketsRequest$, () => ListDirectoryBucketsOutput$\n];\nexport var ListMultipartUploads$ = [9, n0, _LMU,\n    { [_h]: [\"GET\", \"/?uploads\", 200] }, () => ListMultipartUploadsRequest$, () => ListMultipartUploadsOutput$\n];\nexport var ListObjects$ = [9, n0, _LO,\n    { [_h]: [\"GET\", \"/\", 200] }, () => ListObjectsRequest$, () => ListObjectsOutput$\n];\nexport var ListObjectsV2$ = [9, n0, _LOV,\n    { [_h]: [\"GET\", \"/?list-type=2\", 200] }, () => ListObjectsV2Request$, () => ListObjectsV2Output$\n];\nexport var ListObjectVersions$ = [9, n0, _LOVi,\n    { [_h]: [\"GET\", \"/?versions\", 200] }, () => ListObjectVersionsRequest$, () => ListObjectVersionsOutput$\n];\nexport var ListParts$ = [9, n0, _LP,\n    { [_h]: [\"GET\", \"/{Key+}?x-id=ListParts\", 200] }, () => ListPartsRequest$, () => ListPartsOutput$\n];\nexport var PutBucketAbac$ = [9, n0, _PBA,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?abac\", 200] }, () => PutBucketAbacRequest$, () => __Unit\n];\nexport var PutBucketAccelerateConfiguration$ = [9, n0, _PBAC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?accelerate\", 200] }, () => PutBucketAccelerateConfigurationRequest$, () => __Unit\n];\nexport var PutBucketAcl$ = [9, n0, _PBAu,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?acl\", 200] }, () => PutBucketAclRequest$, () => __Unit\n];\nexport var PutBucketAnalyticsConfiguration$ = [9, n0, _PBACu,\n    { [_h]: [\"PUT\", \"/?analytics\", 200] }, () => PutBucketAnalyticsConfigurationRequest$, () => __Unit\n];\nexport var PutBucketCors$ = [9, n0, _PBC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?cors\", 200] }, () => PutBucketCorsRequest$, () => __Unit\n];\nexport var PutBucketEncryption$ = [9, n0, _PBE,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?encryption\", 200] }, () => PutBucketEncryptionRequest$, () => __Unit\n];\nexport var PutBucketIntelligentTieringConfiguration$ = [9, n0, _PBITC,\n    { [_h]: [\"PUT\", \"/?intelligent-tiering\", 200] }, () => PutBucketIntelligentTieringConfigurationRequest$, () => __Unit\n];\nexport var PutBucketInventoryConfiguration$ = [9, n0, _PBIC,\n    { [_h]: [\"PUT\", \"/?inventory\", 200] }, () => PutBucketInventoryConfigurationRequest$, () => __Unit\n];\nexport var PutBucketLifecycleConfiguration$ = [9, n0, _PBLC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?lifecycle\", 200] }, () => PutBucketLifecycleConfigurationRequest$, () => PutBucketLifecycleConfigurationOutput$\n];\nexport var PutBucketLogging$ = [9, n0, _PBL,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?logging\", 200] }, () => PutBucketLoggingRequest$, () => __Unit\n];\nexport var PutBucketMetricsConfiguration$ = [9, n0, _PBMC,\n    { [_h]: [\"PUT\", \"/?metrics\", 200] }, () => PutBucketMetricsConfigurationRequest$, () => __Unit\n];\nexport var PutBucketNotificationConfiguration$ = [9, n0, _PBNC,\n    { [_h]: [\"PUT\", \"/?notification\", 200] }, () => PutBucketNotificationConfigurationRequest$, () => __Unit\n];\nexport var PutBucketOwnershipControls$ = [9, n0, _PBOC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?ownershipControls\", 200] }, () => PutBucketOwnershipControlsRequest$, () => __Unit\n];\nexport var PutBucketPolicy$ = [9, n0, _PBP,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?policy\", 200] }, () => PutBucketPolicyRequest$, () => __Unit\n];\nexport var PutBucketReplication$ = [9, n0, _PBR,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?replication\", 200] }, () => PutBucketReplicationRequest$, () => __Unit\n];\nexport var PutBucketRequestPayment$ = [9, n0, _PBRP,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?requestPayment\", 200] }, () => PutBucketRequestPaymentRequest$, () => __Unit\n];\nexport var PutBucketTagging$ = [9, n0, _PBT,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?tagging\", 200] }, () => PutBucketTaggingRequest$, () => __Unit\n];\nexport var PutBucketVersioning$ = [9, n0, _PBV,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?versioning\", 200] }, () => PutBucketVersioningRequest$, () => __Unit\n];\nexport var PutBucketWebsite$ = [9, n0, _PBW,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?website\", 200] }, () => PutBucketWebsiteRequest$, () => __Unit\n];\nexport var PutObject$ = [9, n0, _PO,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?x-id=PutObject\", 200] }, () => PutObjectRequest$, () => PutObjectOutput$\n];\nexport var PutObjectAcl$ = [9, n0, _POA,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?acl\", 200] }, () => PutObjectAclRequest$, () => PutObjectAclOutput$\n];\nexport var PutObjectLegalHold$ = [9, n0, _POLH,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?legal-hold\", 200] }, () => PutObjectLegalHoldRequest$, () => PutObjectLegalHoldOutput$\n];\nexport var PutObjectLockConfiguration$ = [9, n0, _POLC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?object-lock\", 200] }, () => PutObjectLockConfigurationRequest$, () => PutObjectLockConfigurationOutput$\n];\nexport var PutObjectRetention$ = [9, n0, _PORu,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?retention\", 200] }, () => PutObjectRetentionRequest$, () => PutObjectRetentionOutput$\n];\nexport var PutObjectTagging$ = [9, n0, _POT,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?tagging\", 200] }, () => PutObjectTaggingRequest$, () => PutObjectTaggingOutput$\n];\nexport var PutPublicAccessBlock$ = [9, n0, _PPAB,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?publicAccessBlock\", 200] }, () => PutPublicAccessBlockRequest$, () => __Unit\n];\nexport var RenameObject$ = [9, n0, _RO,\n    { [_h]: [\"PUT\", \"/{Key+}?renameObject\", 200] }, () => RenameObjectRequest$, () => RenameObjectOutput$\n];\nexport var RestoreObject$ = [9, n0, _ROe,\n    { [_hC]: \"-\", [_h]: [\"POST\", \"/{Key+}?restore\", 200] }, () => RestoreObjectRequest$, () => RestoreObjectOutput$\n];\nexport var SelectObjectContent$ = [9, n0, _SOC,\n    { [_h]: [\"POST\", \"/{Key+}?select&select-type=2\", 200] }, () => SelectObjectContentRequest$, () => SelectObjectContentOutput$\n];\nexport var UpdateBucketMetadataInventoryTableConfiguration$ = [9, n0, _UBMITC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?metadataInventoryTable\", 200] }, () => UpdateBucketMetadataInventoryTableConfigurationRequest$, () => __Unit\n];\nexport var UpdateBucketMetadataJournalTableConfiguration$ = [9, n0, _UBMJTC,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/?metadataJournalTable\", 200] }, () => UpdateBucketMetadataJournalTableConfigurationRequest$, () => __Unit\n];\nexport var UpdateObjectEncryption$ = [9, n0, _UOE,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?encryption\", 200] }, () => UpdateObjectEncryptionRequest$, () => UpdateObjectEncryptionResponse$\n];\nexport var UploadPart$ = [9, n0, _UP,\n    { [_hC]: \"-\", [_h]: [\"PUT\", \"/{Key+}?x-id=UploadPart\", 200] }, () => UploadPartRequest$, () => UploadPartOutput$\n];\nexport var UploadPartCopy$ = [9, n0, _UPC,\n    { [_h]: [\"PUT\", \"/{Key+}?x-id=UploadPartCopy\", 200] }, () => UploadPartCopyRequest$, () => UploadPartCopyOutput$\n];\nexport var WriteGetObjectResponse$ = [9, n0, _WGOR,\n    { [_en]: [\"{RequestRoute}.\"], [_h]: [\"POST\", \"/WriteGetObjectResponse\", 200] }, () => WriteGetObjectResponseRequest$, () => __Unit\n];\n","import { getThrow200ExceptionsPlugin } from \"@aws-sdk/middleware-sdk-s3\";\nimport { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateSession$ } from \"../schemas/schemas_0\";\nexport { $Command };\nexport class CreateSessionCommand extends $Command\n    .classBuilder()\n    .ep({\n    ...commonParams,\n    DisableS3ExpressSessionAuth: { type: \"staticContextParams\", value: true },\n    Bucket: { type: \"contextParams\", name: \"Bucket\" },\n})\n    .m(function (Command, cs, config, o) {\n    return [\n        getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n        getThrow200ExceptionsPlugin(config),\n    ];\n})\n    .s(\"AmazonS3\", \"CreateSession\", {})\n    .n(\"S3Client\", \"CreateSessionCommand\")\n    .sc(CreateSession$)\n    .build() {\n}\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","export function isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\n//# sourceMappingURL=isEmptyData.js.map","export var SHA_1_HASH = { name: \"SHA-1\" };\nexport var SHA_1_HMAC_ALGO = {\n    name: \"HMAC\",\n    hash: SHA_1_HASH,\n};\nexport var EMPTY_DATA_SHA_1 = new Uint8Array([\n    218,\n    57,\n    163,\n    238,\n    94,\n    107,\n    75,\n    13,\n    50,\n    85,\n    191,\n    239,\n    149,\n    96,\n    24,\n    144,\n    175,\n    216,\n    7,\n    9,\n]);\n//# sourceMappingURL=constants.js.map","const fallbackWindow = {};\nexport function locateWindow() {\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    else if (typeof self !== \"undefined\") {\n        return self;\n    }\n    return fallbackWindow;\n}\n","import { fromUtf8 } from \"@smithy/util-utf8\";\nimport { isEmptyData } from \"./isEmptyData\";\nimport { EMPTY_DATA_SHA_1, SHA_1_HASH, SHA_1_HMAC_ALGO } from \"./constants\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nvar Sha1 = /** @class */ (function () {\n    function Sha1(secret) {\n        this.toHash = new Uint8Array(0);\n        if (secret !== void 0) {\n            this.key = new Promise(function (resolve, reject) {\n                locateWindow()\n                    .crypto.subtle.importKey(\"raw\", convertToBuffer(secret), SHA_1_HMAC_ALGO, false, [\"sign\"])\n                    .then(resolve, reject);\n            });\n            this.key.catch(function () { });\n        }\n    }\n    Sha1.prototype.update = function (data) {\n        if (isEmptyData(data)) {\n            return;\n        }\n        var update = convertToBuffer(data);\n        var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n        typedArray.set(this.toHash, 0);\n        typedArray.set(update, this.toHash.byteLength);\n        this.toHash = typedArray;\n    };\n    Sha1.prototype.digest = function () {\n        var _this = this;\n        if (this.key) {\n            return this.key.then(function (key) {\n                return locateWindow()\n                    .crypto.subtle.sign(SHA_1_HMAC_ALGO, key, _this.toHash)\n                    .then(function (data) { return new Uint8Array(data); });\n            });\n        }\n        if (isEmptyData(this.toHash)) {\n            return Promise.resolve(EMPTY_DATA_SHA_1);\n        }\n        return Promise.resolve()\n            .then(function () { return locateWindow().crypto.subtle.digest(SHA_1_HASH, _this.toHash); })\n            .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n    };\n    Sha1.prototype.reset = function () {\n        this.toHash = new Uint8Array(0);\n    };\n    return Sha1;\n}());\nexport { Sha1 };\nfunction convertToBuffer(data) {\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=webCryptoSha1.js.map","import { __awaiter, __generator } from \"tslib\";\nvar subtleCryptoMethods = [\n    \"decrypt\",\n    \"digest\",\n    \"encrypt\",\n    \"exportKey\",\n    \"generateKey\",\n    \"importKey\",\n    \"sign\",\n    \"verify\"\n];\nexport function supportsWebCrypto(window) {\n    if (supportsSecureRandom(window) &&\n        typeof window.crypto.subtle === \"object\") {\n        var subtle = window.crypto.subtle;\n        return supportsSubtleCrypto(subtle);\n    }\n    return false;\n}\nexport function supportsSecureRandom(window) {\n    if (typeof window === \"object\" && typeof window.crypto === \"object\") {\n        var getRandomValues = window.crypto.getRandomValues;\n        return typeof getRandomValues === \"function\";\n    }\n    return false;\n}\nexport function supportsSubtleCrypto(subtle) {\n    return (subtle &&\n        subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === \"function\"; }));\n}\nexport function supportsZeroByteGCM(subtle) {\n    return __awaiter(this, void 0, void 0, function () {\n        var key, zeroByteAuthTag, _a;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    if (!supportsSubtleCrypto(subtle))\n                        return [2 /*return*/, false];\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, 4, , 5]);\n                    return [4 /*yield*/, subtle.generateKey({ name: \"AES-GCM\", length: 128 }, false, [\"encrypt\"])];\n                case 2:\n                    key = _b.sent();\n                    return [4 /*yield*/, subtle.encrypt({\n                            name: \"AES-GCM\",\n                            iv: new Uint8Array(Array(12)),\n                            additionalData: new Uint8Array(Array(16)),\n                            tagLength: 128\n                        }, key, new Uint8Array(0))];\n                case 3:\n                    zeroByteAuthTag = _b.sent();\n                    return [2 /*return*/, zeroByteAuthTag.byteLength === 16];\n                case 4:\n                    _a = _b.sent();\n                    return [2 /*return*/, false];\n                case 5: return [2 /*return*/];\n            }\n        });\n    });\n}\n//# sourceMappingURL=supportsWebCrypto.js.map","import { Sha1 as WebCryptoSha1 } from \"./webCryptoSha1\";\nimport { supportsWebCrypto } from \"@aws-crypto/supports-web-crypto\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nimport { convertToBuffer } from \"@aws-crypto/util\";\nvar Sha1 = /** @class */ (function () {\n    function Sha1(secret) {\n        if (supportsWebCrypto(locateWindow())) {\n            this.hash = new WebCryptoSha1(secret);\n        }\n        else {\n            throw new Error(\"SHA1 not supported\");\n        }\n    }\n    Sha1.prototype.update = function (data, encoding) {\n        this.hash.update(convertToBuffer(data));\n    };\n    Sha1.prototype.digest = function () {\n        return this.hash.digest();\n    };\n    Sha1.prototype.reset = function () {\n        this.hash.reset();\n    };\n    return Sha1;\n}());\nexport { Sha1 };\n//# sourceMappingURL=crossPlatformSha1.js.map","export var SHA_256_HASH = { name: \"SHA-256\" };\nexport var SHA_256_HMAC_ALGO = {\n    name: \"HMAC\",\n    hash: SHA_256_HASH\n};\nexport var EMPTY_DATA_SHA_256 = new Uint8Array([\n    227,\n    176,\n    196,\n    66,\n    152,\n    252,\n    28,\n    20,\n    154,\n    251,\n    244,\n    200,\n    153,\n    111,\n    185,\n    36,\n    39,\n    174,\n    65,\n    228,\n    100,\n    155,\n    147,\n    76,\n    164,\n    149,\n    153,\n    27,\n    120,\n    82,\n    184,\n    85\n]);\n//# sourceMappingURL=constants.js.map","import { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nimport { EMPTY_DATA_SHA_256, SHA_256_HASH, SHA_256_HMAC_ALGO, } from \"./constants\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.toHash = new Uint8Array(0);\n        this.secret = secret;\n        this.reset();\n    }\n    Sha256.prototype.update = function (data) {\n        if (isEmptyData(data)) {\n            return;\n        }\n        var update = convertToBuffer(data);\n        var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n        typedArray.set(this.toHash, 0);\n        typedArray.set(update, this.toHash.byteLength);\n        this.toHash = typedArray;\n    };\n    Sha256.prototype.digest = function () {\n        var _this = this;\n        if (this.key) {\n            return this.key.then(function (key) {\n                return locateWindow()\n                    .crypto.subtle.sign(SHA_256_HMAC_ALGO, key, _this.toHash)\n                    .then(function (data) { return new Uint8Array(data); });\n            });\n        }\n        if (isEmptyData(this.toHash)) {\n            return Promise.resolve(EMPTY_DATA_SHA_256);\n        }\n        return Promise.resolve()\n            .then(function () {\n            return locateWindow().crypto.subtle.digest(SHA_256_HASH, _this.toHash);\n        })\n            .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n    };\n    Sha256.prototype.reset = function () {\n        var _this = this;\n        this.toHash = new Uint8Array(0);\n        if (this.secret && this.secret !== void 0) {\n            this.key = new Promise(function (resolve, reject) {\n                locateWindow()\n                    .crypto.subtle.importKey(\"raw\", convertToBuffer(_this.secret), SHA_256_HMAC_ALGO, false, [\"sign\"])\n                    .then(resolve, reject);\n            });\n            this.key.catch(function () { });\n        }\n    };\n    return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=webCryptoSha256.js.map","/**\n * @internal\n */\nexport var BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexport var DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexport var KEY = new Uint32Array([\n    0x428a2f98,\n    0x71374491,\n    0xb5c0fbcf,\n    0xe9b5dba5,\n    0x3956c25b,\n    0x59f111f1,\n    0x923f82a4,\n    0xab1c5ed5,\n    0xd807aa98,\n    0x12835b01,\n    0x243185be,\n    0x550c7dc3,\n    0x72be5d74,\n    0x80deb1fe,\n    0x9bdc06a7,\n    0xc19bf174,\n    0xe49b69c1,\n    0xefbe4786,\n    0x0fc19dc6,\n    0x240ca1cc,\n    0x2de92c6f,\n    0x4a7484aa,\n    0x5cb0a9dc,\n    0x76f988da,\n    0x983e5152,\n    0xa831c66d,\n    0xb00327c8,\n    0xbf597fc7,\n    0xc6e00bf3,\n    0xd5a79147,\n    0x06ca6351,\n    0x14292967,\n    0x27b70a85,\n    0x2e1b2138,\n    0x4d2c6dfc,\n    0x53380d13,\n    0x650a7354,\n    0x766a0abb,\n    0x81c2c92e,\n    0x92722c85,\n    0xa2bfe8a1,\n    0xa81a664b,\n    0xc24b8b70,\n    0xc76c51a3,\n    0xd192e819,\n    0xd6990624,\n    0xf40e3585,\n    0x106aa070,\n    0x19a4c116,\n    0x1e376c08,\n    0x2748774c,\n    0x34b0bcb5,\n    0x391c0cb3,\n    0x4ed8aa4a,\n    0x5b9cca4f,\n    0x682e6ff3,\n    0x748f82ee,\n    0x78a5636f,\n    0x84c87814,\n    0x8cc70208,\n    0x90befffa,\n    0xa4506ceb,\n    0xbef9a3f7,\n    0xc67178f2\n]);\n/**\n * @internal\n */\nexport var INIT = [\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19\n];\n/**\n * @internal\n */\nexport var MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","import { BLOCK_SIZE, DIGEST_LENGTH, INIT, KEY, MAX_HASHABLE_LENGTH } from \"./constants\";\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n    function RawSha256() {\n        this.state = Int32Array.from(INIT);\n        this.temp = new Int32Array(64);\n        this.buffer = new Uint8Array(64);\n        this.bufferLength = 0;\n        this.bytesHashed = 0;\n        /**\n         * @internal\n         */\n        this.finished = false;\n    }\n    RawSha256.prototype.update = function (data) {\n        if (this.finished) {\n            throw new Error(\"Attempted to update an already finished hash.\");\n        }\n        var position = 0;\n        var byteLength = data.byteLength;\n        this.bytesHashed += byteLength;\n        if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n            throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n        }\n        while (byteLength > 0) {\n            this.buffer[this.bufferLength++] = data[position++];\n            byteLength--;\n            if (this.bufferLength === BLOCK_SIZE) {\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n        }\n    };\n    RawSha256.prototype.digest = function () {\n        if (!this.finished) {\n            var bitsHashed = this.bytesHashed * 8;\n            var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n            var undecoratedLength = this.bufferLength;\n            bufferView.setUint8(this.bufferLength++, 0x80);\n            // Ensure the final block has enough room for the hashed length\n            if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n                for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n                    bufferView.setUint8(i, 0);\n                }\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n            for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n                bufferView.setUint8(i, 0);\n            }\n            bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n            bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n            this.hashBuffer();\n            this.finished = true;\n        }\n        // The value in state is little-endian rather than big-endian, so flip\n        // each word into a new Uint8Array\n        var out = new Uint8Array(DIGEST_LENGTH);\n        for (var i = 0; i < 8; i++) {\n            out[i * 4] = (this.state[i] >>> 24) & 0xff;\n            out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n            out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n            out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n        }\n        return out;\n    };\n    RawSha256.prototype.hashBuffer = function () {\n        var _a = this, buffer = _a.buffer, state = _a.state;\n        var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n        for (var i = 0; i < BLOCK_SIZE; i++) {\n            if (i < 16) {\n                this.temp[i] =\n                    ((buffer[i * 4] & 0xff) << 24) |\n                        ((buffer[i * 4 + 1] & 0xff) << 16) |\n                        ((buffer[i * 4 + 2] & 0xff) << 8) |\n                        (buffer[i * 4 + 3] & 0xff);\n            }\n            else {\n                var u = this.temp[i - 2];\n                var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n                u = this.temp[i - 15];\n                var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n                this.temp[i] =\n                    ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n            }\n            var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n                ((state4 >>> 11) | (state4 << 21)) ^\n                ((state4 >>> 25) | (state4 << 7))) +\n                ((state4 & state5) ^ (~state4 & state6))) |\n                0) +\n                ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) |\n                0;\n            var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n                ((state0 >>> 13) | (state0 << 19)) ^\n                ((state0 >>> 22) | (state0 << 10))) +\n                ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n                0;\n            state7 = state6;\n            state6 = state5;\n            state5 = state4;\n            state4 = (state3 + t1) | 0;\n            state3 = state2;\n            state2 = state1;\n            state1 = state0;\n            state0 = (t1 + t2) | 0;\n        }\n        state[0] += state0;\n        state[1] += state1;\n        state[2] += state2;\n        state[3] += state3;\n        state[4] += state4;\n        state[5] += state5;\n        state[6] += state6;\n        state[7] += state7;\n    };\n    return RawSha256;\n}());\nexport { RawSha256 };\n//# sourceMappingURL=RawSha256.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { BLOCK_SIZE } from \"./constants\";\nimport { RawSha256 } from \"./RawSha256\";\nimport { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.secret = secret;\n        this.hash = new RawSha256();\n        this.reset();\n    }\n    Sha256.prototype.update = function (toHash) {\n        if (isEmptyData(toHash) || this.error) {\n            return;\n        }\n        try {\n            this.hash.update(convertToBuffer(toHash));\n        }\n        catch (e) {\n            this.error = e;\n        }\n    };\n    /* This synchronous method keeps compatibility\n     * with the v2 aws-sdk.\n     */\n    Sha256.prototype.digestSync = function () {\n        if (this.error) {\n            throw this.error;\n        }\n        if (this.outer) {\n            if (!this.outer.finished) {\n                this.outer.update(this.hash.digest());\n            }\n            return this.outer.digest();\n        }\n        return this.hash.digest();\n    };\n    /* The underlying digest method here is synchronous.\n     * To keep the same interface with the other hash functions\n     * the default is to expose this as an async method.\n     * However, it can sometimes be useful to have a sync method.\n     */\n    Sha256.prototype.digest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, this.digestSync()];\n            });\n        });\n    };\n    Sha256.prototype.reset = function () {\n        this.hash = new RawSha256();\n        if (this.secret) {\n            this.outer = new RawSha256();\n            var inner = bufferFromSecret(this.secret);\n            var outer = new Uint8Array(BLOCK_SIZE);\n            outer.set(inner);\n            for (var i = 0; i < BLOCK_SIZE; i++) {\n                inner[i] ^= 0x36;\n                outer[i] ^= 0x5c;\n            }\n            this.hash.update(inner);\n            this.outer.update(outer);\n            // overwrite the copied key in memory\n            for (var i = 0; i < inner.byteLength; i++) {\n                inner[i] = 0;\n            }\n        }\n    };\n    return Sha256;\n}());\nexport { Sha256 };\nfunction bufferFromSecret(secret) {\n    var input = convertToBuffer(secret);\n    if (input.byteLength > BLOCK_SIZE) {\n        var bufferHash = new RawSha256();\n        bufferHash.update(input);\n        input = bufferHash.digest();\n    }\n    var buffer = new Uint8Array(BLOCK_SIZE);\n    buffer.set(input);\n    return buffer;\n}\n//# sourceMappingURL=jsSha256.js.map","import { Sha256 as WebCryptoSha256 } from \"./webCryptoSha256\";\nimport { Sha256 as JsSha256 } from \"@aws-crypto/sha256-js\";\nimport { supportsWebCrypto } from \"@aws-crypto/supports-web-crypto\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nimport { convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        if (supportsWebCrypto(locateWindow())) {\n            this.hash = new WebCryptoSha256(secret);\n        }\n        else {\n            this.hash = new JsSha256(secret);\n        }\n    }\n    Sha256.prototype.update = function (data, encoding) {\n        this.hash.update(convertToBuffer(data));\n    };\n    Sha256.prototype.digest = function () {\n        return this.hash.digest();\n    };\n    Sha256.prototype.reset = function () {\n        this.hash.reset();\n    };\n    return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=crossPlatformSha256.js.map","export { createUserAgentStringParsingProvider } from \"./createUserAgentStringParsingProvider\";\nexport const createDefaultUserAgentProvider = ({ serviceId, clientVersion }) => async (config) => {\n    const navigator = typeof window !== \"undefined\" ? window.navigator : undefined;\n    const uaString = navigator?.userAgent ?? \"\";\n    const osName = navigator?.userAgentData?.platform ?? fallback.os(uaString) ?? \"other\";\n    const osVersion = undefined;\n    const brands = navigator?.userAgentData?.brands ?? [];\n    const brand = brands[brands.length - 1];\n    const browserName = brand?.brand ?? fallback.browser(uaString) ?? \"unknown\";\n    const browserVersion = brand?.version ?? \"unknown\";\n    const sections = [\n        [\"aws-sdk-js\", clientVersion],\n        [\"ua\", \"2.1\"],\n        [`os/${osName}`, osVersion],\n        [\"lang/js\"],\n        [\"md/browser\", `${browserName}_${browserVersion}`],\n    ];\n    if (serviceId) {\n        sections.push([`api/${serviceId}`, clientVersion]);\n    }\n    const appId = await config?.userAgentAppId?.();\n    if (appId) {\n        sections.push([`app/${appId}`]);\n    }\n    return sections;\n};\nexport const fallback = {\n    os(ua) {\n        if (/iPhone|iPad|iPod/.test(ua))\n            return \"iOS\";\n        if (/Macintosh|Mac OS X/.test(ua))\n            return \"macOS\";\n        if (/Windows NT/.test(ua))\n            return \"Windows\";\n        if (/Android/.test(ua))\n            return \"Android\";\n        if (/Linux/.test(ua))\n            return \"Linux\";\n        return undefined;\n    },\n    browser(ua) {\n        if (/EdgiOS|EdgA|Edg\\//.test(ua))\n            return \"Microsoft Edge\";\n        if (/Firefox\\//.test(ua))\n            return \"Firefox\";\n        if (/Chrome\\//.test(ua))\n            return \"Chrome\";\n        if (/Safari\\//.test(ua))\n            return \"Safari\";\n        return undefined;\n    },\n};\nexport const defaultUserAgent = createDefaultUserAgentProvider;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nexport class Int64 {\n    bytes;\n    constructor(bytes) {\n        this.bytes = bytes;\n        if (bytes.byteLength !== 8) {\n            throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n        }\n    }\n    static fromNumber(number) {\n        if (number > 9_223_372_036_854_775_807 || number < -9_223_372_036_854_775_808) {\n            throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n        }\n        const bytes = new Uint8Array(8);\n        for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n            bytes[i] = remaining;\n        }\n        if (number < 0) {\n            negate(bytes);\n        }\n        return new Int64(bytes);\n    }\n    valueOf() {\n        const bytes = this.bytes.slice(0);\n        const negative = bytes[0] & 0b10000000;\n        if (negative) {\n            negate(bytes);\n        }\n        return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n    }\n    toString() {\n        return String(this.valueOf());\n    }\n}\nfunction negate(bytes) {\n    for (let i = 0; i < 8; i++) {\n        bytes[i] ^= 0xff;\n    }\n    for (let i = 7; i > -1; i--) {\n        bytes[i]++;\n        if (bytes[i] !== 0)\n            break;\n    }\n}\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { Int64 } from \"./Int64\";\nexport class HeaderMarshaller {\n    toUtf8;\n    fromUtf8;\n    constructor(toUtf8, fromUtf8) {\n        this.toUtf8 = toUtf8;\n        this.fromUtf8 = fromUtf8;\n    }\n    format(headers) {\n        const chunks = [];\n        for (const headerName of Object.keys(headers)) {\n            const bytes = this.fromUtf8(headerName);\n            chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n        }\n        const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n        let position = 0;\n        for (const chunk of chunks) {\n            out.set(chunk, position);\n            position += chunk.byteLength;\n        }\n        return out;\n    }\n    formatHeaderValue(header) {\n        switch (header.type) {\n            case \"boolean\":\n                return Uint8Array.from([header.value ? 0 : 1]);\n            case \"byte\":\n                return Uint8Array.from([2, header.value]);\n            case \"short\":\n                const shortView = new DataView(new ArrayBuffer(3));\n                shortView.setUint8(0, 3);\n                shortView.setInt16(1, header.value, false);\n                return new Uint8Array(shortView.buffer);\n            case \"integer\":\n                const intView = new DataView(new ArrayBuffer(5));\n                intView.setUint8(0, 4);\n                intView.setInt32(1, header.value, false);\n                return new Uint8Array(intView.buffer);\n            case \"long\":\n                const longBytes = new Uint8Array(9);\n                longBytes[0] = 5;\n                longBytes.set(header.value.bytes, 1);\n                return longBytes;\n            case \"binary\":\n                const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n                binView.setUint8(0, 6);\n                binView.setUint16(1, header.value.byteLength, false);\n                const binBytes = new Uint8Array(binView.buffer);\n                binBytes.set(header.value, 3);\n                return binBytes;\n            case \"string\":\n                const utf8Bytes = this.fromUtf8(header.value);\n                const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n                strView.setUint8(0, 7);\n                strView.setUint16(1, utf8Bytes.byteLength, false);\n                const strBytes = new Uint8Array(strView.buffer);\n                strBytes.set(utf8Bytes, 3);\n                return strBytes;\n            case \"timestamp\":\n                const tsBytes = new Uint8Array(9);\n                tsBytes[0] = 8;\n                tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n                return tsBytes;\n            case \"uuid\":\n                if (!UUID_PATTERN.test(header.value)) {\n                    throw new Error(`Invalid UUID received: ${header.value}`);\n                }\n                const uuidBytes = new Uint8Array(17);\n                uuidBytes[0] = 9;\n                uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n                return uuidBytes;\n        }\n    }\n    parse(headers) {\n        const out = {};\n        let position = 0;\n        while (position < headers.byteLength) {\n            const nameLength = headers.getUint8(position++);\n            const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));\n            position += nameLength;\n            switch (headers.getUint8(position++)) {\n                case 0:\n                    out[name] = {\n                        type: BOOLEAN_TAG,\n                        value: true,\n                    };\n                    break;\n                case 1:\n                    out[name] = {\n                        type: BOOLEAN_TAG,\n                        value: false,\n                    };\n                    break;\n                case 2:\n                    out[name] = {\n                        type: BYTE_TAG,\n                        value: headers.getInt8(position++),\n                    };\n                    break;\n                case 3:\n                    out[name] = {\n                        type: SHORT_TAG,\n                        value: headers.getInt16(position, false),\n                    };\n                    position += 2;\n                    break;\n                case 4:\n                    out[name] = {\n                        type: INT_TAG,\n                        value: headers.getInt32(position, false),\n                    };\n                    position += 4;\n                    break;\n                case 5:\n                    out[name] = {\n                        type: LONG_TAG,\n                        value: new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),\n                    };\n                    position += 8;\n                    break;\n                case 6:\n                    const binaryLength = headers.getUint16(position, false);\n                    position += 2;\n                    out[name] = {\n                        type: BINARY_TAG,\n                        value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),\n                    };\n                    position += binaryLength;\n                    break;\n                case 7:\n                    const stringLength = headers.getUint16(position, false);\n                    position += 2;\n                    out[name] = {\n                        type: STRING_TAG,\n                        value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),\n                    };\n                    position += stringLength;\n                    break;\n                case 8:\n                    out[name] = {\n                        type: TIMESTAMP_TAG,\n                        value: new Date(new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),\n                    };\n                    position += 8;\n                    break;\n                case 9:\n                    const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);\n                    position += 16;\n                    out[name] = {\n                        type: UUID_TAG,\n                        value: `${toHex(uuidBytes.subarray(0, 4))}-${toHex(uuidBytes.subarray(4, 6))}-${toHex(uuidBytes.subarray(6, 8))}-${toHex(uuidBytes.subarray(8, 10))}-${toHex(uuidBytes.subarray(10))}`,\n                    };\n                    break;\n                default:\n                    throw new Error(`Unrecognized header type tag`);\n            }\n        }\n        return out;\n    }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst BOOLEAN_TAG = \"boolean\";\nconst BYTE_TAG = \"byte\";\nconst SHORT_TAG = \"short\";\nconst INT_TAG = \"integer\";\nconst LONG_TAG = \"long\";\nconst BINARY_TAG = \"binary\";\nconst STRING_TAG = \"string\";\nconst TIMESTAMP_TAG = \"timestamp\";\nconst UUID_TAG = \"uuid\";\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\n","import { Crc32 } from \"@aws-crypto/crc32\";\nconst PRELUDE_MEMBER_LENGTH = 4;\nconst PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\nconst CHECKSUM_LENGTH = 4;\nconst MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\nexport function splitMessage({ byteLength, byteOffset, buffer }) {\n    if (byteLength < MINIMUM_MESSAGE_LENGTH) {\n        throw new Error(\"Provided message too short to accommodate event stream message overhead\");\n    }\n    const view = new DataView(buffer, byteOffset, byteLength);\n    const messageLength = view.getUint32(0, false);\n    if (byteLength !== messageLength) {\n        throw new Error(\"Reported message length does not match received message length\");\n    }\n    const headerLength = view.getUint32(PRELUDE_MEMBER_LENGTH, false);\n    const expectedPreludeChecksum = view.getUint32(PRELUDE_LENGTH, false);\n    const expectedMessageChecksum = view.getUint32(byteLength - CHECKSUM_LENGTH, false);\n    const checksummer = new Crc32().update(new Uint8Array(buffer, byteOffset, PRELUDE_LENGTH));\n    if (expectedPreludeChecksum !== checksummer.digest()) {\n        throw new Error(`The prelude checksum specified in the message (${expectedPreludeChecksum}) does not match the calculated CRC32 checksum (${checksummer.digest()})`);\n    }\n    checksummer.update(new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH, byteLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH)));\n    if (expectedMessageChecksum !== checksummer.digest()) {\n        throw new Error(`The message checksum (${checksummer.digest()}) did not match the expected value of ${expectedMessageChecksum}`);\n    }\n    return {\n        headers: new DataView(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH, headerLength),\n        body: new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH + headerLength, messageLength - headerLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH + CHECKSUM_LENGTH)),\n    };\n}\n","import { Crc32 } from \"@aws-crypto/crc32\";\nimport { HeaderMarshaller } from \"./HeaderMarshaller\";\nimport { splitMessage } from \"./splitMessage\";\nexport class EventStreamCodec {\n    headerMarshaller;\n    messageBuffer;\n    isEndOfStream;\n    constructor(toUtf8, fromUtf8) {\n        this.headerMarshaller = new HeaderMarshaller(toUtf8, fromUtf8);\n        this.messageBuffer = [];\n        this.isEndOfStream = false;\n    }\n    feed(message) {\n        this.messageBuffer.push(this.decode(message));\n    }\n    endOfStream() {\n        this.isEndOfStream = true;\n    }\n    getMessage() {\n        const message = this.messageBuffer.pop();\n        const isEndOfStream = this.isEndOfStream;\n        return {\n            getMessage() {\n                return message;\n            },\n            isEndOfStream() {\n                return isEndOfStream;\n            },\n        };\n    }\n    getAvailableMessages() {\n        const messages = this.messageBuffer;\n        this.messageBuffer = [];\n        const isEndOfStream = this.isEndOfStream;\n        return {\n            getMessages() {\n                return messages;\n            },\n            isEndOfStream() {\n                return isEndOfStream;\n            },\n        };\n    }\n    encode({ headers: rawHeaders, body }) {\n        const headers = this.headerMarshaller.format(rawHeaders);\n        const length = headers.byteLength + body.byteLength + 16;\n        const out = new Uint8Array(length);\n        const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n        const checksum = new Crc32();\n        view.setUint32(0, length, false);\n        view.setUint32(4, headers.byteLength, false);\n        view.setUint32(8, checksum.update(out.subarray(0, 8)).digest(), false);\n        out.set(headers, 12);\n        out.set(body, headers.byteLength + 12);\n        view.setUint32(length - 4, checksum.update(out.subarray(8, length - 4)).digest(), false);\n        return out;\n    }\n    decode(message) {\n        const { headers, body } = splitMessage(message);\n        return { headers: this.headerMarshaller.parse(headers), body };\n    }\n    formatHeaders(rawHeaders) {\n        return this.headerMarshaller.format(rawHeaders);\n    }\n}\n","export class MessageDecoderStream {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n    [Symbol.asyncIterator]() {\n        return this.asyncIterator();\n    }\n    async *asyncIterator() {\n        for await (const bytes of this.options.inputStream) {\n            const decoded = this.options.decoder.decode(bytes);\n            yield decoded;\n        }\n    }\n}\n","export class MessageEncoderStream {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n    [Symbol.asyncIterator]() {\n        return this.asyncIterator();\n    }\n    async *asyncIterator() {\n        for await (const msg of this.options.messageStream) {\n            const encoded = this.options.encoder.encode(msg);\n            yield encoded;\n        }\n        if (this.options.includeEndFrame) {\n            yield new Uint8Array(0);\n        }\n    }\n}\n","export class SmithyMessageDecoderStream {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n    [Symbol.asyncIterator]() {\n        return this.asyncIterator();\n    }\n    async *asyncIterator() {\n        for await (const message of this.options.messageStream) {\n            const deserialized = await this.options.deserializer(message);\n            if (deserialized === undefined)\n                continue;\n            yield deserialized;\n        }\n    }\n}\n","export class SmithyMessageEncoderStream {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n    [Symbol.asyncIterator]() {\n        return this.asyncIterator();\n    }\n    async *asyncIterator() {\n        for await (const chunk of this.options.inputStream) {\n            const payloadBuf = this.options.serializer(chunk);\n            yield payloadBuf;\n        }\n    }\n}\n","export function getChunkedStream(source) {\n    let currentMessageTotalLength = 0;\n    let currentMessagePendingLength = 0;\n    let currentMessage = null;\n    let messageLengthBuffer = null;\n    const allocateMessage = (size) => {\n        if (typeof size !== \"number\") {\n            throw new Error(\"Attempted to allocate an event message where size was not a number: \" + size);\n        }\n        currentMessageTotalLength = size;\n        currentMessagePendingLength = 4;\n        currentMessage = new Uint8Array(size);\n        const currentMessageView = new DataView(currentMessage.buffer);\n        currentMessageView.setUint32(0, size, false);\n    };\n    const iterator = async function* () {\n        const sourceIterator = source[Symbol.asyncIterator]();\n        while (true) {\n            const { value, done } = await sourceIterator.next();\n            if (done) {\n                if (!currentMessageTotalLength) {\n                    return;\n                }\n                else if (currentMessageTotalLength === currentMessagePendingLength) {\n                    yield currentMessage;\n                }\n                else {\n                    throw new Error(\"Truncated event message received.\");\n                }\n                return;\n            }\n            const chunkLength = value.length;\n            let currentOffset = 0;\n            while (currentOffset < chunkLength) {\n                if (!currentMessage) {\n                    const bytesRemaining = chunkLength - currentOffset;\n                    if (!messageLengthBuffer) {\n                        messageLengthBuffer = new Uint8Array(4);\n                    }\n                    const numBytesForTotal = Math.min(4 - currentMessagePendingLength, bytesRemaining);\n                    messageLengthBuffer.set(value.slice(currentOffset, currentOffset + numBytesForTotal), currentMessagePendingLength);\n                    currentMessagePendingLength += numBytesForTotal;\n                    currentOffset += numBytesForTotal;\n                    if (currentMessagePendingLength < 4) {\n                        break;\n                    }\n                    allocateMessage(new DataView(messageLengthBuffer.buffer).getUint32(0, false));\n                    messageLengthBuffer = null;\n                }\n                const numBytesToWrite = Math.min(currentMessageTotalLength - currentMessagePendingLength, chunkLength - currentOffset);\n                currentMessage.set(value.slice(currentOffset, currentOffset + numBytesToWrite), currentMessagePendingLength);\n                currentMessagePendingLength += numBytesToWrite;\n                currentOffset += numBytesToWrite;\n                if (currentMessageTotalLength && currentMessageTotalLength === currentMessagePendingLength) {\n                    yield currentMessage;\n                    currentMessage = null;\n                    currentMessageTotalLength = 0;\n                    currentMessagePendingLength = 0;\n                }\n            }\n        }\n    };\n    return {\n        [Symbol.asyncIterator]: iterator,\n    };\n}\n","export function getUnmarshalledStream(source, options) {\n    const messageUnmarshaller = getMessageUnmarshaller(options.deserializer, options.toUtf8);\n    return {\n        [Symbol.asyncIterator]: async function* () {\n            for await (const chunk of source) {\n                const message = options.eventStreamCodec.decode(chunk);\n                const type = await messageUnmarshaller(message);\n                if (type === undefined)\n                    continue;\n                yield type;\n            }\n        },\n    };\n}\nexport function getMessageUnmarshaller(deserializer, toUtf8) {\n    return async function (message) {\n        const { value: messageType } = message.headers[\":message-type\"];\n        if (messageType === \"error\") {\n            const unmodeledError = new Error(message.headers[\":error-message\"].value || \"UnknownError\");\n            unmodeledError.name = message.headers[\":error-code\"].value;\n            throw unmodeledError;\n        }\n        else if (messageType === \"exception\") {\n            const code = message.headers[\":exception-type\"].value;\n            const exception = { [code]: message };\n            const deserializedException = await deserializer(exception);\n            if (deserializedException.$unknown) {\n                const error = new Error(toUtf8(message.body));\n                error.name = code;\n                throw error;\n            }\n            throw deserializedException[code];\n        }\n        else if (messageType === \"event\") {\n            const event = {\n                [message.headers[\":event-type\"].value]: message,\n            };\n            const deserialized = await deserializer(event);\n            if (deserialized.$unknown)\n                return;\n            return deserialized;\n        }\n        else {\n            throw Error(`Unrecognizable event type: ${message.headers[\":event-type\"].value}`);\n        }\n    };\n}\n","import { EventStreamCodec, MessageDecoderStream, MessageEncoderStream, SmithyMessageDecoderStream, SmithyMessageEncoderStream, } from \"@smithy/eventstream-codec\";\nimport { getChunkedStream } from \"./getChunkedStream\";\nimport { getMessageUnmarshaller } from \"./getUnmarshalledStream\";\nexport class EventStreamMarshaller {\n    eventStreamCodec;\n    utfEncoder;\n    constructor({ utf8Encoder, utf8Decoder }) {\n        this.eventStreamCodec = new EventStreamCodec(utf8Encoder, utf8Decoder);\n        this.utfEncoder = utf8Encoder;\n    }\n    deserialize(body, deserializer) {\n        const inputStream = getChunkedStream(body);\n        return new SmithyMessageDecoderStream({\n            messageStream: new MessageDecoderStream({ inputStream, decoder: this.eventStreamCodec }),\n            deserializer: getMessageUnmarshaller(deserializer, this.utfEncoder),\n        });\n    }\n    serialize(inputStream, serializer) {\n        return new MessageEncoderStream({\n            messageStream: new SmithyMessageEncoderStream({ inputStream, serializer }),\n            encoder: this.eventStreamCodec,\n            includeEndFrame: true,\n        });\n    }\n}\n","export const readableStreamtoIterable = (readableStream) => ({\n    [Symbol.asyncIterator]: async function* () {\n        const reader = readableStream.getReader();\n        try {\n            while (true) {\n                const { done, value } = await reader.read();\n                if (done)\n                    return;\n                yield value;\n            }\n        }\n        finally {\n            reader.releaseLock();\n        }\n    },\n});\nexport const iterableToReadableStream = (asyncIterable) => {\n    const iterator = asyncIterable[Symbol.asyncIterator]();\n    return new ReadableStream({\n        async pull(controller) {\n            const { done, value } = await iterator.next();\n            if (done) {\n                return controller.close();\n            }\n            controller.enqueue(value);\n        },\n    });\n};\n","import { EventStreamMarshaller as UniversalEventStreamMarshaller } from \"@smithy/eventstream-serde-universal\";\nimport { iterableToReadableStream, readableStreamtoIterable } from \"./utils\";\nexport class EventStreamMarshaller {\n    universalMarshaller;\n    constructor({ utf8Encoder, utf8Decoder }) {\n        this.universalMarshaller = new UniversalEventStreamMarshaller({\n            utf8Decoder,\n            utf8Encoder,\n        });\n    }\n    deserialize(body, deserializer) {\n        const bodyIterable = isReadableStream(body) ? readableStreamtoIterable(body) : body;\n        return this.universalMarshaller.deserialize(bodyIterable, deserializer);\n    }\n    serialize(input, serializer) {\n        const serialziedIterable = this.universalMarshaller.serialize(input, serializer);\n        return typeof ReadableStream === \"function\" ? iterableToReadableStream(serialziedIterable) : serialziedIterable;\n    }\n}\nconst isReadableStream = (body) => typeof ReadableStream === \"function\" && body instanceof ReadableStream;\n","import { EventStreamMarshaller } from \"./EventStreamMarshaller\";\nexport const eventStreamSerdeProvider = (options) => new EventStreamMarshaller(options);\n","export async function blobReader(blob, onChunk, chunkSize = 1024 * 1024) {\n    const size = blob.size;\n    let totalBytesRead = 0;\n    while (totalBytesRead < size) {\n        const slice = blob.slice(totalBytesRead, Math.min(size, totalBytesRead + chunkSize));\n        onChunk(new Uint8Array(await slice.arrayBuffer()));\n        totalBytesRead += slice.size;\n    }\n}\n","import { blobReader } from \"@smithy/chunked-blob-reader\";\nexport const blobHasher = async function blobHasher(hashCtor, blob) {\n    const hash = new hashCtor();\n    await blobReader(blob, (chunk) => {\n        hash.update(chunk);\n    });\n    return hash.digest();\n};\n","export const invalidProvider = (message) => () => Promise.reject(message);\n","export const BLOCK_SIZE = 64;\nexport const DIGEST_LENGTH = 16;\nexport const INIT = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476];\n","import { fromUtf8 } from \"@smithy/util-utf8\";\nimport { BLOCK_SIZE, DIGEST_LENGTH, INIT } from \"./constants\";\nexport class Md5 {\n    state;\n    buffer;\n    bufferLength;\n    bytesHashed;\n    finished;\n    constructor() {\n        this.reset();\n    }\n    update(sourceData) {\n        if (isEmptyData(sourceData)) {\n            return;\n        }\n        else if (this.finished) {\n            throw new Error(\"Attempted to update an already finished hash.\");\n        }\n        const data = convertToBuffer(sourceData);\n        let position = 0;\n        let { byteLength } = data;\n        this.bytesHashed += byteLength;\n        while (byteLength > 0) {\n            this.buffer.setUint8(this.bufferLength++, data[position++]);\n            byteLength--;\n            if (this.bufferLength === BLOCK_SIZE) {\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n        }\n    }\n    async digest() {\n        if (!this.finished) {\n            const { buffer, bufferLength: undecoratedLength, bytesHashed } = this;\n            const bitsHashed = bytesHashed * 8;\n            buffer.setUint8(this.bufferLength++, 0b10000000);\n            if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n                for (let i = this.bufferLength; i < BLOCK_SIZE; i++) {\n                    buffer.setUint8(i, 0);\n                }\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n            for (let i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n                buffer.setUint8(i, 0);\n            }\n            buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);\n            buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);\n            this.hashBuffer();\n            this.finished = true;\n        }\n        const out = new DataView(new ArrayBuffer(DIGEST_LENGTH));\n        for (let i = 0; i < 4; i++) {\n            out.setUint32(i * 4, this.state[i], true);\n        }\n        return new Uint8Array(out.buffer, out.byteOffset, out.byteLength);\n    }\n    hashBuffer() {\n        const { buffer, state } = this;\n        let a = state[0], b = state[1], c = state[2], d = state[3];\n        a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);\n        d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);\n        c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);\n        b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);\n        a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);\n        d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);\n        c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);\n        b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);\n        a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);\n        d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);\n        c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);\n        b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);\n        a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);\n        d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);\n        c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);\n        b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);\n        a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);\n        d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);\n        c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);\n        b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);\n        a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);\n        d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);\n        c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);\n        b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);\n        a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);\n        d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);\n        c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);\n        b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);\n        a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);\n        d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);\n        c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);\n        b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);\n        a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);\n        d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);\n        c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);\n        b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);\n        a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);\n        d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);\n        c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);\n        b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);\n        a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);\n        d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);\n        c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);\n        b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);\n        a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);\n        d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);\n        c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);\n        b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);\n        a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);\n        d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);\n        c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);\n        b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);\n        a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);\n        d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);\n        c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);\n        b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);\n        a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);\n        d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);\n        c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);\n        b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);\n        a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);\n        d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);\n        c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);\n        b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);\n        state[0] = (a + state[0]) & 0xffffffff;\n        state[1] = (b + state[1]) & 0xffffffff;\n        state[2] = (c + state[2]) & 0xffffffff;\n        state[3] = (d + state[3]) & 0xffffffff;\n    }\n    reset() {\n        this.state = Uint32Array.from(INIT);\n        this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));\n        this.bufferLength = 0;\n        this.bytesHashed = 0;\n        this.finished = false;\n    }\n}\nfunction cmn(q, a, b, x, s, t) {\n    a = (((a + q) & 0xffffffff) + ((x + t) & 0xffffffff)) & 0xffffffff;\n    return (((a << s) | (a >>> (32 - s))) + b) & 0xffffffff;\n}\nfunction ff(a, b, c, d, x, s, t) {\n    return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction gg(a, b, c, d, x, s, t) {\n    return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction hh(a, b, c, d, x, s, t) {\n    return cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction ii(a, b, c, d, x, s, t) {\n    return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\nfunction isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\nfunction convertToBuffer(data) {\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n","export const DEFAULTS_MODE_OPTIONS = [\"in-region\", \"cross-region\", \"mobile\", \"standard\", \"legacy\"];\n","import { memoize } from \"@smithy/property-provider\";\nimport { DEFAULTS_MODE_OPTIONS } from \"./constants\";\nexport const resolveDefaultsModeConfig = ({ defaultsMode, } = {}) => memoize(async () => {\n    const mode = typeof defaultsMode === \"function\" ? await defaultsMode() : defaultsMode;\n    switch (mode?.toLowerCase()) {\n        case \"auto\":\n            return Promise.resolve(useMobileConfiguration() ? \"mobile\" : \"standard\");\n        case \"mobile\":\n        case \"in-region\":\n        case \"cross-region\":\n        case \"standard\":\n        case \"legacy\":\n            return Promise.resolve(mode?.toLocaleLowerCase());\n        case undefined:\n            return Promise.resolve(\"legacy\");\n        default:\n            throw new Error(`Invalid parameter for \"defaultsMode\", expect ${DEFAULTS_MODE_OPTIONS.join(\", \")}, got ${mode}`);\n    }\n});\nconst useMobileConfiguration = () => {\n    const navigator = window?.navigator;\n    if (navigator?.connection) {\n        const { effectiveType, rtt, downlink } = navigator?.connection;\n        const slow = (typeof effectiveType === \"string\" && effectiveType !== \"4g\") || Number(rtt) > 100 || Number(downlink) < 10;\n        if (slow) {\n            return true;\n        }\n    }\n    return (navigator?.userAgentData?.mobile || (typeof navigator?.maxTouchPoints === \"number\" && navigator?.maxTouchPoints > 1));\n};\n","import { AwsSdkSigV4ASigner, AwsSdkSigV4Signer } from \"@aws-sdk/core\";\nimport { AwsRestXmlProtocol } from \"@aws-sdk/core/protocols\";\nimport { SignatureV4MultiRegion } from \"@aws-sdk/signature-v4-multi-region\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { parseUrl } from \"@smithy/url-parser\";\nimport { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { getAwsChunkedEncodingStream, sdkStreamMixin } from \"@smithy/util-stream\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { defaultS3HttpAuthSchemeProvider } from \"./auth/httpAuthSchemeProvider\";\nimport { defaultEndpointResolver } from \"./endpoint/endpointResolver\";\nexport const getRuntimeConfig = (config) => {\n    return {\n        apiVersion: \"2006-03-01\",\n        base64Decoder: config?.base64Decoder ?? fromBase64,\n        base64Encoder: config?.base64Encoder ?? toBase64,\n        disableHostPrefix: config?.disableHostPrefix ?? false,\n        endpointProvider: config?.endpointProvider ?? defaultEndpointResolver,\n        extensions: config?.extensions ?? [],\n        getAwsChunkedEncodingStream: config?.getAwsChunkedEncodingStream ?? getAwsChunkedEncodingStream,\n        httpAuthSchemeProvider: config?.httpAuthSchemeProvider ?? defaultS3HttpAuthSchemeProvider,\n        httpAuthSchemes: config?.httpAuthSchemes ?? [\n            {\n                schemeId: \"aws.auth#sigv4\",\n                identityProvider: (ipc) => ipc.getIdentityProvider(\"aws.auth#sigv4\"),\n                signer: new AwsSdkSigV4Signer(),\n            },\n            {\n                schemeId: \"aws.auth#sigv4a\",\n                identityProvider: (ipc) => ipc.getIdentityProvider(\"aws.auth#sigv4a\"),\n                signer: new AwsSdkSigV4ASigner(),\n            },\n        ],\n        logger: config?.logger ?? new NoOpLogger(),\n        protocol: config?.protocol ?? AwsRestXmlProtocol,\n        protocolSettings: config?.protocolSettings ?? {\n            defaultNamespace: \"com.amazonaws.s3\",\n            xmlNamespace: \"http://s3.amazonaws.com/doc/2006-03-01/\",\n            version: \"2006-03-01\",\n            serviceTarget: \"AmazonS3\",\n        },\n        sdkStreamMixin: config?.sdkStreamMixin ?? sdkStreamMixin,\n        serviceId: config?.serviceId ?? \"S3\",\n        signerConstructor: config?.signerConstructor ?? SignatureV4MultiRegion,\n        signingEscapePath: config?.signingEscapePath ?? false,\n        urlParser: config?.urlParser ?? parseUrl,\n        useArnRegion: config?.useArnRegion ?? undefined,\n        utf8Decoder: config?.utf8Decoder ?? fromUtf8,\n        utf8Encoder: config?.utf8Encoder ?? toUtf8,\n    };\n};\n","import packageInfo from \"../package.json\";\nimport { Sha1 } from \"@aws-crypto/sha1-browser\";\nimport { Sha256 } from \"@aws-crypto/sha256-browser\";\nimport { createDefaultUserAgentProvider } from \"@aws-sdk/util-user-agent-browser\";\nimport { DEFAULT_USE_DUALSTACK_ENDPOINT, DEFAULT_USE_FIPS_ENDPOINT } from \"@smithy/config-resolver\";\nimport { eventStreamSerdeProvider } from \"@smithy/eventstream-serde-browser\";\nimport { FetchHttpHandler as RequestHandler, streamCollector } from \"@smithy/fetch-http-handler\";\nimport { blobHasher as streamHasher } from \"@smithy/hash-blob-browser\";\nimport { invalidProvider } from \"@smithy/invalid-dependency\";\nimport { Md5 } from \"@smithy/md5-js\";\nimport { loadConfigsForDefaultMode } from \"@smithy/smithy-client\";\nimport { calculateBodyLength } from \"@smithy/util-body-length-browser\";\nimport { resolveDefaultsModeConfig } from \"@smithy/util-defaults-mode-browser\";\nimport { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE } from \"@smithy/util-retry\";\nimport { getRuntimeConfig as getSharedRuntimeConfig } from \"./runtimeConfig.shared\";\nexport const getRuntimeConfig = (config) => {\n    const defaultsMode = resolveDefaultsModeConfig(config);\n    const defaultConfigProvider = () => defaultsMode().then(loadConfigsForDefaultMode);\n    const clientSharedValues = getSharedRuntimeConfig(config);\n    return {\n        ...clientSharedValues,\n        ...config,\n        runtime: \"browser\",\n        defaultsMode,\n        bodyLengthChecker: config?.bodyLengthChecker ?? calculateBodyLength,\n        credentialDefaultProvider: config?.credentialDefaultProvider ?? ((_) => () => Promise.reject(new Error(\"Credential is missing\"))),\n        defaultUserAgentProvider: config?.defaultUserAgentProvider ?? createDefaultUserAgentProvider({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),\n        eventStreamSerdeProvider: config?.eventStreamSerdeProvider ?? eventStreamSerdeProvider,\n        maxAttempts: config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n        md5: config?.md5 ?? Md5,\n        region: config?.region ?? invalidProvider(\"Region is missing\"),\n        requestHandler: RequestHandler.create(config?.requestHandler ?? defaultConfigProvider),\n        retryMode: config?.retryMode ?? (async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE),\n        sha1: config?.sha1 ?? Sha1,\n        sha256: config?.sha256 ?? Sha256,\n        streamCollector: config?.streamCollector ?? streamCollector,\n        streamHasher: config?.streamHasher ?? streamHasher,\n        useDualstackEndpoint: config?.useDualstackEndpoint ?? (() => Promise.resolve(DEFAULT_USE_DUALSTACK_ENDPOINT)),\n        useFipsEndpoint: config?.useFipsEndpoint ?? (() => Promise.resolve(DEFAULT_USE_FIPS_ENDPOINT)),\n    };\n};\n","export const getAwsRegionExtensionConfiguration = (runtimeConfig) => {\n    return {\n        setRegion(region) {\n            runtimeConfig.region = region;\n        },\n        region() {\n            return runtimeConfig.region;\n        },\n    };\n};\nexport const resolveAwsRegionExtensionConfiguration = (awsRegionExtensionConfiguration) => {\n    return {\n        region: awsRegionExtensionConfiguration.region(),\n    };\n};\n","export const getHttpAuthExtensionConfiguration = (runtimeConfig) => {\n    const _httpAuthSchemes = runtimeConfig.httpAuthSchemes;\n    let _httpAuthSchemeProvider = runtimeConfig.httpAuthSchemeProvider;\n    let _credentials = runtimeConfig.credentials;\n    return {\n        setHttpAuthScheme(httpAuthScheme) {\n            const index = _httpAuthSchemes.findIndex((scheme) => scheme.schemeId === httpAuthScheme.schemeId);\n            if (index === -1) {\n                _httpAuthSchemes.push(httpAuthScheme);\n            }\n            else {\n                _httpAuthSchemes.splice(index, 1, httpAuthScheme);\n            }\n        },\n        httpAuthSchemes() {\n            return _httpAuthSchemes;\n        },\n        setHttpAuthSchemeProvider(httpAuthSchemeProvider) {\n            _httpAuthSchemeProvider = httpAuthSchemeProvider;\n        },\n        httpAuthSchemeProvider() {\n            return _httpAuthSchemeProvider;\n        },\n        setCredentials(credentials) {\n            _credentials = credentials;\n        },\n        credentials() {\n            return _credentials;\n        },\n    };\n};\nexport const resolveHttpAuthRuntimeConfig = (config) => {\n    return {\n        httpAuthSchemes: config.httpAuthSchemes(),\n        httpAuthSchemeProvider: config.httpAuthSchemeProvider(),\n        credentials: config.credentials(),\n    };\n};\n","import { getAwsRegionExtensionConfiguration, resolveAwsRegionExtensionConfiguration, } from \"@aws-sdk/region-config-resolver\";\nimport { getHttpHandlerExtensionConfiguration, resolveHttpHandlerRuntimeConfig } from \"@smithy/protocol-http\";\nimport { getDefaultExtensionConfiguration, resolveDefaultRuntimeConfig } from \"@smithy/smithy-client\";\nimport { getHttpAuthExtensionConfiguration, resolveHttpAuthRuntimeConfig } from \"./auth/httpAuthExtensionConfiguration\";\nexport const resolveRuntimeExtensions = (runtimeConfig, extensions) => {\n    const extensionConfiguration = Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig), getDefaultExtensionConfiguration(runtimeConfig), getHttpHandlerExtensionConfiguration(runtimeConfig), getHttpAuthExtensionConfiguration(runtimeConfig));\n    extensions.forEach((extension) => extension.configure(extensionConfiguration));\n    return Object.assign(runtimeConfig, resolveAwsRegionExtensionConfiguration(extensionConfiguration), resolveDefaultRuntimeConfig(extensionConfiguration), resolveHttpHandlerRuntimeConfig(extensionConfiguration), resolveHttpAuthRuntimeConfig(extensionConfiguration));\n};\n","import { getAddExpectContinuePlugin } from \"@aws-sdk/middleware-expect-continue\";\nimport { resolveFlexibleChecksumsConfig, } from \"@aws-sdk/middleware-flexible-checksums\";\nimport { getHostHeaderPlugin, resolveHostHeaderConfig, } from \"@aws-sdk/middleware-host-header\";\nimport { getLoggerPlugin } from \"@aws-sdk/middleware-logger\";\nimport { getRecursionDetectionPlugin } from \"@aws-sdk/middleware-recursion-detection\";\nimport { getRegionRedirectMiddlewarePlugin, getS3ExpressHttpSigningPlugin, getS3ExpressPlugin, getValidateBucketNamePlugin, resolveS3Config, } from \"@aws-sdk/middleware-sdk-s3\";\nimport { getUserAgentPlugin, resolveUserAgentConfig, } from \"@aws-sdk/middleware-user-agent\";\nimport { resolveRegionConfig } from \"@smithy/config-resolver\";\nimport { DefaultIdentityProviderConfig, getHttpAuthSchemeEndpointRuleSetPlugin, getHttpSigningPlugin, } from \"@smithy/core\";\nimport { getSchemaSerdePlugin } from \"@smithy/core/schema\";\nimport { resolveEventStreamSerdeConfig, } from \"@smithy/eventstream-serde-config-resolver\";\nimport { getContentLengthPlugin } from \"@smithy/middleware-content-length\";\nimport { resolveEndpointConfig, } from \"@smithy/middleware-endpoint\";\nimport { getRetryPlugin, resolveRetryConfig, } from \"@smithy/middleware-retry\";\nimport { Client as __Client, } from \"@smithy/smithy-client\";\nimport { defaultS3HttpAuthSchemeParametersProvider, resolveHttpAuthSchemeConfig, } from \"./auth/httpAuthSchemeProvider\";\nimport { CreateSessionCommand, } from \"./commands/CreateSessionCommand\";\nimport { resolveClientEndpointParameters, } from \"./endpoint/EndpointParameters\";\nimport { getRuntimeConfig as __getRuntimeConfig } from \"./runtimeConfig\";\nimport { resolveRuntimeExtensions } from \"./runtimeExtensions\";\nexport { __Client };\nexport class S3Client extends __Client {\n    config;\n    constructor(...[configuration]) {\n        const _config_0 = __getRuntimeConfig(configuration || {});\n        super(_config_0);\n        this.initConfig = _config_0;\n        const _config_1 = resolveClientEndpointParameters(_config_0);\n        const _config_2 = resolveUserAgentConfig(_config_1);\n        const _config_3 = resolveFlexibleChecksumsConfig(_config_2);\n        const _config_4 = resolveRetryConfig(_config_3);\n        const _config_5 = resolveRegionConfig(_config_4);\n        const _config_6 = resolveHostHeaderConfig(_config_5);\n        const _config_7 = resolveEndpointConfig(_config_6);\n        const _config_8 = resolveEventStreamSerdeConfig(_config_7);\n        const _config_9 = resolveHttpAuthSchemeConfig(_config_8);\n        const _config_10 = resolveS3Config(_config_9, { session: [() => this, CreateSessionCommand] });\n        const _config_11 = resolveRuntimeExtensions(_config_10, configuration?.extensions || []);\n        this.config = _config_11;\n        this.middlewareStack.use(getSchemaSerdePlugin(this.config));\n        this.middlewareStack.use(getUserAgentPlugin(this.config));\n        this.middlewareStack.use(getRetryPlugin(this.config));\n        this.middlewareStack.use(getContentLengthPlugin(this.config));\n        this.middlewareStack.use(getHostHeaderPlugin(this.config));\n        this.middlewareStack.use(getLoggerPlugin(this.config));\n        this.middlewareStack.use(getRecursionDetectionPlugin(this.config));\n        this.middlewareStack.use(getHttpAuthSchemeEndpointRuleSetPlugin(this.config, {\n            httpAuthSchemeParametersProvider: defaultS3HttpAuthSchemeParametersProvider,\n            identityProviderConfigProvider: async (config) => new DefaultIdentityProviderConfig({\n                \"aws.auth#sigv4\": config.credentials,\n                \"aws.auth#sigv4a\": config.credentials,\n            }),\n        }));\n        this.middlewareStack.use(getHttpSigningPlugin(this.config));\n        this.middlewareStack.use(getValidateBucketNamePlugin(this.config));\n        this.middlewareStack.use(getAddExpectContinuePlugin(this.config));\n        this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config));\n        this.middlewareStack.use(getS3ExpressPlugin(this.config));\n        this.middlewareStack.use(getS3ExpressHttpSigningPlugin(this.config));\n    }\n    destroy() {\n        super.destroy();\n    }\n}\n","export function ssecMiddleware(options) {\n    return (next) => async (args) => {\n        const input = { ...args.input };\n        const properties = [\n            {\n                target: \"SSECustomerKey\",\n                hash: \"SSECustomerKeyMD5\",\n            },\n            {\n                target: \"CopySourceSSECustomerKey\",\n                hash: \"CopySourceSSECustomerKeyMD5\",\n            },\n        ];\n        for (const prop of properties) {\n            const value = input[prop.target];\n            if (value) {\n                let valueForHash;\n                if (typeof value === \"string\") {\n                    if (isValidBase64EncodedSSECustomerKey(value, options)) {\n                        valueForHash = options.base64Decoder(value);\n                    }\n                    else {\n                        valueForHash = options.utf8Decoder(value);\n                        input[prop.target] = options.base64Encoder(valueForHash);\n                    }\n                }\n                else {\n                    valueForHash = ArrayBuffer.isView(value)\n                        ? new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n                        : new Uint8Array(value);\n                    input[prop.target] = options.base64Encoder(valueForHash);\n                }\n                const hash = new options.md5();\n                hash.update(valueForHash);\n                input[prop.hash] = options.base64Encoder(await hash.digest());\n            }\n        }\n        return next({\n            ...args,\n            input,\n        });\n    };\n}\nexport const ssecMiddlewareOptions = {\n    name: \"ssecMiddleware\",\n    step: \"initialize\",\n    tags: [\"SSE\"],\n    override: true,\n};\nexport const getSsecPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(ssecMiddleware(config), ssecMiddlewareOptions);\n    },\n});\nexport function isValidBase64EncodedSSECustomerKey(str, options) {\n    const base64Regex = /^(?:[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n    if (!base64Regex.test(str))\n        return false;\n    try {\n        const decodedBytes = options.base64Decoder(str);\n        return decodedBytes.length === 32;\n    }\n    catch {\n        return false;\n    }\n}\n","import { getFlexibleChecksumsPlugin } from \"@aws-sdk/middleware-flexible-checksums\";\nimport { getCheckContentLengthHeaderPlugin, getThrow200ExceptionsPlugin } from \"@aws-sdk/middleware-sdk-s3\";\nimport { getSsecPlugin } from \"@aws-sdk/middleware-ssec\";\nimport { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { PutObject$ } from \"../schemas/schemas_0\";\nexport { $Command };\nexport class PutObjectCommand extends $Command\n    .classBuilder()\n    .ep({\n    ...commonParams,\n    Bucket: { type: \"contextParams\", name: \"Bucket\" },\n    Key: { type: \"contextParams\", name: \"Key\" },\n})\n    .m(function (Command, cs, config, o) {\n    return [\n        getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n        getFlexibleChecksumsPlugin(config, {\n            requestAlgorithmMember: { 'httpHeader': 'x-amz-sdk-checksum-algorithm', 'name': 'ChecksumAlgorithm' },\n            requestChecksumRequired: false,\n        }),\n        getCheckContentLengthHeaderPlugin(config),\n        getThrow200ExceptionsPlugin(config),\n        getSsecPlugin(config),\n    ];\n})\n    .s(\"AmazonS3\", \"PutObject\", {})\n    .n(\"S3Client\", \"PutObjectCommand\")\n    .sc(PutObject$)\n    .build() {\n}\n","import { buildQueryString } from \"@smithy/querystring-builder\";\nexport function formatUrl(request) {\n    const { port, query } = request;\n    let { protocol, path, hostname } = request;\n    if (protocol && protocol.slice(-1) !== \":\") {\n        protocol += \":\";\n    }\n    if (port) {\n        hostname += `:${port}`;\n    }\n    if (path && path.charAt(0) !== \"/\") {\n        path = `/${path}`;\n    }\n    let queryString = query ? buildQueryString(query) : \"\";\n    if (queryString && queryString[0] !== \"?\") {\n        queryString = `?${queryString}`;\n    }\n    let auth = \"\";\n    if (request.username != null || request.password != null) {\n        const username = request.username ?? \"\";\n        const password = request.password ?? \"\";\n        auth = `${username}:${password}@`;\n    }\n    let fragment = \"\";\n    if (request.fragment) {\n        fragment = `#${request.fragment}`;\n    }\n    return `${protocol}//${auth}${hostname}${path}${queryString}${fragment}`;\n}\n","export const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const SHA256_HEADER = \"X-Amz-Content-Sha256\";\nexport const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const HOST_HEADER = \"host\";\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\n","import { SignatureV4MultiRegion } from \"@aws-sdk/signature-v4-multi-region\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport class S3RequestPresigner {\n    signer;\n    constructor(options) {\n        const resolvedOptions = {\n            service: options.signingName || options.service || \"s3\",\n            uriEscapePath: options.uriEscapePath || false,\n            applyChecksum: options.applyChecksum || false,\n            ...options,\n        };\n        this.signer = new SignatureV4MultiRegion(resolvedOptions);\n    }\n    presign(requestToSign, { unsignableHeaders = new Set(), hoistableHeaders = new Set(), unhoistableHeaders = new Set(), ...options } = {}) {\n        this.prepareRequest(requestToSign, {\n            unsignableHeaders,\n            unhoistableHeaders,\n            hoistableHeaders,\n        });\n        return this.signer.presign(requestToSign, {\n            expiresIn: 900,\n            unsignableHeaders,\n            unhoistableHeaders,\n            ...options,\n        });\n    }\n    presignWithCredentials(requestToSign, credentials, { unsignableHeaders = new Set(), hoistableHeaders = new Set(), unhoistableHeaders = new Set(), ...options } = {}) {\n        this.prepareRequest(requestToSign, {\n            unsignableHeaders,\n            unhoistableHeaders,\n            hoistableHeaders,\n        });\n        return this.signer.presignWithCredentials(requestToSign, credentials, {\n            expiresIn: 900,\n            unsignableHeaders,\n            unhoistableHeaders,\n            ...options,\n        });\n    }\n    prepareRequest(requestToSign, { unsignableHeaders = new Set(), unhoistableHeaders = new Set(), hoistableHeaders = new Set(), } = {}) {\n        unsignableHeaders.add(\"content-type\");\n        Object.keys(requestToSign.headers)\n            .map((header) => header.toLowerCase())\n            .filter((header) => header.startsWith(\"x-amz-server-side-encryption\"))\n            .forEach((header) => {\n            if (!hoistableHeaders.has(header)) {\n                unhoistableHeaders.add(header);\n            }\n        });\n        requestToSign.headers[SHA256_HEADER] = UNSIGNED_PAYLOAD;\n        const currentHostHeader = requestToSign.headers.host;\n        const port = requestToSign.port;\n        const expectedHostHeader = `${requestToSign.hostname}${requestToSign.port != null ? \":\" + port : \"\"}`;\n        if (!currentHostHeader || (currentHostHeader === requestToSign.hostname && requestToSign.port != null)) {\n            requestToSign.headers.host = expectedHostHeader;\n        }\n    }\n}\n","import { formatUrl } from \"@aws-sdk/util-format-url\";\nimport { getEndpointFromInstructions } from \"@smithy/middleware-endpoint\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { S3RequestPresigner } from \"./presigner\";\nexport const getSignedUrl = async (client, command, options = {}) => {\n    let s3Presigner;\n    let region;\n    if (typeof client.config.endpointProvider === \"function\") {\n        const endpointV2 = await getEndpointFromInstructions(command.input, command.constructor, client.config);\n        const authScheme = endpointV2.properties?.authSchemes?.[0];\n        if (authScheme?.name === \"sigv4a\") {\n            region = authScheme?.signingRegionSet?.join(\",\");\n        }\n        else {\n            region = authScheme?.signingRegion;\n        }\n        s3Presigner = new S3RequestPresigner({\n            ...client.config,\n            signingName: authScheme?.signingName,\n            region: async () => region,\n        });\n    }\n    else {\n        s3Presigner = new S3RequestPresigner(client.config);\n    }\n    const presignInterceptMiddleware = (next, context) => async (args) => {\n        const { request } = args;\n        if (!HttpRequest.isInstance(request)) {\n            throw new Error(\"Request to be presigned is not an valid HTTP request.\");\n        }\n        delete request.headers[\"amz-sdk-invocation-id\"];\n        delete request.headers[\"amz-sdk-request\"];\n        delete request.headers[\"x-amz-user-agent\"];\n        let presigned;\n        const presignerOptions = {\n            ...options,\n            signingRegion: options.signingRegion ?? context[\"signing_region\"] ?? region,\n            signingService: options.signingService ?? context[\"signing_service\"],\n        };\n        if (context.s3ExpressIdentity) {\n            presigned = await s3Presigner.presignWithCredentials(request, context.s3ExpressIdentity, presignerOptions);\n        }\n        else {\n            presigned = await s3Presigner.presign(request, presignerOptions);\n        }\n        return {\n            response: {},\n            output: {\n                $metadata: { httpStatusCode: 200 },\n                presigned,\n            },\n        };\n    };\n    const middlewareName = \"presignInterceptMiddleware\";\n    const clientStack = client.middlewareStack.clone();\n    clientStack.addRelativeTo(presignInterceptMiddleware, {\n        name: middlewareName,\n        relation: \"before\",\n        toMiddleware: \"awsAuthMiddleware\",\n        override: true,\n    });\n    const handler = command.resolveMiddleware(clientStack, client.config, {});\n    const { output } = await handler({ input: command.input });\n    const { presigned } = output;\n    return formatUrl(presigned);\n};\n","import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { render, da } from '@urbit/aura';\n\nimport { createDevLogger } from '../debug';\nimport { desig } from '../urbit';\nimport * as ub from '../urbit';\nimport { StorageConfiguration, StorageCredentials } from './upload';\nimport { scry, subscribe, getCurrentUserId, getCurrentUserIsHosted } from './urbit';\n\nconst logger = createDevLogger('storageApi', false);\n\nexport type StorageUpdateCredentials = ub.StorageUpdateCredentials & {\n  type: 'storageCredentialsChanged';\n};\n\nexport type StorageUpdateConfiguration = ub.StorageUpdateConfiguration & {\n  type: 'storageCongfigurationChanged';\n};\n\nexport type StorageUpdateCurrentBucket = ub.StorageUpdateCurrentBucket & {\n  type: 'storageCurrentBucketChanged';\n};\n\nexport type StorageUpdateAddBucket = ub.StorageUpdateAddBucket & {\n  type: 'storageBucketAdded';\n};\n\nexport type StorageUpdateRemoveBucket = ub.StorageUpdateRemoveBucket & {\n  type: 'storageBucketRemoved';\n};\n\nexport type StorageUpdateEndpoint = ub.StorageUpdateEndpoint & {\n  type: 'storageEndpointChanged';\n};\n\nexport type StorageUpdateAccessKeyId = ub.StorageUpdateAccessKeyId & {\n  type: 'storageAccessKeyIdChanged';\n};\n\nexport type StorageUpdateSecretAccessKey = ub.StorageUpdateSecretAccessKey & {\n  type: 'storageSecretAccessKeyChanged';\n};\n\nexport type StorageUpdateRegion = ub.StorageUpdateRegion & {\n  type: 'storageRegionChanged';\n};\n\nexport type StorageUpdateSetPresignedUrl = ub.StorageUpdateSetPresignedUrl & {\n  type: 'storagePresignedUrlChanged';\n};\n\nexport type StorageUpdateToggleService = ub.StorageUpdateToggleService & {\n  type: 'storageServiceToggled';\n};\n\nexport type StorageEventUnknown = {\n  type: 'storageEventUnknown';\n  data: unknown;\n};\n\nexport type StorageUpdate =\n  | StorageUpdateCredentials\n  | StorageUpdateConfiguration\n  | StorageUpdateCurrentBucket\n  | StorageUpdateAddBucket\n  | StorageUpdateRemoveBucket\n  | StorageUpdateEndpoint\n  | StorageUpdateAccessKeyId\n  | StorageUpdateSecretAccessKey\n  | StorageUpdateRegion\n  | StorageUpdateToggleService\n  | StorageUpdateSetPresignedUrl\n  | StorageEventUnknown;\n\nexport const subscribeToStorageUpdates = async (\n  eventHandler: (update: StorageUpdate) => void\n) => {\n  subscribe<ub.StorageUpdate>({ app: 'storage', path: '/all' }, (e) => {\n    eventHandler(toStorageUpdate(e));\n  });\n};\n\nfunction toStorageUpdate(e: ub.StorageUpdate): StorageUpdate {\n  if ('credentials' in e) {\n    return { type: 'storageCredentialsChanged', ...e };\n  } else if ('configuration' in e) {\n    return { type: 'storageCongfigurationChanged', ...e };\n  } else if ('setCurrentBucket' in e) {\n    return { type: 'storageCurrentBucketChanged', ...e };\n  } else if ('addBucket' in e) {\n    return { type: 'storageBucketAdded', ...e };\n  } else if ('removeBucket' in e) {\n    return { type: 'storageBucketRemoved', ...e };\n  } else if ('setEndpoint' in e) {\n    return { type: 'storageEndpointChanged', ...e };\n  } else if ('setAccessKeyId' in e) {\n    return { type: 'storageAccessKeyIdChanged', ...e };\n  } else if ('setSecretAccessKey' in e) {\n    return { type: 'storageSecretAccessKeyChanged', ...e };\n  } else if ('setRegion' in e) {\n    return { type: 'storageRegionChanged', ...e };\n  } else if ('toggleService' in e) {\n    return { type: 'storageServiceToggled', ...e };\n  } else if ('setPresignedUrl' in e) {\n    return { type: 'storagePresignedUrlChanged', ...e };\n  } else {\n    return { type: 'storageEventUnknown', data: e };\n  }\n}\n\nexport const getStorageConfiguration =\n  async (): Promise<StorageConfiguration> => {\n    const configuration = await scry<{\n      'storage-update': StorageUpdateConfiguration;\n    }>({\n      app: 'storage',\n      path: '/configuration',\n    });\n    return configuration['storage-update'].configuration;\n  };\n\nexport const getStorageCredentials = async (): Promise<StorageCredentials> => {\n  const credentials = await scry<{\n    'storage-update': StorageUpdateCredentials;\n  }>({\n    app: 'storage',\n    path: '/credentials',\n  });\n  return credentials['storage-update'].credentials;\n};\n\n// =============================================================================\n// Upload functionality\n// =============================================================================\n\nconst MEMEX_BASE_URL = 'https://memex.tlon.network';\n\nconst mimeToExt: Record<string, string> = {\n  'image/jpeg': '.jpg',\n  'image/jpg': '.jpg',\n  'image/png': '.png',\n  'image/gif': '.gif',\n  'image/webp': '.webp',\n  'image/heic': '.heic',\n  'image/heif': '.heif',\n};\n\nfunction getExtensionFromMimeType(mimeType?: string): string {\n  if (!mimeType) return '.jpg';\n  return mimeToExt[mimeType.toLowerCase()] || '.jpg';\n}\n\nfunction hasCustomS3Creds(\n  credentials: StorageCredentials | null\n): credentials is StorageCredentials {\n  return !!(\n    credentials?.accessKeyId &&\n    credentials?.endpoint &&\n    credentials?.secretAccessKey\n  );\n}\n\nexport interface UploadFileParams {\n  blob: Blob;\n  fileName?: string;\n  contentType?: string;\n}\n\nexport interface UploadResult {\n  url: string;\n}\n\n/**\n * Upload a file to storage.\n *\n * For hosted users, uploads via Memex.\n * For self-hosted users with custom S3, generates presigned URLs using AWS SDK.\n *\n * @param params - The file to upload (blob, optional fileName and contentType)\n */\nexport async function uploadFile(params: UploadFileParams): Promise<UploadResult> {\n  const [config, credentials] = await Promise.all([\n    getStorageConfiguration(),\n    getStorageCredentials(),\n  ]);\n\n  const contentType = params.contentType || params.blob.type || 'application/octet-stream';\n  const extension = getExtensionFromMimeType(contentType);\n  const fileName = params.fileName || `upload${extension}`;\n\n  const currentUser = getCurrentUserId();\n  const fileKey = `${desig(currentUser)}/${desig(\n    render('da', da.fromUnix(Date.now()))\n  )}-${fileName}`;\n\n  logger.log('uploading file', { fileKey, contentType, size: params.blob.size });\n\n  const isHosted = getCurrentUserIsHosted();\n  const useMemex = isHosted && (config.service === 'presigned-url' || !hasCustomS3Creds(credentials));\n\n  if (useMemex) {\n    const { hostedUrl, uploadUrl } = await getMemexUploadUrl({\n      contentLength: params.blob.size,\n      contentType,\n      fileName: fileKey,\n    });\n\n    await fetch(uploadUrl, {\n      method: 'PUT',\n      body: params.blob,\n      headers: {\n        'Cache-Control': 'public, max-age=3600',\n        'Content-Type': contentType,\n      },\n    }).then((res) => {\n      if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n    });\n\n    return { url: hostedUrl };\n  }\n\n  // Custom S3 path\n  if (!hasCustomS3Creds(credentials)) {\n    throw new Error('No storage credentials configured');\n  }\n\n  const endpoint = new URL(prefixEndpoint(credentials.endpoint));\n  const client = new S3Client({\n    endpoint: {\n      protocol: endpoint.protocol.slice(0, -1) as 'http' | 'https',\n      hostname: endpoint.host,\n      path: endpoint.pathname || '/',\n    },\n    region: config.region || 'us-east-1',\n    credentials: {\n      accessKeyId: credentials.accessKeyId,\n      secretAccessKey: credentials.secretAccessKey,\n    },\n    forcePathStyle: true,\n  });\n\n  const headers: Record<string, string> = {\n    'Content-Type': contentType,\n    'Cache-Control': 'public, max-age=3600',\n    'x-amz-acl': 'public-read',\n  };\n\n  const command = new PutObjectCommand({\n    Bucket: config.currentBucket,\n    Key: fileKey,\n    ContentType: headers['Content-Type'],\n    CacheControl: headers['Cache-Control'],\n    ACL: 'public-read',\n  });\n\n  const signedUrl = await getSignedUrl(client, command, {\n    expiresIn: 3600,\n    signableHeaders: new Set(Object.keys(headers)),\n  });\n\n  const isDigitalOcean = signedUrl.includes('digitaloceanspaces.com');\n\n  await fetch(signedUrl, {\n    method: 'PUT',\n    body: params.blob,\n    headers: isDigitalOcean ? headers : undefined,\n  }).then((res) => {\n    if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n  });\n\n  const publicUrl = config.publicUrlBase\n    ? new URL(fileKey, config.publicUrlBase).toString()\n    : signedUrl.split('?')[0];\n\n  return { url: publicUrl };\n}\n\nfunction prefixEndpoint(endpoint: string): string {\n  return endpoint.match(/https?:\\/\\//) ? endpoint : `https://${endpoint}`;\n}\n\nasync function getMemexUploadUrl(params: {\n  contentLength: number;\n  contentType: string;\n  fileName: string;\n}): Promise<{ hostedUrl: string; uploadUrl: string }> {\n  const currentUser = getCurrentUserId();\n  const token = await scry<string>({\n    app: 'genuine',\n    path: '/secret',\n  });\n\n  const endpoint = `${MEMEX_BASE_URL}/v1/${desig(currentUser)}/upload`;\n  const response = await fetch(endpoint, {\n    method: 'PUT',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ token, ...params }),\n  });\n\n  if (!response.ok) {\n    throw new Error(`Memex upload request failed: ${response.status}`);\n  }\n\n  const data: { url?: string; filePath?: string } | null = await response.json();\n  if (!data?.url || !data?.filePath) {\n    throw new Error('Invalid response from Memex');\n  }\n\n  return { hostedUrl: data.filePath, uploadUrl: data.url };\n}\n","import * as ub from '../urbit';\nimport { poke, scry, subscribe, unsubscribe } from './urbit';\n\nexport const getLastConnectionStatus = async (contactId: string) => {\n  const result = await scry<ub.ConnectionUpdate>({\n    app: 'vitals',\n    path: `/ship/${contactId}`,\n  });\n  return toConnectionStatus(result);\n};\n\nexport const checkConnectionStatus = async (\n  contactId: string,\n  callback: (data: ConnectionStatus) => boolean\n) => {\n  let unsubscribed = false;\n  const subscription = await subscribe<ub.ConnectionUpdate>(\n    {\n      app: 'vitals',\n      path: `/status/${contactId}`,\n    },\n    (e, id) => {\n      if (unsubscribed) {\n        return;\n      }\n\n      const shouldUnsubscribe = callback(toConnectionStatus(e));\n\n      if (shouldUnsubscribe && id) {\n        unsubscribed = true;\n        unsubscribe(id);\n      }\n    }\n  );\n\n  poke({\n    app: 'vitals',\n    mark: 'run-check',\n    json: contactId,\n  });\n\n  return subscription;\n};\n\nexport type ConnectionState =\n  | 'yes'\n  | 'crash'\n  | 'no-data'\n  | 'no-dns'\n  | 'no-our-planet'\n  | 'no-our-galaxy'\n  | 'no-sponsor-hit'\n  | 'no-sponsor-miss'\n  | 'no-their-galaxy'\n  | 'setting-up'\n  | 'trying-dns'\n  | 'trying-local'\n  | 'trying-target'\n  | 'trying-sponsor';\n\nexport type ConnectionStatus = {\n  status: ConnectionState;\n  complete: boolean;\n  timestamp?: number;\n};\n\nexport const toConnectionStatus = (\n  data: ub.ConnectionUpdate\n): ConnectionStatus => {\n  if ('complete' in data.status) {\n    return {\n      complete: true,\n      status: data.status.complete,\n      timestamp: data.timestamp,\n    };\n  } else {\n    return { complete: false, status: data.status.pending };\n  }\n};\n","import * as db from '../db';\nimport { InviteLinkMetadata } from '../domain/invite.types';\nimport { GroupMeta } from '../urbit';\nimport { getCurrentUserId, poke, subscribeOnce } from './urbit';\n\nconst ID_LINK_TIMEOUT = 3 * 1000;\n\n// Note: Ideally we could avoid \"faking\" a groupId for these invites, but for now:\n// 1. Must be present for %reel to make any sense of it\n// 2. Must be flag shaped for %grouper not to crash\nconst SELF_INVITE_KEY = '~zod/personal-invite-link';\n\nexport function groupsDescribe(meta: InviteLinkMetadata) {\n  return {\n    tag: 'groups-0',\n    fields: { ...meta }, // makes typescript happy\n  };\n}\n\nexport async function createInviteLink(\n  token: string,\n  metadata: { tag: string; fields: Record<string, string | undefined> }\n) {\n  return poke({\n    app: 'reel',\n    mark: 'reel-describe',\n    json: {\n      token,\n      metadata,\n    },\n  });\n}\n\nexport async function enableGroup(name: string) {\n  return await poke({\n    app: 'grouper',\n    mark: 'grouper-enable',\n    json: name,\n  });\n}\n\nexport async function checkExistingUserInviteLink(): Promise<string | null> {\n  try {\n    const tlonNetworkUrl = await subscribeOnce<string>(\n      { app: 'reel', path: `/v1/id-link/${SELF_INVITE_KEY}` },\n      ID_LINK_TIMEOUT,\n      undefined,\n      { tag: 'checkExistingUserInviteLink' }\n    );\n\n    if (!tlonNetworkUrl) {\n      return null;\n    }\n\n    return tlonNetworkUrl;\n  } catch (e) {\n    // expected to throw if it times out. Could harden this handling, but for\n    // now just assume that means it's not there\n    return null;\n  }\n}\n\nexport async function createPersonalInviteLink(\n  currentUser?: db.Contact | null\n): Promise<string> {\n  const currentUserId = getCurrentUserId();\n\n  // first tell grouper our fake group exists so it can process the bite\n  // correctly\n  await poke({\n    app: 'grouper',\n    mark: 'grouper-enable',\n    json: SELF_INVITE_KEY,\n  });\n\n  // then create the invite link entry on the providers\n  await createInviteLink(\n    SELF_INVITE_KEY,\n    groupsDescribe({\n      inviterUserId: currentUserId,\n      inviterNickname: currentUser?.nickname ?? '',\n      inviterAvatarImage: currentUser?.avatarImage ?? '',\n      inviterColor: currentUser?.color ?? '',\n      inviteType: 'user',\n      invitedGroupId: '',\n    })\n  );\n\n  const tlonNetworkUrl = await checkExistingUserInviteLink();\n  if (!tlonNetworkUrl) {\n    throw new Error('Failed to get invite link from reel');\n  }\n\n  return tlonNetworkUrl;\n}\n","import { render } from '@urbit/aura';\nimport { Atom } from '@urbit/nockjs';\n\nimport { createDevLogger } from '../debug';\nimport * as domain from '../domain';\nimport { getConstants } from '../domain';\nimport * as ub from '../urbit';\nimport { request } from './urbit';\n\nconst logger = createDevLogger('metagrabApi', false);\n\nexport async function getLinkMetadata(\n  url: string\n): Promise<domain.LinkMetadata | domain.LinkMetadataError> {\n  try {\n    const encodedUrl = render('uw', Atom.fromCord(url).number);\n    logger.log('encoded', { url, encodedUrl });\n    const response = await request<ub.LinkMetadataResponse>(\n      `/apps/groups/~/metagrab/${encodedUrl}`,\n      {\n        method: 'GET',\n        mode: 'cors',\n      },\n      10_000\n    );\n    logger.log('metagrab response', response);\n\n    if (response.status !== 200) {\n      logger.trackError(domain.AnalyticsEvent.ErrorFetchLinkMetadata, {\n        message: `bad metagrab response: ${response.status}`,\n        response,\n      });\n      return { type: 'error', reason: 'bad response' };\n    }\n\n    const parsed = parseLinkMetadataResponse(url, response);\n    if (parsed.type === 'error') {\n      logger.trackError(domain.AnalyticsEvent.ErrorFetchLinkMetadata, {\n        message: `metagrab error: ${parsed.reason}`,\n        response,\n        parsedResponse: parsed,\n      });\n    } else {\n      logger.trackEvent(domain.AnalyticsEvent.FetchLinkMetadata);\n    }\n    return parsed;\n  } catch (error) {\n    logger.trackError(domain.AnalyticsEvent.ErrorFetchLinkMetadata, error);\n    return { type: 'error', reason: 'unknown error' };\n  }\n}\n\nfunction parseLinkMetadataResponse(\n  url: string,\n  response: ub.LinkMetadataResponse\n): domain.LinkMetadata | domain.LinkMetadataError {\n  const { result } = response;\n  if (!result) {\n    return { type: 'redirect' };\n  }\n\n  if (typeof result === 'string') {\n    logger.error(`link preview error: ${result}`);\n    return { type: 'error', reason: result };\n  }\n\n  if (result.type === 'page') {\n    const { site_icon, site_name, title, image, description } = result;\n\n    const siteIconUrl = site_icon?.[0]?.value;\n    const siteName = site_name?.[0]?.value;\n    const siteTitle = title?.[0]?.value;\n    const siteDescription = description?.[0]?.value;\n    const imageData = parseImageData(url, image ?? []);\n\n    const parsed: domain.LinkMetadata = {\n      type: 'page',\n      url,\n      siteIconUrl,\n      siteName,\n      title: siteTitle,\n      description: siteDescription,\n      previewImageUrl: imageData.url,\n      previewImageHeight: imageData.height,\n      previewImageWidth: imageData.width,\n    };\n    logger.log(`parsed page metadata`, parsed);\n    return parsed;\n  }\n\n  if (result.type === 'file') {\n    const parsed: domain.LinkMetadata = {\n      type: 'file',\n      url,\n      mime: result.mime,\n      isImage: result.mime.startsWith('image/'),\n    };\n    return parsed;\n  }\n\n  return { type: 'error', reason: 'unknown' };\n}\n\nfunction grabImageUrl(url: string, data: ub.LinkMetadataItem[]) {\n  return data.find((item) => {\n    if (item.attributes?.secure_url) {\n      return true;\n    }\n\n    if (!('attributes' in item)) {\n      return true;\n    }\n\n    return !url.startsWith(item.value);\n  })?.value;\n}\n\nfunction parseImageData(url: string, data: ub.LinkMetadataItem[]) {\n  const twitter = grabImageUrl(\n    url,\n    data.filter((item) => item.namespace === 'twitter' && item.key === 'image')\n  );\n  const og = data.filter(\n    (item) => item.namespace === 'og' && item.key === 'image'\n  );\n\n  // API returns the URL as the value if there isn't a value for a\n  // particular set of tags aka \"attributes\" like image height/width\n  const ogImage = grabImageUrl(url, og);\n  const ogHeight = og.find((item) => item.attributes?.height)?.attributes\n    ?.height;\n  const ogWidth = og.find((item) => item.attributes?.width)?.attributes?.width;\n\n  return {\n    url: ogImage || twitter || data[0]?.value,\n    height: ogHeight,\n    width: ogWidth,\n  };\n}\n\nexport async function getFallbackLinkMetadata(\n  url: string\n): Promise<domain.LinkMetadata | domain.LinkMetadataError> {\n  try {\n    const env = getConstants();\n    const response = await fetch(`${env.INVITE_SERVICE_ENDPOINT}/linkPreview`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ url }),\n    });\n    if (!response.ok) {\n      throw new Error(`fallback link meta bad response: ${response.status}`);\n    }\n    const payload = await response.json();\n    if (!payload || typeof payload !== 'object') {\n      throw new Error('fallback link meta payload invalid');\n    }\n\n    const meta: domain.LinkMetadata = {\n      type: 'page',\n      url,\n      siteIconUrl: payload.siteIconUrl || '',\n      siteName: payload.siteName || '',\n      title: payload.title || '',\n      description: payload.description || '',\n      previewImageUrl: payload.previewImageUrl || '',\n    };\n    return meta;\n  } catch (e) {\n    console.log('fallback no good', e);\n    logger.trackError('Failed to get fallback link metadata response', e);\n    return { type: 'error', reason: 'unknown error' };\n  }\n}\n","import { da, render } from '@urbit/aura';\n\nimport * as db from '../db';\nimport * as ub from '../urbit';\nimport { toClientUnreads } from './activityApi';\nimport { contactToClientProfile } from './contactsApi';\nimport { toClientGroupsV7 } from './groupsApi';\nimport { toPostsData } from './postsApi';\nimport { checkIsNodeBusyWithHints, scry } from './urbit';\n\nexport async function fetchChangesSince(timestamp: number): Promise<\n  db.ChangesResult & {\n    nodeBusyStatus: 'available' | 'busy' | 'unknown';\n    hints?: string;\n  }\n> {\n  const busyResult = await checkIsNodeBusyWithHints();\n  const encodedTimestamp = render('da', da.fromUnix(timestamp));\n  const response = await scry<ub.ChangesV7>({\n    app: 'groups-ui',\n    path: `/v7/changes/${encodedTimestamp}`,\n  });\n\n  const nodeBusyStatus = await Promise.race([busyResult, timedOutDefault(500)]);\n\n  const changes = parseChanges(response);\n\n  return { ...changes, ...nodeBusyStatus };\n}\n\nexport function parseChanges(input: ub.ChangesV7): db.ChangesResult {\n  const groups = toClientGroupsV7(input.groups, true);\n\n  const channelPosts = Object.entries(input.channels).flatMap(\n    ([channelId, posts]) => (posts ? toPostsData(channelId, posts).posts : [])\n  );\n\n  const deletedChannelIds = Object.entries(input.channels).reduce<string[]>(\n    (accum, [channelId, data]) => {\n      if (data === null) {\n        accum.push(channelId);\n      }\n      return accum;\n    },\n    []\n  );\n\n  const chatPosts = Object.entries(input.chat).flatMap(([chatId, posts]) =>\n    posts ? toPostsData(chatId, posts).posts : []\n  );\n\n  const posts = [...channelPosts, ...chatPosts];\n\n  const contacts = Object.entries(input.contacts)\n    .filter(([_id, entry]) => entry)\n    .map(([id, contactEntry]) => contactToClientProfile(id, contactEntry));\n\n  const unreads = toClientUnreads(input.activity);\n\n  return { groups, posts, contacts, unreads, deletedChannelIds };\n}\n\n// We want to avoid the UX of waiting too long for the busy check to return. It's served by the runtime,\n// so should in theory always be quicker. But adding a timeout race to be safe.\nasync function timedOutDefault(\n  ms: number\n): Promise<{ nodeBusyStatus: 'unknown' }> {\n  return new Promise((resolve) =>\n    setTimeout(() => resolve({ nodeBusyStatus: 'unknown' }), ms)\n  );\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\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      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\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}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer';\n\nimport * as db from '../db';\nimport { createDevLogger, isDev } from '../debug';\nimport * as domain from '../domain';\nimport {\n  AnalyticsEvent,\n  HostedShipResponse,\n  ReservableShip,\n  ReservedShip,\n  User,\n  getConstants,\n} from '../domain';\nimport { withRetry } from '../logic';\n\nconst logger = createDevLogger('hostingApi', false);\n\ninterface HostingResponseErrorDetails {\n  status: number | null;\n  method: string;\n  path: string;\n  responseText?: string;\n}\nexport class HostingError extends Error {\n  details: HostingResponseErrorDetails;\n  shouldTrack: boolean;\n\n  constructor(\n    message: string,\n    details: HostingResponseErrorDetails,\n    shouldTrack: boolean = true\n  ) {\n    super(message);\n    this.name = 'HostingError';\n    this.details = details;\n    this.shouldTrack = shouldTrack;\n  }\n}\n\nconst ALREADY_IN_USE = 409;\nconst CANNOT_BOOT = 409;\nconst RATE_LIMITED = 429;\nconst EXPECTED_ERRORS = [ALREADY_IN_USE, CANNOT_BOOT, RATE_LIMITED];\n\nconst MANUAL_UPDATE_REQUIRED_MESSAGE = 'manual update has been requested';\n\nconst hostingFetchResponse = async (\n  path: string,\n  init?: RequestInit\n): Promise<Response> => {\n  const env = getConstants();\n  const fetchInit = {\n    ...init,\n  };\n  if (env.API_AUTH_USERNAME && env.API_AUTH_PASSWORD) {\n    fetchInit.headers = {\n      Authorization: `Basic ${Buffer.from(\n        `${env.API_AUTH_USERNAME}:${env.API_AUTH_PASSWORD}`\n      ).toString('base64')}`,\n      ...fetchInit.headers,\n    };\n  }\n\n  if (isDev()) {\n    console.debug('Request:', path);\n  }\n\n  const hostingCookie = await db.hostingAuthToken.getValue();\n  const modifiedCookie = hostingCookie.replace(' HttpOnly;', '');\n  const controller = new AbortController();\n  const timeoutId = setTimeout(() => controller.abort(), 15_000);\n  const response = await fetch(`${env.API_URL}${path}`, {\n    ...fetchInit,\n    credentials: 'include',\n    signal: controller.signal,\n    headers: {\n      ...fetchInit.headers,\n      Cookie: modifiedCookie,\n    },\n  });\n  clearTimeout(timeoutId);\n  return response;\n};\n\nconst hostingFetch = async <T extends object>(\n  path: string,\n  init?: RequestInit\n): Promise<T> => {\n  const startTime = performance.now();\n  let response = null;\n  try {\n    response = await hostingFetchResponse(path, init);\n  } catch (e) {\n    const hostingErr = new HostingError(\n      e.name && e.name === 'AbortError'\n        ? 'Request timed out'\n        : 'Unknown error occurred',\n      {\n        method: init?.method ?? 'GET',\n        path,\n        status: null,\n      }\n    );\n    logger.trackEvent(AnalyticsEvent.UnexpectedHostingError, {\n      details: hostingErr.details,\n      errorMessage: hostingErr.message,\n      errorStack: hostingErr.stack,\n    });\n    throw hostingErr;\n  }\n\n  const stopTime = performance.now();\n  const responseText = await response.text();\n\n  let result: { message: string } | T = { message: 'Empty response' };\n  try {\n    result = JSON.parse(responseText) as { message: string } | T;\n  } catch (e) {\n    const hostingErr = new HostingError('Failed to parse response', {\n      method: init?.method ?? 'GET',\n      path,\n      status: response.status,\n      responseText,\n    });\n    logger.trackEvent(AnalyticsEvent.UnexpectedHostingError, {\n      details: hostingErr.details,\n      errorMessage: hostingErr.message,\n      errorStack: hostingErr.stack,\n    });\n    throw hostingErr;\n  }\n\n  if (!response.ok) {\n    const err = new HostingError(\n      'message' in result ? result.message : 'An unknown error has occurred.',\n      {\n        method: init?.method ?? 'GET',\n        path,\n        status: response.status,\n      }\n    );\n    const eventId = EXPECTED_ERRORS.includes(err.details.status ?? 0)\n      ? AnalyticsEvent.ExpectedHostingError\n      : AnalyticsEvent.UnexpectedHostingError;\n    logger.trackEvent(eventId, {\n      details: err.details,\n      errorMessage: err.message,\n      errorStack: err.stack,\n    });\n    throw err;\n  }\n\n  try {\n    const durationSeconds = Number(((stopTime - startTime) / 1000).toFixed(2));\n    logger.trackEvent('Hosting Request Analytics', {\n      path: path.split('?')[0],\n      method: init?.method ?? 'GET',\n      durationSeconds,\n    });\n  } catch (e) {\n    logger.trackError('Failed to Capture Hosting Request Analytics', {\n      errorMessage: e.toString(),\n    });\n  }\n\n  return result as T;\n};\n\nconst rawHostingFetch = async (path: string, init?: RequestInit) => {\n  const response = await hostingFetchResponse(path, init);\n  return response;\n};\n\nexport type HostingHeartBeatCode = 'expired' | 'ok' | 'unknown';\nexport const getHostingHeartBeat = async (): Promise<HostingHeartBeatCode> => {\n  const userId = await db.hostingUserId.getValue();\n  const response = await rawHostingFetch(`/v1/users/${userId}`);\n\n  // 401 indicates that the authentication token is expired.\n  if (response.status === 401) {\n    return 'expired';\n  }\n\n  // if we get a response in the 2xx range, we know it's definitely still valid\n  if (response.status >= 200 && response.status < 300) {\n    return 'ok';\n  }\n\n  return 'unknown';\n};\n\nexport const getHostingAvailability = async (params: {\n  email?: string;\n  lure?: string;\n  priorityToken?: string;\n}) =>\n  hostingFetch<{\n    enabled: boolean;\n    validEmail: boolean;\n  }>(`/v1/sign-up?${new URLSearchParams(params)}`);\n\nexport const addUserToWaitlist = async ({\n  email,\n  lure,\n}: {\n  email: string;\n  lure?: string;\n}) =>\n  hostingFetch<object>(\n    `/v1/users/add-to-waitlist${lure ? `?lure=${lure}` : ''}`,\n    {\n      method: 'POST',\n      body: JSON.stringify(email),\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    }\n  );\n\nexport const signUpHostingUser = async (params: {\n  phoneNumber?: string;\n  otp?: string;\n  email?: string;\n  password?: string;\n  lure?: string;\n  priorityToken?: string;\n  recaptchaToken?: string;\n  platform?: 'ios' | 'android' | 'web' | 'ios_test' | 'android_test';\n}) => {\n  const response = await hostingFetchResponse('/v1/sign-up', {\n    method: 'POST',\n    body: JSON.stringify({\n      phoneNumber: params.phoneNumber,\n      otp: params.otp,\n      email: params.email,\n      password: params.password,\n      lure: params.lure,\n      priorityToken: params.priorityToken,\n      recaptcha: {\n        recaptchaToken: { token: params.recaptchaToken || '' },\n        recaptchaPlatform: params.platform,\n      },\n    }),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\n  if (!response.ok) {\n    const message = await response.text();\n    const hostingErr = new HostingError(message, {\n      status: response.status,\n      method: 'POST',\n      path: '/v1/sign-up',\n    });\n    throw hostingErr;\n  }\n\n  const result = (await response.json()) as HostingError | User;\n\n  const setCookie = response.headers.get('Set-Cookie');\n  if (setCookie) {\n    db.hostingAuthToken.setValue(setCookie);\n  }\n\n  const userId = 'id' in result && (result as User).id;\n  if (userId) {\n    db.hostingUserId.setValue(userId);\n  }\n\n  return result as User;\n};\n\nexport const logInHostingUser = async (params: {\n  email?: string;\n  phoneNumber?: string;\n  otp?: string;\n  password?: string;\n}) => {\n  const response = await hostingFetchResponse('/v1/login', {\n    method: 'POST',\n    body: JSON.stringify(params),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\n  const result = (await response.json()) as HostingError | User;\n  if (!response.ok) {\n    throw new HostingError(\n      'message' in result ? result.message : 'An unknown error has occurred.',\n      { status: response.status, method: 'POST', path: '/v1/login' }\n    );\n  }\n\n  const setCookie = response.headers.get('Set-Cookie');\n  const user = 'id' in result && (result as User).id;\n  if (setCookie) {\n    db.hostingAuthToken.setValue(setCookie);\n  }\n\n  if (user) {\n    db.hostingUserId.setValue(user);\n  }\n\n  return result as User;\n};\n\nexport const getHostingUser = async (userId: string) => {\n  const hostingUser = await hostingFetch<User>(`/v1/users/${userId}`);\n  return hostingUser;\n};\n\nexport const requestPhoneVerify = async (userId: string, phoneNumber: string) =>\n  hostingFetch<object>(`/v1/users/${userId}/request-phone-verify`, {\n    method: 'POST',\n    body: JSON.stringify(phoneNumber),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const requestSignupOtp = async ({\n  email,\n  phoneNumber,\n  recaptchaToken,\n  platform,\n}: {\n  email?: string;\n  phoneNumber?: string;\n  recaptchaToken?: string;\n  platform?: 'ios' | 'android' | 'web' | 'ios_test' | 'android_test';\n}) => {\n  try {\n    await hostingFetch('/v1/request-otp', {\n      method: 'POST',\n      body: JSON.stringify({\n        email,\n        phoneNumber,\n        otpMode: 'SignupOTP',\n        recaptcha: {\n          recaptchaToken: { token: recaptchaToken || '' },\n          recaptchaPlatform: platform,\n        },\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    });\n  } catch (err) {\n    if (err instanceof HostingError) {\n      const status = err.details.status;\n      if (status === ALREADY_IN_USE) {\n        logger.trackEvent('Signup Creds Already In Use', {\n          email,\n          phoneNumber,\n        });\n      } else if (status === RATE_LIMITED) {\n        logger.trackEvent('Signup OTP Rate Limited', { email, phoneNumber });\n      } else {\n        logger.trackEvent(AnalyticsEvent.FailedSignupOTP, {\n          details: err.details,\n          errorMessage: err.message,\n          email,\n          phoneNumber,\n        });\n      }\n    }\n    throw err;\n  }\n};\n\nexport const requestLoginOtp = async ({\n  phoneNumber,\n  email,\n  recaptchaToken,\n  platform,\n}: {\n  phoneNumber?: string;\n  email?: string;\n  recaptchaToken: string;\n  platform: 'ios' | 'android' | 'web' | 'ios_test' | 'android_test';\n}) => {\n  if (!phoneNumber && !email) {\n    throw new Error('Either phone number or email must be provided');\n  }\n\n  const response = await rawHostingFetch('/v1/request-otp', {\n    method: 'POST',\n    body: JSON.stringify({\n      phoneNumber,\n      email,\n      otpMode: 'LoginOTP',\n      recaptcha: {\n        recaptchaToken: { token: recaptchaToken || '' },\n        recaptchaPlatform: platform,\n      },\n    }),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\n  if (!response.ok) {\n    const WAIT_TO_RESEND = 429;\n    const hostingError = new HostingError(\n      'Failed to send login OTP',\n      { status: response.status, method: 'POST', path: '/v1/request-otp' },\n      [WAIT_TO_RESEND].includes(response.status)\n    );\n\n    if (hostingError.shouldTrack) {\n      logger.trackError(AnalyticsEvent.FailedLoginOTP, {\n        status: response.status,\n      });\n    }\n\n    throw hostingError;\n  }\n};\n\nexport const checkPhoneVerify = async (userId: string, code: string) =>\n  hostingFetch<object>(`/v1/users/${userId}/check-phone-verify`, {\n    method: 'POST',\n    body: JSON.stringify(code),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const verifyEmailDigits = async (email: string, digits: string) =>\n  hostingFetch<object>(`/v1/verify-email-digits/${email}/${digits}`);\n\nexport const assignShipToUser = async (userId: string) => {\n  const response = await hostingFetch<domain.AssignmentResponse>(\n    `/v1/users/${userId}/assign-ship`,\n    {\n      method: 'PATCH',\n      body: JSON.stringify({}), // indicates any available ship is fine\n      headers: {\n        'Content-Type': 'application/json',\n      },\n    }\n  );\n\n  const nodeId = response.ship.ship.id;\n  const isReady = response.ship.status.phase === 'Ready';\n  const code = response.code;\n  const personalInviteToken = response.personalLureToken || null;\n\n  if (!nodeId) {\n    throw new Error('Invalid ship assignment response');\n  }\n\n  return { nodeId, isReady, code, personalInviteToken };\n};\n\nexport const getReservableShips = async (user: string) =>\n  hostingFetch<ReservableShip[]>(`/v1/users/${user}/reservable-ships`);\n\nexport const reserveShip = async (userId: string, ship: string) =>\n  hostingFetch<ReservedShip>(`/v1/users/${userId}/reserve-ship`, {\n    method: 'POST',\n    body: JSON.stringify({ ship }),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const allocateReservedShip = async (user: string) =>\n  hostingFetch<object>(`/v1/users/${user}/allocate-reserved-ship`, {\n    method: 'PATCH',\n  });\n\nexport const resendEmailVerification = async (userId: string) =>\n  hostingFetch<object>(`/v1/users/${userId}/verify-email`, {\n    method: 'PUT',\n  });\n\nexport const requestPasswordReset = async (email: string) =>\n  hostingFetch<object>('/v1/users/password-reset', {\n    method: 'POST',\n    body: JSON.stringify({ email }),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const getShip = async (shipId: string) => {\n  const ship = await hostingFetch<HostedShipResponse>(`/v1/ships/${shipId}`);\n  return ship;\n};\n\nexport const clearShipRevivalStatus = async (shipId: string) => {\n  return hostingFetch(`/v1/ships/${shipId}/wayfinding`, {\n    method: 'PATCH',\n  });\n};\n\nexport const getShipAccessCode = async (shipId: string) =>\n  hostingFetch<{ code: string }>(`/v1/ships/${shipId}/network`);\n\nexport const resumeShip = async (shipId: string) =>\n  hostingFetch<object>(`/v1/ships/${shipId}/resume`, {\n    method: 'PATCH',\n  });\n\nexport const bootShip = async (shipId: string) =>\n  hostingFetch<object>('/v1/ships', {\n    method: 'POST',\n    body: JSON.stringify({ ship: shipId }),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const getNodeStatus = async (\n  nodeId: string\n): Promise<{ status: domain.HostedNodeStatus; showWayfinding: boolean }> => {\n  let result = null;\n  try {\n    result = await getShip(nodeId);\n  } catch (e) {\n    throw new Error('Hosting API call failed');\n  }\n\n  const nodeStatus = result.status ? result.status.phase ?? 'Unknown' : null;\n  const isBooting = result.ship?.booting;\n  const manualUpdateNeeded = result.ship?.manualUpdateNeeded;\n  const showWayfinding = result.ship?.showWayfinding ?? false;\n\n  // If user has a ready ship, let's use it\n  if (nodeStatus === 'Ready') {\n    return { status: domain.HostedNodeStatus.Running, showWayfinding };\n  }\n\n  // If user has a paused ship, resume it\n  if (nodeStatus === 'Suspended') {\n    if (!isBooting) {\n      await resumeShip(nodeId);\n    }\n    return { status: domain.HostedNodeStatus.Paused, showWayfinding };\n  }\n\n  if (nodeStatus === 'UnderMaintenance' || manualUpdateNeeded) {\n    return { status: domain.HostedNodeStatus.UnderMaintenance, showWayfinding };\n  }\n\n  // If user has a suspended ship, boot it\n  if (nodeStatus === null) {\n    if (!isBooting) {\n      // missing status means the ship is stopped but isn't gauranteed\n      // to be bootable\n      try {\n        await bootShip(nodeId);\n      } catch (err) {\n        if (\n          err.message &&\n          err.message.includes(MANUAL_UPDATE_REQUIRED_MESSAGE)\n        ) {\n          return {\n            status: domain.HostedNodeStatus.UnderMaintenance,\n            showWayfinding,\n          };\n        }\n        throw err;\n      }\n    }\n    return { status: domain.HostedNodeStatus.Suspended, showWayfinding };\n  }\n\n  return { status: domain.HostedNodeStatus.Unknown, showWayfinding };\n};\n\nexport const inviteShipWithLure = async (params: {\n  ship: string;\n  lure: string;\n}) =>\n  hostingFetch<object>('/v1/raw-bite', {\n    method: 'POST',\n    body: JSON.stringify(params),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\nexport const checkIfAccountDeleted = async (): Promise<boolean> => {\n  const hostingUserId = await db.hostingUserId.getValue();\n  if (hostingUserId) {\n    try {\n      const user = await withRetry(() => getHostingUser(hostingUserId), {\n        startingDelay: 500,\n        numOfAttempts: 5,\n      });\n      if (!user.verified) {\n        return true;\n      }\n    } catch (err) {\n      return true;\n    }\n  }\n\n  return false;\n};\n","/**\n * OpenRouter API integration for AI-powered message summarization\n */\n\nimport { getConstants } from '../domain/constants';\n\nconst OPENROUTER_API_URL = 'https://openrouter.ai/api/v1/chat/completions';\n\nconst SUMMARIZATION_PROMPT = `Summarize this software development technical conversation concisely. Each message shows the author's user ID.\n\nInstructions:\n- Keep summary under 200 words\n- Use bullet points\n- Preserve technical terms, ship names (~zod, ~bus), and code exactly\n- Focus on key points and decisions\n\nConversation:\n\n[CONVERSATION]\n\nFormat:\nTOPIC: [one sentence]\nKEY POINTS: [3-5 bullets]\nTECHNICAL DETAILS: [code/errors if present]\nDECISIONS: [if any]\nACTION ITEMS: [if any]`;\n\nexport interface SummarizeMessageParams {\n  messageText: string;\n}\n\nexport interface SummarizeMessageResponse {\n  summary: string;\n  error?: string;\n  errorDetails?: {\n    message: string;\n    name: string;\n    stack?: string;\n    responseStatus?: number;\n    responseText?: string;\n    responseData?: any;\n    responseHeaders?: Record<string, string>;\n  };\n}\n\n/**\n * Summarizes a message using OpenRouter's API\n * @throws {Error} If OPENROUTER_API_KEY is not configured\n */\nexport async function summarizeMessage({\n  messageText,\n}: SummarizeMessageParams): Promise<SummarizeMessageResponse> {\n  const constants = getConstants();\n\n  if (!constants.OPENROUTER_API_KEY || constants.OPENROUTER_API_KEY.length === 0) {\n    throw new Error(\n      'OPENROUTER_API_KEY is not configured. Please set either OPENROUTER_API_KEY (native/mobile) or VITE_OPENROUTER_API_KEY (web) environment variable.'\n    );\n  }\n\n  try {\n    const prompt = SUMMARIZATION_PROMPT.replace('[CONVERSATION]', messageText);\n\n    const response = await fetch(OPENROUTER_API_URL, {\n      method: 'POST',\n      headers: {\n        'Authorization': `Bearer ${constants.OPENROUTER_API_KEY}`,\n        'HTTP-Referer': 'https://tlon.io',\n        'X-Title': 'Tlon Messenger',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        model: 'amazon/nova-2-lite-v1:free',\n        messages: [\n          {\n            role: 'user',\n            content: prompt,\n          },\n        ],\n        temperature: 0.3,\n        max_tokens: 900,\n      }),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      let errorData = null;\n\n      // Try to parse error response as JSON\n      try {\n        errorData = JSON.parse(errorText);\n      } catch {\n        // If parsing fails, errorData stays null\n      }\n\n      if (response.status === 429) {\n        throw new Error('AI provider is rate-limited. Please try again in a few moments.');\n      }\n\n      const error = new Error(`OpenRouter API error: ${response.status} - ${errorText}`);\n      // Attach additional context for PostHog tracking\n      (error as any).responseStatus = response.status;\n      (error as any).responseText = errorText;\n      (error as any).responseData = errorData;\n      (error as any).responseHeaders = Object.fromEntries(response.headers.entries());\n      throw error;\n    }\n\n    const data = await response.json();\n\n    if (!data.choices || data.choices.length === 0) {\n      const error = new Error('No response from OpenRouter API');\n      (error as any).responseData = data;\n      throw error;\n    }\n\n    const summary = data.choices[0].message?.content;\n\n    if (!summary) {\n      const error = new Error('Empty summary received from OpenRouter API');\n      (error as any).responseData = data;\n      throw error;\n    }\n\n    return { summary };\n  } catch (error) {\n    console.error('Error summarizing message:', error);\n\n    // Extract all error details for logging\n    const errorDetails: any = {\n      message: error instanceof Error ? error.message : 'Unknown error occurred',\n      name: error instanceof Error ? error.name : 'UnknownError',\n      stack: error instanceof Error ? error.stack : undefined,\n    };\n\n    // Include additional properties if they exist\n    if (error && typeof error === 'object') {\n      const errorObj = error as any;\n      if (errorObj.responseStatus) errorDetails.responseStatus = errorObj.responseStatus;\n      if (errorObj.responseText) errorDetails.responseText = errorObj.responseText;\n      if (errorObj.responseData) errorDetails.responseData = errorObj.responseData;\n      if (errorObj.responseHeaders) errorDetails.responseHeaders = errorObj.responseHeaders;\n    }\n\n    return {\n      summary: '',\n      error: errorDetails.message,\n      errorDetails, // Include full details for PostHog\n    };\n  }\n}\n","import * as db from '../db';\n\nexport async function getSystemContacts(): Promise<db.SystemContact[]> {\n  // stub for web\n  return [];\n}\n","import { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nexport class EventStreamSerde {\n    marshaller;\n    serializer;\n    deserializer;\n    serdeContext;\n    defaultContentType;\n    constructor({ marshaller, serializer, deserializer, serdeContext, defaultContentType, }) {\n        this.marshaller = marshaller;\n        this.serializer = serializer;\n        this.deserializer = deserializer;\n        this.serdeContext = serdeContext;\n        this.defaultContentType = defaultContentType;\n    }\n    async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {\n        const marshaller = this.marshaller;\n        const eventStreamMember = requestSchema.getEventStreamMember();\n        const unionSchema = requestSchema.getMemberSchema(eventStreamMember);\n        const serializer = this.serializer;\n        const defaultContentType = this.defaultContentType;\n        const initialRequestMarker = Symbol(\"initialRequestMarker\");\n        const eventStreamIterable = {\n            async *[Symbol.asyncIterator]() {\n                if (initialRequest) {\n                    const headers = {\n                        \":event-type\": { type: \"string\", value: \"initial-request\" },\n                        \":message-type\": { type: \"string\", value: \"event\" },\n                        \":content-type\": { type: \"string\", value: defaultContentType },\n                    };\n                    serializer.write(requestSchema, initialRequest);\n                    const body = serializer.flush();\n                    yield {\n                        [initialRequestMarker]: true,\n                        headers,\n                        body,\n                    };\n                }\n                for await (const page of eventStream) {\n                    yield page;\n                }\n            },\n        };\n        return marshaller.serialize(eventStreamIterable, (event) => {\n            if (event[initialRequestMarker]) {\n                return {\n                    headers: event.headers,\n                    body: event.body,\n                };\n            }\n            const unionMember = Object.keys(event).find((key) => {\n                return key !== \"__type\";\n            }) ?? \"\";\n            const { additionalHeaders, body, eventType, explicitPayloadContentType } = this.writeEventBody(unionMember, unionSchema, event);\n            const headers = {\n                \":event-type\": { type: \"string\", value: eventType },\n                \":message-type\": { type: \"string\", value: \"event\" },\n                \":content-type\": { type: \"string\", value: explicitPayloadContentType ?? defaultContentType },\n                ...additionalHeaders,\n            };\n            return {\n                headers,\n                body,\n            };\n        });\n    }\n    async deserializeEventStream({ response, responseSchema, initialResponseContainer, }) {\n        const marshaller = this.marshaller;\n        const eventStreamMember = responseSchema.getEventStreamMember();\n        const unionSchema = responseSchema.getMemberSchema(eventStreamMember);\n        const memberSchemas = unionSchema.getMemberSchemas();\n        const initialResponseMarker = Symbol(\"initialResponseMarker\");\n        const asyncIterable = marshaller.deserialize(response.body, async (event) => {\n            const unionMember = Object.keys(event).find((key) => {\n                return key !== \"__type\";\n            }) ?? \"\";\n            const body = event[unionMember].body;\n            if (unionMember === \"initial-response\") {\n                const dataObject = await this.deserializer.read(responseSchema, body);\n                delete dataObject[eventStreamMember];\n                return {\n                    [initialResponseMarker]: true,\n                    ...dataObject,\n                };\n            }\n            else if (unionMember in memberSchemas) {\n                const eventStreamSchema = memberSchemas[unionMember];\n                if (eventStreamSchema.isStructSchema()) {\n                    const out = {};\n                    let hasBindings = false;\n                    for (const [name, member] of eventStreamSchema.structIterator()) {\n                        const { eventHeader, eventPayload } = member.getMergedTraits();\n                        hasBindings = hasBindings || Boolean(eventHeader || eventPayload);\n                        if (eventPayload) {\n                            if (member.isBlobSchema()) {\n                                out[name] = body;\n                            }\n                            else if (member.isStringSchema()) {\n                                out[name] = (this.serdeContext?.utf8Encoder ?? toUtf8)(body);\n                            }\n                            else if (member.isStructSchema()) {\n                                out[name] = await this.deserializer.read(member, body);\n                            }\n                        }\n                        else if (eventHeader) {\n                            const value = event[unionMember].headers[name]?.value;\n                            if (value != null) {\n                                if (member.isNumericSchema()) {\n                                    if (value && typeof value === \"object\" && \"bytes\" in value) {\n                                        out[name] = BigInt(value.toString());\n                                    }\n                                    else {\n                                        out[name] = Number(value);\n                                    }\n                                }\n                                else {\n                                    out[name] = value;\n                                }\n                            }\n                        }\n                    }\n                    if (hasBindings) {\n                        return {\n                            [unionMember]: out,\n                        };\n                    }\n                    if (body.byteLength === 0) {\n                        return {\n                            [unionMember]: {},\n                        };\n                    }\n                }\n                return {\n                    [unionMember]: await this.deserializer.read(eventStreamSchema, body),\n                };\n            }\n            else {\n                return {\n                    $unknown: event,\n                };\n            }\n        });\n        const asyncIterator = asyncIterable[Symbol.asyncIterator]();\n        const firstEvent = await asyncIterator.next();\n        if (firstEvent.done) {\n            return asyncIterable;\n        }\n        if (firstEvent.value?.[initialResponseMarker]) {\n            if (!responseSchema) {\n                throw new Error(\"@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.\");\n            }\n            for (const [key, value] of Object.entries(firstEvent.value)) {\n                initialResponseContainer[key] = value;\n            }\n        }\n        return {\n            async *[Symbol.asyncIterator]() {\n                if (!firstEvent?.value?.[initialResponseMarker]) {\n                    yield firstEvent.value;\n                }\n                while (true) {\n                    const { done, value } = await asyncIterator.next();\n                    if (done) {\n                        break;\n                    }\n                    yield value;\n                }\n            },\n        };\n    }\n    writeEventBody(unionMember, unionSchema, event) {\n        const serializer = this.serializer;\n        let eventType = unionMember;\n        let explicitPayloadMember = null;\n        let explicitPayloadContentType;\n        const isKnownSchema = (() => {\n            const struct = unionSchema.getSchema();\n            return struct[4].includes(unionMember);\n        })();\n        const additionalHeaders = {};\n        if (!isKnownSchema) {\n            const [type, value] = event[unionMember];\n            eventType = type;\n            serializer.write(15, value);\n        }\n        else {\n            const eventSchema = unionSchema.getMemberSchema(unionMember);\n            if (eventSchema.isStructSchema()) {\n                for (const [memberName, memberSchema] of eventSchema.structIterator()) {\n                    const { eventHeader, eventPayload } = memberSchema.getMergedTraits();\n                    if (eventPayload) {\n                        explicitPayloadMember = memberName;\n                    }\n                    else if (eventHeader) {\n                        const value = event[unionMember][memberName];\n                        let type = \"binary\";\n                        if (memberSchema.isNumericSchema()) {\n                            if ((-2) ** 31 <= value && value <= 2 ** 31 - 1) {\n                                type = \"integer\";\n                            }\n                            else {\n                                type = \"long\";\n                            }\n                        }\n                        else if (memberSchema.isTimestampSchema()) {\n                            type = \"timestamp\";\n                        }\n                        else if (memberSchema.isStringSchema()) {\n                            type = \"string\";\n                        }\n                        else if (memberSchema.isBooleanSchema()) {\n                            type = \"boolean\";\n                        }\n                        if (value != null) {\n                            additionalHeaders[memberName] = {\n                                type,\n                                value,\n                            };\n                            delete event[unionMember][memberName];\n                        }\n                    }\n                }\n                if (explicitPayloadMember !== null) {\n                    const payloadSchema = eventSchema.getMemberSchema(explicitPayloadMember);\n                    if (payloadSchema.isBlobSchema()) {\n                        explicitPayloadContentType = \"application/octet-stream\";\n                    }\n                    else if (payloadSchema.isStringSchema()) {\n                        explicitPayloadContentType = \"text/plain\";\n                    }\n                    serializer.write(payloadSchema, event[unionMember][explicitPayloadMember]);\n                }\n                else {\n                    serializer.write(eventSchema, event[unionMember]);\n                }\n            }\n            else {\n                throw new Error(\"@smithy/core/event-streams - non-struct member not supported in event stream union.\");\n            }\n        }\n        const messageSerialization = serializer.flush();\n        const body = typeof messageSerialization === \"string\"\n            ? (this.serdeContext?.utf8Decoder ?? fromUtf8)(messageSerialization)\n            : messageSerialization;\n        return {\n            body,\n            eventType,\n            explicitPayloadContentType,\n            additionalHeaders,\n        };\n    }\n}\n"],"names":["undefined","VERSION","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","INVALID_TEMPL_VAR_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","LAZY_WHILE_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","htmlEscapes","htmlUnescapes","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","freeProcess","nodeUtil","types","nodeIsArrayBuffer","nodeIsDate","nodeIsMap","nodeIsRegExp","nodeIsSet","nodeIsTypedArray","apply","func","thisArg","args","arrayAggregator","array","setter","iteratee","accumulator","index","length","value","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","values","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","asciiToArray","string","asciiWords","baseFindKey","collection","eachFunc","key","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","basePropertyOf","baseReduce","baseSortBy","comparer","current","baseTimes","n","baseToPairs","props","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","getValue","hasUnicode","hasUnicodeWord","iteratorToArray","iterator","data","mapToArray","map","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","strictLastIndexOf","stringSize","unicodeSize","stringToArray","unicodeToArray","unescapeHtmlChar","unicodeWords","runInContext","context","_","Array","Date","Error","Function","Math","Object","RegExp","String","TypeError","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","idCounter","maskSrcKey","uid","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Symbol","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","symIterator","symToStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","lazyClone","copyArray","lazyReverse","lazyValue","dir","isArr","isRight","arrLength","view","getView","start","end","iteratees","iterLength","takeCount","baseWrapperValue","outer","iterIndex","type","computed","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","size","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","source","copyObject","keys","baseAssignIn","keysIn","baseAt","paths","skip","get","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","stacked","isSet","subValue","isMap","keysFunc","getAllKeysIn","getAllKeys","baseConforms","baseConformsTo","baseDelay","wait","setTimeout","baseDifference","includes","isCommon","valuesLength","valuesIndex","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFill","toInteger","toLength","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseInRange","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInverter","baseInvoke","parent","last","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","pattern","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","newValue","safeGet","mergeFunc","isTyped","isArrayLikeObject","cloneTypedArray","isPlainObject","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","criteria","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRange","step","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","isRootPrimitive","obj","baseUpdate","updater","baseWhile","isDrop","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","toString","castRest","castSlice","clearTimeout","id","buffer","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","cloneRegExp","regexp","cloneSymbol","symbol","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","othCriteria","ordersLength","order","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createBind","isBind","Ctor","createCtor","wrapper","fn","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","thisBinding","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","getFuncName","funcName","getData","isLaziable","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","reorder","createInverter","toIteratee","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createPartial","createRange","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setData","setWrapToString","createRound","precision","pair","noop","createToPairs","createWrap","mergeData","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","isPartial","arrStacked","othStacked","arrValue","othValue","compared","convert","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","flatten","otherFunc","isKeyable","isOwn","unmasked","stubArray","ctorString","transforms","getWrapDetails","match","hasPath","hasFunc","insertWrapDetails","details","isMaskable","stubFalse","memoizeCapped","memoize","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","shortOut","reference","updateWrapDetails","count","lastCalled","stamp","remaining","rand","quote","subString","chunk","compact","concat","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","findLastIndex","flattenDeep","flattenDepth","fromPairs","head","initial","intersection","mapped","intersectionBy","intersectionWith","join","separator","lastIndexOf","nth","pull","pullAll","pullAllBy","pullAllWith","pullAt","remove","reverse","slice","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniq","uniqBy","uniqWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","chain","tap","interceptor","thru","wrapperAt","wrapperChain","wrapperCommit","wrapperNext","toArray","done","wrapperToIterator","wrapperPlant","clone","wrapperReverse","wrapped","wrapperValue","countBy","every","filter","find","findLast","flatMap","flatMapDeep","flatMapDepth","forEach","forEachRight","groupBy","isString","invokeMap","keyBy","orderBy","partition","reduce","reduceRight","reject","negate","sample","sampleSize","shuffle","some","sortBy","now","after","before","bind","bindKey","curry","curryRight","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","defer","delay","flip","resolver","memoized","once","overArgs","funcsLength","partial","partialRight","rearg","rest","spread","throttle","unary","wrap","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","gt","gte","isArrayBuffer","isBoolean","isDate","isElement","isEmpty","isEqual","isEqualWith","isError","isFinite","isInteger","isMatch","isMatchWith","isNaN","isNumber","isNative","isNull","isNil","isRegExp","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lt","lte","sign","remainder","isBinary","toSafeInteger","assign","assignIn","assignInWith","assignWith","at","create","prototype","properties","defaults","propsIndex","propsLength","defaultsDeep","mergeWith","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","has","invert","invertBy","invoke","mapKeys","mapValues","merge","omit","omitBy","pickBy","pick","prop","setWith","toPairs","toPairsIn","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","random","floating","temp","camelCase","word","capitalize","upperFirst","endsWith","target","position","escape","escapeRegExp","kebabCase","lowerCase","lowerFirst","pad","strLength","padEnd","padStart","parseInt","radix","repeat","replace","snakeCase","split","limit","startCase","startsWith","template","settings","imports","importsKeys","importsValues","isEscaping","isEvaluating","interpolate","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","trim","trimEnd","trimStart","truncate","omission","substring","newEnd","unescape","upperCase","e","bindAll","methodNames","cond","conforms","defaultTo","flow","flowRight","matches","matchesProperty","method","methodOf","mixin","noConflict","nthArg","over","overEvery","overSome","propertyOf","range","rangeRight","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","add","augend","addend","ceil","divide","dividend","divisor","floor","max","maxBy","mean","meanBy","min","minBy","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","sum","sumBy","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","this","isDev","createDevLogger","enabled","msg","event","escapeLog","runIfDev","AnalyticsEvent","AnalyticsSeverity","UploadedImageAttachment","uri","attachment","UploadedFileAttachment","uploadStateUri","Attachment","UploadIntent","fromImagePickerAsset","asset","fromFile","file","createLocalUri","uploadIntent","extractImagePickerAssets","xs","x","fileKey","_file","extractKey","equivalent","a","b","toFinalizedAttachment","uploadState","toLocalFinalizedAttachment","toUploadIntent","fromUploadIntent","toSuccessfulFinalizedAttachment","makeSerializable","att","TLON_NAMESPACE","DEFAULT_CONSTANTS","getConstants","configureConstants","constants","isOpenRouterConfigured","groupTemplates","basicGroupTemplate","allTemplates","acc","nodeUrlIsHosted","url","PostDataDraft","serialize","draft","isValid","revokeBlobUrls","PersonalGroupSlugs","parseDa","pos","date","ms","yer","month","day","hour","minute","sec","millis","m","year","parseDr","rop","yule","renderDa","yore","out","renderDr","second","yell","toUnix","da","epochAdjusted","DA_SECOND","DA_UNIX_EPOCH","fromUnix","unix","timeSinceEpoch","EPOCH","isLeapYear","MOH_YO","MOY_YO","DAY_YO","HOR_YO","MIT_YO","ERA_YO","CET_YO","det","cah","d","first","loop","y","eras","rip","fac","muc","hor","mit","yall","era","cet","lep","dis","inner","mot","zis","muk","syd","lo","hi","kee","murmurhash3_32_gc","seed","bytes","h1","h1b","c1","c2","k1","i","F","j","fein","pyn","feis","fynd","cry","Fe","r","k","f","c","fe","ell","arr","eff","tmp","L","R","Fen","fen","ahh","ale","ob","regexP","parseP","str","syls","patp2syls","syl2bin","idx","addr","syl","suffixes","prefixes","num","parseValidP","validSyllables","res","renderP","sxz","dyx","dyy","tsxz","timp","trep","log","pre","suf","etc","name","renderQ","hex","lex","buf","chunked","prefixName","byts","alg","elem","parseQ","chunks","dec2hex","dec","splat","splitAt","parseValidQ","newArray","parseR","per","getPrecision","parse$1","renderR","rCo","deconstruct","bitMask","bits","w","p","makeNaN","makeInf","int","fra","expSign","exp","makeFloat","s","intPart","floatPart","construct","precisionBits","exponentBits","floatDits","exceed","bias","minExp","maxExp","minUnnormExp","len","bin","denom","signal","lastBit","rounded","edCo","dig","float","mantissaMask","exponentMask","floatMantissa","floatExponent","mantissa","exponent","mantissaHighBitIdx","unequalMargins","dragon4","hasUnequalMargins","cutoffMode","cutoffNumber","bufferSize","bexponent","pCurDigit","outBuffer","outExponent","scale","scaledValue","scaledMarginLow","scaledMarginHigh","digitExponent","pow10","cutoffExponent","outputDigit","scaledValueHigh","roundDown","compare","integerRegex","aft","floatRegex","regex","parse","slav","aura","slaw","tryParse","coin","nuck","stringToCord","dim","bisk","v","coins","decodeString","slurp","UV_ALPHABET","UW_ALPHABET$1","char","bytesToBigint","alphabet","bbits","byt","parts","render","scot","atom","rend","item","wack","encodeString","zco","spite","dco","blend","UW_ALPHABET","cordToString","lent","xco","codePoint","groups","base","mask","atomToByteArray","hexString","paddedHexString","arrayLength","int8Array","hexSubstring","signedInt","bigIntToByteArray","bigInt","blcCoeff","blcBigCoeff","blc","blcNext","bitLength","bigIntValue","testBit","bigIntFromStringWithRadix","digit","murmurhash3_bi","yek","fil","nek","dwim$1","_len","_key","isNoun","Atom","cel","Cell","list$1","putIn","putBy","dejs","mum","fal","haz","ham","dor","gor","mor","_Atom","fragCache","hasTail","isTa","isTas","o","l","addTop","octs","charByte","deep","isAtom","isCell","frond","opts","noun","tuple","funs","cels","na","ga","nb","gb","bucwut","buccen","tree","cord","tape","numb","numb32","numbString","loob","nill","enjs","met","full","part","gth","lth","sub","bex","lsh","rsh","bytesToWords","wordsToBytes","bytesToAtom","atomToBytes","atomToWords","wordsToAtom","malt","slaq","bloq","chop","fum","wid","tou","dst","src","san","mek","baf","bat","hut","wuf","wut","waf","raf","wat","rat","hop","cut","ai","bi","ci","sal","maxCat","catBits","mix","cat","lew","ler","all","can","tot","cab","i_cab","pi_cab","qi_cab","dwim","flop","list","Slot","val","lef","rem","inx","Single","sot","Bucket","rom","Node","NounMap","bigintToDataView","dv_bit","byte","dv_bitLength","dv_cut","dv_cut_at_bytes","curByte","bitsFromOne","bitsFromTwo","twoMask","one","left","right","oneMask","two","rub","z","q","insert","cue_in","vv","tailhead","b2","b1","u","dd","cue","cue_bytes","mat","_jam_in_pair","h_a","t_a","_jam_in","_jam_in_ptr","u_c","_jam_in_flat","jam","isBrowser","BASE","LOG_BASE","MAX_INT","MAX_INT_ARR","smallToArray","DEFAULT_ALPHABET","supportsNativeBigInt","Integer","caseSensitive","parseValue","parseBase","BigInteger","SmallInteger","NativeBigInt","isPrecise","arrayToSmall","compareAbs","createArray","l_a","l_b","carry","addAny","addSmall","a_l","b_l","borrow","subtractAny","subtractSmall","small","multiplyLong","product","a_i","b_j","multiplySmall","shiftLeft","multiplyKaratsuba","ac","bd","abcd","useKaratsuba","l1","l2","abs","multiplySmallAndArray","square","a_j","divMod1","divisorMostSignificantDigit","lambda","quotientDigit","shift","divModSmall","divMod2","guess","xlen","highx","highy","check","quotient","divModAny","self","comparison","qSign","mod","mSign","_0","_1","_2","isBasicPrime","millerRabinTest","nPrev","next","strict","isPrime","logN","t","iterations","rng","newT","newR","lastT","lastR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","remQuo","bitwise","xSign","ySign","xRem","yRem","xDigit","yDigit","xDivMod","yDivMod","LOBMASK_I","LOBMASK_BI","roughLOB","integerLogarithm","gcd","lcm","randBetween","usedRNG","digits","toBase","restricted","top","text","absBase","alphabetValues","isNegative","parseBaseFromArray","pow","stringify","neg","divmod","toBaseString","zeros","parseStringValue","decimalPlace","parseNumberValue","__extends","extendStatics","__","b_tree","defaultComparator","ta","tb","simpleComparator","BTree","maxNodeSize","EmptyLeaf","_this","initialCounter","overwrite","BNodeInternal","DeleteRange","nu","returnThisIfUnchanged","changed","includeHigh","del","Delete","initialValue","it","ReusedArray","lowestKey","reusedArray","info","nodequeue","nodeindex","leaf","state","jump","level","highestKey","skipHighest","_a","nextnode","EmptyArray","onlyThis","onlyOther","different","_compare","thisCursor","otherCursor","thisSuccess","otherSuccess","prevCursorOrder","cursorOrder","thisLeaf","thisInternalSpine","thisLevelIndices","otherLeaf","otherInternalSpine","otherLevelIndices","valThis","valOther","otherVal","lastOther","nodeThis","nodeOther","cursor","cursorFinished","compareKeys","canStep","levelIndices","currentKey","_root","height","stepToNode","internalSpine","levelsLength","spineLength","nodeLevelIndex","levelIndexWalkBack","valueIndex","nextLevel","currentLevel","node","children","childIndex","cursorA","cursorB","heightA","currentKeyA","levelIndicesA","heightB","currentKeyB","levelIndicesB","keyComparison","heightMin","depthANormalized","depthBNormalized","firstKey","force","results","Break","added","onFound","isShared","asSet","btree","BNode","undefVals","failXor","cmp","inclusive","indexOrLower","baseIndex","kL","vL","newRightSibling","rhs","lhs","half","editMode","iLow","iHigh","_super","cL","childSize","toofew","child","maxSize","oldLength","rhsChildren","fact","_i","formatScryPath","segments","isColor","maxImageStringSize","toClientMeta","meta","iconImage","iconImageData","coverImage","coverImageData","fromClientMeta","formatUd","ud","udToDate","das","parseIdNumber","formatDateParam","isDmChannelId","channelId","isGroupDmChannelId","isGroupChannelId","parseGroupChannelId","parseGroupId","groupId","getChannelIdType","isChannelId","with404Handler","scryRequest","BadResponseError","getCanonicalPostId","inputId","toPostEssay","content","authorId","sentAt","channelType","blob","metadata","Block","is","poly","isBlockLink","isBold","isItalics","isLink","isStrikethrough","isBlockquote","isInlineCode","isBlockCode","isBreak","isShip","isSect","isHeader","block","isCode","isListing","isListItem","listing","isList","isTag","isBlockReference","isTask","isImage","isCite","isBlockVerse","verse","logger","APP_PREFIXES","checkNest","nest","nestToFlag","app","preSig","ship","desig","idIsNest","getChannelType","whomIsDm","whomIsMultiDm","getTextContent","story","isReferenceVerse","ub.isBlockVerse","getBlockContent","getInlinesContent","ubc.isImage","ubc.isCite","ubc.isHeader","getInlineContent","ubc.isCode","ubc.isListing","getListingContent","ubc.isListItem","inlines","inline","ubc.isBold","ubc.isItalics","ubc.isLink","ubc.isStrikethrough","ubc.isBlockquote","ubc.isInlineCode","ubc.isBlockCode","ubc.isBreak","ubc.isShip","ubc.isSect","ubc.isTag","ubc.isBlockReference","ubc.isTask","whom","extractGroupPrivacy","preview","claim","sourceToString","stripPrefix","onEvents","notifyOffEvents","getLevelFromVolumeMap","vmap","isDefault","ActivityIncomingEvent","assertNever","readArrayBufferFromBlob","resolve","reader","createTimeoutSignal","controller","timeout","EventEmitter","__publicField","cb","FatalError","ReapError","AuthError","SSETimeoutError","SSEBadResponseError","message","status","getBytes","stream","onChunk","responseTimeout","err","getLines","onLine","fieldLength","discardTrailingNewline","bufLength","lineStart","lineEnd","getMessages","onMessage","onId","onRetry","newMessage","decoder","line","field","valueOffset","retry","EventStreamContentType","DefaultRetryInterval","LastEventId","fetchEventSource","input","inputSignal","inputHeaders","inputOnOpen","onmessage","onclose","onerror","openWhenHidden","inputFetch","headers","curRequestController","retryInterval","retryTimer","dispose","fetchFn","onopen","defaultOnOpen","isReconnect","response","interval","innerErr","contentType","unpackJamBytes","Urbit","code","desk","init","mode","verbose","airlock","cookie","eventId","_b","_c","_d","_e","error","oldSubs","poke","body","json","request","mark","subId","params","shipAtom","non","onSuccess","onError","resubOnQuit","quit","subscription","utils.createTimeoutSignal","responseSize","responseBlob","unpacked","inputMark","outputMark","threadName","messageReceived","requestOptions","getLandscapeAuthCookie","shipUrl","accessCode","DEFAULT_SCRY_TIMEOUT","DEFAULT_THREAD_TIMEOUT","TimeoutError","connectionStatus","timeoutDuration","config","client","receiver","getCurrentUserId","getCurrentUserIsHosted","Hosting.nodeUrlIsHosted","env","implicitUrl","configureClient","shipName","getCode","handleAuthFailure","onQuitOrReset","onChannelStatusChange","injectedClient","printEndpoint","endpoint","subscribe","handler","doSub","endpointKey","endpointWatchers","watcher","reauth","subscribeOnce","requestConfig","unsubscribe","pokeNoun","doPoke","trackDuration","createDurationTracker","trackedPoke","pokeCompleted","tracking","track","poking","watchers","checkIsNodeBusy","checkIsNodeBusyWithHints","scry","redactPath","responseSizeInBytes","responseStatus","scryNoun","thread","requestContext","errorText","tries","tryAuth","authCookie","startTime","__assign","defaultOptions","getSanitizedOptions","sanitized","full_jitter","fullJitter","jitteredDelay","no_jitter","noJitter","jitter_factory","full_jitter_1","require$$0","no_jitter_1","require$$1","JitterFactory","delay_base","jitter_factory_1","Delay","jitter","power","__awaiter","_arguments","P","generator","adopt","fulfilled","rejected","__generator","g","verb","op","skipFirst_delay","delay_base_1","SkipFirstDelay","always_delay","AlwaysDelay","delay_factory","skip_first_delay_1","always_delay_1","DelayFactory","initDelayClass","backoff","options_1","delay_factory_1","backOff","sanitizedOptions","BackOff","e_1","shouldRetry","SETTINGS_SINGLETON_KEY","BASE_UNREADS_SINGLETON_KEY","hostingAuthToken","hostingUserId","emojiRegex","VIDEO_REGEX","IMAGE_URL_REGEX","emojiTestRegex","containsOnlyEmoji","normalized","normalizeUrbitColor","color","noDots","simpleHash","hash","getPostInfoFromWer","wer","isDm","getIsDmFromWer","isChannelPost","getIsChannelPostFromWer","isGroupChannelReply","getFrondValue","opt","PlaintextPreviewConfig","plaintextPreviewOf","plaintextPreviewOfInlineString","plaintextPreviewOfListData","delimiter","currentIndentDepth","effectiveIndentDepth","plaintextPreviewOfInline","convertContentSafe","blocks","convertedBlock","convertBlock","convertTopLevelInline","currentInlines","flushCurrentBlock","convertedInlines","convertInlineContent","ub.isBreak","ub.isBlockquote","ub.isBlockCode","ub.Block","errorMessage","convertListing","api.toContentReference","ub.isList","nodes","ub.isBold","ub.isItalics","ub.isStrikethrough","ub.isInlineCode","ub.isLink","ub.isShip","ub.isSect","ub.isTask","postContent","getGroupAndChannelUnreads","activity","toClientUnreads","getThreadUnreadsByChannel","channel","scryPath","groupParts","channelParts","getVolumeSettings","ACTIVITY_SOURCE_PAGESIZE","getInitialActivity","events","fromInitFeedToBucketedActivityEvents","relevantUnreads","feeds","fromFeedToActivityEvents","getPagedActivityByBucket","bucket","urbitCursor","feed","summaries","nextCursor","extractNextCursor","feedItem","sourceId","toActivityEvents","lastEvent","bucketId","toActivityEvent","timestamp","shouldNotify","baseFields","postEvent","postId","getInfoFromMessageKey","replyEvent","parentId","parentAuthorId","dmEvent","flagEvent","contactEvent","parseContactUpdateEvent","groupIds","_f","_g","subscribeToActivity","activityEntry","summary","sourceIdToSource","toGroupUnread","toChannelUnread","toThreadUnread","volume","ub.sourceToString","ub.getLevelFromVolumeMap","getPostIdFromSource","notifsAllowed","rawEvent","activityEvent","sourceType","host","kind","threadId","groupUnreads","channelUnreads","threadActivity","baseUnread","activityId","summaryKey","firstUnreadPostId","standardCollectionParameters","allCollectionRenderers","allDraftInputs","allContentRenderers","CollectionRendererId","makeEnum","DraftInputId","PostContentRendererId","ParameterizedId","coerce","ChannelContentConfiguration","defaultConfiguration","draftInput","configuration","defaultPostContentRenderer","defaultPostCollectionRenderer","StructuredChannelDescriptionPayload","encode","payload","decode","encoded","raw","cfg","collCfgWithDefaults","specSet","enumTag","markChatRead","createGroupDm","members","respondToDMInvite","accept","currentUserId","multiDmAction","updateDMMeta","diff","delta","toClientDms","dmContacts","areInvites","toClientDm","isInvite","toClientGroupDms","groupDms","club","joinedMembers","member","invitedMembers","isJoined","isInvited","metaFields","decodedDesc","chatAction","getPostReference","replyId","post","toPostReference","said","toPostReplyData","toPostData","channelPostAction","channelAction","sendPost","essay","editPost","sendReply","parentAuthor","getInitialPosts","channelPosts","posts","toPostsData","chatPosts","chatId","getChannelPosts","includeReplies","sequenceBoundary","formatCursor","postsResponse","toPagedPostsData","finalPosts","numStubs","fillSequenceGaps","responsePosts","minSeq","maxSeq","existingPostMap","mergedPosts","examplePost","previousSentAt","existingPost","nextSentAt","toSequenceStubPost","getLatestPosts","afterCursor","channels","dms","latestPost","getChangedPosts","startCursor","endCursor","afterTime","addReaction","emoji","our","postAuthor","fullParentId","removeReaction","showPost","hidePost","toClientHiddenPosts","hiddenPostIds","reportPost","getHiddenPosts","getHiddenDMPosts","deletePost","deleteReply","getPostWithReplies","postsData","deletedPosts","otherPosts","postData","isPostTombstone","getAuthorId","author","isNotice","getReceivedAtFromId","flags","toPostContent","backendTime","replyData","isPostDataResponse","getReplyData","galleryImageLink","galleryImageLinkContent","sequenceNum","getContentImages","reacts","shortcodeReactions","toReactionsData","reply","toContentReference","cite","messageIdRegex","userId","appId","memo","ub.isImage","reaction","createChannel","channelPayload","updateChannelMeta","metaPayload","setupChannelFromTemplate","exampleChannelId","targetChannelId","subscribeToChannelsUpdates","eventHandler","toChannelsUpdate","toClientChannelsInit","readersMap","toClientChannelInit","readers","channelEvent","postsFromBackend","postResponse","postToAdd","updatedReacts","replyResponse","cacheId","createNewGroupDefaultChannel","randomNumber","searchChannel","isGroupChannel","encodedQuery","scanItem","setOrder","arrangedPostIds","leaveChannel","joinChannel","getChannelHooksPreview","addChannelWriters","writers","removeChannelWriters","groupAction4","groupNavigationBatchUpdate","flag","navigation","getPinnedItems","pinnedItems","toClientPinnedItems","rawItems","toClientPinnedItem","rawItem","getPinnedItemType","acceptGroupJoin","contactIds","rejectGroupJoin","cancelGroupJoin","inviteGroupMembers","rescindGroupInvitationRequest","kickUsersFromGroup","banUsersFromGroup","unbanUsersFromGroup","leaveGroup","requestGroupInvitation","updateGroupPrivacy","unpinItem","itemId","pinItem","getChannelPreview","channelPreview","toClientChannelFromPreview","getGroupPreview","toClientGroupFromPreview","findGroupsHostedBy","toClientGroupsFromPreview","GENERATED_GROUP_TITLE_END_CHAR","createGroup","placeHolderTitle","memberIds","toClientGroupV7","getGroup","groupData","getGroups","toClientGroupsV7","updateGroupMeta","deleteGroup","addNavSection","navSection","deleteNavSection","sectionId","updateNavSection","addChannelToNavSection","navSectionId","rGroup","addChannelToGroup","updateChannel","deleteChannel","updateGroupNavigation","navSections","sections","section","addGroupRole","roleId","deleteGroupRole","updateGroupRole","addMembersToRole","ships","removeMembersFromRole","extractFlaggedPosts","flaggedContent","flaggedPosts","flagger","hostUserId","bannedMembers","joinRequests","seat","toClientGroupMember","roles","role","currentUserRoles","toClientGroupMeta","domain.PersonalGroupSlugs","zoneId","zone","toClientChannels","toClientGroupFromForeign","foreign","privacy","joinStatus","getJoinStatusFromForeign","validInvites","inv","toClientGroupsFromForeigns","foreigns","toClientGroupTitle","title","toClientChannel","description","channelContentConfiguration","readerRoles","isOpenChannel","userHasReadPermission","currentUserIsMember","omitEmpty","contactId","vessel","getInitData","toInitData","extractChannelReadersFromV7Groups","_groupId","pins","channelReaders","channelsInit","hiddenGroupPosts","hiddenDmPosts","blockedUsers","unjoinedGroups","dmChannels","groupDmChannels","invitedDms","unreads","joinedGroups","joinedChannels","parseSigned","uw","providerAtom","provider","signedData","signed","parseSignedData","getHeadTaggedAttestation","headTagged","parseHalfSign","parseFullSign","parseIdentifier","parseProof","proofType","proofValue","when","identifier","proof","maybeProof","subscribeToLanyardUpdates","checkAttestedSignature","signData","nonce","encodedNonce","query","queryResponseSub","queryResponse","sigValidation","discoverContacts","phoneNums","storedLastSalt","lastPhoneNumberSetSent","nums","diffContactBook","parsedLastSalt","lastSalt","nextSalt","lastSet","delSet","toPhoneIdentifierSet","phoneNumbers","parseAttestationId","attest","attestKey","getContacts","peersResponse","contactsResponse","suggestionsResponse","toContactsData","skipContacts","contactSuggestions","peerProfiles","v0PeersToClientProfiles","contactProfiles","contactsToClientProfiles","removeContactSuggestion","addContactSuggestions","syncUserProfiles","userIds","updateContactMetadata","contactUpdate","contacts","contact","v0PeerToClientProfile","parseContactAttestations","attestations","NounParsers.parseSigned","providerUrl","provingTweetId","contactToClientProfile","overrides","_h","PENDING_MEMBER_DISMISSAL_PREFIX","getBucket","setSetting","getSettings","toClientSettings","pendingMemberDismissals","parsePendingMemberDismissals","toClientSidebarSort","sort","db.SETTINGS_SINGLETON_KEY","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","dismissals","parsedVal","getAppInfo","pikes","charges","groupsPike","subscribeToSettings","getHttpHandlerExtensionConfiguration","runtimeConfig","resolveHttpHandlerRuntimeConfig","httpHandlerExtensionConfiguration","EndpointURLScheme","AlgorithmId","SMITHY_CONTEXT_KEY","HttpRequest","cloned","cloneQuery","req","paramName","param","HttpResponse","resp","addExpectContinueMiddleware","sendHeader","addExpectContinueMiddlewareOptions","getAddExpectContinuePlugin","clientStack","RequestChecksumCalculation","DEFAULT_REQUEST_CHECKSUM_CALCULATION","ResponseChecksumValidation","DEFAULT_RESPONSE_CHECKSUM_VALIDATION","ChecksumAlgorithm","ChecksumLocation","DEFAULT_CHECKSUM_ALGORITHM","setCredentialFeature","credentials","feature","setFeature","getDateHeader","getSkewCorrectedDate","systemClockOffset","isClockSkewed","clockTime","getUpdatedSystemClockOffset","currentSystemClockOffset","clockTimeInMs","throwSigningPropertyError","validateSigningProperties","signingProperties","authScheme","signer","signingRegion","signingRegionSet","signingName","AwsSdkSigV4Signer","httpRequest","validatedProps","handlerExecutionContext","serverTime","initialSystemClockOffset","httpResponse","dateHeader","AwsSdkSigV4ASigner","multiRegionOverride","getSmithyContext","normalizeProvider","promisified","resolveAuthOptions","candidateAuthOptions","authSchemePreference","preferredAuthOptions","preferredSchemeName","candidateAuthOption","schemeId","convertHttpAuthSchemesToMap","httpAuthSchemes","scheme","httpAuthSchemeMiddleware","mwOptions","resolvedOptions","authSchemes","smithyContext","failureReasons","option","identityProvider","identityProperties","httpAuthSchemeEndpointRuleSetMiddlewareOptions","getHttpAuthSchemeEndpointRuleSetPlugin","httpAuthSchemeParametersProvider","identityProviderConfigProvider","serializerMiddlewareOption","defaultErrorHandler","defaultSuccessHandler","httpSigningMiddleware","output","httpSigningMiddlewareOptions","getHttpSigningPlugin","alphabetByEncoding","alphabetByValue","bitsPerLetter","bitsPerByte","maxLetterValue","fromBase64","totalByteLength","chunkOffset","byteLength","fromUtf8","toUint8Array","toUtf8","toBase64","_input","isUint8Array","bitClusterCount","Uint8ArrayBlobAdapter","encoding","ReadableStreamRef","ChecksumStream","isReadableStream","createChecksumStream","expectedChecksum","checksum","checksumSourceLocation","base64Encoder","encoder","digest","received","readable","ByteArrayCollector","allocByteArray","byteArray","aggregation","createBufferedReadableStream","upstream","streamBufferingLoggedWarning","bytesSeen","buffers","sizeOf","chunkMode","modeOf","chunkSize","newSize","createBufferedReadable","allowBuffer","getAwsChunkedEncodingStream","readableStream","bodyLengthChecker","checksumAlgorithmFn","checksumLocationName","streamHasher","checksumRequired","headStream","byteLengthCounter","isDone","collected","escapeUri","hexEncode","buildQueryString","iLen","qsEntry","createRequest","requestTimeout","timeoutInMs","timeoutError","keepAliveSupport","FetchHttpHandler","instanceOrOptions","abortSignal","requestTimeoutInMs","keepAlive","abortError","queryString","auth","username","password","port","removeSignalEventListener","fetchRequest","raceOfPromises","fetchHeaders","transformedHeaders","requestTimeoutFn","onAbort","streamCollector","collectBlob","collectStream","base64","readToBase64","commaIndex","dataOffset","SHORT_TO_HEX","HEX_TO_SHORT","encodedByte","fromHex","toHex","ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED","sdkStreamMixin","isBlobInstance","transformed","transformToByteArray","blobToWebStream","splitStream","collectBody","streamBody","fromContext","extendedEncodeURIComponent","deref","schemaRef","operation","namespace","traits","schemaDeserializationMiddleware","operationSchema","ns","parsed","hint","headerEntries","findHeader","schemaSerializationMiddleware","deserializerMiddlewareOption","getSchemaSerdePlugin","commandStack","translateTraits","indicator","trait","anno","_NormalizedSchema","ref","memberName","traitStack","_ref","schema","isMemberSchema","traitSet","computedMemberTraits","isStaticSchema","sc","withNamespace","streaming","isDoc","memberSchema","struct","NormalizedSchema","internalCtorAccess","_TypeRegistry","schemas","exceptions","shapeId","qualifiedName","es","ctor","$error","registry","exceptionKey","TypeRegistry","DAYS","MONTHS","dateToUtcString","dayOfWeek","dayOfMonthInt","hoursInt","minutesInt","secondsInt","dayOfMonthString","hoursString","minutesString","secondsString","randomUUID","decimalToHex","v4","rnds","LazyJsonString","quoteHeader","ddd","mmm","RFC3339_WITH_OFFSET","IMF_FIXDATE","RFC_850_DATE","ASC_TIME","months","_parseEpochTimestamp","_parseRfc3339DateTimeWithOffset","yearStr","monthStr","dayStr","hours","minutes","seconds","offsetStr","offsetH","offsetM","scalar","_parseRfc7231DateTime","fraction","splitEvery","numDelimiters","compoundSegments","currentSegment","splitHeader","withinQuotes","prevChar","anchor","format","NumericValue","_nv","SerdeContext","serdeContext","HttpProtocol","inputNs","opTraits","hostPrefix","hostLabelInputs","replacement","eventStream","requestSchema","initialRequest","responseSchema","initialResponseContainer","EventStreamSerde","arg4","arg5","HttpBindingProtocol","serializer","hasNonHttpBindingMember","search","traitSearchParams","memberNs","memberTraits","inputMemberValue","amalgam","valueSchema","sparse","serializable","deserializer","dataObject","header","nonHttpBindingMembers","dataFromBody","discardResponseBody","headerListValueSchema","determineTimestampFormat","httpLabel","httpPrefixHeaders","httpHeader","httpQuery","FromStringShapeDeserializer","_schema","mediaType","intermediateValue","base64String","HttpInterceptingShapeDeserializer","codecDeserializer","codecSettings","toBytes","ToStringShapeSerializer","headerItem","serialized","generateIdempotencyToken","HttpInterceptingShapeSerializer","codecSerializer","stringSerializer","DefaultIdentityProviderConfig","createIsIdentityExpiredFunction","expirationMs","doesIdentityRequireRefresh","EXPIRATION_MS","isIdentityExpired","memoizeIdentityProvider","isExpired","requiresRefresh","normalizedProvider","resolved","pending","hasResult","isConstant","coalesceProvider","resolveAwsSdkSigV4AConfig","ALGORITHM_QUERY_PARAM","CREDENTIAL_QUERY_PARAM","AMZ_DATE_QUERY_PARAM","SIGNED_HEADERS_QUERY_PARAM","EXPIRES_QUERY_PARAM","SIGNATURE_QUERY_PARAM","TOKEN_QUERY_PARAM","AUTH_HEADER","AMZ_DATE_HEADER","DATE_HEADER","GENERATED_HEADERS","SIGNATURE_HEADER","SHA256_HEADER","TOKEN_HEADER","ALWAYS_UNSIGNABLE_HEADERS","PROXY_HEADER_PATTERN","SEC_HEADER_PATTERN","ALGORITHM_IDENTIFIER","EVENT_ALGORITHM_IDENTIFIER","UNSIGNED_PAYLOAD","MAX_CACHE_SIZE","KEY_TYPE_IDENTIFIER","MAX_PRESIGNED_TTL","signingKeyCache","cacheQueue","createScope","shortDate","region","service","getSigningKey","sha256Constructor","credsHash","hmac","cacheKey","signable","secret","getCanonicalHeaders","unsignableHeaders","signableHeaders","canonical","headerName","canonicalHeaderName","getPayloadHash","hashConstructor","hashCtor","HeaderFormatter","shortView","intView","longBytes","binView","binBytes","utf8Bytes","strView","strBytes","tsBytes","Int64","UUID_PATTERN","uuidBytes","HEADER_VALUE_TYPE","Int64$1","negative","hasHeader","soughtHeader","moveHeadersToQuery","lname","prepareRequest","getCanonicalQuery","encodedKey","iso8601","toDate","SignatureV4Base","applyChecksum","sha256","uriEscapePath","canonicalHeaders","payloadHash","sortedHeaders","longDate","credentialScope","canonicalRequest","algorithmIdentifier","hashedRequest","normalizedPathSegments","pathSegment","normalizedPath","SignatureV4","originalRequest","signingDate","expiresIn","unhoistableHeaders","hoistableHeaders","signingService","scope","toSign","priorSignature","hashedPayload","hashedHeaders","stringToSign","signableMessage","signature","requestToSign","keyPromise","resolveAwsSdkSigV4Config","inputCredentials","isUserSupplied","resolvedCredentials","memoizedProvider","normalizeCredentialProvider","boundProvider","bindCallerConfig","isCredentialObject","attributedCreds","signingEscapePath","regionInfo","SignerCtor","credentialDefaultProvider","credentialsProvider","TEXT_ENCODER","calculateBodyLength","getAllAliases","aliases","_aliases","alias","getMiddlewareNameWithAliases","constructStack","absoluteEntries","relativeEntries","identifyOnResolve","entriesNameSet","stepWeights","priorityWeights","removeByName","toRemove","isRemoved","filterCb","removeByReference","cloneTo","toStack","expandRelativeMiddlewareList","from","expandedMiddlewareList","getMiddlewareList","debug","normalizedAbsoluteEntries","normalizedRelativeEntries","normalizedEntriesNameMap","normalizedEntry","toMiddleware","wholeList","middleware","override","toOverrideIndex","toOverride","plugin","tags","mw","toggle","Client","protocol","protocolSettings","command","optionsOrCb","useHandlerCache","handlers","SENSITIVE_STRING","schemaLogFilter","newObject","Command","ClassBuilder","middlewareFn","clientName","commandName","inputFilterSensitiveLog","outputFilterSensitiveLog","additionalContext","CommandCtor","requestHandler","endpointParameterInstructions","middlewareSupplier","inputFilter","outputFilter","closure","CommandRef","ServiceException","candidate","instance","decorateServiceException","exception","additions","loadConfigsForDefaultMode","getChecksumConfiguration","checksumAlgorithms","algorithmId","algo","resolveChecksumRuntimeConfig","clientConfig","checksumAlgorithm","getRetryConfiguration","retryStrategy","resolveRetryRuntimeConfig","retryStrategyConfiguration","getDefaultExtensionConfiguration","resolveDefaultRuntimeConfig","getValueFromTextNode","textNodeName","NoOpLogger","ProtocolLib","queryCompat","defaultContentType","inputSchema","httpPayloadMember","httpQueryParams","errorIdentifier","defaultNamespace","getErrorSchema","errorName","errorMetadata","synthetic","baseExceptionSchema","ErrorCtor","reqId","queryErrorHeader","Code","Type","queryCompatErrorData","errorData","SerdeContextConfig","UnionSerde","to","escapeAttribute","escapeElement","XmlText","XmlNode","childText","withName","listName","valueProvider","containerNode","hasChildren","xmlText","attributes","attributeName","attribute","parser","parseXML","xmlString","xmlDocument","xmlToObj","element","attr","childNodes","childResult","childName","XmlShapeDeserializer","memberSchemas","parsedObject","flat","listValue","sourceKey","sourceArray","keyNs","keyProperty","valueProperty","unionSerde","xmlObjectKey","xml","parsedObj","parsedObjToReturn","loadRestXmlErrorCode","XmlShapeSerializer","parentXmlns","structXmlNode","xmlnsAttr","xmlns","memberNode","$unknown","listMember","container","listTraits","listValueSchema","listValueTraits","writeItem","listItemNode","listNode","mapMember","containerIsMap","mapTraits","mapKeySchema","keyTag","mapValueSchema","mapValueTraits","valueTag","addKeyValue","keyNode","keyXmlnsAttr","keyXmlns","valueNode","mapNode","nodeContents","into","XmlCodec","AwsRestXmlProtocol","errorSchema","CLIENT_SUPPORTED_ALGORITHMS","PRIORITY_ORDER_ALGORITHMS","getChecksumAlgorithmForRequest","requestChecksumRequired","requestAlgorithmMember","requestChecksumCalculation","getChecksumLocationName","algorithm","hasHeaderWithPrefix","headerPrefix","soughtHeaderPrefix","isStreaming","__values","fromUtf8Browser","convertToBuffer","isEmptyData","numToUint8","uint32ArrayFrom","a_lookUpTable","return_array","a_index","AwsCrc32c","Crc32c","toHash","data_1","data_1_1","lookupTable","e_1_1","a_lookupTable","generateCRC64NVMETable","tables","table","crc","CRC64_NVME_REVERSED_TABLE","t0","t1","t2","t3","t4","t5","t6","t7","ensureTablesInitialized","Crc64Nvme","crc1","crc2","idx0","idx1","idx2","idx3","idx4","idx5","idx6","idx7","AwsCrc32","Crc32","getCrc32ChecksumAlgorithmFunction","selectChecksumAlgorithmFunction","stringHasher","flexibleChecksumsMiddlewareOptions","flexibleChecksumsMiddleware","middlewareConfig","requestBody","requestAlgorithmMemberName","requestAlgorithmMemberHttpHeader","updatedBody","updatedHeaders","rawChecksum","flexibleChecksumsInputMiddlewareOptions","flexibleChecksumsInputMiddleware","requestValidationModeMember","responseChecksumValidation","getChecksumAlgorithmListForResponse","responseAlgorithms","validChecksumAlgorithms","isChecksumWithPartNumber","lastHyphenIndex","numberPart","getChecksum","validateChecksumFromResponse","responseBody","responseHeaders","responseHeader","checksumFromResponse","flexibleChecksumsResponseMiddlewareOptions","flexibleChecksumsResponseMiddleware","getFlexibleChecksumsPlugin","resolveFlexibleChecksumsConfig","requestStreamBufferSize","hostHeaderMiddleware","handlerProtocol","hostHeaderMiddlewareOptions","getHostHeaderPlugin","loggerMiddleware","dynamoDbDocumentClientOptions","overrideInputFilterSensitiveLog","overrideOutputFilterSensitiveLog","$metadata","outputWithoutMetadata","loggerMiddlewareOptions","getLoggerPlugin","recursionDetectionMiddlewareOptions","recursionDetectionMiddleware","getRecursionDetectionPlugin","CONTENT_LENGTH_HEADER","DECODED_CONTENT_LENGTH_HEADER","checkContentLengthHeader","checkContentLengthHeaderMiddlewareOptions","getCheckContentLengthHeaderPlugin","unused","regionRedirectEndpointMiddleware","originalRegion","regionProviderRef","unlock","regionRedirectEndpointMiddlewareOptions","regionRedirectMiddleware","statusCode","isHeadBucket","bucketRegionHeader","actualRegion","regionRedirectMiddlewareOptions","getRegionRedirectMiddlewarePlugin","_S3ExpressIdentityCache","credential","S3ExpressIdentityCache","S3ExpressIdentityCacheEntry","_identity","isRefreshing","accessed","_S3ExpressIdentityProviderImpl","createSessionFn","awsIdentity","session","S3ExpressIdentityProviderImpl","S3_EXPRESS_BUCKET_TYPE","S3_EXPRESS_BACKEND","S3_EXPRESS_AUTH_SCHEME","SESSION_TOKEN_QUERY_PARAM","SESSION_TOKEN_HEADER","SignatureV4S3Express","credentialsWithoutSessionToken","getCredentialsWithoutSessionToken","privateAccess","setSingleOverride","currentCredentialProvider","overrideCredentialsProviderOnce","s3ExpressMiddleware","isS3ExpressAuth","requestBucket","s3ExpressIdentity","s3ExpressMiddlewareOptions","getS3ExpressPlugin","signS3Express","signingOptions","sigV4MultiRegionSigner","signedRequest","s3ExpressHttpSigningMiddleware","getS3ExpressHttpSigningPlugin","resolveS3Config","s3ClientProvider","CreateSessionCommandCtor","forcePathStyle","useAccelerateEndpoint","disableMultiregionAccessPoints","followRegionRedirects","s3ExpressIdentityProvider","bucketEndpoint","expectContinueHeader","THROW_IF_EMPTY_BODY","MAX_BYTES_TO_INSPECT","throw200ExceptionsMiddleware","sourceBody","bodyCopy","bodyBytes","bodyStringTail","throw200ExceptionsMiddlewareOptions","getThrow200ExceptionsPlugin","validate","bucketEndpointMiddleware","bucketEndpointUrl","warning","bucketEndpointMiddlewareOptions","validateBucketNameMiddleware","validateArn","validateBucketNameMiddlewareOptions","getValidateBucketNamePlugin","DEFAULT_UA_APP_ID","isValidUserAgentAppId","resolveUserAgentConfig","normalizedAppIdProvider","customUserAgent","EndpointCache","endpointParams","parameters","IP_V4_REGEX","isIpAddress","VALID_HOST_LABEL_REGEX","isValidHostLabel","allowSubDomains","labels","label","customEndpointFunctions","debugId","toDebugString","EndpointError","booleanEquals","value1","value2","getAttrPathList","pathList","squareBracketIndex","arrayIndex","getAttr","not","DEFAULT_PORTS","parseURL","whatwgURL","hostname","urlString","pathname","isIp","inputContainsDefaultPort","authority","stringEquals","stop","uriEncode","endpointFunctions","evaluateTemplate","evaluatedTemplateArr","templateContext","currentIndex","openingBraceIndex","closingBraceIndex","parameterName","refName","attrName","getReferenceValue","evaluateExpression","keyName","callFunction","argv","evaluatedArgs","fnSegments","evaluateCondition","fnArgs","evaluateConditions","conditions","conditionsReferenceRecord","condition","toAssign","getEndpointHeaders","headerKey","headerVal","headerValEntry","processedExpr","getEndpointProperties","propertyKey","propertyVal","getEndpointProperty","propertyEntry","getEndpointUrl","endpointUrl","expression","evaluateEndpointRule","endpointRule","referenceRecord","endpointRuleOptions","evaluateErrorRule","errorRule","evaluateRules","rules","rule","endpointOrUndefined","evaluateTreeRule","treeRule","resolveEndpoint","ruleSetObject","paramsWithDefault","paramKey","paramDefaultValue","requiredParams","requiredParam","isVirtualHostableS3Bucket","ARN_DELIMITER","RESOURCE_DELIMITER","parseArn","arn","accountId","resourcePath","resourceId","resource","selectedPartitionsInfo","partitionsInfo","partitions","regions","outputs","regionData","regionRegex","DEFAULT_PARTITION","awsEndpointFunctions","parseQueryString","querystring","parseUrl","ACCOUNT_ID_ENDPOINT_REGEX","checkFeatures","endpointV2","USER_AGENT","X_AMZ_USER_AGENT","SPACE","UA_NAME_SEPARATOR","UA_NAME_ESCAPE_REGEX","UA_VALUE_ESCAPE_REGEX","UA_ESCAPE_CHAR","BYTE_LIMIT","encodeFeatures","features","userAgentMiddleware","userAgent","escapeUserAgent","defaultUserAgent","awsContext","sdkUserAgentValue","normalUAValue","userAgentPair","version","prefixSeparatorIndex","uaName","getUserAgentMiddlewareOptions","getUserAgentPlugin","DEFAULT_USE_DUALSTACK_ENDPOINT","DEFAULT_USE_FIPS_ENDPOINT","validRegions","checkRegion","isFipsRegion","getRealRegion","resolveRegionConfig","useFipsEndpoint","providedRegion","realRegion","resolveEventStreamSerdeConfig","contentLengthMiddleware","contentLengthMiddlewareOptions","getContentLengthPlugin","resolveParamsForS3","isArnBucketName","isDnsCompatibleBucketName","DOMAIN_PATTERN","IP_ADDRESS_PATTERN","DOTS_PATTERN","bucketName","isArn","isValidArn","createConfigValueProvider","configKey","canonicalEndpointParamKey","isClientContextParam","configProvider","configValue","clientContextParams","getEndpointFromConfig","serviceId","toEndpointV1","getEndpointFromInstructions","commandInput","instructionsSupplier","endpointFromConfig","resolveParams","instructions","instruction","endpointMiddleware","httpAuthOption","endpointMiddlewareOptions","getEndpointPlugin","resolveEndpointConfig","tls","useDualstackEndpoint","customEndpointProvider","resolvedConfig","configuredEndpointPromise","RETRY_MODES","DEFAULT_MAX_ATTEMPTS","DEFAULT_RETRY_MODE","THROTTLING_ERROR_CODES","TRANSIENT_ERROR_CODES","TRANSIENT_ERROR_STATUS_CODES","NODEJS_TIMEOUT_ERROR_CODES","NODEJS_NETWORK_ERROR_CODES","isRetryableByTrait","isClockSkewCorrectedError","isBrowserNetworkError","errorMessages","isThrottlingError","isTransientError","isServerError","_DefaultRateLimiter","currentTimeInSeconds","amount","fillAmount","calculatedRate","rateToUse","newRate","timeBucket","currentRate","DefaultRateLimiter","DEFAULT_RETRY_DELAY_BASE","MAXIMUM_RETRY_DELAY","THROTTLING_RETRY_DELAY_BASE","INITIAL_RETRY_TOKENS","RETRY_COST","TIMEOUT_RETRY_COST","NO_RETRY_INCREMENT","INVOCATION_ID_HEADER","REQUEST_HEADER","getDefaultRetryBackoffStrategy","delayBase","attempts","createDefaultRetryToken","retryDelay","retryCount","retryCost","StandardRetryStrategy","maxAttempts","retryTokenScope","token","errorInfo","errorType","delayFromErrorType","capacityCost","tokenToRenew","AdaptiveRetryStrategy","maxAttemptsProvider","rateLimiter","asSdkError","resolveRetryConfig","_retryMode","_maxAttempts","isStreamingPayload","retryMiddleware","isRetryStrategyV2","retryToken","lastError","totalRetryDelay","isRequest","retryErrorInfo","getRetryErrorInfo","getRetryErrorType","retryAfterHint","getRetryAfterHint","retryMiddlewareOptions","getRetryPlugin","retryAfterHeaderName","retryAfter","retryAfterSeconds","SignatureV4MultiRegion","cs","ct","cu","cv","cw","cx","cy","cz","cA","cB","cC","cD","cE","cF","cG","cH","cI","h","A","B","C","D","E","G","H","I","J","K","M","N","O","Q","S","T","U","V","W","X","Y","Z","aa","ab","ad","ae","af","ag","ah","aj","ak","al","am","an","ao","ap","aq","ar","as","au","av","aw","ax","ay","az","aA","aB","aC","aD","aE","aF","aG","aH","aI","aJ","aK","aL","aM","aN","aO","aP","aQ","aR","aS","aT","aU","aV","aW","aX","aY","aZ","ba","bb","bc","be","bf","bg","bh","bj","bk","bl","bm","bn","bo","bp","bq","br","bs","bt","bu","bv","bw","bx","by","bz","bA","bB","bC","bD","bE","bF","bG","bH","bI","bJ","bK","bL","bM","bN","bO","bP","bQ","bR","bS","bT","bU","bV","bW","bX","bY","bZ","ca","cc","cd","ce","cf","cg","ch","cj","ck","cl","cm","cn","co","cp","cq","cr","_data","ruleSet","defaultEndpointResolver","createEndpointRuleSetHttpAuthSchemeParametersProvider","defaultHttpAuthSchemeParametersProvider","defaultParameters","instructionsFn","endpointParameters","_defaultS3HttpAuthSchemeParametersProvider","defaultS3HttpAuthSchemeParametersProvider","createAwsAuthSigv4HttpAuthOption","authParameters","createAwsAuthSigv4aHttpAuthOption","createEndpointRuleSetHttpAuthSchemeProvider","defaultHttpAuthSchemeResolver","createHttpAuthOptionFunctions","resolvedName","sigv4Present","createOption","_defaultS3HttpAuthSchemeProvider","defaultS3HttpAuthSchemeProvider","resolveHttpAuthSchemeConfig","config_0","config_1","resolveClientEndpointParameters","commonParams","S3ServiceException","__ServiceException","NoSuchUpload","__BaseException","AccessDenied","ObjectNotInActiveTierError","BucketAlreadyExists","BucketAlreadyOwnedByYou","NoSuchBucket","InvalidObjectState","NoSuchKey","NotFound","EncryptionTypeMismatch","InvalidRequest","InvalidWriteOffset","TooManyParts","IdempotencyParameterMismatch","ObjectAlreadyInActiveTierError","_ACL_","_AD","_AKI","_AT","_B","_BAE","_BAOBY","_BKE","_Bo","_CA","_CC","_CCRC","_CCRCC","_CCRCNVME","_CC_","_CD_","_CDo","_CE_","_CEo","_CL","_CL_","_CL__","_CLo","_CM","_CMD","_CSHA","_CSHAh","_CSO","_CSR","_CSRr","_CSr","_CT","_CT_","_CTo","_Cr","_E","_EBO","_ETM","_ETa","_Ex","_GFC","_GR","_GRACP","_GWACP","_IM","_IM_","_INM","_INM_","_IOS","_IPM","_IR","_IWO","_K","_M","_NF","_NSB","_NSK","_NSU","_OAIATE","_OLLHS","_OLM","_OLRUD","_ONIATE","_PO","_POO","_POR","_RC","_RP","_SAK","_SB","_SC","_SCV","_SCe","_SM","_SSE","_SSECA","_SSECK","_SSECKMD","_SSEKMSEC","_SSEKMSKI","_ST","_Si","_TMP","_Tag","_VI","_WOB","_WRL","_hC","_hE","_hH","_hPH","_sm","_xN","_xaa","_xacc","_xacc_","_xacc__","_xacs","_xacs_","_xacsm","_xact","_xae","_xaebo","_xagfc","_xagr","_xagra","_xagwa","_xam","_xaollh","_xaolm","_xaolrud","_xaos","_xarc","_xarp","_xasc","_xasca","_xasse","_xasseakki","_xassebke","_xassec","_xasseca","_xasseck","_xasseckM","_xat","_xavi","_xawob","_xawrl","n0","SessionCredentialValue","SSECustomerKey","SSEKMSEncryptionContext","SSEKMSKeyId","StreamingBlob","AccessDenied$","BucketAlreadyExists$","BucketAlreadyOwnedByYou$","CreateSessionOutput$","SessionCredentials$","CreateSessionRequest$","EncryptionTypeMismatch$","IdempotencyParameterMismatch$","InvalidObjectState$","InvalidRequest$","InvalidWriteOffset$","NoSuchBucket$","NoSuchKey$","NoSuchUpload$","NotFound$","ObjectAlreadyInActiveTierError$","ObjectNotInActiveTierError$","PutObjectOutput$","PutObjectRequest$","TooManyParts$","S3ServiceException$","CreateSession$","PutObject$","CreateSessionCommand","$Command","SHA_1_HASH","SHA_1_HMAC_ALGO","EMPTY_DATA_SHA_1","fallbackWindow","locateWindow","Sha1","subtleCryptoMethods","supportsWebCrypto","window","supportsSecureRandom","subtle","supportsSubtleCrypto","getRandomValues","WebCryptoSha1","SHA_256_HASH","SHA_256_HMAC_ALGO","EMPTY_DATA_SHA_256","Sha256","BLOCK_SIZE","DIGEST_LENGTH","KEY","INIT","MAX_HASHABLE_LENGTH","RawSha256","bitsHashed","bufferView","undecoratedLength","state0","state1","state2","state3","state4","state5","state6","state7","t1_1","t2_1","bufferFromSecret","bufferHash","WebCryptoSha256","JsSha256","createDefaultUserAgentProvider","clientVersion","navigator","uaString","osName","fallback","osVersion","brands","brand","browserName","browserVersion","ua","HeaderMarshaller","nameLength","BOOLEAN_TAG","BYTE_TAG","SHORT_TAG","INT_TAG","LONG_TAG","binaryLength","BINARY_TAG","stringLength","STRING_TAG","TIMESTAMP_TAG","UUID_TAG","PRELUDE_MEMBER_LENGTH","PRELUDE_LENGTH","CHECKSUM_LENGTH","MINIMUM_MESSAGE_LENGTH","splitMessage","byteOffset","messageLength","headerLength","expectedPreludeChecksum","expectedMessageChecksum","checksummer","EventStreamCodec","isEndOfStream","messages","rawHeaders","MessageDecoderStream","MessageEncoderStream","SmithyMessageDecoderStream","deserialized","SmithyMessageEncoderStream","getChunkedStream","currentMessageTotalLength","currentMessagePendingLength","currentMessage","messageLengthBuffer","allocateMessage","sourceIterator","chunkLength","currentOffset","bytesRemaining","numBytesForTotal","numBytesToWrite","getMessageUnmarshaller","messageType","unmodeledError","deserializedException","EventStreamMarshaller$1","utf8Encoder","utf8Decoder","inputStream","readableStreamtoIterable","iterableToReadableStream","asyncIterable","EventStreamMarshaller","UniversalEventStreamMarshaller","bodyIterable","serialziedIterable","eventStreamSerdeProvider","blobReader","totalBytesRead","blobHasher","invalidProvider","Md5","sourceData","bytesHashed","ff","gg","hh","ii","cmn","DEFAULTS_MODE_OPTIONS","resolveDefaultsModeConfig","defaultsMode","useMobileConfiguration","effectiveType","rtt","downlink","getRuntimeConfig","ipc","defaultConfigProvider","clientSharedValues","getSharedRuntimeConfig","packageInfo","RequestHandler","getAwsRegionExtensionConfiguration","resolveAwsRegionExtensionConfiguration","awsRegionExtensionConfiguration","getHttpAuthExtensionConfiguration","_httpAuthSchemes","_httpAuthSchemeProvider","_credentials","httpAuthScheme","httpAuthSchemeProvider","resolveHttpAuthRuntimeConfig","resolveRuntimeExtensions","extensions","extensionConfiguration","extension","S3Client","__Client","_config_0","__getRuntimeConfig","_config_1","_config_2","_config_3","_config_4","_config_5","_config_6","_config_7","_config_8","_config_9","_config_10","_config_11","ssecMiddleware","valueForHash","isValidBase64EncodedSSECustomerKey","ssecMiddlewareOptions","getSsecPlugin","PutObjectCommand","formatUrl","fragment","S3RequestPresigner","currentHostHeader","expectedHostHeader","getSignedUrl","s3Presigner","presignInterceptMiddleware","presigned","presignerOptions","middlewareName","subscribeToStorageUpdates","toStorageUpdate","getStorageConfiguration","getStorageCredentials","MEMEX_BASE_URL","mimeToExt","getExtensionFromMimeType","mimeType","hasCustomS3Creds","uploadFile","fileName","currentUser","hostedUrl","uploadUrl","getMemexUploadUrl","prefixEndpoint","signedUrl","isDigitalOcean","getLastConnectionStatus","toConnectionStatus","checkConnectionStatus","unsubscribed","ID_LINK_TIMEOUT","SELF_INVITE_KEY","groupsDescribe","createInviteLink","enableGroup","checkExistingUserInviteLink","tlonNetworkUrl","createPersonalInviteLink","getLinkMetadata","encodedUrl","domain.AnalyticsEvent","parseLinkMetadataResponse","site_icon","site_name","image","siteIconUrl","siteName","siteTitle","siteDescription","imageData","parseImageData","grabImageUrl","twitter","og","ogImage","ogHeight","ogWidth","getFallbackLinkMetadata","fetchChangesSince","busyResult","encodedTimestamp","nodeBusyStatus","timedOutDefault","parseChanges","deletedChannelIds","accum","_id","contactEntry","base64Js","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tripletToBase64","encodeChunk","uint8","extraBytes","maxChunkLength","len2","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","customInspectSymbol","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","encodingOrOffset","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","checked","actual","fromArrayLike","arrayView","copy","numberIsNaN","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","read","foundIndex","found","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","hexSliceLookupTable","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","boundsError","checkInt","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","sym","getMessage","Base","addNumericalSeparator","checkBounds","INVALID_BASE64_RE","base64clean","units","leadSurrogate","i16","BufferBigIntNotDefined","HostingError","shouldTrack","ALREADY_IN_USE","CANNOT_BOOT","RATE_LIMITED","EXPECTED_ERRORS","hostingFetchResponse","fetchInit","modifiedCookie","db.hostingAuthToken","timeoutId","hostingFetch","hostingErr","stopTime","responseText","durationSeconds","rawHostingFetch","getHostingHeartBeat","db.hostingUserId","getHostingAvailability","requestPhoneVerify","phoneNumber","checkPhoneVerify","getReservableShips","user","reserveShip","allocateReservedShip","getShip","shipId","getShipAccessCode","resumeShip","OPENROUTER_API_URL","SUMMARIZATION_PROMPT","summarizeMessage","messageText","prompt","errorDetails","errorObj","getSystemContacts","marshaller","eventStreamMember","unionSchema","initialRequestMarker","eventStreamIterable","page","unionMember","additionalHeaders","eventType","explicitPayloadContentType","initialResponseMarker","eventStreamSchema","hasBindings","eventHeader","eventPayload","asyncIterator","firstEvent","explicitPayloadMember","isKnownSchema","eventSchema","payloadSchema","messageSerialization"],"mappings":"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","x_google_ignoreList":[0,9,10,11,12,13,30,31,32,33,34,35,36,37,38,40,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,359,360,361,365]}